// JavaScript Document
function trim(str) {
	var trimmed = str.replace(/^\s+|\s+$/g, '') ;
	return trimmed;
}

function chkMail(stremail) {
	if(!(/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(stremail))) {
	 	return false;
	} else {
		return true;
	}
}

function chkURL(strurl) {
	if(!(/^[a-zA-Z0-9_-]+$/.test(strurl))) {
	 	return false;
	} else {
		return true;
	}
}

function selState(val) {
	if(val==1) {
		document.getElementById("state_other").disabled = true;
		document.getElementById("state").disabled = false;
	} else {
		document.getElementById("state_other").disabled = false;
		document.getElementById("state").disabled = true;
	}
}

function validateCard(cardNumber, cardType) {
  var isValid = false;
  var ccCheckRegExp = /[^\d ]/;
  isValid = !ccCheckRegExp.test(cardNumber);

  if (isValid) {
    var cardNumbersOnly = cardNumber.replace(/ /g,"");	
    var cardNumberLength = cardNumbersOnly.length;
    var lengthIsValid = false;
    var prefixIsValid = false;
    var prefixRegExp;

    switch(cardType) {
      case "mastercard":
        lengthIsValid = (cardNumberLength == 16);
        prefixRegExp = /^5[1-5]/;
        break;

      case "visa":
        lengthIsValid = (cardNumberLength == 16 || cardNumberLength == 13);
        prefixRegExp = /^4/;
        break;

      case "amex":
        lengthIsValid = (cardNumberLength == 15);
        prefixRegExp = /^3(4|7)/;
        break;
		
	  case "discover":
		lengthIsValid = (cardNumberLength == 16);
		prefixRegExp = /^6/;
		break;

	case "switch":
        lengthIsValid = (cardNumberLength == 16 || cardNumberLength == 18 || cardNumberLength == 19);
        prefixRegExp = /^6|5|4/;
        break;
		
	case "maestro":
        lengthIsValid = (cardNumberLength == 16 || cardNumberLength == 18);
        prefixRegExp = /^(5|6)/;
        break;

      default:
        prefixRegExp = /^$/;
    }

    prefixIsValid = prefixRegExp.test(cardNumbersOnly);
    isValid = prefixIsValid && lengthIsValid;
  }

  if (isValid) {
    var numberProduct;
    var numberProductDigitIndex;
    var checkSumTotal = 0;

    for (digitCounter = cardNumberLength - 1; 
      digitCounter >= 0; 
      digitCounter--)
    {
      checkSumTotal += parseInt (cardNumbersOnly.charAt(digitCounter));
      digitCounter--;
      numberProduct = String((cardNumbersOnly.charAt(digitCounter) * 2));
      for (var productDigitCounter = 0;
        productDigitCounter < numberProduct.length; 
        productDigitCounter++)
      {
        checkSumTotal += 
          parseInt(numberProduct.charAt(productDigitCounter));
      }
    }

    isValid = (checkSumTotal % 10 == 0);
  }
  return isValid;
}
function isValidCreditCard(type, ccnum) 
	{
	   if (type == "visa" || type == "VI") {
		  // Visa: length 16, prefix 4, dashes optional.
		  var re = /^4\d{3}-?\d{4}-?\d{4}-?\d{4}$/;
	   } else if (type == "mastercard" || type == "MC") {
		  // Mastercard: length 16, prefix 51-55, dashes optional.
		  var re = /^5[1-5]\d{2}-?\d{4}-?\d{4}-?\d{4}$/;
	   } else if (type == "discover"  || type == "NO") {
		  // Discover: length 16, prefix 6011, dashes optional.
		  var re = /^6011-?\d{4}-?\d{4}-?\d{4}$/;
	   } else if (type == "amex" || type == "AX") {
		  // American Express: length 15, prefix 34 or 37.
		  var re = /^3[4,7]\d{13}$/;
	   } else if (type == "Diners") {
		  // Diners: length 14, prefix 30, 36, or 38.
		  var re = /^3[0,6,8]\d{12}$/;
	   } else if (type == "Bankcard") {
		  // Bankcard: length 16, prefix 5610 dashes optional.
		  var re = /^5610-?\d{4}-?\d{4}-?\d{4}$/;
	   } else if (type == "JCB") {
		  // Bankcard: length 16, prefix 5610 dashes optional.
		  var re = /^[3088|3096|3112|3158|3337|3528]\d{12}$/;
	   } else if (type == "EnRoute") {
		  // Bankcard: length 15, prefix 5610 dashes optional.
		  var re = /^[2014|2149]\d{11}$/;
	   } else if (type == "Switch") {
		  // Bankcard: length 16, prefix 5610 dashes optional.
		  var re = /^[4903|4911|4936|5641|6333|6759|6334|6767]\d{12}$/;
	   } else return false;
	   
	   if (!re.test(ccnum)) return false;
	   // Checksum ("Mod 10")
	   // Add even digits in even length strings or odd digits in odd length strings.
	   var checksum = 0;
	   for (var i=(2-(ccnum.length % 2)); i<=ccnum.length; i+=2) {
		  checksum += parseInt(ccnum.charAt(i-1));
	   }
	   // Analyze odd digits in even length strings or even digits in odd length strings.
	   for (var i=(ccnum.length % 2) + 1; i<ccnum.length; i+=2) {
		  var digit = parseInt(ccnum.charAt(i-1)) * 2;
		  if (digit < 10) { checksum += digit; } else { checksum += (digit-9); }
	   }
	   if ((checksum % 10) == 0) return true; else return false;
	}

