﻿//Custom validator for ccID
function validateCCID(s,e)
{
	e.IsValid = check_id();
}
	
function NewvalidateCCID(s,e)
{
	e.IsValid = check_Newid();
}

//Custom validator for credit cart number
function validateCCNO(s,e)
{
	e.IsValid = isValidCreditCardNumber(document.Form1.ccno,document.Form1.ccType.value,"",true);
}	

//	if(window.document.Form1.CCnumber.value=="")
//		{
//			document.Form1.CCnumber.focus()
//		    alert("חובה למלא מספר כרטיס")
//			return(false)
//		}


//var strCCnumber=document.Form1.CCnumber.value;
//	var i=0;
//    var j=0;

//	while (i < document.Form1.CCnumber.value.length-1 ) { 

//	    if ((strCCnumber.charCodeAt(j)<48)||(strCCnumber.charCodeAt(j)>57)){
//		alert('חובה למלא מספרים בלבד בשדה זה');
//		document.Form1.CCnumber.focus()
//            return false; 
//		}
//		j++;
//		i++;
//	} 

function check_id(){
	var i=0;
    var j=0;
    var mult="121212121";
    var startmult=0;
    var  total=0;
    var result=0;
    var Down=0;
    var idstart=0;
	var Up=0;
	var addstr="";
	var zerotoadd=9-document.Form1.ccID.value.length;
	if (zerotoadd>0) 
	{
		var index=0;
		while (index<zerotoadd)
		{
			addstr+="0";
			index++;
	    }
		document.Form1.ccID.value=addstr+document.Form1.ccID.value;
	}
	var L=document.Form1.ccID.value.length ;
	var idstr=document.Form1.ccID.value;

	while (i < document.Form1.ccID.value.length-1 ) { 

		var asNumber = parseFloat (document.Form1.ccID.value);
		if (isNaN(asNumber)) { 
  	        document.Form1.ccID.focus();
	        document.Form1.ccID.value=document.Form1.ccID.value.substring(zerotoadd,document.Form1.ccID.value.length);
	       // document.Form1.uid_verify.value = 0;
            return false; 
		}

	    if ((idstr.charCodeAt(j)<48)||(idstr.charCodeAt(j)>57)){
	        document.Form1.ccID.focus();
	        document.Form1.ccID.value=document.Form1.ccID.value.substring(zerotoadd,document.Form1.ccID.value.length);
           // document.Form1.uid_verify.value = 0;
            return false; 
		}

        Up=eval(idstr.charAt(i));
        Down=eval(mult.charAt(j));

		if ((Up!=0)&&(startmult==0)) {
             startmult=1;
		 }

		result=Up*Down;
		if ( result > 9 ) { 
			resultx = Math.floor ( result/10 ) ;
            result = resultx + ( result - resultx*10 ) 
		}	 
		total=total + result;
		j++;
		i++;
	} 

	total = Math.ceil ( total/10 ) *10 -total;
	var idstr=document.Form1.ccID.value;

	if ((idstr.charCodeAt(L-1)<=57)&&(idstr.charCodeAt(L-1)>=48)) 		
		{var add= eval(idstr.charAt(L-1));}

	if (L==9) {idstart=1;}
	if ( total !=add ){
        document.Form1.ccID.focus();
	    document.Form1.ccID.value=document.Form1.ccID.value.substring(zerotoadd,document.Form1.ccID.value.length);
        //document.Form1.uid_verify.value = 0;
        return false;
    }
	else 
	{
		//document.Form1.uid_verify.value = 1;
	     return true;
	}
} // end of check_id function

function check_Newid(){
	var i=0;
    var j=0;
    var mult="121212121";
    var startmult=0;
    var  total=0;
    var result=0;
    var Down=0;
    var idstart=0;
	var Up=0;
	var addstr="";
	var zerotoadd=9-document.Form1.NewccID.value.length;
	if (zerotoadd>0) 
	{
		var index=0;
		while (index<zerotoadd)
		{
			addstr+="0";
			index++;
	    }
		document.Form1.NewccID.value=addstr+document.Form1.NewccID.value;
	}
	var L=document.Form1.NewccID.value.length ;
	var idstr=document.Form1.NewccID.value;

	while (i < document.Form1.NewccID.value.length-1 ) { 

		var asNumber = parseFloat (document.Form1.NewccID.value);
		if (isNaN(asNumber)) { 
  	        document.Form1.NewccID.focus();
	        document.Form1.NewccID.value=document.Form1.NewccID.value.substring(zerotoadd,document.Form1.NewccID.value.length);
	       // document.Form1.uid_verify.value = 0;
            return false; 
		}

	    if ((idstr.charCodeAt(j)<48)||(idstr.charCodeAt(j)>57)){
	        document.Form1.NewccID.focus();
	        document.Form1.NewccID.value=document.Form1.NewccID.value.substring(zerotoadd,document.Form1.NewccID.value.length);
           // document.Form1.uid_verify.value = 0;
            return false; 
		}

        Up=eval(idstr.charAt(i));
        Down=eval(mult.charAt(j));

		if ((Up!=0)&&(startmult==0)) {
             startmult=1;
		 }

		result=Up*Down;
		if ( result > 9 ) { 
			resultx = Math.floor ( result/10 ) ;
            result = resultx + ( result - resultx*10 ) 
		}	 
		total=total + result;
		j++;
		i++;
	} 

	total = Math.ceil ( total/10 ) *10 -total;
	var idstr=document.Form1.NewccID.value;

	if ((idstr.charCodeAt(L-1)<=57)&&(idstr.charCodeAt(L-1)>=48)) 		
		{var add= eval(idstr.charAt(L-1));}

	if (L==9) {idstart=1;}
	if ( total !=add ){
        document.Form1.NewccID.focus();
	    document.Form1.NewccID.value=document.Form1.NewccID.value.substring(zerotoadd,document.Form1.NewccID.value.length);
        //document.Form1.uid_verify.value = 0;
        return false;
    }
	else 
	{
		//document.Form1.uid_verify.value = 1;
	     return true;
	}
} // e

// Form Field Validation Functions:
//
// isValidExpDate(formField,fieldLabel,required)
//   -- checks for date in the format MM/YY or MM/YYYY against the current date
// isValidCreditCardNumber(formField,ccType,fieldLabel,required)
//   -- checks for valid credit card format using the Luhn check and known digits about various cards
//

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 isValidExpDate(formField,fieldLabel,required)
{
	var result = true;
	var formValue = formField.value;

	if (required && !validRequired(formField,fieldLabel))
		result = false;
  
 	if (result && (formField.value.length>0))
 	{
 		var elems = formValue.split("/");
 		
 		result = (elems.length == 2); // should be two components
 		var expired = false;
 		
 		if (result)
 		{
 			var month = parseInt(elems[0],10);
 			var year = parseInt(elems[1],10);
 			
 			if (elems[1].length == 2)
 				year += 2000;
 			
 			var now = new Date();
 			
 			var nowMonth = now.getMonth() + 1;
 			var nowYear = now.getFullYear();
 			
 			expired = (nowYear > year) || ((nowYear == year ) && (nowMonth > month));
 			
			result = allDigits(elems[0]) && (month > 0) && (month < 13) &&
					 allDigits(elems[1]) && ((elems[1].length == 2) || (elems[1].length == 4));
 		}
 		
  		if (!result)
 		{
 			alert('Please enter a date in the format MM/YY for the "' + fieldLabel +'" field.');
			//formField.focus();
		}
		else if (expired)
		{
 			result = false;
 			alert('The date for "' + fieldLabel +'" has expired.');
			//formField.focus();
		}
	} 
	
	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))
 		{
			formField.focus();
			result = false;
		}	

		if (result)
 		{ 
 			
 			if (!LuhnCheck(ccType,ccNum) || !validateCCNum(ccType,ccNum))
 			{
				formField.focus();
				result = false;
			}	
		} 

	} 
	return result;
}

function LuhnCheck(ccType,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;
 if (ccType='ISRACART')
    result = true;
    
  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 "ISRACART":
			result = ((cardLen == 16) || (cardLen == 8));
			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 "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.value,"Credit Card Number",true) &&
		isValidExpDate(ccExpField,"Expiration Date",true);
	return result;
}
