// JavaScript Document

//Event.observe(window, 'load', function() {
  //getMiniCartItems();
  $(document).ready(function() {
  if ($('#miniCart')) {
	  $('#miniCart').click(miniCartToggle);
	  $('#scrollingDiv').click(doNothing);
	  $('#checkoutLink').click(doNothing);
	  //Event.observe('miniCart', 'click', miniCartToggle);
	  //Event.observe('scrollingDiv','click',doNothing);
	  //Event.observe('checkoutLink','click',doNothing);
  }
  
  //$('#giftOrder').bind('click', disableToFrom);
  
  //if ($('#expressShopContainer')) {
	//  window.onunload=function(){return true;}
//	$('#expressShopContainer').setOpacity(1);
//	$('#expressShopForm').reset();
  //}
});


function stopRKey(evt) {
  var evt = (evt) ? evt : ((event) ? event : null);
  var node = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null);
  if ((evt.keyCode == 13) && (node.type=="text"))  {return false;}
}

document.onkeypress = stopRKey; 


var doNothing = function(e) {
	if (!e) var e = window.event;
	e.cancelBubble = true;
	if (e.stopPropagation) e.stopPropagation();
}

function miniCartToggle() {
	$('#miniCartItems').slideToggle(function() { 
		if ($('#miniCartItems').css('display') != 'block') {
			$('#plusMinus img').attr('src','/graphics/common/minicartplus.gif');
		} else {
			$('#plusMinus img').attr('src','/graphics/common/minicartminus.gif');
		}
	});
}

var addItemToCart = function(productId, formObj) {
	if ($('#itemQuantity')) {
		var re = /^\d+$/
		if (!$('#itemQuantity').val().match(re) || $('#itemQuantity').val() == 0) { alert('Invalid quantity.'); return false; }	
	}
	
	var ws = new webStore();
	ws.setCallbackHandler(populateMiniCartItems);
	ws.setErrorHandler(myErrorHandler);
	ws.addItemToCart(productId, formObj);
}

var updateQuantity = function(arrayIndex,newQuantity,elem) {
	var re = /^\d+$/
	if (!newQuantity.match(re)) { alert('Invalid quantity.'); $(elem).activate(); return false; }	
	
	var ws = new webStore();
	ws.setCallbackHandler(populateBothCarts);
	ws.setErrorHandler(myErrorHandler);
	ws.updateQuantity(arrayIndex,newQuantity);
}

var removeItemFromCart = function(arrayIndex) {
	if (confirm('Are you sure you want to remove this item entirely from your shopping cart?')) {
		var ws = new webStore();
		ws.setCallbackHandler(populateBothCarts);
		ws.setErrorHandler(myErrorHandler);
		ws.removeItemFromCart(arrayIndex);
	}
}

var getMiniCartItems = function() {
	var ws = new webStore();
	ws.setCallbackHandler(populateMiniCart);
	ws.setErrorHandler(myErrorHandler);
	ws.getMiniCartItems();
}
var populateBothCarts = function(res) {
	if ($('#cartListingContainer')) {
		populateMainCartItems(res.mainCartRes);
	}
	if ($('#scrollingDiv')) {
		populateMiniCartItems(res.miniCartRes);
	}
}
var populateMiniCartItems = function(res) {
	$('#scrollingDiv').html(res);
}
var populateMainCartItems = function(res) {
	$('#cartListingContainer').html(res);	
}
var populateMiniCart = function(res) {
		newElem = Element.insert($('scrollingDiv'),{top:res});
}
var myErrorHandler = function(statusCode, statusMsg)
	{
		alert('Status: ' + statusCode + ', ' + statusMsg);
	}
	
function submitLoginForm() {
	var ws = new webStore();
	ws.setCallbackHandler(processLoginResult);
	ws.setErrorHandler(myErrorHandler);
	ws.processLogin($('#loginForm').formHash());
	return false;
}

function submitShippingForm(goTo) {
	var errorText = '';
	//alert($('#useSavedAddress_false')[0].checked);
	//return false;
	if ($('#useSavedAddress_false')[0]) {
		
		if ($('#useSavedAddress_false')[0].checked) {
			
			if ($('#firstName').val() == '') errorText += 'Please specify your first name.\r\n';
		
			if ($('#lastName').val() == '') errorText += 'Please specify your last name.\r\n';
			if ($('#address1').val() == '') errorText += 'Please specify your address.\r\n';

			if ($('#city').val() == '') errorText += 'Please specify your city.\r\n';
			if ($('#country').val() == 'UNITED STATES') {	
				if ($('#state').val() == '') errorText += 'Please specify your state.\r\n';
				if ($('#zipCode').val() == '') errorText += 'Please specify your zip.\r\n';
			}
			if ($('#country').val() == 'CANADA') {	
				if ($('#state').val() == '') errorText += 'Please specify your province.\r\n';
				if ($('#zipCode').val() == '') errorText += 'Please specify your zip.\r\n';
			}
			if ($('#country').val() == '') errorText += 'Please specify your country.\r\n';
			
		}
	}
	if (errorText != "") {
		alert(errorText);
		return false;
	}
	var ws = new webStore();
	ws.setCallbackHandler(processResultScripts);
	ws.setErrorHandler(myErrorHandler);
	ws.processShippingInfo($('#shippingInfoForm').formHash(),goTo);
	return false;
}

function submitBillingPaymentForm(goTo) {
	
	var errorText = '';

	if ($('#billingAddressChoice_new')) { 
		if ($('#billingAddressChoice_new').attr('checked')) {
			if ($('#firstName').val() == '') errorText += 'Please specify your first name.\r\n';
			if ($('#lastName').val() == '') errorText += 'Please specify your last name.\r\n';
			if ($('#address1').val() == '') errorText += 'Please specify your address.\r\n';
			//if ($F('address2') == '') errorText += 'Please specify your address 2.\r\n';
			if ($('#city').val() == '') errorText += 'Please specify your city.\r\n';
			if ($('#country').val() == 'UNITED STATES') {	
				if ($('#state').val() == '') errorText += 'Please specify your state.\r\n';
				if ($('#zipCode').val() == '') errorText += 'Please specify your zip.\r\n';
			}
			if ($('#country').val() == 'CANADA') {	
				if ($('#state').val() == '') errorText += 'Please specify your province.\r\n';
				if ($('#zipCode').val() == '') errorText += 'Please specify your zip.\r\n';
			}
			if ($('#country').val() == '') errorText += 'Please specify your country.\r\n';
			//if ($F('zipCode') == '') errorText += 'Please specify your zip.\r\n';
		}
	}
	
	if ($('#useSavedCard_false')) { 
		if ($('#useSavedCard_false').attr('checked')) {
			if ($('#creditCardName').val() == '') errorText += 'Please enter the name on your credit card.\r\n';
			if ($('#creditCardType').val() == '') errorText += 'Please specify your credit card type.\r\n';
			if (
				$('#creditCardNumber').val() == ''
				|| 
				!validateCreditCardNumber($('#creditCardNumber').val(),$('#creditCardType').val())
				) {		errorText += 'Please enter a valid credit card number.\r\n'; }
			if ($('#creditCardExpDateMonth').val() == '') errorText += 'Please specify the expiration date month on your credit card.\r\n';
			if ($('#creditCardExpDateYear').val() == '') errorText += 'Please specify the expiration date year on your credit card.\r\n';
			if (!checkCCExpDateNoBlanks()) errorText += 'The expiration date on your credit card has passed. Please check the expiration date and try again or use a different card.\r\n';
			if ($('#creditCardSecurityCode').val() == '') errorText += 'Please enter the security code from your credit card.\r\n';
			
			
			
			else if ( 
					 (($('#creditCardType').val() == 'Visa' || $('#creditCardType').val() == 'Mastercard' || $('#creditCardType').val() == 'Discover') && ($('#creditCardSecurityCode').val().length <= 2 || $('#creditCardSecurityCode').val().length >= 4)) ||
					 (($('#creditCardType').val() == 'American Express') && ($('#creditCardSecurityCode').val().length <= 3 || $('#creditCardSecurityCode').val().length >= 5))
					 ) errorText += 'Please enter a valid security code from your credit card.\r\n';
			
			
			
		} else if ($('#useSavedCard_true').attr('checked')) {
			if ($('#creditCardSecurityCode_saved').val() == '') errorText += 'Please enter the security code from your credit card.\r\n';
			
			else if ( 
					 ((savedType  == 'Visa' || savedType  == 'Mastercard' || savedType  == 'Discover') && ($('#creditCardSecurityCode_saved').val().length <= 2 || $('#creditCardSecurityCode_saved').val().length >= 4)) ||
					 ((savedType  == 'American Express') && ($('#creditCardSecurityCode_saved').val().length <= 3 || $('#creditCardSecurityCode_saved').val().length >= 5))
					 ) errorText += 'Please enter a valid security code from your credit card.\r\n';
			
			
			
			
		}
	}	
	
	if (errorText != '') {
		alert(errorText);
		return false;
	}
	
	var ws = new webStore();
	ws.setCallbackHandler(processResultScripts);
	ws.setErrorHandler(myErrorHandler);
	ws.processBillingPaymentInfo($('#billingPaymentForm').formHash(),goTo);
	return false;
}
function checkCCExpDateNoBlanks() {
	var today = new Date(); // get today's date
    var thisYear = today.getFullYear();
    var thisMonth = 1 + today.getMonth();
	
	var selMonth = $('#creditCardExpDateMonth').val();
	var selYear = $('#creditCardExpDateYear').val();
	
	if (selYear == thisYear) {
		if (selMonth < thisMonth) {
			return false;	
		}
	}
	return true;
}
var processResultScripts = function(res) {
	$(document).append(res);	
}

var processLoginResult = function(res) {
	$('#loginFormDiv').html(res);
}

function continueAsGuest() {
	var ws = new webStore();
	ws.setCallbackHandler(processLoginResult);
	ws.setErrorHandler(myErrorHandler);
	ws.continueAsGuest($('#loginForm').formHash());	
}

function saveMyAccountInfo() {
	showLoader();
	$('#borderedContainer').css({opacity:0.25})
	var ws = new webStore();
	ws.setCallbackHandler(processMyAccountUpdateResult);
	ws.setErrorHandler(myErrorHandler);
	ws.saveMyAccountInfo($('#myAccountForm').formHash());
	return false;
}

var processMyAccountUpdateResult = function(res) {
	$('#borderedContainer').oneTime(1000, function() { hideLoader(); $('#borderedContainer').css({opacity: 1}); });
	
}

var showLoader = function() {
	//var addToTop = document.viewport.getScrollOffsets().top;
	
	//$('#ajaxLoader').setStyle({ top: (addToTop+50) + 'px'});
	$('#ajaxLoader').fadeIn();	
}

var showProcessor = function() {
	//var addToTop = document.viewport.getScrollOffsets().top;
	
	//$('#processor').setStyle({ top: (addToTop+50) + 'px'});
	$('#processor').fadeIn();	
}

var hideProcessor = function() {
	$('#processor').fadeOut();		
}

var hideLoader = function() {
	$('#ajaxLoader').fadeOut();	
}

function swapSpans(elem1, elem2) {
	$('#' + elem1).toggle();
	$('#' + elem2).toggle();
}


var setShippingOptionsU = function(zipcode, state, country, address1, address2, city) {
	
	
	
	if ($('#useSavedAddress_false')) {
		if ($('#useSavedAddress_false').attr('checked')) {	
			setShippingOptions(zipcode, state, country, address1, address2, city);
		}
	}
}
var getZipCode = function(zipCodeField,cityField,stateField) {
	var ws = new webStore();
	ws.setCallbackHandler(processZipCodeResult);
	ws.setErrorHandler(myErrorHandler);
	ws.getCityAndStateFromZipcode($('#' + zipCodeField).val(),cityField,stateField);
}
var checkZip = function(elem) {
	if (elem.value.length < 5) {
		$('#state').val('');
		$('#city').val('');
	} else if (elem.value.length == 5) {
		$('#state').attr('disabled',true);
		$('#city').attr('disabled',true);
		$('#ajaxLoader1').show();
		getZipCode('zipCode','city','state');
	} else {
		return false;	
	}
}

var checkZipU = function(elem) {
	if (elem.value.length < 5) {
		$('#state').val('');
		$('#city').val('');
	} else if (elem.value.length == 5) {
		$('#state').attr('disabled',true);
		$('#city').attr('disabled',true);
		$('#ajaxLoader1').show();
		getZipCodeU('zipCode','city','state');
	} else {
		return false;	
	}
}
var processZipCodeResult = function(res) {
		var cityField = res.CITYFIELD;
		var stateField = res.STATEFIELD;
		$('#' + stateField).attr('disabled',false);
		$('#' + cityField).attr('disabled',false);
		$('#' + cityField).val(res.CITY);
		$('#' + stateField).val(res.STATE);
		$('#ajaxLoader1').hide();
		if ($('#shippingMethod')) setShippingOptions($('#zipCode').val(),$('#state').val(),$('#country').val());
}
var getZipCodeU = function(zipCodeField,cityField,stateField) {
	var ws = new webStore();
	ws.setCallbackHandler(processZipCodeResultU);
	ws.setErrorHandler(myErrorHandler);
	ws.getCityAndStateFromZipcode($('#' + zipCodeField).val(),cityField,stateField);
}
var processZipCodeResultU = function(res) {
		var cityField = res.CITYFIELD;
		var stateField = res.STATEFIELD;
		$('#' + stateField).attr('disabled',false);
		$('#' + cityField).attr('disabled',false);
		$('#' + cityField).val(res.CITY);
		$('#' + stateField).val(res.STATE);
		$('#ajaxLoader1').hide();
		if ($('#shippingMethod')) setShippingOptionsU($('#zipCode').val(),$('#state').val(),$('#country').val());
}

var setCCOptions = function() {
	if (!$('#useSavedCard_false').attr('checked') && $('#useSavedCard_false').length > 0) {
		$('#creditCardName').attr('disabled',true);
		$('#creditCardType').attr('disabled',true);
		$('#creditCardNumber').attr('disabled',true);
		$('#creditCardExpDateMonth').attr('disabled',true);
		$('#creditCardExpDateYear').attr('disabled',true);
		$('#creditCardSecurityCode').attr('disabled',true);
		$('#saveCCInfoToAccount').attr('disabled',true);
		$('#creditCardSecurityCode_saved').attr('disabled',false);
	} else {
		$('#creditCardName').attr('disabled',false);
		$('#creditCardType').attr('disabled',false);
		$('#creditCardNumber').attr('disabled',false);
		$('#creditCardExpDateMonth').attr('disabled',false);
		$('#creditCardExpDateYear').attr('disabled',false);	
		$('#creditCardSecurityCode').attr('disabled',false);	
		$('#saveCCInfoToAccount').attr('disabled',false);
		$('#creditCardSecurityCode_saved').attr('disabled',true);
	}
}

var setBillingOptions = function() {
	if (!$('#billingAddressChoice_saved').attr('checked')) {
		$('#saveNewAddressToAccount_shipping').attr('disabled',true);	
	} else {
		$('#saveNewAddressToAccount_shipping').attr('disabled',false);	
	}
	if ($('#billingAddressChoice_shipping').attr('checked') || $('#billingAddressChoice_saved').attr('checked')) {
			$('#firstName').attr('disabled',true);
			$('#lastName').attr('disabled',true);
			$('#company').attr('disabled',true);
			$('#address1').attr('disabled',true);
			$('#address2').attr('disabled',true);
			$('#zipCode').attr('disabled',true);
			$('#city').attr('disabled',true);
			$('#state').attr('disabled',true);
			$('#country').attr('disabled',true);
			$('#saveNewAddressToAccount_different').attr('disabled',true);
	} else {
			$('#firstName').attr('disabled',false);
			$('#lastName').attr('disabled',false);
			$('#company').attr('disabled',false);
			$('#address1').attr('disabled',false);
			$('#address2').attr('disabled',false);
			$('#zipCode').attr('disabled',false);
			$('#city').attr('disabled',false);
			$('#state').attr('disabled',false);
			$('#country').attr('disabled',false);
			$('#saveNewAddressToAccount_different').attr('disabled',false);
	}
}

var setShippingOptions = function(zipcode, state, country, address1, address2, city) {
	if ($('#useSavedAddress_true').attr('checked')) {
			$('#firstName').attr('disabled',true);
			$('#lastName').attr('disabled',true);
			$('#company').attr('disabled',true);
			$('#commercialLocation').attr('disabled',true);
			$('#address1').attr('disabled',true);
			$('#address2').attr('disabled',true);
			$('#zipCode').attr('disabled',true);
			$('#city').attr('disabled',true);
			$('#state').attr('disabled',true);
			$('#country').attr('disabled',true);
			$('#saveNewAddressToAccount').attr('disabled',true);
	} else {
			$('#firstName').attr('disabled',false);
			$('#lastName').attr('disabled',false);
			$('#company').attr('disabled',false);
			$('#commercialLocation').attr('disabled',false);
			$('#address1').attr('disabled',false);
			$('#address2').attr('disabled',false);
			$('#zipCode').attr('disabled',false);
			$('#city').attr('disabled',false);
			$('#state').attr('disabled',false);
			$('#country').attr('disabled',false);
			$('#saveNewAddressToAccount').attr('disabled',false);
	}
	
	var ws = new webStore();
	ws.setCallbackHandler(processShippingOptions);
	ws.setErrorHandler(myErrorHandler);
	ws.getShippingOptions(zipcode, state, country, address1, address2, city);
}

var processShippingOptions = function(res) {
	var i = 0;
	$('#shippingMethod').html('');
		//$('#shippingMethod').options.length = 0;
	
	optionHTML = "";
	$.each(res, function(i, item) {
		optionHTML += "<option value='" + item.OPTIONVALUE + "'";
		
		if (selectedShippingMethod) {
			var thisVal = item.OPTIONDISPLAY;
			var valArray = item.OPTIONVALUE.toString().split('/');
			if (valArray.length > 1) { thisVal = valArray[2] } else { thisVal = item.OPTIONDISPLAY.toString().split(" - ")[0]; };
			if (thisVal == selectedShippingMethod) optionHTML += " SELECTED"
		}
		optionHTML += ">" + item.OPTIONDISPLAY + "</option>";
	});
	$('#shippingMethod').html(optionHTML);
}
clickedConfirm = false;
var confirmOrder = function(goTo) {
	showProcessor();
	/*$('checkOutBoxContainer').setOpacity(0.25);*/
	$('#checkOutBoxContainer').css("opacity", "0.25");
	if (!clickedConfirm) {
		clickedConfirm = true;
		var ws = new webStore();
		ws.setCallbackHandler(processOrderConfirmation);
		ws.setErrorHandler(myErrorHandler);
		ws.confirmOrder(goTo);
	}
}

var processOrderConfirmation = function(res) {
	$('#checkOutBoxContainer').css("opacity", "1.0");
	/*$('checkOutBoxContainer').setOpacity(1);*/
	hideProcessor();
	processResultScripts(res);
	clickedConfirm = false;
}

var toggleOrderHistoryDetail = function(elem,elem2) {
	$('#' + elem).slideToggle(function() {
		if($('#' + elem2).html() == 'View Order Details') {
			$('#' + elem2).html('Close Order Details');
		} else {
			$('#' + elem2).html('View Order Details');
		}
	 });
}


var processCouponCode = function() {
	showLoader();
	var ws = new webStore();
	ws.setCallbackHandler(processCouponCodeResult);
	ws.setErrorHandler(myErrorHandler);
	ws.processCouponCode($('#couponCodeForm').formHash());
}

var processCouponCodeResult = function(res) {
	$().oneTime(1000, function() { hideLoader(); });
	populateBothCarts(res);
	$('#couponCode').val('');
	alert(res.message);
}

var submitExpressShop = function() {
	$('#expressShopContainer').setOpacity(0.25);
	showLoader();
	var ws = new webStore();
	ws.setCallbackHandler(processExpressShopResult);
	ws.setErrorHandler(myErrorHandler);
	ws.processExpressShop($('#expressShopForm').formHash());
	return false;
}

var processExpressShopResult = function(res) {
	hideLoader.delay(1);
	processResultScripts.delay(2,res);
	$('expressShopContainer').setOpacity(1);
}

var passwordsMustMatch = function (formObj,InputObj,InputObjVal) {
	if (formObj.password.value != '') {
		return (formObj.password.value == formObj.confirmPassword.value);
	} else {
		return true;
	}
}

var emailsMustMatch = function (formObj,InputObj,InputObjVal) {
	if (formObj.email.value != '') {
		return (formObj.email.value == formObj.confirmEmail.value);
	} else {
		return false;
	}
}
var addOldOrderContents = function(orderId) {
	showLoader();
	var ws = new webStore();
	ws.setCallbackHandler(processAddOldOrderContents);
	ws.setErrorHandler(myErrorHandler);
	ws.addOldOrderContents(orderId);
}

var processAddOldOrderContents = function(res) {
	$().oneTime(1000, function() { hideLoader(); });
	processResultScripts(res);
}

var checkShippingState = function (formObj,InputObj,InputObjVal) {
	if (formObj.shippingCountry.value == 'UNITED STATES' || formObj.shippingCountry.value == 'CANADA') {
		if (InputObjVal == '') {
			return false;
		} else { 
			return true;
		}
	} else { return true; }
}
var checkBillingState = function (formObj,InputObj,InputObjVal) {
	if (formObj.billingCountry.value == 'UNITED STATES' || formObj.billingCountry.value == 'CANADA') {
		if (InputObjVal == '') {
			return false;
		} else { 
			return true;
		}
	} else { return true; }
}

var checkStateG = function (formObj,InputObj,InputObjVal) {
	if (formObj.country.value == 'UNITED STATES' || formObj.country.value == 'CANADA') {
		if (InputObjVal == '') {
			return false;
		} else { 
			return true;
		}
	} else { return true; }
}

var checkZipCodeG = function (formObj,InputObj,InputObjVal) {
	re = /^\d{5}-\d{4}|\d{5}|[A-Z]\d[A-Z] \d[A-Z]\d$/;
	if (formObj.country.value == 'UNITED STATES' || formObj.country.value == 'CANADA') {
		if (!InputObjVal.match(re)) {
			return false;
		} else { 
			return true;
		}
	} else { return true; }
}

var checkShippingZip = function (formObj,InputObj,InputObjVal) {
	re = /^\d{5}-\d{4}|\d{5}|[A-Z]\d[A-Z] \d[A-Z]\d$/;
	if (formObj.shippingCountry.value == 'UNITED STATES' || formObj.shippingCountry.value == 'CANADA') {
		if (!InputObjVal.match(re)) {
			return false;
		} else { 
			return true;
		}
	} else { return true; }
}
var checkBillingZip = function (formObj,InputObj,InputObjVal) {
	re = /^\d{5}-\d{4}|\d{5}|[A-Z]\d[A-Z] \d[A-Z]\d$/;
	/^\d{5}$|^\d{5}-\d{4}$/
	if (formObj.billingCountry.value == 'UNITED STATES' || formObj.billingCountry.value == 'CANADA') {
		if (!InputObjVal.match(re)) {
			return false;
		} else { 
			return true;
		}
	} else { return true; }
}

	function checkCCFields(form, ctrl, value) {
		if (form.creditCardName.value.length == 0 && form.creditCardNumber.value.length == 0 && form.creditCardExpDateMonth.value.length == 0 && form.creditCardExpDateYear.value.length == 0) {
			return true;
		}
			else if (form.creditCardName.value.length == 0 || form.creditCardNumber.value.length == 0 || form.creditCardExpDateMonth.value.length == 0 || form.creditCardExpDateYear.value.length == 0)
		{ return false; }
		else if (form.creditCardName.value.length > 0 || form.creditCardNumber.value.length > 0 || form.creditCardExpDateMonth.value.length > 0 || form.creditCardExpDateYear.value.length > 0) { return true; }
	}
	
	
	function Left(str, n)
{
   if (n <= 0)
         return "";
   else if (n > String(str).length)
         return str;
   else
         return String(str).substring(0,n);
}

function validateCreditCardNumber(form, ctrl, value) {
	ccn = $('#creditCardNumber').val();
	cct = $('#creditCardType').val();
	return checkCreditCard(ccn,cct);
}

function myAccountCheckCCNo(form, ctrl, value) {
	ccn = $('#creditCardNumber').val();
	cct = $('#creditCardType').val();
	
	if (ccn == origNo || ccn == '') {
		return true;
	}	else {
		return checkCreditCard(ccn,cct);	
	}
}

// credit card number validation issues...


function checkCCExpDate(form, ctrl, value) {
	var today = new Date(); // get today's date
    var thisYear = today.getFullYear();
    var thisMonth = 1 + today.getMonth();
	
	var selMonth = $('#creditCardExpDateMonth').val();
	var selYear = $('#creditCardExpDateYear').val();
	
	if (selMonth != '' && selYear != '') {
		if (selYear == thisYear) {
			if (selMonth < thisMonth) {
				return false;	
			}
		}
	}
	return true;
}

var ccErrorNo = 0;
var ccErrors = new Array ()

ccErrors [0] = "Unknown card type";
ccErrors [1] = "No card number provided";
ccErrors [2] = "Credit card number is in invalid format";
ccErrors [3] = "Credit card number is invalid";
ccErrors [4] = "Credit card number has an inappropriate number of digits";

function checkCreditCard (cardnumber, cardname) {
  // Array to hold the permitted card characteristics
  var cards = new Array();

  // Define the cards we support. You may add addtional card types.
  
  //  Name:      As in the selection box of the form - must be same as user's
  //  Length:    List of possible valid lengths of the card number for the card
  //  prefixes:  List of possible prefixes for the card
  //  checkdigit Boolean to say whether there is a check digit
  
  cards [0] = {name: "Visa", 
               length: "13,16", 
               prefixes: "4",
               checkdigit: true};
  cards [1] = {name: "MasterCard", 
               length: "16", 
               prefixes: "51,52,53,54,55",
               checkdigit: true};
  cards [2] = {name: "DinersClub", 
               length: "14,16", 
               prefixes: "300,301,302,303,304,305,36,38,55",
               checkdigit: true};
  cards [3] = {name: "CarteBlanche", 
               length: "14", 
               prefixes: "300,301,302,303,304,305,36,38",
               checkdigit: true};
  cards [4] = {name: "American Express", 
               length: "15", 
               prefixes: "34,37",
               checkdigit: true};
  cards [5] = {name: "Discover", 
               length: "16", 
               prefixes: "6011,650",
               checkdigit: true};
  cards [6] = {name: "JCB", 
               length: "15,16", 
               prefixes: "3,1800,2131",
               checkdigit: true};
  cards [7] = {name: "enRoute", 
               length: "15", 
               prefixes: "2014,2149",
               checkdigit: true};
  cards [8] = {name: "Solo", 
               length: "16,18,19", 
               prefixes: "6334, 6767",
               checkdigit: true};
  cards [9] = {name: "Switch", 
               length: "16,18,19", 
               prefixes: "4903,4905,4911,4936,564182,633110,6333,6759",
               checkdigit: true};
  cards [10] = {name: "Maestro", 
               length: "16,18", 
               prefixes: "5020,6",
               checkdigit: true};
  cards [11] = {name: "VisaElectron", 
               length: "16", 
               prefixes: "417500,4917,4913",
               checkdigit: true};
               
  // Establish card type
  var cardType = -1;
  for (var i=0; i<cards.length; i++) {

    // See if it is this card (ignoring the case of the string)
    if (cardname.toLowerCase () == cards[i].name.toLowerCase()) {
      cardType = i;
      break;
    }
  }
  
  // If card type not found, report an error
  if (cardType == -1) {
     ccErrorNo = 0;
     return false; 
  }
   
  // Ensure that the user has provided a credit card number
  if (cardnumber.length == 0)  {
     ccErrorNo = 1;
     return false; 
  }
    
  // Now remove any spaces from the credit card number
  cardnumber = cardnumber.replace (/\s/g, "");
  
  // Check that the number is numeric
  var cardNo = cardnumber
  var cardexp = /^[0-9]{13,19}$/;
  if (!cardexp.exec(cardNo))  {
     ccErrorNo = 2;
     return false; 
  }
       
  // Now check the modulus 10 check digit - if required
  if (cards[cardType].checkdigit) {
    var checksum = 0;                                  // running checksum total
    var mychar = "";                                   // next char to process
    var j = 1;                                         // takes value of 1 or 2
  
    // Process each digit one by one starting at the right
    var calc;
    for (i = cardNo.length - 1; i >= 0; i--) {
    
      // Extract the next digit and multiply by 1 or 2 on alternative digits.
      calc = Number(cardNo.charAt(i)) * j;
    
      // If the result is in two digits add 1 to the checksum total
      if (calc > 9) {
        checksum = checksum + 1;
        calc = calc - 10;
      }
    
      // Add the units element to the checksum total
      checksum = checksum + calc;
    
      // Switch the value of j
      if (j ==1) {j = 2} else {j = 1};
    } 
  
    // All done - if checksum is divisible by 10, it is a valid modulus 10.
    // If not, report an error.
    if (checksum % 10 != 0)  {
     ccErrorNo = 3;
     return false; 
    }
  }  

  // The following are the card-specific checks we undertake.
  var LengthValid = false;
  var PrefixValid = false; 
  var undefined; 

  // We use these for holding the valid lengths and prefixes of a card type
  var prefix = new Array ();
  var lengths = new Array ();
    
  // Load an array with the valid prefixes for this card
  prefix = cards[cardType].prefixes.split(",");
      
  // Now see if any of them match what we have in the card number
  for (i=0; i<prefix.length; i++) {
    var exp = new RegExp ("^" + prefix[i]);
    if (exp.test (cardNo)) PrefixValid = true;
  }
      
  // If it isn't a valid prefix there's no point at looking at the length
  if (!PrefixValid) {
     ccErrorNo = 3;
     return false; 
  }
    
  // See if the length is valid for this card
  lengths = cards[cardType].length.split(",");
  for (j=0; j<lengths.length; j++) {
    if (cardNo.length == lengths[j]) LengthValid = true;
  }
  
  // See if all is OK by seeing if the length was valid. We only check the 
  // length if all else was hunky dory.
  if (!LengthValid) {
     ccErrorNo = 4;
     return false; 
  };   
  
  // The credit card is in the required format.
  return true;
}



function updateStringLength(e){
	var	str = $(e.currentTarget).val();
	if(300 - str.length >= 0){
		$('#charCount').html(300-str.length);
		if(300 - str.length == 0 || 300 - str.length < 0){
			$('#charCount').html('0');
			$(e.currentTarget).val(str.substr(0, 299));
		}
	}
}

function disableToFrom(e){
	if($('#giftOrder').is(':checked')){
		$('#giftTo').removeAttr('disabled');
		$('#giftFrom').removeAttr('disabled');
		$('#giftMessage').removeAttr('disabled');
	}
	else{
		$('#giftTo').attr('disabled', 'disabled');
		$('#giftTo').val('');
		$('#giftFrom').attr('disabled', 'disabled');
		$('#giftFrom').val('');
		$('#giftMessage').attr('disabled', 'disabled');	
		$('#giftMessage').val('');
	}
}

