var Cards=new makeArray(8);Cards[0]=new CardType("MASTERCARD","51,52,53,54,55","16");var MASTERCARD=Cards[0];Cards[1]=new CardType("VISACARD","4","13,16");var VISACARD=Cards[1];Cards[2]=new CardType("AMEXCARD","34,37","15");var AMEXCARD=Cards[2];Cards[3]=new CardType("DINERSCLUBCARD","30,36,38","14");var DINERSCLUBCARD=Cards[3];Cards[4]=new CardType("DSCVRCARD","6011","16");var DSCVRCARD=Cards[4];Cards[5]=new CardType("ENROUTECARD","2014,2149","15");var ENROUTECARD=Cards[5];Cards[6]=new CardType("JCBCARD","3088,3096,3112,3158,3337,3528","16");var JCBCARD=Cards[6];var LuhnCheckSum=Cards[7]=new CardType();function checkEachField(src){var genericId=src.id;var specificId="";var elemId="";var dummyElemId="";var retVal=true;dummyElemId=$get(src.id.replace('cardCustomValidator','myDummyValidator'));ValidatorEnable(dummyElemId,false);for(i=0;i<8;i++){switch(i){case 0:specificId="tbxCardFName";break;case 1:specificId="tbxCardLName";break;case 2:specificId="tbxCardNumber";break;case 3:specificId="tbxExpDate";break;case 4:specificId="tbxCVV";break;case 5:specificId="tbxAddressLine1";break;case 6:specificId="tbxCity";break;case 7:specificId="tbxZIP";break;}
elemId=$get(src.id.replace('cardCustomValidator',specificId));elemId.style.background=(elemId.value.length<1)?'#FFFF00':'#FFFFEE';if(elemId.value.length<1)retVal=false;if(!retVal){elemId.focus();}}
if(!retVal){ValidatorEnable(dummyElemId,true);ValidatorValidate(dummyElemId);}
return retVal;}
function CheckCardNumber(source,arguments){var tmpyear;var tbxCardNumber=$get(source.id.replace('cardCustomValidator','tbxCardNumber'));var tbxExpDate=$get(source.id.replace('cardCustomValidator','tbxExpDate'));var lstCardType=$get(source.id.replace('cardCustomValidator','lstCardType'));if(!checkEachField(source))return true;if(arguments.Value!=""){arguments.IsValid=false;this.ErrorMessage=arguments.Value;return false;}
tmpyear="20"+tbxExpDate.value.substring(tbxExpDate.value.indexOf('/')+1);tmpmonth=tbxExpDate.value.substring(0,tbxExpDate.value.indexOf('/'));if(!(new CardType()).isExpiryDate(tmpyear,tmpmonth)){arguments.IsValid=false;arguments.Value="This card has already expired.";return;}
card=lstCardType.options[lstCardType.selectedIndex].text;card=card.toUpperCase();card=card.replace(' ','');card=card.replace('CARD','')+'CARD';arguments.IsValid=eval(card+".checkCardNumber(\""+tbxCardNumber.value+"\", "+tmpyear+", "+tmpmonth+");");cardname="";if(!arguments.IsValid){for(var n=0;n<Cards.size;n++){if(Cards[n].checkCardNumber(tbxCardNumber.value,tmpyear,tmpmonth)){cardname=Cards[n].getCardType();break;}}
if(cardname.length>0){arguments.Value="This looks like a "+cardname+" number, not a "+card+" number.";}
else{arguments.Value="This card number is not valid.";}}}
function CardType(){var n;var argv=CardType.arguments;var argc=CardType.arguments.length;this.objname="object CardType";var tmpcardtype=(argc>0)?argv[0]:"CardObject";var tmprules=(argc>1)?argv[1]:"0,1,2,3,4,5,6,7,8,9";var tmplen=(argc>2)?argv[2]:"13,14,15,16,19";this.setCardNumber=setCardNumber;this.setCardType=setCardType;this.setLen=setLen;this.setRules=setRules;this.setExpiryDate=setExpiryDate;this.setCardType(tmpcardtype);this.setLen(tmplen);this.setRules(tmprules);if(argc>4)
this.setExpiryDate(argv[3],argv[4]);this.checkCardNumber=checkCardNumber;this.getExpiryDate=getExpiryDate;this.getCardType=getCardType;this.isCardNumber=isCardNumber;this.isExpiryDate=isExpiryDate;this.luhnCheck=luhnCheck;return this;}
function checkCardNumber(){var argv=checkCardNumber.arguments;var argc=checkCardNumber.arguments.length;var cardnumber=(argc>0)?argv[0]:this.cardnumber;var year=(argc>1)?argv[1]:this.year;var month=(argc>2)?argv[2]:this.month;this.setCardNumber(cardnumber);this.setExpiryDate(year,month);if(!this.isCardNumber())
return false;if(!this.isExpiryDate())
return false;return true;}
function getCardType(){return this.cardtype;}
function getExpiryDate(){return this.month+"/"+this.year;}
function isCardNumber(){var argv=isCardNumber.arguments;var argc=isCardNumber.arguments.length;var cardnumber=(argc>0)?argv[0]:this.cardnumber;if(!this.luhnCheck())
return false;for(var n=0;n<this.len.size;n++)
if(cardnumber.toString().length==this.len[n]){for(var m=0;m<this.rules.size;m++){var headdigit=cardnumber.substring(0,this.rules[m].toString().length);if(headdigit==this.rules[m])
return true;}
return false;}
return false;}
function isExpiryDate(){var argv=isExpiryDate.arguments;var argc=isExpiryDate.arguments.length;year=argc>0?argv[0]:this.year;month=argc>1?argv[1]:this.month;if(!isNum(year+""))
return false;if(!isNum(month+""))
return false;today=new Date();expiry=new Date(year,month);if(today.getTime()>expiry.getTime())
return false;else
return true;}
function isNum(argvalue){argvalue=argvalue.toString();if(argvalue.length==0)
return false;for(var n=0;n<argvalue.length;n++)
if(argvalue.substring(n,n+1)<"0"||argvalue.substring(n,n+1)>"9")
return false;return true;}
function luhnCheck(){var argv=luhnCheck.arguments;var argc=luhnCheck.arguments.length;var CardNumber=argc>0?argv[0]:this.cardnumber;if(!isNum(CardNumber)){return false;}
var no_digit=CardNumber.length;var oddoeven=no_digit&1;var sum=0;for(var count=0;count<no_digit;count++){var digit=parseInt(CardNumber.charAt(count));if(!((count&1)^oddoeven)){digit*=2;if(digit>9)
digit-=9;}
sum+=digit;}
if(sum%10==0)
return true;else
return false;}
function makeArray(size){this.size=size;return this;}
function setCardNumber(cardnumber){this.cardnumber=cardnumber;return this;}
function setCardType(cardtype){this.cardtype=cardtype;return this;}
function setExpiryDate(year,month){this.year=year;this.month=month;return this;}
function setLen(len){if(len.length==0||len==null)
len="13,14,15,16,19";var tmplen=len;n=1;while(tmplen.indexOf(",")!=-1){tmplen=tmplen.substring(tmplen.indexOf(",")+1,tmplen.length);n++;}
this.len=new makeArray(n);n=0;while(len.indexOf(",")!=-1){var tmpstr=len.substring(0,len.indexOf(","));this.len[n]=tmpstr;len=len.substring(len.indexOf(",")+1,len.length);n++;}
this.len[n]=len;return this;}
function setRules(rules){if(rules.length==0||rules==null)
rules="0,1,2,3,4,5,6,7,8,9";var tmprules=rules;n=1;while(tmprules.indexOf(",")!=-1){tmprules=tmprules.substring(tmprules.indexOf(",")+1,tmprules.length);n++;}
this.rules=new makeArray(n);n=0;while(rules.indexOf(",")!=-1){var tmpstr=rules.substring(0,rules.indexOf(","));this.rules[n]=tmpstr;rules=rules.substring(rules.indexOf(",")+1,rules.length);n++;}
this.rules[n]=rules;return this;}
if(typeof(Sys)!=="undefined")
Sys.Application.notifyScriptLoaded();