	var nVisaCardType 				= 0;
	var nMastercardCardType 		= 1;
	var nDiscoverCardType			= 2;
	var nAmexCardType				= 3;
	var nDinersClubCardType			= 4;
	var nCarteBlancheCardType		= 5;
	var nEnRouteCardType			= 6;
	var nJCBCardType				= 7;
	var nUnknownCardType			= 8;	
	var cardPics = new Array();

	cardPics[nVisaCardType] = new Image();
	cardPics[nVisaCardType].src="images/visa.jpg";
	cardPics[nMastercardCardType] = new Image();
	cardPics[nMastercardCardType].src="images/mastercard.jpg";
	cardPics[nDiscoverCardType] = new Image();
	cardPics[nDiscoverCardType].src="images/discover.jpg";
	cardPics[nAmexCardType] = new Image();
	cardPics[nAmexCardType].src="images/amex.jpg";
	cardPics[nDinersClubCardType] = new Image();
	cardPics[nDinersClubCardType].src="images/dinersclub.jpg";
	cardPics[nCarteBlancheCardType] = new Image();
	cardPics[nCarteBlancheCardType].src="images/carteblanche.jpg";
	cardPics[nEnRouteCardType] = new Image();
	cardPics[nEnRouteCardType].src="images/enroute.jpg";
	cardPics[nJCBCardType] = new Image();
	cardPics[nJCBCardType].src="images/jcb.jpg";	
	cardPics[nUnknownCardType] = new Image();
	cardPics[nUnknownCardType].src="images/invalid.gif";

	//
	// Algorithm to verify a credit number is valid
	//
	function checkLuhn10(number) {
  	  if (number.length > 19)
    	    return (false);

  	  sum = 0; mul = 1; l = number.length;
  	  for (i = 0; i < l; i++) {
    	    digit = number.substring(l-i-1,l-i);
	    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)
	    return (true);
	  else
	    return (false);
	}

	//
	// Determine the credit card type from the credit card number
	//
	function getCardType(number) {
		var numLength = number.length;
		
		if(numLength > 4)
		{
			if((number.charAt(0) == '4') && ((numLength == 13)||(numLength==16)))
				return(cardPics[nVisaCardType].src);
			else if((number.charAt(0) == '5' && ((number.charAt(1) >= '1') && (number.charAt(1) <= '5'))) && (numLength==16))
				return(cardPics[nMastercardCardType].src);
			else if(number.substring(0,4) == "6011" && (numLength==16))
				return(cardPics[nDiscoverCardType].src);
			else if((number.charAt(0) == '3' && ((number.charAt(1) == '4') || (number.charAt(1) == '7'))) && (numLength==15))
				return(cardPics[nAmexCardType].src);
			else if((number.charAt(0) == '3') && (numLength==16))
				return(cardPics[nJCBCardType].src);
			else if(((number.substring(0, 4) == "2131") || (number.substring(0, 4) == "1800")) && (numLength==15))
				return(cardPics[nJCBCardType].src);
			else if(((number.substring(0, 4) == "2014") || (number.substring(0, 4) == "2149")) && (numLength==15))
				return(cardPics[nEnRouteCardType].src);
			else if((number.charAt(0) == '3') && (number.charAt(1) == '8') && (numLength == 14))
				return(cardPics[nCarteBlancheCardType].src);
			else if((number.charAt(0) == '3') && (((number.charAt(1) == '0') && ((number.charAt(2) >= '0') && (number.charAt(2) <= '5'))) 
				|| (number.charAt(1) == '6')) && (numLength == 14))
				return(cardPics[nDinersClubCardType].src);
	    }

	    return(cardPics[nUnknownCardType].src);	  
	}


	function handleCCTyping (field, event) {
		var keyCode = event.keyCode ? event.keyCode : event.which ? event.which : event.charCode;

      if (field.card_num.value.length >= 13) 
      {
      	if(!checkLuhn10(field.card_num.value))
			{
				field.cardimage.src=cardPics[nUnknownCardType].src;
			}
			else
			{
				field.cardimage.src=getCardType(field.card_num.value);
			}
		} else {
			field.cardimage.src=cardPics[nUnknownCardType].src;
		}

		return true;
	}


	function copyAddress() 
	{ 	
		if(document.form1.sInfo.checked == true ) 
		{ 
			document.form1.shipping_first_name.value 	= document.form1.first_name.value ; 
			document.form1.shipping_last_name.value 	= document.form1.last_name.value ; 
			document.form1.shipping_address.value 		= document.form1.address.value ; 
			document.form1.shipping_city.value 			= document.form1.city.value ; 
			document.form1.shipping_zip.value 			= document.form1.zip.value ; 
			document.form1.shipping_state.value 		= document.form1.state.value ; 
			<? if(!$GatewaySettings['AllowInternational']) { ?>			
				document.form1.shipping_state.selectedIndex  = document.form1.shipping_state.selectedIndex;
			<? } ?>
			document.form1.shipping_country.value 		= document.form1.country.value ; 
			document.form1.shipping_country.selectedIndex = document.form1.country.selectedIndex;
		} 
	}


function popUp(URL) {
day = new Date();
id = day.getTime();
eval("page" + id + " = window.open(URL, '" + id + "', 'toolbar=0,scrollbars=0,location=0,statusbar=0,menubar=0,resizable=0,width=590,height=245,left = 490,top = 312');");
}
