//-----------------------------------//
//	CC FIELD VALIDATION FUNCTIONS:
//	isValidCreditCardNumber(formField,ccType)
//		-- checks for valid credit card format using the Luhn check and known digits about various cards
//	TWEAKED BY -PC 9/27/2004
//-----------------------------------//

//-----------------------------------//
//	REGEX FOR EXPIRATION DATE
//	YOU CAN MAKE THIS FANCIER USING BACK-COMPARISONS
//-----------------------------------//
// MM/YY
var resDateCC = /[0-1]+[0-9]+\/+[0-1]+[0-9]/;

//-----------------------------------//
//      FUNCTION USES THE ABOVE
//-----------------------------------//
function isCCExpireDate(sElement){
    if(!sElement){
        alert("The date field is undefined.");
        return false;
    }
        var dateVal = sElement.value.search(resDateCC);
        if(dateVal == -1){
                sElement.focus();
                alert("Please enter a valid expiration date 'MM/YY'");
                return false;
        }
        return true;
}

//-----------------------------------//
//	REGEX FOR DETECTING ONE OR MORE DIGITS
//	AGAIN, YOU CAN MAKE THIS FANCIER
//-----------------------------------//
var digits_re = /[0-9]+/;
//-----------------------------------//
//	FUNCTION USES THE ABOVE
//-----------------------------------//
function isDigit(sElement, sErrorText){
    if(!sElement){
        alert("This field is undefined. It's errortext is: " + sErrorText);
        return false;
    }
    var DgtVal = sElement.value.search(digits_re);
	if(DgtVal == -1){
		sElement.focus();
		if(arguments.length > 1){
		    alert("Please enter " + sErrorText + ".");
		}
		return false;
	} else {
	    return true;
	}
}

//-----------------------------------//
//	NEED THIS
//-----------------------------------//
function allDigits(str){
	return inValidCharSet(str,"0123456789");
}

function inValidCharSet(str,charset){
	var result = true;
	for (var i=0;i<str.length;i++)
		if (charset.indexOf(str.substr(i,1))<0){
			result = false;
			break;
		}
	return result;
}

//-----------------------------------//
//	NEED THIS
//-----------------------------------//
function LuhnCheck(str){
  var result = true;
  var sum = 0; 
  var mul = 1; 
  var strLen = str.length;
  for (i = 0; i < strLen; i++){
    var digit = str.substring(strLen-i-1,strLen-i);
    var tproduct = parseInt(digit ,10)*mul;
    if (tproduct >= 10)
      sum += (tproduct % 10) + 1;
    else
      sum += tproduct;
    if (mul == 1)
      mul++;
    else
      mul--;
  }
  if ((sum % 10) != 0){
    result = false;
  }    
  return result;
}

//-----------------------------------//
//	NEED THIS
//-----------------------------------//
function validateCCNum(cardType,cardNum){
	var result = false;
	cardType = cardType.toUpperCase();
	var cardLen = cardNum.length;
	var firstdig = cardNum.substring(0,1);
	var seconddig = cardNum.substring(1,2);
	var first4digs = cardNum.substring(0,4);

	switch (cardType){
		case "VISA":
			result = ((cardLen == 16) || (cardLen == 13)) && (firstdig == "4");
			break;
		case "AMEX":
			var validNums = "47";
			result = (cardLen == 15) && (firstdig == "3") && (validNums.indexOf(seconddig)>=0);
			break;
		case "MASTERCARD":
			var validNums = "12345";
			result = (cardLen == 16) && (firstdig == "5") && (validNums.indexOf(seconddig)>=0);
			break;
		case "DISCOVER":
			result = (cardLen == 16) && (first4digs == "6011");
			break;
		case "DINERSCLUB":
			var validNums = "068";
			result = (cardLen == 14) && (firstdig == "3") && (validNums.indexOf(seconddig)>=0);
			break;
	}
	return result;
}
//-----------------------------------//
//	NEED THIS
//-----------------------------------//
function isValidCreditCardNumber(formField,ccType){
	result = true;
 	var ccNum = formField.value;
  	if (ccNum.length > 0){ 
 		if (!allDigits(ccNum)){
 			alert('Please enter only numbers (no dashes or spaces) in the Credit Card number');
			formField.focus();
			result = false;
		}	
		if(result){
			if (!LuhnCheck(ccNum) || !validateCCNum(ccType,ccNum)){
				alert('Please enter a valid credit card number');
				formField.focus();
				result = false;
				return false;
			}	
			return result;
		}
		return false;
	} else {
		alert('Please enter a credit card number');
		formField.focus();
		return false;
	}
	return false;
}

//-----------------------------------//
//	ADD IF NOT USING generalValidate.js
//	OTHERWISE COMMENT OUT
//-----------------------------------//
function GetRadioValue(rArray){
	for (var i=0; i < rArray.length; i++){
		
		if (rArray[i].checked){
			
			return rArray[i].value;
	}
	}
	return null;
}


