function MM_preloadImages() { //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}

function CheckFormTwo(form){
	
	if (form01.Name.value.length == 0) {
		alert("Please enter your name.");
		form01.Name.focus();
		return false;
	}
	
	if (form01.Email.value.length == 0) {
		alert("Please enter Email.");
		form01.Email.focus();
		return false;
	}	
   if (/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(form01.Email.value)){
       return (true)
    }
		alert("Invalid E-mail Address! Please re-enter.")
		return (false)
}


function openWin(theURL,winName,features) {
  window.open(theURL,winName,features);
}

var Cards = new makeArray(8);
	Cards[0] = new CardType ("MasterCard", "51,52,53,54,55", "16");
	Cards[1] = new CardType ("VisaCard", "4", "13,16");
	Cards[2] = new CardType ("AmExCard", "34,37", "15");
	Cards[3] = new CardType ("DinersClubCard", "30,36,38", "14");
	Cards[4] = new CardType ("DiscoverCard", "6011", "16");
	Cards[5] = new CardType ("enRouteCard", "2014,2149", "15");
	Cards[6] = new CardType ("JCBCard", "3088,3096,3112,3158,3337,3528", "16");
var MasterCard = Cards[0]
var VisaCard = Cards[1];
var AmExCard = Cards[2];
var DinersClubCard = Cards[3];
var DiscoverCard = Cards[4];
var enRouteCard = Cards[5];
var JCBCard = Cards[6];
var LuhnCheckSum = Cards[7] = new CardType();

function CheckCardNumber(form){
	var tmpyear;
	if (form.cus_card_type.value.length == 0) {
		alert("Please select a Name of Card.");
		form.cus_card_type.focus();
		return false;
	}
	if (form.cus_card_holder.value.length == 0) {
		alert("Please enter a Name of Cardholder.");
		form.cus_card_holder.focus();
		return false;
	}	
	if (form.cus_card_num.value.length == 0) {
		alert("Please enter a Card Number.");
		form.cus_card_num.focus();
		return false;
	}
	if (form.cus_card_cvv.value.length == 0) {
		alert("Please enter a CVV.");
		form.cus_card_cvv.focus();
		return false;
	}
	if (form.cus_card_ex_month.value.length == 0) {
		alert("Please enter the Expiration Month.");
		form.cus_card_ex_month.focus();
		return false;
	}
	if (form.cus_card_ex_year.value.length == 0) {
		alert("Please enter the Expiration Year.");
		form.cus_card_ex_year.focus();
		return false;
	}
if (form.cus_card_ex_year.value > 0 && form.cus_card_ex_year.value < 21) tmpyear = "20" + form.cus_card_ex_year.value;
		else {
			alert("The Expiration Year is not valid.");
			return false;
			}
tmpmonth = form.cus_card_ex_month.options[form.cus_card_ex_month.selectedIndex].value;

// The following line doesn't work in IE3, you need to change it to something like
//"(new CardType()) ..."... if (!CardType().isExpiryDate(tmpyear, tmpmonth)){

if(!(new CardType()).isExpiryDate(tmpyear, tmpmonth)) {
	alert("This card has alredy expired.")
	return false;
}

card = form.cus_card_type.options[form.cus_card_type.selectedIndex].value;
var retval = eval(card + ".checkCardNumber(\"" + form.cus_card_num.value + "\", " + tmpyear + ", " + tmpmonth + ");");
cardname = "";

if (retval) ;
	else{
		for (var n = 0; n < Cards.size; n++) {
			if (Cards[n].checkCardNumber(form.cus_card_num.value, tmpyear, tmpmonth)) {
				cardname = Cards[n].getCardType();
				break;
				return false;
			}
		}
		if (cardname.length > 0) alert("This looks like a " + cardname + " number, not a " + card + " number.");
			else alert("This card number is not valid.");
			return false;
		}
	}
	
/****************************************************************************************************************\
Object CardType ([String cardtype, String rules, String len, int year, int month])
					ValidCreditCard.htm
cardtype	: type of card, eg: MasterCard, Visa, etc.
rules		: rules of the cardnumber, eg: "4", "6011", "34, 37".
len			: valid length of cardnumber, eg: "16, 19", "13, 16".
year		: year of expiry date.
month		: month of expiry date
eg:
var VisaCard = new CardType("Visa", " 4" , "16");
Var AmExCard = new CardType("AmEx", "34,37", "15");
\*****************************************************************************************************************/

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], argx[4]);
	this.checkCardNumber = checkCardNumber; // checkCardNumber method.
	this.getExpiryDate = getExpiryDate; // getExpiryDate method.
	this.getCardType = getCardType; // getCardType method.
	this.isCardNumber = isCardNumber; // isCardNumber method.
	this.isExpiryDate = isExpiryDate; // isExpiryDate method.
	this.luhnCheck = luhnCheck; // luhnCheck method.
	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;
	}