var force_updating_shipping_cost = 1;
var curr_shipping_options = 0;
var cur_zipcode = 0;

function load_shipping_methods(OptionsVal, OptionsText)
{
	var Sel = document.getElementById('shipping_option');
	if(Sel != null)
	{
		if(Sel.length) for( i = Sel.length - 1; i >= 0; i--) Sel.remove(i);
		for(var i in OptionsVal)
		{
			value = OptionsVal[i];
			text = OptionsText[i];
			Sel[i] = new Option('',value, false, false);
			Sel[i].innerHTML = text;
		}
	}
}

function update_shipping_cost()
{
	var zipcode = $('#shipping_zipcode').val();
	if(typeof(zipcode) == 'undefined') return;
	if((zipcode.length == 5) && isZipValid(zipcode))
	{
		var warning = $('#shopping_cart_warning');
		if(warning) warning.html('');
		/* calculate tax rate, zipcode numerical listing from http://www.mongabay.com/igapo/zip_codes_California.htm */
		var shipping_options = $('#shipping_option').val();
		simpleCart.taxRateApplied = ((zipcode >= 90001) && (zipcode <= 96162)) ? 1 : 0;
		simpleCart.shippingFlatRate = 0;
		simpleCart.update();
		switch(shipping_options)
		{
			case '99':	// 'Free Shipping'
				break;
			case '98':	// '$1 Shipping'
    			simpleCart.shippingFlatRate = Number(1);
				simpleCart.update();
				break;
			default:
				if(((force_updating_shipping_cost == 1) || (zipcode != cur_zipcode) || (shipping_options != curr_shipping_options)) && (shipping_options != '?'))
				{
					$('#hour_glass').attr('src', "/images/whitespin.gif");
					$('#order_submit').css('visibility', 'hidden');
					/* calculate total weight and volume of all the items in the shipping cart */
					/* send shipping cost estimate request */
					$.get(
					    '/process/calcrate.php',
						{
							Service: 	 shipping_options,
							FromZipCode: ShipperZipCode,
							ToZipCode:	 zipcode,
							ozWeight: 	 simpleCart.weightOzTotal,
							inLength: 	 simpleCart.lengthPackage,
							inWidth:  	 simpleCart.widthPackage,
							inHeight: 	 simpleCart.heightPackage
						},
		    			function(data)
						{
    					   	simpleCart.shippingFlatRate = data;
							$('#hour_glass').attr('src', "/images/spacer.gif");
							simpleCart.update();
							$('#order_submit').css('visibility', 'visible');
		    			}
					);
				}
				break;
		}
		force_updating_shipping_cost = 0;
		curr_shipping_options = shipping_options;
		cur_zipcode = zipcode;
	} else
	{
		var warning = $('#shopping_cart_warning');
		if(warning) warning.html((zipcode.length) ? 'Invalid Zip Code.' : '');

		simpleCart.taxRateApplied = 0;
		simpleCart.shippingFlatRate = 0;
		simpleCart.update();
	}
	save_shipping_rate_info();
	if(typeof($('#card_cvv2').val()) != 'undefined') return;
	$('#BuyNowPane0').css('background-image', (simpleCart.quantity < 1) ? 'url(/images/layout_padding_t3.jpg)' : 'url(/images/order_action_button0.jpg)');
	$('#BuyNowPane').css('background-image', (simpleCart.quantity < 1) ? 'url(/images//layout_header_r2.jpg)' : 'url(/images/order_action_button.jpg)');
}

function save_shipping_rate_info()
{
	var dataString = "";
	dataString = dataString + "++" + "shipping_zipcode=" + $('#shipping_zipcode').val();
	dataString = dataString + "++" + "shipping_option=" + $('#shipping_option').attr("selectedIndex");
	createCookie('shipping_rate_info', dataString.substring(2), 0);
}

function restore_shipping_rate_info()
{
	if(readCookie('shipping_rate_info'))
	{
		var data = unescape(readCookie('shipping_rate_info')).split('++');
		for(var x in data)
		{
			var value = data[x].split('=');
			if((value.length > 1) && (value[1] != 'undefined'))
			{
				switch(value[0])
				{
					case 'shipping_option':
						$('#shipping_option').attr("selectedIndex", value[1]);
						curr_shipping_options = $('#shipping_option').val();
						break;
					case 'shipping_zipcode':
						$('#shipping_zipcode').val(value[1]);
						cur_zipcode = zipcode = $('#shipping_zipcode').val();
						break;
					default:
						 if($('#' + value[0]) != 'undefine') $('#' + value[0]).val(value[1]);
						break;
				}
			}
		}
	}
}

function save_order_info()
{
	var dataString = "";
	dataString = dataString + "++" + "shipping_name=" + $('#shipping_name').val();
	dataString = dataString + "++" + "billing_name=" + $('#billing_name').val();
	dataString = dataString + "++" + "shipping_company=" + $('#shipping_company').val();
	dataString = dataString + "++" + "billing_company=" + $('#billing_company').val();
	dataString = dataString + "++" + "shipping_address=" + $('#shipping_address').val();
	dataString = dataString + "++" + "billing_address=" + $('#billing_address').val();
	dataString = dataString + "++" + "shipping_address2=" + $('#shipping_address2').val();
	dataString = dataString + "++" + "billing_address2=" + $('#billing_address2').val();
	dataString = dataString + "++" + "shipping_city=" + $('#shipping_city').val();
	dataString = dataString + "++" + "billing_city=" + $('#billing_city').val();
	dataString = dataString + "++" + "shipping_state=" + $('#shipping_state').attr("selectedIndex");
	dataString = dataString + "++" + "billing_state=" + $('#billing_state').attr("selectedIndex");
//	dataString = dataString + "++" + "shipping_zipcode=" + $('#shipping_zipcode').val();
	dataString = dataString + "++" + "billing_zipcode=" + $('#billing_zipcode').val();
	dataString = dataString + "++" + "shipping_country=" + $('#shipping_country').val();
	dataString = dataString + "++" + "billing_country=" + $('#billing_country').val();
	dataString = dataString + "++" + "email_address=" + $('#email_address').val();
	dataString = dataString + "++" + "email_address2=" + $('#email_address2').val();
	dataString = dataString + "++" + "phone_number=" + $('#phone_number').val();
//	dataString = dataString + "++" + "shipping_option=" + $('#shipping_option').attr("selectedIndex");
	dataString = dataString + "++" + "comment=" + $('#comment').val();
	createCookie('order_info', dataString.substring(2), 0);
	save_shipping_rate_info();
}

function restore_order_info()
{
	if(readCookie('order_info'))
	{
		var data = unescape(readCookie('order_info')).split('++');
		for(var x in data)
		{
			var value = data[x].split('=');
			if((value.length > 1) && (value[1] != 'undefined'))
			{
				switch(value[0])
				{
					case 'shipping_state':
					case 'billing_state':
						$('#' + value[0]).attr("selectedIndex", value[1]);
						break;
					default:
						 if($('#' + value[0]) != 'undefine') $('#' + value[0]).val(value[1]);
						break;
				}
			}
		}
	}
	restore_shipping_rate_info();
}

function add_to_cart_alert()
{
	alert( $('select.item_quantity').val() + " item(s) will be added to your shopping cart.\n\nTo check out, click the \'Check Out\' button.");
	document.location.href = 'http://' + document.domain;
}

function calc_discount(qunatity, pid)
{
	if(pid > 0)
	{
		if(Number(qunatity) >= Number(discount[pid - 1][6])) return Number(qunatity) * Number(discount[pid - 1][7]);
		if(Number(qunatity) >= Number(discount[pid - 1][4])) return Number(qunatity) * Number(discount[pid - 1][5]);
		if(Number(qunatity) >= Number(discount[pid - 1][2])) return Number(qunatity) * Number(discount[pid - 1][3]);
		if(Number(qunatity) >= Number(discount[pid - 1][0])) return Number(qunatity) * Number(discount[pid - 1][1]);
	}
	return 0;
}

function check_order_form()
{
	/* check shopping cart */
	if(simpleCart.quantity == 0)
	{
    	alert("Your shopping cart is empty. Please select a product.");
		return false;      
	}
	/* check name */
	var shipping_name = $("#shipping_name").val().split(' ');
	if (shipping_name.length < 2)
	{
		$("#shipping_name").focus();
    	alert("Please enter both first and last names for shipping.");
		return false;      
	}
	var billing_name = $("#billing_name").val().split(' ');
	if (billing_name.length < 2)
	{
		$("#billing_name").focus();
    	alert("Please enter both first and last names for billing.");
		return false;      
	}
	/* check address */
	if ($("#shipping_address").val() == "")
	{
		$("#shipping_address").focus();
		alert("Please enter your address for shipping.");
		return false;
	}
	if ($("#billing_address").val() == "")
	{
		$("#billing_address").focus();
		alert("Please enter your address for billing.");
		return false;
	}
	/* check city */
	if ($("#shipping_city").val() == "")
	{
		$("#shipping_city").focus();
		alert("Please enter your city for shipping.");
		return false;
	}
	if ($("#billing_city").val() == "")
	{
		$("#billing_city").focus();
		alert("Please enter your city for billing.");
		return false;
	}
	/* check state */
	if ($("select#shipping_state").attr("selectedIndex") == 0)
	{
		$("select#shipping_state").focus();
		alert("Please select your state for shipping.");
		return false;
	}
	if ($("select#billing_state").attr("selectedIndex") == 0)
	{
		$("select#billing_state").focus();
		alert("Please select your state for billing.");
		return false;
	}
	/* check zip code */
	if ($("#shipping_zipcode").val().length != 5)
	{
		$("#shipping_zipcode").focus();
		alert("Please select your zip code for shipping.");
		return false;
	}
	if ($("#billing_zipcode").val().length != 5)
	{
		$("#billing_zipcode").focus();
		alert("Please select your zip code for billing.");
		return false;
	}
	/* check country */
	if ($("select#shipping_country").val() != "United States")
	{
		$("select#shipping_country").focus();
		alert("Please select your country for shipping.");
		return false;
	}
	if ($("select#billing_country").val() != "United States")
	{
		$("select#billing_country").focus();
		alert("Please select your country for billing.");
		return false;
	}
	/* check email */
	if($("#email_address").val() == '')
	{
		$("#email_address").focus();
		alert("Please enter your email address.");
		return false;
	}
	if($("#email_address2").val() == '')
	{
		$("#email_address2").focus();
		alert("Please re-enter your email address.");
		return false;
	}
	if($("#email_address").val() != $("#email_address2").val())
	{
		$("#email_address").focus();
		alert("Email addresses don't matach, please enter your email address.");
		return false;
	}
	if(!echeck($("#email_address").val()))
	{
		$("#email_address").focus();
		alert("your email address doesn't seem correct. Please verify that it is correct.");
		return false;
	}
	/* check phone number */
	if($("#phone_number").val().length < 7)
	{
		$("#phone_number").focus();
		alert("Please enter your phone number.");
		return false;
	}
	/* check shipping option */
	if($("select#shipping_option").attr("selectedIndex") == 0)
	{
		$("select#shipping_option").focus();
		alert("Please select shipping method.");
		return false;
	}
	/* check card number */
	if($("#card_number").val().length < 13)
	{
		$("#card_number").focus();
		alert("Please enter and verify your credit card number.");
		return false;
	}
	/* check card security code */
	if($("#card_cvv2").val().length < 3)
	{
		$("#card_cvv2").focus();
		alert("Please enter and verify your credit card's security code. The security code (also called CVV2 code) is a three or four-digit security code that is printed on the back of credit cards in the signature panel (or on the front for American Express cards).");
		return false;
	}
	/* check card expiration */
	if($("#card_exp_month").attr("selectedIndex") == 0)
	{
		$("#card_exp_month").focus();
		alert("Please select the month of your credit card's expiration date.");
		return false;
	}
	if($("#card_exp_year").attr("selectedIndex") == 0)
	{
		$("#card_exp_year").focus();
		alert("Please select the year of your credit card's expiration date.");
		return false;
	}
	var ccExpYear = $("#card_exp_year").val();
    var ccExpMonth = $("#card_exp_month").val();
    var expDate = new Date();
    expDate.setFullYear(ccExpYear, ccExpMonth, 1);
    var today = new Date();
    if(expDate < today)
    {
		alert("Your credit card appears to have been expired.");
		$("#card_exp_month").focus();
        return false;
	}

	/* post dat to server */
	$.ajax({
		type:		'post',
		url:		'https://' + document.domain + '/process/order.php',
		dataType:	'text',
		data:		$("#submit_form").serialize() + '&' + simpleCart.customCheckout(),
		beforeSend: function()
		{
			$('#PageTitle').html("Submitting your order, please wait  ...");
			$('#order_processing_status').html('<img src="/images/whitespin.gif" /><br /><div class="order_sbumit_prompt_msg">Please wait, your order is being submitted for processing.<br /><br /><em><small>(do not hit the browser\'s \'Back\' button while waiting to avoid duplicating order.)</small></em></div>');
		},
		timeout:	300000,	// 5 minutes.
		error: function(request, error)
		{
			$('#PageTitle').html("Order Submission Status");
			$('#shipping_option_list').html('ship via ' + $('#shipping_option option:selected').text());
			var err_msg = '<big>The order processing server is currently ';
			err_msg += (error = "timeout") ? 'busy' : 'unavailable';
			err_msg += '. Please try re-submitting your order at a later time.<br /><br />We apologize for the inconvenience.</big><br /><br />';
			err_msg += '<a href="order.html" target="_self">Return to Order Page</a>';
			$('#SidePane').css('background-color', '#181818');
			$('#SidePane').html('');
			$('#ContentPane').css('background-color', '#003456');
			$('#ContentPane').html('<div class="order_confirmation">' + err_msg + '</div>');
  		},
		success: function(response)
		{
			var result = gup('result', '/?' + response);
			switch(result)
			{
				case 'successful':
					/* empty shopping cart */
					eraseCookie('shipping_rate_info');
					eraseCookie('order_info');
					eraseCookie('simpleCart');
					$('#simpleCart_quantity').html(0);
					/* display confirmaton message */
					var cfmmsg = gup('cfmmsg', '/?' + response);
					var xtrmsg = gup('xtrmsg', '/?' + response);
					var thxads = gup('thxads', '/?' + response);
					var trackcode  = gup('trackcode', '/?' + response);
					sales_receipt = gup('sales_receipt', '/?' + response);
					$('#PageTitle').html("Order Confirmation");
					$('#shipping_option_list').html('ship via ' + $('#shipping_option option:selected').text());
					$('#SidePane').html(xtrmsg);
					$('.support_links').css('visibility', 'visible');
					$('#ContentPane').css('height', '400px');
					$('#ContentPane').css('background-color', '#003456');
					$('#ContentPane').html('<div class="order_confirmation">' + cfmmsg + '</div><div id="order_thxads">' + thxads + '</div>');
					if(trackcode != '')
					{
						try {
							var pageTracker = _gat._getTracker(trackcode);
							pageTracker._trackPageview();
						} catch(err) {}
					}
					break;

				case 'failed':
					var errmsg = '<div class="order_sbumit_prompt_msg">Please correct the following:';
						errmsg += '<p>' + gup('errmsg', '/?' + response) + '</p>';
						errmsg += '<a href="order.html" target="_self">return</a></div>';
					$('#PageTitle').html("Oops, error(s) detected in your submission.");
					$('#order_processing_status').html(errmsg);
					break;
			}
  		}
	});

	/* always return false to avoid page reload */
	return false;
}

var sales_receipt = 'sales receipt';
function print_invoice()
{
	var printWin = window.open('#', 'sales_receipt', 'location=0,toolbar=0,status=0,menubar=0,scrollbars=1,width=800,height=600');
	printWin.document.open();
	decoded_sales_receipt = decodeURIComponent(sales_receipt.replace(/\+/g, '%20'));
	printWin.document.write(decoded_sales_receipt.replace('ody style=', 'ody onLoad="window.print()" style='));
	printWin.document.close();
}

function billing_as_shipping()
{
	if($('#billing_checkbox').attr('checked'))
	{
		$("#billing_name").val($("#shipping_name").val());
		$("#billing_company").val($("#shipping_company").val());
		$("#billing_address").val($("#shipping_address").val());
		$("#billing_address2").val($("#shipping_address2").val());
		$("#billing_city").val($("#shipping_city").val());
		$('#billing_state').attr("selectedIndex" , $("select#shipping_state").attr("selectedIndex"));
		$("#billing_zipcode").val($("#shipping_zipcode").val());
		$('#billing_country').attr("selectedIndex" , $("select#shipping_country").attr("selectedIndex"));
	}
}
