var formErrors = new Array();

function isValidInt(inputID, errorMsg, isReq){
  var mask=/^\d+$/;
  var userInput = document.getElementById(inputID);
  userInput.className="formInput";
  
  if (isReq == false && userInput.value == "") return true;
  if (mask.test(userInput.value)) return true;
  
  formErrors[formErrors.length] = errorMsg;
  userInput.className="formInputError";  
  
  return false;
}

function isValidChar(inputID, errorMsg, isReq){
  var mask=/^[\w\-]+$/;
  var userInput = document.getElementById(inputID);
  userInput.className="formInput";
  
  if (isReq == false && userInput.value == "") return true;
  if (mask.test(userInput.value)) return true;

  formErrors[formErrors.length] = errorMsg;
  userInput.className="formInputError";
  
  return false;
}

function isValidEmail(inputID, errorMsg, isReq){
  var mask=/^\w[\w\-\.]+\@\w[\w\-]+(\.[\w\-]+)+$/;
  var userInput = document.getElementById(inputID);
  userInput.className="formInput";

  if (isReq == false && userInput.value == "") return true;
  if (mask.test(userInput.value)) return true;
  
  formErrors[formErrors.length] = errorMsg;
  userInput.className="formInputError";

  return false;
}

function isValidAny(inputID, errorMsg, isReq){
  var userInput = document.getElementById(inputID);
  userInput.className="formInput";

  if (isReq == true && userInput.value == "") {
    
    formErrors[formErrors.length] = errorMsg;
    userInput.className="formInputError";
    return false;
  }
  return true;
}

function isValidPwd(inputID1,inputID2, errorMsg, isReq){
  var userInput1 = document.getElementById(inputID1);
  var userInput2 = document.getElementById(inputID2);
  userInput2.className="formInput";

  if (userInput1.value != userInput2.value) {
    
    formErrors[formErrors.length] = errorMsg;
    userInput2.className="formInputError";
    return false;
  }
  return true;
}

function isChecked(inputID, errorMsg){
  var userInput = document.getElementById(inputID);
  userInput.className="formInput";

  if (userInput.checked == false) {
    
    formErrors[formErrors.length] = errorMsg;
    userInput.className="formInputError";
    return false;
  }
  return true;	
	
}

function isSelected(inputID, errorMsg){
  var userInput = document.getElementById(inputID);
  userInput.className="formSelect";

  if ((userInput.value == "") || (userInput.value == 0)) {
    formErrors[formErrors.length] = errorMsg;
    userInput.className="formSelectError";
    return false;
  }
  return true;	
}

function isValidRange(aYearID,aDayID,dYearID,dDayID,errorMsg){
   var aYear = document.getElementById(aYearID);
   var aDay  = document.getElementById(aDayID);
   var dYear = document.getElementById(dYearID);
   var dDay  = document.getElementById(dDayID);
   
   if (dYear.value < aYear.value) {
     formErrors[formErrors.length] = errorMsg;
     dYear.className="formSelectError";
     return false;
   } else if (dYear.value == aYear.value){
      if (dDay.value <= aDay.value) {
        formErrors[formErrors.length] = errorMsg;
        dDay.className="formSelectError";
        return false;
      }
   }
   return true;
}

function isValidCC(cardNumber,cardType,cardMonth,cardYear,checkType,errorMsg){
	var ccNumber = document.getElementById(cardNumber).value; 
	var ccType = document.getElementById(cardType).value; 
	var ccMonth = document.getElementById(cardMonth).value; 
	var ccYear = document.getElementById(cardYear).value; 
	var checkType = document.getElementById(checkType).value; 

 	document.getElementById(cardNumber).className="formInput";	
 	
 	if (checkType == 0) return true;
	
	var result = validateCard(ccNumber,ccType,ccMonth,ccYear);
	
	if (result == false) {
		formErrors[formErrors.length] = errorMsg;
    	document.getElementById(cardNumber).className="formInputError";
    	return false;		
	}
	return true;
}

function mod10( cardNumber ) { 
	var ar = new Array( cardNumber.length );
	var i = 0;
   var sum = 0;

   for( i = 0; i < cardNumber.length; ++i ) {
   	ar[i] = parseInt(cardNumber.charAt(i));
   }
   
 	for( i = ar.length -2; i >= 0; i-=2 ) { // you have to start from the right, and work back.
  		ar[i] *= 2;							 // every second digit starting with the right most (check digit)
  		if( ar[i] > 9 ) ar[i]-=9;			 // will be doubled, and summed with the skipped digits.
  	}										 // if the double digit is > 9, ADD those individual digits together 

  	for( i = 0; i < ar.length; ++i ) {
  		sum += ar[i];						 // if the sum is divisible by 10 mod10 succeeds
  	}

   return (((sum%10)==0)?true:false);	 	
}


function isExpired(year, month) {
  	var now = new Date();							
  	var expiresIn = new Date(year,month,0,0,0);		
  	expiresIn.setMonth(expiresIn.getMonth()+1);		// adjust the month, to first day, hour, minute & second of expired month
  	if (now.getTime() < expiresIn.getTime()) return false;
  	return true;									
}


function validateCard(cardNumber,cardType,cardMonth,cardYear) {
  	if (cardNumber.length == 0) {						//most of these checks are self explanitory
  		return false;				
  	}
   
  	alert("1");
   for (var i = 0; i < cardNumber.length; ++i) {		// make sure the number is all digits.. (by design)
    	var c = cardNumber.charAt(i);

     	if ( c < '0' || c > '9' ) {
         return false;
      }
   }
      
   var length = cardNumber.length;			//perform card specific length and prefix tests
  	alert("2");

  	switch (cardType) {
  		case 'a':
  			if (length != 15) {
            return false;
         }
            
         var prefix = parseInt( cardNumber.substring(0,2));

  			if (prefix != 34 && prefix != 37) {
            return false;
         }
            
         break;

      case 'd':
  			if (length != 16) {
            return false;
         }
            
         var prefix = parseInt( cardNumber.substring(0,4));

  			if (prefix != 6011) {
  				return false;
         }
            
         break;
            
      case 'm':
  			if (length != 16) {
            return false;
         }
            
         var prefix = parseInt( cardNumber.substring(0,2));

         if (prefix < 51 || prefix > 55) {
            return false;
         }
            
         break;

      case 'v':
         if (length != 16 && length != 13) {
            return false;
         }
            
         var prefix = parseInt( cardNumber.substring(0,1));

         if (prefix != 4) {
            return false;
         }
            
         break;
   }
                                                	
   if (!mod10( cardNumber ) ) { 		// run the check digit algorithm
      return false;
   }
      
   if (isExpired(cardYear, cardMonth) ) {							// check if entered date is already expired.
      return false;
   }
                                                	
   return true; 
}

