
var errorMsgs = new Array();
errorMsgs['en'] = new Array();
errorMsgs['fr'] = new Array();

errorMsgs['en'][0] = 'Please enter a valid card number.';
errorMsgs['fr'][0] = 'S’il vous plait, veuillez entrer le numéro de carte valide.';

errorMsgs['en'][1] = 'Sorry! The expiration date you have entered would make this card invalid.';
errorMsgs['fr'][1] = 'Désolé! La date d’expiration que vous avez entrée rend que cette carte pas valide.';

errorMsgs['en'][2] = 'The credit card number you entered is not in the range of card numbers possible with the card type you specified. Please check the number and the card type.';
errorMsgs['fr'][2] = 'Le numéro de carte de crédit que vous avez entré ne coordonne pas avec les numéros possible avec le type de carte que vous avez spécifié.';

errorMsgs['en'][3] = 'Please enter a valid MasterCard Card number.';
errorMsgs['fr'][3] = 'S’il vous plait entrer un numéro de carte Master Card valide.';

errorMsgs['en'][4] = 'Please enter a valid Discover Card number.';
errorMsgs['fr'][4] = 'S’il vous plait entrer un numéro de carte Discover Card valide.';

errorMsgs['en'][5] = 'Please enter a valid American Express Card number.';
errorMsgs['fr'][5] = 'S’il vous plait entrer un numéro de carte American Express valide.';

errorMsgs['en'][6] = 'Please enter a valid card number. Use only digits. Do not use spaces or hyphens.';
errorMsgs['fr'][6] = 'S’il vous plaît, entrez un numéro de carte valide. Utilisez uniquement des chiffres. Ne pas utiliser d’espaces ou des tirets';

errorMsgs['en'][7] = 'Please enter a valid Visa Card number.';
errorMsgs['fr'][7] = 'S’il vous plait entrer un numéro de carte Visa valide.';

function getErrorMsg(msgIndex) {            
    var uiCulture = getCookie("uiCulture");
    var arr = uiCulture.split('-');
    var lang = arr[0];        
    return errorMsgs[lang][msgIndex];
}

function getCookie(c_name)
{
if (document.cookie.length>0)
  {
  c_start=document.cookie.indexOf(c_name + "=");
  if (c_start!=-1)
    {
    c_start=c_start + c_name.length+1;
    c_end=document.cookie.indexOf(";",c_start);
    if (c_end==-1) c_end=document.cookie.length;
    return unescape(document.cookie.substring(c_start,c_end));
    }
  }
return "";
}


function mod10( cardNumber ) { // LUHN Formula for validation of credit card numbers.
var ar = new Array( cardNumber.length );
var i = 0,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 expired(month, year)
{
    if (month == "MM" || year == "YYYY")
        return false;
var now = new Date();							// this function is designed to be Y2K compliant.
var expiresIn = new Date(year,month,1,0,0);		// create an expired on date object with valid thru expiration date
//expiresIn.setMonth(expiresIn.getMonth()+1);		// adjust the month, to first day, hour, minute & second of expired month

if( expiresIn.getTime() < now.getTime()) return true;
return false;									// then we get the milliseconds, and do a long integer comparison
}


function validateCard(cardNumber,cardType,cardMonth,cardYear) {
    if (cardNumber.length == 0) {						//most of these checks are self- explanatory
    alert(getErrorMsg(0));
    return false;				
}

/*
if(document.getElementById('cardType').options.selectedIndex == "0" ) {						//most of these checks are self-explanatory
alert("Please select a card type.");
return false;				
}
*/

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') {
    alert(getErrorMsg(6));
return false;
}
}
var length = cardNumber.length;			//perform card specific length and prefix tests

var cardTypeIndex = 0;
if (document.getElementById('OrderProgram1_cardType') != null) {
	cardTypeIndex = document.getElementById('OrderProgram1_cardType').options.selectedIndex;
} else if (document.getElementById('cardType') != null) {
	cardTypeIndex = document.getElementById('cardType').options.selectedIndex;
}

switch(cardTypeIndex) {
case 3:


    if (length != 15) {
alert(getErrorMsg(5));
return false;				
}
var prefix = parseInt( cardNumber.substring(0,2));


if (prefix != 34 && prefix != 37) {
alert(getErrorMsg(5));
return false;				
}
break;
case 2:


    if (length != 16) {
alert(getErrorMsg(4));
return false;				
}
var prefix = parseInt( cardNumber.substring(0,4));


if (prefix != 6011) {
alert(getErrorMsg(4));
return false;				
}
break;
case 1:


    if (length != 16) {
alert(getErrorMsg(3));
return false;				
}
var prefix = parseInt( cardNumber.substring(0,2));


if (prefix < 51 || prefix > 55) {
alert(getErrorMsg(3));
return false;				
}
break;
case 0:


    if (length != 16 && length != 13) {
        alert(getErrorMsg(7));
return false;				
}
var prefix = parseInt( cardNumber.substring(0,1));


if (prefix != 4) {
    alert(getErrorMsg(7));
	return false;				
}
break;
}
if (!mod10(cardNumber)) { 		// run the check digit algorithm
alert(getErrorMsg(2));
return false;
}
if (expired(cardMonth, cardYear)) {							// check if entered date is already expired.
alert(getErrorMsg(1));
return false;
}

return true; // at this point card has not been proven to be invalid
}