function update_same_as_address_form(cur, same) {
	m = document.getElementById(cur + 'Name');
	m.value = document.getElementById(same + 'Name').value;
	n = document.getElementById(cur + 'Add');
	n.value = document.getElementById(same + 'Add').value;
	n = document.getElementById(cur + 'Add2');
	n.value = document.getElementById(same + 'Add2').value;
	n = document.getElementById(cur + 'City');
	n.value = document.getElementById(same + 'City').value;
	n = document.getElementById(cur + 'State');
	n.value = document.getElementById(same + 'State').value;
	n = document.getElementById(cur + 'Zip');
	n.value = document.getElementById(same + 'Zip').value;
	
}

function copy_address_to(val, name, prefix, to) {

	change = document.getElementById(to + 'SameAs' + prefix).checked;
	if (change) {
		e = document.getElementById(to + name);
		e.value = val;
	}
}

function update_same_as_address_checkbox(prefix, to) {

	var checked = document.getElementById(prefix + 'SameAs' + to).checked;
	
	var fixForm = document.getElementById(prefix + 'addressFormFixed');
	var varForm = document.getElementById(prefix + 'addressFormVariable');
	var changeDiv = document.getElementById(prefix + 'AddSelectChangeDiv');
	var selDiv = document.getElementById(prefix + 'AddSelectDiv');
	if (checked && typeof(document.getElementById(to + 'AddressSelect')) == 'undefined') {
		checked = false;
	} else if (checked && document.getElementById(to + 'AddressSelect').value == 'new') {
		checked = false;
	}	
	selDiv.style.display = 'none';
	if (checked) {
		var copy = document.getElementById(to + 'addressFormFixed');
		varForm.style.display = 'none';
		fixForm.style.display = 'block';
		fixForm.innerHTML = copy.innerHTML;

		changeDiv.style.display = 'none';
			
	} else {
		var elem = document.getElementById(prefix + 'AddId');

		if (typeof(elem) != 'undefined' && elem != null) {
			elem.value = 'new';	
		}
		//if we have an def id we use the set address array
		elem = document.getElementById(prefix + 'defAddID');
		if (elem != null && elem.value != '') {
			
			fixForm.innerHTML = setAddresses[prefix][elem.value]['add'] + '<br>' +
						setAddresses[prefix][elem.value]['add2'] + '<br>' + 
						setAddresses[prefix][elem.value]['city'] + ', ' + 
						setAddresses[prefix][elem.value]['state'] + ' ' + 
						setAddresses[prefix][elem.value]['zip'];

			fixForm.style.display = 'block';
			varForm.style.display = 'none';
			changeDiv.style.display = 'block';
			
		} else {
			document.getElementById(prefix + 'Name').value = '';
			document.getElementById(prefix + 'Add').value = '';
			document.getElementById(prefix + 'Add2').value = '';
			document.getElementById(prefix + 'City').value = '';
			document.getElementById(prefix + 'State').value = '';
			document.getElementById(prefix + 'Zip').value = ''; 

			fixForm.style.display = 'none';
			fixForm.innerHTML = '';
			varForm.style.display = 'block';
		}
		
	}
}

function setup_save_address(prefix, copyTo) {
	f = document.getElementById('cart_status_box_form');
	varForm = document.getElementById(prefix + 'addressFormVariable');
	fixForm = document.getElementById(prefix + 'addressFormFixed');
	
	

	/*validate the form*/
	ans = validate_address_form(prefix);
	elem = document.getElementById('addressesToSave');
	if (ans) { 
		/*find the current addressto save number, add 1 to it and save info*/
		elem.value = parseInt(elem.value) + 1;
		name = document.getElementById(prefix + 'Name');
		f.innerHTML += "<input type='hidden' name='addToSaveName" + elem.value + "' id='addToSaveName" + elem.value + "' value='" + name.value + "'>";
		add = document.getElementById(prefix + 'Add');
		f.innerHTML += '<input type="hidden" name="addToSaveAdd' + elem.value + '" id="addToSaveAdd' + elem.value + '" value="' + add.value + '">';
		add2 = document.getElementById(prefix + 'Add2');
		f.innerHTML += '<input type="hidden" name="addToSaveAdd2' + elem.value + '" id="addToSaveAdd2' + elem.value + '" value="' + add2.value + '">';
		city = document.getElementById(prefix + 'City');
		f.innerHTML += '<input type="hidden" name="addToSaveCity' + elem.value + '" id="addToSaveCity' + elem.value + '" value="' + city.value + '">';
		state = document.getElementById(prefix + 'State');
		f.innerHTML += '<input type="hidden" name="addToSaveState' + elem.value + '" id="addToSaveState' + elem.value + '" value="' + state.value + '">';
		zip = document.getElementById(prefix + 'Zip');
		f.innerHTML += '<input type="hidden" name="addToSaveZip' + elem.value + '" id="addToSaveZip' + elem.value + '" value="' + zip.value + '">';

		fixForm.innerHTML = add.value + '<br>' + add2.value + '<br>' + city.value + ', ' + state.value + ' ' + zip.value;
		varForm.style.display = 'none';
		fixForm.style.display = 'block';

		/*check on the copy to value*/
		if (copyTo != '' && (ct = document.getElementById(copyTo + 'SameAs' + prefix))) {
			fixForm = document.getElementById(copyTo + 'addressFormFixed');
			varForm = document.getElementById(copyTo + 'addressFormVariable');
			add = document.getElementById(copyTo + 'Add');
			add2 = document.getElementById(copyTo + 'Add2');
			city = document.getElementById(copyTo + 'City');
			state = document.getElementById(copyTo + 'State');
			zip = document.getElementById(copyTo + 'Zip');		
			fixForm.innerHTML = add.value + '<br>' + add2.value + '<br>' + city.value + ', ' + state.value + ' ' + zip.value;
			varForm.style.display = 'none';
			fixForm.style.display = 'block';
		} 
	} 
	alert('addresstosave value = ' + elem.value);

}

function save_add(prefix) {
	/* validate first */
	ans = validate_address_form(prefix);

	if (ans) { 
		var name =  document.getElementById(prefix + 'Name');
		var add =   document.getElementById(prefix + 'Add');
		var add2 =  document.getElementById(prefix + 'Add2');
		var city =  document.getElementById(prefix + 'City');
		var state = document.getElementById(prefix + 'State');
		var zip = document.getElementById(prefix + 'Zip');

		window.location = "?action=completeorder&checkoutSave=savenewadd&prefix=" + prefix + 
			"&add=" + urlencode(add.value) + 
			"&add2=" + urlencode(add2.value) + 
			"&name=" + urlencode(name.value) + 
			"&city=" + urlencode(city.value) + 
			"&state=" + urlencode(state.value) + 
			"&zip=" + zip.value;
	} 
}

function validate_address_form(prefix) {
	var error = document.getElementById('error' + prefix);
	error.style.display = 'none';
	error.innerHTML = '';

	/* Check if it is in saved form right now or regular form */

	elem = document.getElementById(prefix + 'Name');
	if (trim(elem.value) == '') {
		error.innerHTML += 'You must enter a name for this address<br>';
		elem.style.background = 'yellow';
	} else {		
		elem.style.background = 'white';
	}

	elem = document.getElementById(prefix + 'Add');
	elem2 = document.getElementById(prefix + 'Add2');

	if (trim(elem.value) == '') { 
		error.innerHTML += 'You must enter an address<br>';
		elem.style.background = 'yellow';
		elem2.style.background = 'yellow';
	} else {
		elem.style.background = 'white';
		elem2.style.background = 'white';
	}

	elem = document.getElementById(prefix + 'City');
	if (trim(elem.value) == '') {
		error.innerHTML += 'You must enter a city<br>';
		elem.style.background = 'yellow';
	} else {		
		elem.style.background = 'white';
	}

	elem = document.getElementById(prefix + 'State');
	if (trim(elem.value) == '') {
		error.innerHTML += 'You must enter a state<br>';
		elem.style.background = 'yellow';
	} else {		
		elem.style.background = 'white';
	}

	elem = document.getElementById(prefix + 'Zip');
	if (trim(elem.value) == '') {
		error.innerHTML += 'You must enter a zip code<br>';
		elem.style.background = 'yellow';
	} else {		
		elem.style.background = 'white';
	}

	if (error.innerHTML == '') { 
		return true;
	} 
	error.style.display = 'block';
	return false;
}

function update_set_address(prefix, copyTo, upTax) {

	var txt = document.getElementById(prefix + 'addressFormFixed');

	var elem = document.getElementById(prefix + 'AddressSelect');

	var elem2 = document.getElementById(prefix + 'addressFormVariable');

	var useCT = false;

	if (copyTo != '') {

		ct = document.getElementById(copyTo + 'SameAs' + prefix);

		if (ct.checked) {
			useCT = true;
		}
	}	

	if (elem.value == "new") {
		txt.style.display = "none";
		elem2.style.display = "block";
		var id = document.getElementById(prefix + 'AddId');
		id.value = 'new';
			
	} else {

		txt.style.display = "block";
		elem2.style.display = "none";
		txt.innerHTML = setAddresses[prefix][elem.value]['add'] + '<br>' + 
			setAddresses[prefix][elem.value]['add2'] + '<br>' + 
			setAddresses[prefix][elem.value]['city'] + ', ' + 
			setAddresses[prefix][elem.value]['state'] + ' ' + 
			setAddresses[prefix][elem.value]['zip']; 
		
		var id = document.getElementById(prefix + 'AddId');


		id.value = elem.value;



	}
	if (upTax) {
		var taxElem = document.getElementById('cart_status_box_sales_tax');
		var subTotalElem = document.getElementById('cart_status_box_item_total');
		percent = salesTaxes[setAddresses[prefix][elem.value]['state']];
		var tax = 0;
		if (percent != '' && typeof(percent) != 'undefined') {
			tax = (parseFloat(percent)/100) * parseFloat(subTotalElem.innerHTML);
		}
		//add tax and prod total and shipping to get new total
		taxElem.innerHTML = tax.toFixed(2);

		//now update totatl
		var shipElem = document.getElementById('cart_status_box_shipping_cost');	
		var totElem = document.getElementById('cart_status_box_total_cost');
		var tot = parseFloat(taxElem.innerHTML) + parseFloat(subTotalElem.innerHTML) + parseFloat(shipElem.innerHTML);
		totElem.innerHTML = tot.toFixed(2);
	}

	if (useCT) {
		update_same_as_address_checkbox(copyTo,prefix);
	}
}

function validate_checkout_address_form() {
	
	/*Start with bill validation, no need to validate if saved address, check the Add Id value to know that*/

	billID = document.getElementById('billAddId');
	shipID = document.getElementById('shipAddId');
	var saveNewBill = false;
	var saveNewShip = false;
	var billOk = false;
	var shipOk = false;
	if (billID.value != '') {
		if (billID.value == 'new') {
			saveNewBill = true;
		} else {
			billOk = true;
		}
	} else {
		saveNewBill = true;
	}	

	if (saveNewBill) {
		billOk = validate_address_form('bill');
		if (billOK) {
			//save info
			var e = document.getElementById('bill' + 'AddId');
			e.value = 'new';
	
			e = document.getElementById('bill' + 'AddNAdd');
			e.value = document.getElementById('bill' + 'Add').value;
	
			e = document.getElementById('bill' + 'AddNAdd2');
			e.value = document.getElementById('bill' + 'Add2').value;
			
			e = document.getElementById('bill' + 'AddNCity');
			e.value = document.getElementById('bill' + 'City').value;

			e = document.getElementById('bill' + 'AddNState');
			e.value = document.getElementById('bill' + 'State').value;
			
			e = document.getElementById('bill' + 'AddNZip');
			e.value = document.getElementById('bill' + 'Zip').value;		
		}
	}

	if (shipID.value != '') {
		if (shipID.value == 'new') {
			saveNewShip = true;
		} else {
			shipOk = true;
		}
	} else {
		saveNewShip = true;
	}	

	if (saveNewShip) {
		var shipOk = validate_address_form('ship');
		if (shipOk) {
			//save info
			var e = document.getElementById('ship' + 'AddId');
			e.value = 'new';
	
			e = document.getElementById('ship' + 'AddNAdd');
			e.value = document.getElementById('ship' + 'Add').value;
	
			e = document.getElementById('ship' + 'AddNAdd2');
			e.value = document.getElementById('ship' + 'Add2').value;
			
			e = document.getElementById('ship' + 'AddNCity');
			e.value = document.getElementById('ship' + 'City').value;

			e = document.getElementById('ship' + 'AddNState');
			e.value = document.getElementById('ship' + 'State').value;
			
			e = document.getElementById('ship' + 'AddNZip');
			e.value = document.getElementById('ship' + 'Zip').value;
		}
	}

	

	return billOk && shipOk;
}

function validate_new_address_form(prefix1, prefix2) {
	var formElem = document.getElementById('cart_status_box_form');
	var ans1 = true;
	var ans2 = true;
	var elem = document.getElementById(prefix1 + 'AddressSelect');
	var storeNewBill = false;
	var pre2SameAs = false;

	sameAsElem = document.getElementById(prefix2 + 'SameAs' + prefix1);
	if (typeof(sameAsElem) != 'undefined') {
		if (sameAsElem.checked) {
			pre2SameAs = true;
		}
	}

	if (typeof(elem) == 'undefined') {
		storeNewBill = true;
	} else if (elem.value == 'new') {
		storeNewBill = true;
	} 
	if (storeNewBill) {
		ans1 = validate_address_form(prefix1);
		if (ans1) {
			/*we have a new form and it is correct*/
			e = document.getElementById(prefix1 + 'AddId');
			e.value = 'new';
			
			e = document.getElementById(prefix1 + 'AddNAdd');
			e.value = document.getElementById(prefix1 + 'Add').value;
	
			e = document.getElementById(prefix1 + 'AddNAdd2');
			e.value = document.getElementById(prefix1 + 'Add2').value;
			
			e = document.getElementById(prefix1 + 'AddNCity');
			e.value = document.getElementById(prefix1 + 'City').value;

			e = document.getElementById(prefix1 + 'AddNState');
			e.value = document.getElementById(prefix1 + 'State').value;
			
			e = document.getElementById(prefix1 + 'AddNZip');
			e.value = document.getElementById(prefix1 + 'Zip').value;

			if (pre2SameAs) {
				e = document.getElementById(prefix2 + 'AddId');
				e.value = 'new';
			
				e = document.getElementById(prefix2 + 'AddNAdd');
				e.value = document.getElementById(prefix1 + 'Add').value;
	
				e = document.getElementById(prefix2 + 'AddNAdd2');
				e.value = document.getElementById(prefix1 + 'Add2').value;
			
				e = document.getElementById(prefix2 + 'AddNCity');
				e.value = document.getElementById(prefix1 + 'City').value;

				e = document.getElementById(prefix2 + 'AddNState');
				e.value = document.getElementById(prefix1 + 'State').value;
			
				e = document.getElementById(prefix2 + 'AddNZip');
				e.value = document.getElementById(prefix1 + 'Zip').value;
			}
		
		}
		
	} else {
		e = document.getElementById(prefix1 + 'AddId');
		e.value = elem.value;

		if (pre2SameAs) {
			e = document.getElementById(prefix2 + 'AddId');
			e.value = elem.value;
		}
		
	}
	
	if (!pre2SameAs) {
		elem = document.getElementById(prefix1 + 'AddressSelect');
		var storeNewShip = false;
		if (typeof(elem) == 'undefined') {
			storeNewShip = true;
		} else if (elem.value == 'new') {
			storeNewShip = true;
		}

		if (storeNewShip) {
			ans2 = validate_address_form(prefix2);
			if (ans2) {
				e = document.getElementById(prefix2 + 'AddId');
				e.value = 'new';
			
				e = document.getElementById(prefix2 + 'AddNAdd');
				e.value = document.getElementById(prefix1 + 'Add').value;
	
				e = document.getElementById(prefix2 + 'AddNAdd2');
				e.value = document.getElementById(prefix1 + 'Add2').value;
			
				e = document.getElementById(prefix2 + 'AddNCity');
				e.value = document.getElementById(prefix1 + 'City').value;

				e = document.getElementById(prefix2 + 'AddNState');
				e.value = document.getElementById(prefix1 + 'State').value;
			
				e = document.getElementById(prefix2 + 'AddNZip');
				e.value = document.getElementById(prefix1 + 'Zip').value;
			}
		} else {
			e = document.getElementById(prefix2 + 'AddId');
			e.value = elem.value;
		}
						
	}
	return (ans1 || ans2);
}

function urlencode (str) {
    // http://kevin.vanzonneveld.net
    // +   original by: Philip Peterson
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +      input by: AJ
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: Brett Zamir (http://brett-zamir.me)
    // +   bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +      input by: travc
    // +      input by: Brett Zamir (http://brett-zamir.me)
    // +   bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: Lars Fischer
    // +      input by: Ratheous
    // +      reimplemented by: Brett Zamir (http://brett-zamir.me)
    // %          note 1: This reflects PHP 5.3/6.0+ behavior
    // *     example 1: urlencode('Kevin van Zonneveld!');
    // *     returns 1: 'Kevin+van+Zonneveld%21'
    // *     example 2: urlencode('http://kevin.vanzonneveld.net/');
    // *     returns 2: 'http%3A%2F%2Fkevin.vanzonneveld.net%2F'
    // *     example 3: urlencode('http://www.google.nl/search?q=php.js&ie=utf-8&oe=utf-8&aq=t&rls=com.ubuntu:en-US:unofficial&client=firefox-a');
    // *     returns 3: 'http%3A%2F%2Fwww.google.nl%2Fsearch%3Fq%3Dphp.js%26ie%3Dutf-8%26oe%3Dutf-8%26aq%3Dt%26rls%3Dcom.ubuntu%3Aen-US%3Aunofficial%26client%3Dfirefox-a'
 
    var hexStr = function (dec) {
        return '%' + dec.toString(16).toUpperCase();
    };
 
    var ret = '',
            unreserved = /[\w.-]/; // A-Za-z0-9_.- // Tilde is not here for historical reasons; to preserve it, use rawurlencode instead
    str = (str+'').toString();
 
    for (var i = 0, dl = str.length; i < dl; i++) {
        var ch = str.charAt(i);
        if (unreserved.test(ch)) {
            ret += ch;
        }
        else {
            var code = str.charCodeAt(i);
            // Reserved assumed to be in UTF-8, as in PHP
            if (code === 32) {
                ret += '+'; // %20 in rawurlencode
            }
            else if (code < 128) { // 1 byte
                ret += hexStr(code);
            }
            else if (code >= 128 && code < 2048) { // 2 bytes
                ret += hexStr((code >> 6) | 0xC0);
                ret += hexStr((code & 0x3F) | 0x80);
            }
            else if (code >= 2048 && code < 65536) { // 3 bytes
                ret += hexStr((code >> 12) | 0xE0);
                ret += hexStr(((code >> 6) & 0x3F) | 0x80);
                ret += hexStr((code & 0x3F) | 0x80);
            }
            else if (code >= 65536) { // 4 bytes
                ret += hexStr((code >> 18) | 0xF0);
                ret += hexStr(((code >> 12) & 0x3F) | 0x80);
                ret += hexStr(((code >> 6) & 0x3F) | 0x80);
                ret += hexStr((code & 0x3F) | 0x80);
            }
        }
    }
    return ret;
}

function setup_change_address(prefix) {

	var change = document.getElementById(prefix + 'AddSelectChangeDiv');
	var selDiv = document.getElementById(prefix + 'AddSelectDiv');
	var sel = document.getElementById(prefix + 'AddressSelect');
	change.style.display = 'none';
	selDiv.style.display = 'block';
	sel.style.display = 'block';

}

function update_cart_status_shipping_cost() { 
	var elem = document.getElementById('shipping_choice');
	if (elem.value != '') {
		var ship = document.getElementById('cart_status_box_shipping_cost');
		ship.innerHTML = 'boo yah';
		//remove choose from options
		if (elem.options[0].value == '') {
			elem.remove(0);	
		}
		elem.style.background = 'white';
		document.getElementById('errorShipping').style.display = 'none';
		var cost = document.getElementById('cart_status_box_shipping_cost');
		cost.innerHTML = shipCost[elem.options[elem.selectedIndex].value];

		var prod = document.getElementById('cart_status_box_item_total');
		var p = prod.innerHTML.replace(/,/g,'');
		p = parseFloat(p);
		var tax = document.getElementById('cart_status_box_sales_tax');
		var t = tax.innerHTML.replace(/,/g,'');
		t = parseFloat(t);	
		var c = cost.innerHTML.replace(/,/g,'');
		c = parseFloat(c);
		
		var totElem = document.getElementById('cart_status_box_total_cost');
		var tot = p + t + c;
		
		totElem.innerHTML = tot.toFixed(2);
	} 
}

function update_cart_checkout_box(action, validation, step, useSummary,total,item_total,useSalesTax,sales_tax,useShipping,shipping_cost) {
	var pre = '';
	var elem = document.getElementById('cart_status_box_content');
	elem.innerHTML = '';
	var check = '';
	check = step.toLowerCase();

	if (check == 'login') { return; }
	if (useSummary) {

		pre += '<h4>Order Summary</h4>' + 
			'<b>Product Total: </b>$<span id="cart_status_box_item_total">' + item_total + '</span><br>';
		if (useSalesTax) { 
			pre += '<b>Tax: </b>$<span id="cart_status_box_sales_tax">' + sales_tax + '</span><br>';
		}

		pre += '<b>Shipping: </b>$<span id="cart_status_box_shipping_cost">' + shipping_cost + '</span><br>' + 
			'<div style="border-top:1px solid #000000; margin-top:5px; background:yellow">Total: $<span id="cart_status_box_total_cost">' + total + '</span></div>';		
		
	}

	pre += '<form method="post" id="cart_status_box_form">' + 
		'<input type="hidden" name="action" value="' + action + '">';

	if (step.toLowerCase() == 'collectcontact' || step.toLowerCase() == 'collectcontactbillingpayment') {

		pre += '<input type="hidden" id="sfname" name="sfname">' +
			'<input type="hidden" id="slname" name="slname">' + 
			'<input type="hidden" id="semail" name="semail">' +
			'<input type="hidden" id="semail2" name="semail2">';
	}
	if (step.toLowerCase() == 'collectaddress' || step.toLowerCase() == 'collectcontactbillingpayment') {

		pre +=	'<input type="hidden" name="billAddId" id="billAddId" value="">' +
			'<input type="hidden" name="billAddNAdd" id="billAddNAdd" value="">' +		
			'<input type="hidden" name="billAddNAdd2" id="billAddNAdd2" value="">' +
			'<input type="hidden" name="billAddNCity" id="billAddNCity" value="">' +
			'<input type="hidden" name="billAddNState" id="billAddNState" value="">' +
			'<input type="hidden" name="billAddNZip" id="billAddNZip" value="">' +
			'<input type="hidden" name="shipAddId" id="shipAddId" value="">' +
			'<input type="hidden" name="shipAddNAdd" id="shipAddNAdd" value="">' +
			'<input type="hidden" name="shipAddNAdd2" id="shipAddNAdd2" value="">' +
			'<input type="hidden" name="shipAddNCity" id="shipAddNCity" value="">' +
			'<input type="hidden" name="shipAddNState" id="shipAddNState" value="">' +
			'<input type="hidden" name="shipAddNZip" id="shipAddNZip" value="">' + 	
			'<br>';			

	} 
	if (step.toLowerCase() == 'collectshipmethod') {

		pre += '<input type="hidden" name="shipChoice" id="shipChoice" value="">';
	}
	if (step.toLowerCase() == 'collectpayment'  || step.toLowerCase() == 'collectcontactbillingpayment') {

		pre += '<input type="hidden" name="werNum" id="werNum" value="">' +
			'<input type="hidden" name="werName" id="werName" value="">' + 
			'<input type="hidden" name="werMon" id="werMon" value="">' + 
			'<input type="hidden" name="werYea" id="werYea" value="">' + 
			'<input type="hidden" name="werType" id="werType" value="">';

	}

	var end = '<input type="hidden" name="checkoutSave" value="' + step + '">';
	if (step == 'process') {
		end += '<input type="submit" name="process" value="Confirm Order" onClick="' + validation + '">';
	} else {
		end += '<input type="submit" name="process" value="Next -->" onClick="' + validation + '">';
	}

	elem.innerHTML += pre + end;

}

function update_cart_status_box(action,step,next_step,item_total,useSalesTax, sales_tax, shipping_cost, sub_total, validation, useSummary) {

	var pre = '';
	elem = document.getElementById('cart_status_box_content');
	elem.innerHTML = '';
	if (useSummary) {
		elem.innerHTML = '<h4>Order Summary</h4>' + 
			'Product Total: $<span id="cart_status_box_item_total">' + item_total + '</span><br>';

		if (useSalesTax) { 
			elem.innerHTML += 'Tax: $<span id="cart_status_box_sales_tax">' + sales_tax + '</span><br>';
		}

		pre = 'Shipping: $<span id="cart_status_box_shipping_cost">' + shipping_cost + '</span><br>' + 
				'<div style="border-top:1px solid #000000; margin-top:5px; background:yellow">Total: $<span id="cart_status_box_total_cost">' + sub_total + '</span></div>';
	}	
	pre += '<form method="post" id="cart_status_box_form">' + 
		'<input type="hidden" name="action" value="' + action + '">' + 
		'<input type="hidden" id="addressesToSave" name="addressesToSave" value="0">' + 
		'<input type="hidden" name="subAction" value="completeOrder">'+ 
		'<input type="hidden" name="step" value="' + step + '">' + 
		'<input type="hidden" name="nextStep" value="' + next_step + '">' +  
		'<br>';				

	var mid = '';
	if (step == 'saveaddresses') {
		mid = 	'<input type="hidden" name="billAddId" id="billAddId" value="">' +
				'<input type="hidden" name="billAddNAdd" id="billAddNAdd" value="">' +		
				'<input type="hidden" name="billAddNAdd2" id="billAddNAdd2" value="">' +
				'<input type="hidden" name="billAddNCity" id="billAddNCity" value="">' +
				'<input type="hidden" name="billAddNState" id="billAddNState" value="">' +
				'<input type="hidden" name="billAddNZip" id="billAddNZip" value="">' +
				'<input type="hidden" name="shipAddId" id="shipAddId" value="">' +
				'<input type="hidden" name="shipAddNAdd" id="shipAddNAdd" value="">' +
				'<input type="hidden" name="shipAddNAdd2" id="shipAddNAdd2" value="">' +
				'<input type="hidden" name="shipAddNCity" id="shipAddNCity" value="">' +
				'<input type="hidden" name="shipAddNState" id="shipAddNState" value="">' +
				'<input type="hidden" name="shipAddNZip" id="shipAddNZip" value="">' + 
				'<input type="submit" name="process" value="Next -->" onClick="' + validation + '">';
alert('validation = ' + validation);
	} else if (step == 'savebilling') {
		mid = '<input type="hidden" name="werNum" id="werNum" value="">' +
				'<input type="hidden" name="werName" id="werName" value="">' + 
				'<input type="hidden" name="werMon" id="werMon" value="">' + 
				'<input type="hidden" name="werYea" id="werYea" value="">' + 
				'<input type="hidden" name="werType" id="werType" value="">' + 
				'<input type="hidden" name="shipChoice" id="shipChoice" value="">' + 
				'<input type="submit" name="process" value="Next -->" onClick="' + validation + '">';
		
	} else if (step == 'process') {
		mid = '<input type="submit" name="process" value="Confirm Order" onClick="' + validation + '">';
	}	

	elem.innerHTML += pre + mid;

}

function validate_payment_method() {
	billingError = document.getElementById('errorBilling');
	billingError.style.display = 'none';
	billingError.innerHTML = '';

	elem = document.getElementById('ccName');
	if (trim(elem.value) == '') {
		elem.style.background = 'yellow';
		billingError.innerHTML += 'You must enter the name as it appears on your credit card<br>';
	} else {
		elem.style.background = 'white';
	}

	//check date first
	month = document.getElementById('ccMonth');
	year = document.getElementById('ccYear');
	today = new Date();
	expiry = new Date(year.value, month.value);
	if (today.getTime() > expiry.getTime()) {
		month.style.background = 'yellow';
		year.style.background = 'yellow';
		billingError.innerHTML += 'The Expiration Date you chose is in the past<br>';
		
	} else {
		month.style.background = 'white';
		year.style.background = 'white';
	
		elem = document.getElementById('ccForm');
	
		ans = CheckCardNumber(elem)
		if (ans != '') {
			document.getElementById('ccNumber').style.background = 'yellow';
			billingError.innerHTML += ans;
		} else {
			document.getElementById('ccNumber').style.background = 'white';
			
		}
	}
		

	if (billingError.innerHTML == '') {
		var e = document.getElementById('werNum');
		e.value = document.getElementById('ccNumber').value;
		e = document.getElementById('werName');
		e.value = document.getElementById('ccName').value;
		e = document.getElementById('werMon');
		e.value = document.getElementById('ccMonth').value;
		e = document.getElementById('werYea');
		e.value = document.getElementById('ccYear').value;
		e = document.getElementById('werType');
		e.value = document.getElementById('ccType').value;
		return true;
	} else {
		billingError.style.display = 'block';
		return false;
	}
}


function validate_billing_and_ship_type() {
	//first see if ship type is choosen
	shippingError = document.getElementById('errorShipping');
	shippingError.style.display = 'none';
	shippingError.innerHTML = '';

	elem = document.getElementById('shipping_choice');
	if (elem.value == '') {
		elem.style.background = 'yellow';
		shippingError.innerHTML = 'You must choose a shipping option.';
		shippingError.style.display = 'block';
		return false;
	} else {
		shipChoice = document.getElementById('shipChoice');
		shipChoice.value = elem.value;
		elem.style.background = 'white';
	}

	billingError = document.getElementById('errorBilling');
	billingError.style.display = 'none';
	billingError.innerHTML = '';

	elem = document.getElementById('ccName');
	if (trim(elem.value) == '') {
		elem.style.background = 'yellow';
		billingError.innerHTML += 'You must enter the name as it appears on your credit card<br>';
	} else {
		elem.style.background = 'white';
	}

	//check date first
	month = document.getElementById('ccMonth');
	year = document.getElementById('ccYear');
	today = new Date();
	expiry = new Date(year.value, month.value);
	if (today.getTime() > expiry.getTime()) {
		month.style.background = 'yellow';
		year.style.background = 'yellow';
		billingError.innerHTML += 'The Expiration Date you chose is in the past<br>';
		
	} else {
		month.style.background = 'white';
		year.style.background = 'white';
	
		elem = document.getElementById('ccForm');
	
		ans = CheckCardNumber(elem)
		if (ans != '') {
			document.getElementById('ccNumber').style.background = 'yellow';
			billingError.innerHTML += ans;
		} else {
			document.getElementById('ccNumber').style.background = 'white';
			
		}
	}
		

	if (billingError.innerHTML == '') {
		var e = document.getElementById('werNum');
		e.value = document.getElementById('ccNumber').value;
		e = document.getElementById('werName');
		e.value = document.getElementById('ccName').value;
		e = document.getElementById('werMon');
		e.value = document.getElementById('ccMonth').value;
		e = document.getElementById('werYea');
		e.value = document.getElementById('ccYear').value;
		e = document.getElementById('werType');
		e.value = document.getElementById('ccType').value;
		return true;
	} else {
		billingError.style.display = 'block';
		return false;
	}
	
}



Cards = new makeArray(8);
Cards[0] = new CardType("MasterCard", "51,52,53,54,55", "16");
MasterCard = Cards[0];
Cards[1] = new CardType("VisaCard", "4", "13,16");
VisaCard = Cards[1];
Cards[2] = new CardType("AmExCard", "34,37", "15");
AmExCard = Cards[2];
Cards[3] = new CardType("DinersClubCard", "30,36,38", "14");
DinersClubCard = Cards[3];
Cards[4] = new CardType("DiscoverCard", "6011", "16");
DiscoverCard = Cards[4];
Cards[5] = new CardType("enRouteCard", "2014,2149", "15");
enRouteCard = Cards[5];
Cards[6] = new CardType("JCBCard", "3088,3096,3112,3158,3337,3528", "16");
JCBCard = Cards[6];
LuhnCheckSum = Cards[7] = new CardType();

/*************************************************************************\
CheckCardNumber(form)
function called when users click the "check" button.
\*************************************************************************/
function CheckCardNumber(form) {
	var tmpyear;
	if (form.ccNumber.value.length == 0) {
		
		form.ccNumber.focus();
		return 'You must enter a Credit Card Number<br>';
	}
	if (form.ccYear.value.length == 0) {
		
		form.ccYear.focus();
		return 'The Expiration Date you entered is in the past<br>';
	}
	if (form.ccYear.value > 96)
		tmpyear = "19" + form.ccYear.value;
	else if (form.ccYear.value < 21)
		tmpyear = "20" + form.ccYear.value;
	else {
		return 'The Expiration Date you entered is in the past<br>';
	}
	tmpmonth = form.ccMonth.options[form.ccMonth.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)) {
		return 'The Expiration Date you entered is in the past<br>';
	}
	card = form.ccType.options[form.ccType.selectedIndex].value;
	var retval = eval(card + ".checkCardNumber(\"" + form.ccNumber.value + "\", " + tmpyear + ", " + tmpmonth + ");");
	cardname = "";
	if (retval)
		// comment this out if used on an order form
		return '';
	else {
		// The cardnumber has the valid luhn checksum, but we want to know which
		// cardtype it belongs to.
		for (var n = 0; n < Cards.size; n++) {
			if (Cards[n].checkCardNumber(form.ccNumber.value, tmpyear, tmpmonth)) {
				cardname = Cards[n].getCardType();
				break;
   			}	
		}
		if (cardname.length > 0) {
			return 'The information could not be validated, please check the information and try again';
		} else {
			return 'This information could not be validated, please check the information and try again';
      		}
   	}
}
/*************************************************************************\
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 formatNumber(num)
{    
    var n = num.toString();
    var nums = n.split('.');
    var newNum = "";
    if (nums.length > 1)
    {
        var dec = nums[1].substring(0,2);
        newNum = nums[0] + "." + dec;
    }
    else
    {
    newNum = num;
    }
    return newNum
}


function validate_terms_and_conditions() {
	var error = '';
	var termsDiv = document.getElementById('termsAgreeDiv');
	var terms = document.getElementById('termsAndConditions');

	if (terms.checked) {
		return true;
	} else {
		error = 'You must accept the terms and conditions to complete your order';
		termsDiv.style.background = 'yellow';
		termsDiv.style.color = 'red';
		alert(error);
		return false;
	}
}

function update_sales_tax_options() {

	stFor = document.getElementById('salesTaxFor');

	states = document.getElementById('salesTaxForStates');
	everyone = document.getElementById('salesTaxForEveryone');

	if (stFor.value == '1') { //certain states
		everyone.style.display = 'none';
		states.style.display = 'block';
	} else if (stFor.value == '2') {
		states.style.display = 'none';
		everyone.style.display = 'block';
	}
}

function change_state(id) {
	elemFixed = document.getElementById(id + 'Fixed');
	elemSelect = document.getElementById(id);
	elemChange = document.getElementById(id + 'Change');
	elemFixed.style.display = 'none';
	elemChange.style.display = 'none';
	elemSelect.style.display = 'inline';
}

function add_new_sales_tax() {
	count = document.getElementById('salesTaxNumStates');
	elem = document.getElementById('state' + count.value + 'Div');
	elem.style.display = 'block';
	count.value = parseInt(count.value) + 1;
}

function validate_sik_store_settings() {
	alert('please please please validate me');
	return true;
}

function remove_state_sales_tax(index) { 
	remElem = document.getElementById('removeStateIndexes');
	remElem.value = remElem.value + '@' + index;	

	elem = document.getElementById('state' + index + 'Div');
	elem.style.display = 'none';
}

function switch_user(link) {
	var ans = confirm('If you like to transfer your cart press "ok", or press "cancel" to continue logging out');
	if(ans) {
		window.location = link + '&saveCart=save';
	} else {
		window.location = link;
	}
}

function validate_new_product_form() {
	alert('in validate new product form');

	var errorElem = document.getElementById('errorProd');
	errorElem.style.display = 'none';
	errorElem.innerHTML = '';
	var regex=/^[0-9A-Za-z_-]+$/;
	var nums=/^[0-9 ]+$/;
	

	//check that sku isn't blank and that it only containes numbers, underscores, dashes and letters. Must start with a number or letter
	var sku = document.getElementById('sku');
	if (trim(sku.value) == '') { 
		sku.style.background = 'yellow';
		errorElem.innerHTML += 'You must enter a valid Sku<br>';
	} else if (!regex.test(sku.value)) { 
		sku.style.background = 'yellow';
		errorElem.innerHTML += 'You have entered illegal characters for the sku<br>';
	} else {
		sku.style.background = 'white';
	}
	errorElem.innerHTML += validate_product_form(false);
	
	if (trim(errorElem.innerHTML) != '') {
		errorElem.style.display = 'block';
		return false;
	}
	return true;
}

function validate_product_form(ret) {
	if (ret == '') {
		ret = true;
	}
	var error = '';
	var name = document.getElementById('pName');
	if (trim(name.value) == '') {
		name.style.background = 'yellow';
		error += 'You must enter a name for this product<br>';
	} else {
		name.style.background = 'white';
	}

	var pricePre = document.getElementById('pricePre');
	var pricePost = document.getElementById('pricePost');
	if (trim(pricePre.value) == '') { pricePre.value = '0'; }
	if (trim(pricePost.value) == '') { pricePost.value = '0'; }

	if (trim(pricePre.value) == '0' && trim(pricePost.value) == '0') {
		pricePre.style.background = 'yellow';
		pricePost.style.background = 'yellow';
		error += 'You must enter a price for this product<br>';
	} else if ((!nums.test(pricePre.value) || !nums.test(pricePost.value)) ) {
		pricePre.style.background = 'yellow';
		pricePost.style.background = 'yellow';
		error += 'You must enter a valid price for this product<br>';
	} else {
		pricePre.style.background = 'white';
		pricePost.style.background = 'white';
	}

	if (ret) {
		return error;
	} else {
		var errorElem = document.getElementById('errorProd');
			
		if (trim(error) == '') {
			errorElem.style.display = 'none';
			errorElem.innerHTML = '';	
			return true;
		} else { 
			errorElem.innerHTML = error;
			errorElem.style.display = 'block';
			return false;		
		}
	}
}

function validate_sik_store_product(sku) {

	var form = document.getElementById('form' + sku);
	var index = 0;
	var regex=/^[0-9]+$/;

	for(i = 0; i < form.elements.length; i++) {
		if (form.elements[i].name == 'qty') {
			index = i;
		}
	}

	qtyElem = form.elements[index];

	if (!regex.test(qtyElem.value) || trim(qtyElem.value) == '0' || trim(qtyElem.value) == '') {
		qtyElem.style.background = 'yellow';	
		return false;
	} else {
		return true;
	}
}

function validate_collect_address(useBilling,billingPre,useShipping,shippingPre) {

	var billError = document.getElementById('error' + billingPre);
	var bill = false;
	var ship = true;
	billError.style.display = 'none';
	billError.innerHTML = '';

	//is this a new or existing address?
	var elem = document.getElementById(billingPre + 'AddId');
	var useBillAdd = false;
	var useShipAdd = false;
	var billAddID = '';
	var shipAddID = '';

	if (trim(elem.value) != '') {

		billAddID = trim(elem.value);
		useBillAdd = true;
	} else {

		//check the def add id
		var def = document.getElementById(billingPre + 'defAddID');
		if (def != null) {
			if (trim(def.value) != '') {
				elem.value = trim(def.value);
				billAddID = elem.value;
				useBillAdd = true;
			}	 
		}
	}


			if (useBillAdd) {
		ans = check_set_address(billingPre);
		
	} else {
		ans = check_new_address(billingPre);
	}
	if (ans) {
		billError.innerHTML = ans;
		billError.style.display = 'block';
	} else {
		bill = true;
	} 

	var useCheckbox = false;	
	if (useShipping ) {

		var checkBox = document.getElementById(shippingPre + 'SameAs' + billingPre);
		
		if (checkBox != null) {
			if (checkBox.checked) {
				useCheckbox = true;
			}
		} 
		if (!useCheckbox) {

			ship = false;
		
			var shipError = document.getElementById('error' + shippingPre);

			shipError.style.display = 'none';
			shipError.innerHTML = '';

			//is this a new or existing address?
			var elem = document.getElementById(shippingPre + 'AddId');		

			if (trim(elem.value) != '') {

				shipAddID = trim(elem.value);
				useShipAdd = true;
			} else {
				//check the def add id
				var def = document.getElementById(shippingPre + 'defAddID');
				if (trim(def.value) != '') {
					elem.value = trim(def.value);
					shipAddID = elem.value;
					useShipAdd = true;
				} 
			}

			if (useShipAdd) {

				ans = check_set_address(shippingPre);
			} else {

				ans = check_new_address(shippingPre);
			}
			if (ans) { 
	
				shipError.innerHTML = ans;
				shipError.style.display = 'block';
			} else {
				ship = true;
			}
		}
	}
	

	var ret = bill && ship;

	if (ret) {
		if (useBillAdd) {
			move_set_address_to_form(billingPre,billAddID); 
		} else {
			move_new_address_to_form(billingPre);
		}
		if (useShipping) {
			if (useShipAdd) {
				move_set_address_to_form(shippingPre);
			} else if (useCheckbox) { 
				move_same_as_address_to_form(shippingPre,billingPre);
			} else {
				move_new_address_to_form(shippingPre);
			}
		}
	}

	return ret;
}

function check_set_address(prefix) {
	return '';

}

function check_new_address(prefix) {
	
	var elem = document.getElementById(prefix + 'Add');
	var error = '';
	var regex=/^[0-9]+$/;
	if (trim(elem.value) == '') {
		error = 'You must enter a valid address<br>';
		elem.style.background = 'yellow';
	} else {
		elem.style.background = 'white';
	}
	
	elem = document.getElementById(prefix + 'City');
	if (trim(elem.value) == '') {
		error += 'You must enter a valid city<br>';
		elem.style.background = 'yellow';
	} else {
		elem.style.background = 'white';
	}

	elem = document.getElementById(prefix + 'State');
	if (trim(elem.value) == '') {
		elem.style.background = 'yellow';
		error += 'You must enter a valid state<br>';
	} else {
		elem.style.background = 'white';
	}

	elem = document.getElementById(prefix + 'Zip');
	if (trim(elem.value) == '' || trim(elem.value).length != 5 || !regex.test(trim(elem.value))) {
 		elem.style.background = 'yellow';
		error += 'You must enter a valid zip code';
	} else {
		
		elem.style.background = 'white';
	}

	return error;
	
}

function check_contact_form() {
	var error = '';
	var regex=/^[A-Za-z-\s']+$/;
	var elem = document.getElementById('fname');
	if (trim(elem.value) == '') {
		error = 'You must enter a first name<br>';
		elem.style.background = 'yellow';
	} else if (trim(elem.value).length < 3) {
		error = 'Your first name must be 3 letters or longer<br>';
		elem.style.background = 'yellow';
	} else if (!regex.test(trim(elem.value))) {
		error = 'Your first name contains illegal characters<br>';
		elem.style.background = 'yellow';
	} else {
		elem.style.background = 'white';
	}

	elem = document.getElementById('lname');
	if (trim(elem.value) == '') {
		error += 'You must enter a last name<br>';
		elem.style.background = 'yellow';
	} else if (trim(elem.value).length < 3) {
		error = 'Your last name must be 3 letters or longer<br>';
		elem.style.background = 'yellow';
	} else if (!regex.test(trim(elem.value))) {
		error = 'Your last name contains illegal characters<br>';
		elem.style.background = 'yellow';
	} else {
		elem.style.background = 'white';
	}

	elem = document.getElementById('email');
	var elem2 = document.getElementById('email2'); 
	if (trim(elem.value) == '') {
		error += 'You must enter an email address<br>';
		elem.style.background = 'yellow';
	} else if (!check_email(elem.value)) {
		error += 'Your email address is invalid<br>';
		elem.style.background = 'yellow';
	} else if (trim(elem.value.toLowerCase()) != trim(elem2.value.toLowerCase())) {
		error += 'The emailaddresses you entered do not match';
		elem.style.background = 'yellow';
		elem2.style.background = 'yellow';
	} else {
		elem.style.background = 'white';
		elem2.style.background = 'white';
	}
	
	return error;
}

function check_email(str) {
	var at = "@";
	var dot = ".";
	var lat = str.indexOf(at);
	
	var lstr=str.length;
	var ldot=str.indexOf(dot);
	if (str.indexOf(at)==-1){
	   return false;
	}

	if (str.indexOf(at)==-1 || str.indexOf(at)==0 || str.indexOf(at)==lstr){
	   return false;
	}

	if (str.indexOf(dot)==-1 || str.indexOf(dot)==0 || str.indexOf(dot)==lstr){
	    return false;
	}

	if (str.indexOf(at,(lat+1))!=-1){
	    return false;
	}

		 if (str.substring(lat-1,lat)==dot || str.substring(lat+1,lat+2)==dot){
		    return false;
		 }

		 if (str.indexOf(dot,(lat+2))==-1){
		    return false;
		 }
		
		 if (str.indexOf(" ")!=-1){
		    return false;
		 }

 		 return true;		
				
}

function move_set_address_to_form(prefix) {

	//just move for now
	var addID = document.getElementById(prefix + 'AddId').value;
	

	elem = document.getElementById(prefix + 'AddNAdd');
	elem.value = setAddresses[prefix][addID]['add'];
	elem = document.getElementById(prefix + 'AddNAdd2');
	elem.value = setAddresses[prefix][addID]['add2'];
	elem = document.getElementById(prefix + 'AddNCity');
	elem.value = setAddresses[prefix][addID]['city'];
	elem = document.getElementById(prefix + 'AddNState');
	elem.value = setAddresses[prefix][addID]['state'];
	elem = document.getElementById(prefix + 'AddNZip');
	elem.value = setAddresses[prefix][addID]['zip'];

}

function move_same_as_address_to_form(dest,source) {
	document.getElementById(dest + 'AddId').value = 'new';
	document.getElementById(dest + 'AddNAdd').value = document.getElementById(source + 'AddNAdd').value;
	document.getElementById(dest + 'AddNAdd2').value = document.getElementById(source + 'AddNAdd2').value;
	document.getElementById(dest + 'AddNCity').value = document.getElementById(source + 'AddNCity').value;
	document.getElementById(dest + 'AddNState').value = document.getElementById(source + 'AddNState').value;
	document.getElementById(dest + 'AddNZip').value = document.getElementById(source + 'AddNZip').value;
}

function move_new_address_to_form(prefix) {
	var elem = document.getElementById(prefix + 'AddId');
	elem.value = 'new';

	var from = document.getElementById(prefix + 'Add');
	elem = document.getElementById(prefix + 'AddNAdd');
	elem.value = from.value;

	from = document.getElementById(prefix + 'Add2');
	elem = document.getElementById(prefix + 'AddNAdd2');
	elem.value = from.value;

	from = document.getElementById(prefix + 'City');
	elem = document.getElementById(prefix + 'AddNCity');
	elem.value = from.value;

	from = document.getElementById(prefix + 'State');
	elem = document.getElementById(prefix + 'AddNState');
	elem.value = from.value;

	from = document.getElementById(prefix + 'Zip');
	elem = document.getElementById(prefix + 'AddNZip');
	elem.value = from.value;
	
}

function validate_contact_info_form() {

	var contactError = document.getElementById('errorcontact');
	contactError.style.display = 'none';
	contactError.innerHTML = '';

	ans = check_contact_form();
	if (ans) {
		contactError.innerHTML = ans;
		contactError.style.display = 'block';
		return false;
	} else {
	
		//move to save area
		var elem = document.getElementById('sfname');
		var from = document.getElementById('fname');
		elem.value = from.value;
	
		var elem = document.getElementById('slname');
		var from = document.getElementById('lname');
		elem.value = from.value;		

		var elem = document.getElementById('semail');
		var from = document.getElementById('email');
		elem.value = from.value;		
	
		var elem = document.getElementById('semail2');
		var from = document.getElementById('email2');
		elem.value = from.value;

		return true;
	}
}

function format_credit_card_number(str) {
	elem = document.getElementById(str);
	elem.value = elem.value.replace(/ /g,'');
	elem.value = elem.value.replace(/-/g,'');
	elem.value = trim(elem.value);	
}

function validate_contact_billing_payment() {
	var contact = validate_contact_info_form();

	var billing = validate_collect_address(true,'bill',false,'ship');

	var payment = validate_payment_method();

	return contact && billing && payment;
}

function validate_collect_ship_method() {
	//first see if ship type is choosen
	shippingError = document.getElementById('errorShipping');
	shippingError.style.display = 'none';
	shippingError.innerHTML = '';

	elem = document.getElementById('shipping_choice');
	if (elem.value == '') {
		elem.style.background = 'yellow';
		shippingError.innerHTML = 'You must choose a shipping option.';
		shippingError.style.display = 'block';
		return false;
	} else {
		shipChoice = document.getElementById('shipChoice');
		shipChoice.value = elem.value;
		elem.style.background = 'white';
		return true;
	}
	
}

function update_item_option(index,option,sku,loc) {
	val = document.getElementById('option' + option + index).value;
	window.location= loc + "?action=update&subAction=option&index=" + index + "&option=" + option + "&sku=" + sku + "&val=" + val;

}

function make_option_editable(index,option) {
	elem = document.getElementById('option' + option + index);
	link = document.getElementById('option' + option + index + 'Change');
	link.style.display = 'none';
	elem.disabled = "";
}

function lock_tickets(fld) { 
	for (i = 0; i < fld.length; i++) {
		fld.elements[i].disabled = true;
	}
}

function unlock_tickets(code,fld) {
	code = trim(code);
	code = code.toLowerCase();
	if (code == 'mischief5') { 
		for (i = 0; i < fld.length; i++) {
			fld.elements[i].disabled = false;
		}
	}
}
