var taxState;
var taxRate;
var subtot;
var tax = 0;
var discount = 0;
var taxable = 0;
var recp = false;
$(document).ready(function(){
	if(window.location.href.indexOf("receipt.html") != -1)
		recp = true;
	displayCookie(true);
	$(window).keydown(function(event){
	    if(event.keyCode == 13 && !validateForm($("form")[0], false)) {
	      event.preventDefault();
	      return false;
	    }
	  });
});

function submitenter(myfield,e)
{
var keycode;
if (window.event) keycode = window.event.keyCode;
else if (e) keycode = e.which;
else return true;
if (keycode == 13)
   {
  // checkName();
   return false;
   }
else
   return true;
}

function saveAndValidate(ele){
	ele.bcompany.optional = true;
	ele.discount_code.optional = true;
//	this.qty_brochure.optional = true;
//	this.qty_logo.optional = true;
//	this.qty_postcard.optional = true;
//	this.qty_buscard.optional = true;
//	this.cvm.optional = true;
	var s = new Object();
	var b = new Object();
	var p = new Object();
	var t = new Object();
	if(validateForm(ele)){
		s.name = $("input[name='sname']",ele).attr("value");
		s.addr = $("input[name='saddr1']",ele).attr("value");
		s.city = $("input[name='scity']",ele).attr("value");
		s.state = $("select[name='sstate']",ele).attr("value");
		s.zip = $("input[name='szip']",ele).attr("value");
		s.email = $("input[name='user_email']",ele).attr("value");
		s.phone = $("input[name='phone']",ele).attr("value");
		
		b.company = $("input[name='bcompany']",ele).attr("value");
		b.name = $("input[name='bname']",ele).attr("value");
		b.addr = $("input[name='baddr1']",ele).attr("value");
		b.city = $("input[name='bcity']",ele).attr("value");
		b.state = $("select[name='bstate']",ele).attr("value");
		b.zip = $("input[name='bzip']",ele).attr("value");
		
		t.discount = $("#DISC_DISPLAY").val();
		t.tax = $("#TAX").val();
		t.grandtotal = $("#GRANDTOTAL_DISPLAY").val();
		t.subtotal = $("#RAW_SUBTOT_DISPLAY").val();
		t.shipping = "$0.00";
		
		p.cctype = $("select[name='cctype']",ele).attr("value");
		ccnum = $("input[name='cardnumber']",ele).attr("value");
		cnl = ccnum.length;
		ccnum = ccnum.substring(cnl-4, cnl);
		p.ccnum = "xxxx-xxxx-"+ccnum;
		
/*		ship = "<table>"+
		"<tr><td>Name</td><td id='sname'>"+ sname + "</td></tr>"+
		"<tr><td>Address</td><td id='saddr'>"+ saddr + "<br>"+scity+", "+sstate+"  "+szip+"</td></tr>"+
		"<tr><td>Phone</td><td id='sphone'>"+ phone + "</td></tr>"+	
		"<tr><td>Email</td><td id='semail'>"+ user_email + "</td></tr>"+
		"</table>";
		
		pay = "<table>"+
		"<tr><td>Company</td><td id='bcompany'>"+ bcompany + "</td></tr>"+
		"<tr><td>Name</td><td id='bname'>"+ bname + "</td></tr>"+
		"<tr><td>Address</td><td id='baddr'>"+ baddr + "<br>"+scity+", "+sstate+"  "+szip+"</td></tr>"+
		"<tr><td>Phone</td><td id='bphone'>"+ phone + "</td></tr>"+	
		"<tr><td>Email</td><td id='bemail'>"+ user_email + "</td></tr>"+
		"<tr><td>Payment</td><td id='ccinfo'>"+ cctype + " " + ccnum + "</td></tr>"+
		"</table>";
*/		

		var c = new Object();
		c.s = s;
		c.b = b;
		c.p = p;
		createCookie('c',$.json.serialize(c), 1);
//		createCookie('ship',ship,1);
//		createCookie('pay',pay,1);
		createCookie('tot',$.json.serialize(t),1);
		ele.action = "https://www.linkpointcentral.com/lpc/servlet/lppay";
//		ele.action = "https://www.agentbranding101.com/FPP/receipt.html";
		ele.submit();
	}
}

function saveItem(){
	var order = new Object();
	var d = readCookie('cart');
	if(!d){
		d = new Object();
		d.orders = new Array();
	}else{
		d = $.json.deserialize(d);
	}
	var id = $("#prod_id").attr("value");
	order.id = id;
	var ops = new Array();
	var agent = navigator.userAgent;
	var userAgent = navigator.userAgent.toLowerCase();
	if ($.browser.safari && !/chrome/.test(userAgent)){
		var sels = $("select");
		for(i = 0; i < sels.length-1; i++){
			fn = $(sels[i]).next().find("span#filename i span#full-filename");
			if(fn.length != 0){
				ops.push({txt:sels[i].value,upload:fn.text()});
			}else{
				ops.push({txt:sels[i].value});
			}
		}	
	}else{
		$("select").each(function(){
			fn = $(this).next().find("span#filename i span#full-filename");
			if(fn.length != 0){
				ops.push({txt:this.value,upload:fn.text()});
			}else{
				ops.push({txt:this.value});
			}
		});
	}
	order.ops = ops;
	d.orders.push(order);
	createCookie('cart',$.json.serialize(d),1);
}

function removeItem(index){
	var order = readCookie('cart');
	if(order == null)
		alert("Nothing currently in the cart");
	order = $.json.deserialize(order);
	order.orders.splice(index,1);
//	items.splice(index,1);
//	if(items.length == 0){
	if(order.orders.length == 0){
		eraseCookie('cart');
		window.location = "http://www.agentbranding101.com/FPP/products.php";
		return;
	}
	createCookie('cart', $.json.serialize(order), 1);
	window.location.reload();
	return;
}

function createCookie(name,value,days) {
	if (days) {
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		var expires = "; expires="+date.toGMTString();
	}
	else var expires = "";
	document.cookie = name+"="+value+expires+"; path=/";
}

function readCookie(name) {
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++) {
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	}
	return null;
}
 
function eraseCookie(name) {
	createCookie(name,"",-1);
}

function displayCookie(b){
	if(!b) ret_div = document.createElement('div');
	var grandTotal = 0;
	var totalCost = 0;
	var order = readCookie('cart');
	if(order == null)
		return;
	order = $.json.deserialize(order);
	var order_state = null;
	if(recp){
		var c = readCookie('c');
		c = $.json.deserialize(c);
		order_state = c.b.state;
	}
	var xmldoc = loadXMLDoc("products.xml");
	var table = document.createElement('table');
	$(table).addClass('order-table');
	//var disp = "<table class='order-table'>";
	//disp = disp + "<th> Qty </th><th> Product </th><th> Price </th>";
	//for(i=0;i<items.length;i++){
	for(i in order.orders){
		totalCost = 0;
		var tr = document.createElement('tr');
		var cell = document.createElement('td');
		$(cell).addClass('option-box');
		var opS = document.createElement('span');
		$(opS).addClass('option-name').css("width","372px");
		var pr = document.createElement('span');
		$(pr).addClass('price-box');
		
		//var parts = items[i].split("|");
		var prod = findProductInfo(xmldoc, "id", order.orders[i].id);//parts[0]);
		remove_link = "";
		if(recp){
			remove_link = $(prod).children("name").text();
		}else{
			remove_link = $(prod).children("name").text() + "<a style='font-size:6pt;position:absolute;right:2px;top:3px;color:#FFFFFF;' href='javascript:void(0)' onclick='removeItem(" + i + ")'>Remove</a>";
		}
		$(opS).html(remove_link);
		var isT = "";
		var disp = "<div class='prod-descrip'><br/>";
		for(j in order.orders[i].ops){
			var opSet = findOpSetInfo(prod, "id", String(parseInt(j)+1));//$(prod).children("options id " + j);
			isT = $(opSet).children("tax").text();
			up = order.orders[i].ops[j].txt;
			var op = findOpsInfo(opSet, "id", up);
			var cost = $(op).children("price").text();
			cost = parseFloat(cost);
			if(isT == "product")
				taxable += cost;
			totalCost = totalCost + cost; 
			disp += $(op).children("name").text() + "<br/>";
			if(order.orders[i].ops[j].upload != undefined){
				disp += "<span class=''>Attached File: " + order.orders[i].ops[j].upload + "</span><br/>";
			}
		}
		disp += "</div>"
		grandTotal += totalCost;
		dispTotalCost = new Number(totalCost).toFixed(2);
		$(pr).html("$" + dispTotalCost);
		$(cell).append(opS).append(pr).append(disp);
		$(tr).append(cell);
		$(table).append(tr);
	}
	if(b) 
		$("#checkoutTable").append(table); //coTable);
	else	
		$(ret_div).append(table);
	
	taxState = findTaxInfo(xmldoc, "state");
	taxRate = findTaxInfo(xmldoc, "rate");
	taxRate = parseFloat(taxRate);
	subtot = grandTotal;
	if(order_state != null && taxState == order_state)
		tax = taxable * taxRate;
	grandTotal += tax;
	grandTotal = new Number(grandTotal).toFixed(2);
	
	var dets = document.createElement('table');
	$(dets).addClass('sale-details');
	var trh = document.createElement('tr');
	$(trh).html(""+
	"<th colspan='1' class='sum'>Shopping Cart</th><th class='operator'/>"+
	"<th colspan='1' class='sum'>Discounts</th><th class='operator'/>"+
	"<th colspan='1' class='sum'>SubTotal</th><th class='operator'/>"+
	"<th colspan='1' class='sum'>Tax(Only SC 6%)</th><th class='operator'/>"+
	"<th colspan='1' class='sum'>Shipping</th><th class='operator'/>"+
	"<th colspan='1' class='sum'>ORDER TOTAL</th><th class='operator'/>");
	var trd = document.createElement('tr');
	var tdshop = document.createElement('td');
	$(tdshop).html("<input readonly='readonly' id='RAW_SUBTOT_DISPLAY' type='text' value='$"+subtot.toFixed(2)+"'/>").addClass("sum");
	var tdtax = document.createElement('td');
	$(tdtax).html("<input readonly='readonly' id='TAX_DISPLAY' type='text' value='$"+tax.toFixed(2)+"'/>").addClass("sum");
	var tddisc = document.createElement('td');
	$(tddisc).html("<input readonly='readonly' id='DISC_DISPLAY' type='text' value='$"+discount.toFixed(2)+"'/>").addClass("sum");
	var tdsub = document.createElement('td');
	$(tdsub).html("<input readonly='readonly' id='SUBTOT_DISPLAY' type='text' value='$"+subtot.toFixed(2)+"'/>").addClass("sum");
	var tdship = document.createElement('td');
	$(tdship).html("<input readonly='readonly' type='text' value='$0.00'/>").addClass("sum");
	var tdgtot = document.createElement('td');
	$(tdgtot).html("<input readonly='readonly' id='GRANDTOTAL_DISPLAY' type='text' value='$"+grandTotal+"'/>").addClass("sum");
	$(trd).append(tdshop)
		  .append("<td class='operator'>-</td>")
		  .append(tddisc)
		  .append("<td class='operator'>=</td>")
		  .append(tdsub)
		  .append("<td class='operator'>+</td>")
		  .append(tdtax)
		  .append("<td class='operator'>+</td>")
		  .append(tdship)
		  .append("<td class='operator'>=</td>")
		  .append(tdgtot);
	$(dets).append(trh).append(trd);
	if(b){
		$("#checkoutDetails").append(dets);
		$("#checkoutDetails").append("<input id='GRANDTOTAL' type='hidden' name='chargetotal' value='" + grandTotal + "'/>")
			.append("<input id='SUBTOTAL' type='hidden' name='subtotal' value='" + subtot + "'/>")
			.append("<input id='TAX' type='hidden' name='tax' value='" + tax + "'/>");
	}else{	
		$(ret_div).append(dets).append("<input id='GRANDTOTAL' type='hidden' name='chargetotal' value='" + grandTotal + "'/>")
			.append("<input id='SUBTOTAL' type='hidden' name='subtotal' value='" + subtot + "'/>")
			.append("<input id='TAX' type='hidden' name='tax' value='" + tax + "'/>");
	}			
	if(!b)
		return ret_div;
}

function displayOrderSummary(){
	var c = readCookie('c');
	c = $.json.deserialize(c);
	s = "<table>"+
			"<tr><td>Name</td><td id='sname'>"+ c.s.name + "</td></tr>"+
			"<tr><td>Address</td><td id='saddr'>"+ c.s.addr + "<br>"+c.s.city+", "+c.s.state+"  "+c.s.zip+"</td></tr>"+
			"<tr><td>Phone</td><td id='sphone'>"+ c.s.phone + "</td></tr>"+	
			"<tr><td>Email</td><td id='semail'>"+ c.s.email + "</td></tr>"+
			"</table>";

	b = "<table>"+
			"<tr><td>Company</td><td id='bcompany'>"+ c.b.company + "</td></tr>"+
			"<tr><td>Name</td><td id='bname'>"+ c.b.name + "</td></tr>"+
			"<tr><td>Address</td><td id='baddr'>"+ c.b.addr + "<br>"+c.b.city+", "+c.b.state+"  "+c.b.zip+"</td></tr>"+
			"<tr><td>Phone</td><td id='bphone'>"+ c.s.phone + "</td></tr>"+	
			"<tr><td>Email</td><td id='bemail'>"+ c.s.email + "</td></tr>"+
			"<tr><td>Payment</td><td id='ccinfo'>"+ c.p.cctype + " " + c.p.ccnum + "</td></tr>"+
			"</table>";
			
	$("#ship").html(s);
	$("#pay").html(b);
	
}

function findTaxInfo(xml, tag){
	return $("products admin salestax " + tag, xml).text();
}

function findShipping(xml){
	return $("products admin shipping cost", xml).text();
}

function findProductInfo(xml, tag, value){
	var ele;
	$("products product", xml).each(function(){
		if($(this).children(tag).text() == value){
			ele = this;
		}
	});
	return ele;
}

function findOpSetInfo(prod, tag, value){
	var ele;
	$(prod).children("options").each(function(){
		if($(this).children(tag).text() == value)
			ele = this;
	});
	return ele;
}

function findOpsInfo(set, tag, value){
	var ele;
	$(set).children("option").each(function(){
		if($(this).children(tag).text() == value)
			ele = this;
	});
	return ele;
}

function confirm(){
//	window.location.assign("http://next_page_to_be_loaded.com");
	eraseCookie('cart');
	alert("Products purchased and cookie Cleared");
	window.location.assign("products.php");
}

function loadXMLDoc(dname) 
{
	var xDoc = null;
	$.ajax({
		url: dname, 
		type: "GET",
		dataType: "xml",
		success: function(data){
			cp = 1;
			xDoc = data;
			cp = 0;
		},
		async: false
	});
	return xDoc;
/*try //Internet Explorer
  {
  xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
  }
catch(e)
  {
  try //Firefox, Mozilla, Opera, etc.
    {
    xmlDoc=document.implementation.createDocument("","",null);
    }
  catch(e) {alert(e.message)}
  }
try 
  {
  xmlDoc.async=false;
  xmlDoc.load(dname);
  return(xmlDoc);
  }
catch(e) {alert(e.message)}
return(null);
*/
}

function isTaxable(){
	var state = $("select#ship_state").val();
	var gt = parseFloat($("input#GRANDTOTAL").attr("value"));
	if(state == taxState){
	//	tax = subtot * taxRate;
		tax = taxable * taxRate;
		gt = gt + tax;
	} else {
		gt = gt - tax;
		tax = 0;
	}
	$("#TAX_DISPLAY").attr("value","$" + tax.toFixed(2));
	$("input#TAX").attr("value", tax.toFixed(2));
	$("input#GRANDTOTAL").attr("value", gt.toFixed(2));
	$("#GRANDTOTAL_DISPLAY").attr("value","$" + gt.toFixed(2));
}

function checkDiscount(){
	if(discount != 0){
		subtot = subtot + discount;
		discount = 0;
	}
	var xmldisc = loadXMLDoc("disc.xml");
	var disc_code = $("#discount_code").attr("value");
	var disc_element = $("discount[code='"+disc_code+"']", xmldisc);
	if(disc_element.length > 0){
		var d = parseInt($(disc_element).attr("amount"));
		if($(disc_element).attr("type") == "dollars"){
			if(subtot < parseInt($(disc_element).attr("minimum"))){
				dispMin = parseInt($(disc_element).attr("minimum")).toFixed(2);
				alert("This promotion requires a minimum order of $"+dispMin+".");
				$("#discount_code").attr("value","");
				return;
			}
			discount = d;
			$("#DISC_DISPLAY").attr("value","$"+discount.toFixed(2));
		}else{
			discount = d * .01;
			$("#DISC_DISPLAY").attr("value",d+"%");
			discount = subtot * discount;
		}
		subtot = subtot - discount;
		//discount = parseInt($(disc_element).attr("amount"));
	} else {
		$("#DISC_DISPLAY").attr("value","$0.00");
	}
	$("input#SUBTOTAL").attr("value", subtot.toFixed(2));
	$("#SUBTOT_DISPLAY").attr("value","$" + subtot.toFixed(2));
	gt = subtot;
	$("input#GRANDTOTAL").attr("value", gt.toFixed(2));
	$("#GRANDTOTAL_DISPLAY").attr("value","$" + gt.toFixed(2));
	isTaxable();
}

/*******************************************************************************************

Code from former shopcart.php file

********************************************************************************************/

var Cards = new makeArray(5);
Cards[0] = new CardType("M", "51,52,53,54,55", "16");
var M = Cards[0];
Cards[1] = new CardType("V", "4", "13,16");
var V = Cards[1];
Cards[2] = new CardType("A", "34,37", "15");
var A = Cards[2];
Cards[3] = new CardType("D", "6011", "16");
var D = Cards[3];
var None = Cards[4] = new CardType();
	
	function validateForm(f, alt){
			
			var errors = "";
			var empty_fields = "";
			var term_error = "";
			var agree_check = "false";
			var display_name = "";
			var tmpmonth;
			var tmpyear;
			var card_errors = "";
			var card;
			errors += "The form was not submitted because of the following error(s).\n";
			errors += "Please correct these error(s) and re-submit.\n\n\n";

			for(var i = 0;i < f.length; i++){
				var e = f.elements[i];
				if ((e.type == "text") && !e.optional){
					if((e.value == null) || (e.value == "")){
						switch (e.name) {
							case "cardnumber" :
								display_name = "Credit Card Number";
								break;
							case "bname" :
								display_name = "Billing Name";
								break;
							case "baddr1" :
								display_name = "Billing Address";
								break;
							case "bcity" :
								display_name = "Billing City";
								break;
							case "bzip"	:
								display_name = "Billing Zipcode";
								break;
						}
						empty_fields += "\n          " + display_name;
						continue;
					}
				}
				if ((e.name == "terms_agree") && (e.checked == true)){
						agree_check = "true";
				}
				if (e.name == "expmonth"){
					tmpmonth = e.value;
				}
				if (e.name == "expyear"){
					tmpyear = e.value;
				}
				if ((e.name == "cctype") && (e.value == "None")){
					card_errors += "You must select a Credit Card Type.\n";
				}
			}
			if (!(new CardType()).isExpiryDate(tmpyear, tmpmonth)) {
				card_errors += "The Credit Card expiration date entered has expired.\n";
			}
			card = document.cartForm.cctype.options[document.cartForm.cctype.selectedIndex].value;
			 var retval = eval(card + ".checkCardNumber(\"" + document.cartForm.cardnumber.value + "\", " + tmpyear + ", " + tmpmonth + ");");
			cardname = "";
			if (!(retval)){
				for (var n = 0; n < Cards.size; n++) {
					if (Cards[n].checkCardNumber(document.cartForm.cardnumber.value, tmpyear, tmpmonth)) {
					cardname = Cards[n].getCardType();
					break;
					}
				}
				if (cardname.length > 0) {
					card_errors += "The wrong Credit Card Type is selected.\n";
				}
				else{
					card_errors += "The Credit Card Number is invalid. Check the number and be sure not to use spaces or dashes.\n";
				}
			}
			errors += card_errors;
			if(agree_check == "false"){
				term_error = "You must agree to the terms and conditions to place an order.\n\n";
				errors += term_error;
			}
			if ((!empty_fields)&&(!term_error)&&(!card_errors)){
				return true;
			}
			if(empty_fields){
				errors += "The following required fields are empty:" + empty_fields + "\n";
			}
			if(alt == undefined || alt == true) alert(errors);
			return false;
		}

/*************************************************************************\
Object CardType([String cardtype, String rules, String len, int year, 
                                    int month])
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;  // set CardNumber method.
this.setCardType = setCardType;  // setCardType method.
this.setLen = setLen;  // setLen method.
this.setRules = setRules;  // setRules method.
this.setExpiryDate = setExpiryDate;  // setExpiryDate method.

this.setCardType(tmpcardtype);
this.setLen(tmplen);
this.setRules(tmprules);
if (argc > 4)
this.setExpiryDate(argv[3], argv[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;
}

/*************************************************************************\
boolean checkCardNumber([String cardnumber, int year, int month])
return true if cardnumber pass the luhncheck and the expiry date is
valid, else return false.
\*************************************************************************/
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;
}
/*************************************************************************\
String getCardType()
return the cardtype.
\*************************************************************************/
function getCardType() {
return this.cardtype;
}
/*************************************************************************\
String getExpiryDate()
return the expiry date.
\*************************************************************************/
function getExpiryDate() {
return this.month + "/" + this.year;
}
/*************************************************************************\
boolean isCardNumber([String cardnumber])
return true if cardnumber pass the luhncheck and the rules, else return
false.
\*************************************************************************/
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;
}

/*************************************************************************\
boolean isExpiryDate([int year, int month])
return true if the date is a valid expiry date,
else 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;
}

/*************************************************************************\
boolean isNum(String argvalue)
return true if argvalue contains only numeric characters,
else return false.
\*************************************************************************/
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;
}

/*************************************************************************\
boolean luhnCheck([String CardNumber])
return true if CardNumber pass the luhn check else return false.
Reference: http://www.ling.nwu.edu/~sburke/pub/luhn_lib.pl
\*************************************************************************/
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;
}

/*************************************************************************\
ArrayObject makeArray(int size)
return the array object in the size specified.
\*************************************************************************/
function makeArray(size) {
this.size = size;
return this;
}

/*************************************************************************\
CardType setCardNumber(cardnumber)
return the CardType object.
\*************************************************************************/
function setCardNumber(cardnumber) {
this.cardnumber = cardnumber;
return this;
}

/*************************************************************************\
CardType setCardType(cardtype)
return the CardType object.
\*************************************************************************/
function setCardType(cardtype) {
this.cardtype = cardtype;
return this;
}

/*************************************************************************\
CardType setExpiryDate(year, month)
return the CardType object.
\*************************************************************************/
function setExpiryDate(year, month) {
this.year = year;
this.month = month;
return this;
}

/*************************************************************************\
CardType setLen(len)
return the CardType object.
\*************************************************************************/
function setLen(len) {
// Create the len array.
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;
}

/*************************************************************************\
CardType setRules()
return the CardType object.
\*************************************************************************/
function setRules(rules) {
// Create the rules array.
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;
}

function duplicateInfo(cname){
	if(cname.checked == true){
		document.cartForm.bname.value = document.cartForm.sname.value;
		document.cartForm.baddr1.value = document.cartForm.saddr1.value;
		document.cartForm.bcity.value = document.cartForm.scity.value;
		document.cartForm.bstate.value = document.cartForm.sstate.value;
		document.cartForm.bzip.value = document.cartForm.szip.value;
	}
	else{
		document.cartForm.bname.value = "";
		document.cartForm.baddr1.value = "";
		document.cartForm.bcity.value = "";
		document.cartForm.bstate.value = "";
		document.cartForm.bzip.value = "";
	}
}