function validRequired(formField,fieldLabel) { 
 	var result = true; 
 	if (formField.value == "") 
 	{ 
// 	 	alert('Please enter a value for the "' + fieldLabel +'" field.'); 
  		formField.focus(); 
  		result = false; 
 	} 
 	return result; 
} 

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; 
} 

function isValidCreditCardNumber(formField,ccType,fieldLabel,required){ 
	var result = true; 
	var ccNum = formField.value; 

	if (required && !validRequired(formField,fieldLabel)) 
		result = false; 

	if (result && (formField.value.length>0)) { 
   		if (!allDigits(ccNum)) { 
//    			alert('Please enter only numbers (no dashes or spaces) for the "' + fieldLabel +'" field.'); 
   			formField.focus(); 
   			result = false; 
  		} 
  		
  		if (result) { 
    			if (!LuhnCheck(ccNum) || !validateCCNum(ccType,ccNum)) { 
//     				alert('Please enter a valid card number for the "' + fieldLabel +'" field.'); 
    				formField.focus(); 
    				result = false; 
    			} 
		} 
	 } 
	return result; 
} 

function LuhnCheck(str) { 
	var result = true; 
	var sum = 0; 
	var mul = 1; 
	var strLen = str.length; 
	
	for (var 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; 
} 

function GetRadioValue(rArray) { 
 	for (var i=0;i<rArray.length;i++) { 
  		if (rArray[i].checked) 
  			return rArray[i].value; 
 	} 
	return null; 
} 


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 "AMEXX": 
  		var validNums = "47"; 
  		result = (cardLen == 15) && (firstdig == "3") && (validNums.indexOf(seconddig)>=0); 
   		break; 
  	case "MASTER": 
  		var validNums = "12345"; 
  		result = (cardLen == 16) && (firstdig == "5") && (validNums.indexOf(seconddig)>=0); 
   		break; 
  	case "DISCOVER": 
   		result = (cardLen == 16) && (first4digs == "6011"); 
   		break; 
  	case "DINERS": 
  		var validNums = "068"; 
  		result = (cardLen == 14) && (firstdig == "3") && (validNums.indexOf(seconddig)>=0); 
   		break; 
 	} 
 	return result; 
} 


function validCCForm(ccTypeField,ccNumField,ccExpField) { 
 	var result = isValidCreditCardNumber(ccNumField,ccTypeField,"Credit Card Number",true); 
 return result; 
} 
