<!--
// shopcart.js
// Copyright (c) 1997 - 2004 WebGenie Software Pty Ltd.
// http://www.webgenie.com

function PasswordForgottenSubmit1(form)
{
	form.password_forgotten.value="1";
	form.submit();	
}

function DeleteThisItem(form,item)
{
	item.value=0;
	Update(form);
}

function PopUpWindow (url)
{
   Nw1 = window.open(url,'POPUP','width=500,height=500,toolbar=no,location=no,scrollbars=yes,resizable');
   Nw1.focus ();
}
function PopUpWindowFullScreen (url)
{
   Nw2 = window.open(url,'FULLSCREEN','toolbar=no,location=no,scrollbars=yes,resizable');
   Nw2.focus ();
}

function ContinueShopping (form)
{
   document.location = "$referer\n\n";
}

function Checkout (form)
{
   form.submit ();
}
function Empty (form)
{
   form.sc_action.value="reset_sc";
   form.submit ();
}
function Update (form)
{
   form.sc_action.value="update_sc";
   form.submit ();
}
function FillTheShippingAddress(form,n)
{
	if (n == 1) // Same as Billing
	{
		form.ShippingAddressLine1.value = form.BillingAddressLine1.value;
		form.ShippingAddressLine2.value = form.BillingAddressLine2.value;
		form.ShippingCity.value = form.BillingCity.value;
		form.ShippingState.value = form.BillingState.value;
		form.ShippingPostCode.value = form.BillingPostCode.value;
	}
	if (n == 2) // Different from Billing
	{
//		form.ShippingAddressLine1.value = "";
//		form.ShippingAddressLine2.value = "";
//		form.ShippingCity.value = "";
//		form.ShippingState.value = "";
//		form.ShippingPostCode.value = "";
	}
}
function GetSaveProfileEmail (form)
{
	if (form.Save_Profile.checked)
	{
		form.Save_Profile_Email.value = form.Customer_Email.value;
	}
	else
	{
		form.Save_Profile_Email.value = "";
		form.Save_Profile_Password.value = "";
	}
}

function SetCardFields(form,action)
{
	if (action == 0)
	{
		form.Card_N1.disabled = "disabled";
		form.Card_N2.disabled = "disabled";
		form.Card_N3.disabled = "disabled";
		form.Card_N4.disabled = "disabled";
		form.Card_N1.value = "";
		form.Card_N2.value = "";
		form.Card_N3.value = "";
		form.Card_N4.value = "";
		form.ExpMonth.disabled = "disabled";
		form.ExpYear.disabled = "disabled";
		form.CID_no.disabled = "disabled";
		form.CardsAccepted[0].disabled = "disabled";
		form.CardsAccepted[1].disabled = "disabled";
		form.CardsAccepted[2].disabled = "disabled";
		form.CardsAccepted[3].disabled = "disabled";
		form.Card_Holder.disabled = "disabled";
		form.CH_Address.disabled = "disabled";
		form.CHA_Line2.disabled = "disabled";
		form.CH_City.disabled = "disabled";
		form.CH_State.disabled = "disabled";
		form.CH_PostCode.disabled = "disabled";
	}
	if (action == 1)
	{
		form.Card_N1.disabled = "";
//		form.Card_N2.disabled = "";
//		form.Card_N3.disabled = "";
//		form.Card_N4.disabled = "";
		form.ExpMonth.disabled = "";
		form.ExpYear.disabled = "";
		form.CID_no.disabled = "";
		form.CardsAccepted[0].disabled = "";
		form.CardsAccepted[1].disabled = "";
		form.CardsAccepted[2].disabled = "";
		form.CardsAccepted[3].disabled = "";
		form.Card_Holder.disabled = "";
		form.CH_Address.disabled = "";
		form.CHA_Line2.disabled = "";
		form.CH_City.disabled = "";
		form.CH_State.disabled = "";
		form.CH_PostCode.disabled = "";
	}
}

function CheckIfDigits(string)
{
	var digits = new Array ('0','1','2','3','4','5','6','7','8','9');
	var j;
	var k;
	var kk;
	var ok1 = 0;
	var ok2 = 0;
	var ok3 = 0;
	var ok4 = 0;
	var allOk = 0;
	var thischar;
	k = string.length;
	for (kk = 0; kk < k; kk++)
	{
		thischar = string.substring(kk,kk+1);
    	allOk  = 0;
    	for (j=0; j < 10; j++)
	   {
	    	if (thischar == digits[j]) allOk = 1;
	   }
	   if (allOk  == 0) return allOk;
	}
	return allOk;
}
function Check1(form,item1,item2,maxlen)
{
	var string = item1.value;
//alert (string);
	if (string.length == maxlen)
	{
		var result = CheckIfDigits(string);
		if (result == 1)
		{
//			item2.disabled="";
//			form.Payment_Method[0].checked = true;  // Check the "Credit Card"
			if (item2 == 4) { CheckCardEntry(form,form.ExpMonth);}
			if (item2 != 0 && item2 != 4) item2.focus();
		}	
		else
		{
			alert ("Entered number has at least one non-digit character");
//			item2.disabled="disabled";
			item1.focus();
		}
	}
}
function CheckCardEntry (form,item2)
{
//alert (item2);
	if (form.Card_N1.value && form.Card_N2.value && form.Card_N3.value && form.Card_N4.value && form.ExpMonth.selectedIndex > 0 && form.ExpYear.selectedIndex > 0)
	{
		CheckCardNumber(form);
	}
	item2.focus();
}
function Check2(item1,item2,maxlen)
{
	var string = item1.value;
	if (string.length > maxlen)
	{
		alert ("Sorry! Only a maximum of " + maxlen + " digits are allowed");
		item1.value ="";
		return;
	}
	if (string.length == maxlen)
	{
		var result = CheckIfDigits(string);
		if (result == 1)
		{
			item2.disabled="";
			if (item2 != 0) item2.focus();
		}	
		else
		{
			alert ("Entered number has at least one non-digit character");
//			item2.disabled="disabled";
			item1.focus();
		}
	}
}

function Check3(item1,maxlen)
{
	var string = item1.value;
	if (string.length < maxlen)
	{
		alert ("Sorry! Require " + maxlen + " digits");
		item1.value ="";
		return;
	}
}

function CheckCardType(form)
{
	var firstblock = form.Card_N1.value;
	if (firstblock.length == 0) return;
	var firstdigit = Math.abs(firstblock.substring(0,1));
//	if (firstdigit == 3) { CardTypeName = 'AmExCard'; form.CardsAccepted[0].checked = true; SetThisCardType(form,'AmExCard'); return;}
//	if (firstdigit == 4) { CardTypeName = 'VisaCard';  form.CardsAccepted[1].checked = true; SetThisCardType(form,'VisaCard'); return;}
//	if (firstdigit == 5) { CardTypeName = 'MasterCard';  form.CardsAccepted[2].checked = true; SetThisCardType(form,'MasterCard');  return;}
//	if (firstdigit == 6) { CardTypeName = 'Discover';  form.CardsAccepted[3].checked = true; SetThisCardType(form,'Discover'); return;}
	if (firstdigit != 3 && firstdigit != 4 && firstdigit != 5 && firstdigit != 6) {  alert ("This is an invalid card type"); }
	return;
}

function CheckPhoneAndFax(form) 
{
	if (form.PH_AC.value.length != 3) 
	{
		alert ("Error: Phone country code is wrong");
		form.PH_AC.disabled = "";
		form.PH_AC.focus();
		form.doNotSubmit.value=1;
		return;
	}
	if (form.PH_N1.value.length != 3) 
	{
		alert ("Error: Phone number is wrong");
		form.PH_N1.disabled = "";
		form.PH_N1.focus();
		form.doNotSubmit.value=1;
		return;
	}
	if (form.PH_N2.value.length != 4) 
	{
		alert ("Error: Phone number is wrong");
		form.PH_N2.disabled = "";
		form.PH_N2.focus();
		form.doNotSubmit.value=1;
		return;
	}
	if (form.FX_AC.value.length != 3) 
	{
		alert ("Error: Fax country code is wrong");
		form.FX_AC.disabled = "";
		form.FX_AC.focus();
		form.doNotSubmit.value=1;
		return;
	}
	if (form.FX_N1.value.length != 3) 
	{
		alert ("Error: Fax number is wrong");
		form.FX_N1.disabled = "";
		form.FX_N1.focus();
		form.doNotSubmit.value=1;
		return;
	}
	if (form.FX_N2.value.length != 4) 
	{
		alert ("Error: Fax number is wrong");
		form.FX_N2.disabled = "";
		form.FX_N2.focus();
		form.doNotSubmit.value=1;
		return;
	}
}

function SubmitThisForm(form) 
{
	var CardTypeName = "VisaCard";
	var cardCheck;
	var firstblock = form.Card_N1.value;
	var firstdigit = Math.abs(firstblock.substring(0,1));
	form.doNotSubmit.value=0;  // By default start as submit
	CheckPhoneAndFax(form);
//	if (firstdigit == 3) { CardTypeName = 'AmExCard'; form.CardsAccepted[0].checked = true; }
//	if (firstdigit == 4) { CardTypeName = 'VisaCard';  form.CardsAccepted[1].checked = true; }
//	if (firstdigit == 5) { CardTypeName = 'MasterCard';  form.CardsAccepted[2].checked = true; }
//	if (firstdigit == 6) { CardTypeName = 'Discover';  form.CardsAccepted[3].checked = true; }
	SetThisCardType(form,CardTypeName);
//	if (form.Payment_Method[0].checked) 
//	{
//		cardCheck = CheckCardNumber(form);
//	}
//	else cardCheck = 1;
	if (cardCheck != 1) { form.doNotSubmit.value=1; }
	if (cardCheck == 1) { form.submit(); }
}

// ----------JavaScript To check Card Number  - /Include/validate_cards.js
var Cards = new makeArray(8);
Cards[0] = new CardType("MasterCard", "51,52,53,54,55", "16");
var MasterCard = Cards[0];
Cards[1] = new CardType("VisaCard", "4", "13,16");
var VisaCard = Cards[1];
Cards[2] = new CardType("AmExCard", "34,37", "15");
var AmExCard = Cards[2];
Cards[3] = new CardType("DinersClubCard", "30,36,38", "14");
var DinersClubCard = Cards[3];
Cards[4] = new CardType("Bankcard", "5", "16");
var Bankcard = Cards[4];
Cards[5] = new CardType("enRouteCard", "2014,2149", "15");
var enRouteCard = Cards[5];
Cards[6] = new CardType("JCBCard", "3088,3096,3112,3158,3337,3528", "16");
var JCBCard = Cards[6];
Cards[7] = new CardType("Discover", "6", "16");
var Discover = Cards[7];
var LuhnCheckSum = Cards[8] = new CardType();

var CardTypeName;

function SetThisCardType (form,string)
{
	CardTypeName = string;
//alert(CardTypeName);
	if (CardTypeName == "AmExCard")
	{
		form.CID_no_lgt.value = 4;
	}
	else
	{
		form.CID_no_lgt.value = 3;
	}
}


function CheckCardNumber(form)
{
	if  (!CardTypeName) 
	{ 
		CardTypeName = 'VisaCard'; 
	}

	CardNumber = form.Card_N1.value + form.Card_N2.value + form.Card_N3.value + form.Card_N4.value;
	ExpMon = form.ExpMonth[form.ExpMonth.selectedIndex].value;
	ExpYear = form.ExpYear[form.ExpYear.selectedIndex].value;
	now = new Date();
	thismonth = now.getMonth();
	thismonth++;
	thisyear = now.getYear();
	if (thisyear < 2000) thisyear += 1900;


	var tmpyear;
	if (!CardNumber)
	{
      alert("Please enter a Card Number.");
      return;
	}

	if (!ExpMon)
	{
      alert("Please enter the Expiration Month.");
      return;
	}
	tmpmonth = ExpMon;
	expMon = ExpMon;

	if (!ExpYear)
	{
      return;
	}

	if (ExpYear < 100) { ExpYear = Math.abs(ExpYear) + 2000; }
	tmpyear = ExpYear;
	expYear = ExpYear;
	if (expYear < 2002 || expYear > 2050)
	{
		alert("The Expiration Year (" + expYear + ")is not valid. ");
		return;
	}
	if (expYear == thisyear && expMon < thismonth)
	{
		alert("The card has expired.");
		return;
	}

	card = CardTypeName;
	var retval = eval(card + ".checkCardNumber(\"" + CardNumber +
	"\", " + tmpyear + ", " + tmpmonth + ");");
	cardname = "";
	if (retval)
	{
	return 1;
	}
	else
	{
      // Has valid luhn checksum, but which card type?
      for (var n = 0; n < Cards.size; n++)
      {
         if (Cards[n].checkCardNumber(CardNumber, tmpyear, tmpmonth))
         {
            cardname = Cards[n].getCardType();
            break;
         }
		}
      if (cardname.length > 0)
      {
      	alert("This looks like a " + cardname + " number, not a " + card + " number.");
      }
      else
      {
      	alert("This card number is not valid.");
      }
	}
}

function CardType()
{
   var n;
   var argv = CardType.arguments;
   var argc = CardType.arguments.length;

   this.objname = "object CardType";

   var tmpcardtype = (argc > 0) ? argv[0] : "CardObject";
   var tmprules = (argc > 1) ? argv[1] : "0,1,2,3,4,5,6,7,8,9";
   var tmplen = (argc > 2) ? argv[2] : "13,14,15,16,19";

   this.setCardNumber = setCardNumber;
   this.setCardType = setCardType;
   this.setLen = setLen;
   this.setRules = setRules;
//   this.setExpiryDate = setExpiryDate;

   this.setCardType(tmpcardtype);
   this.setLen(tmplen);
   this.setRules(tmprules);

//   if (argc > 4)  this.setExpiryDate(argv[3], argv[4]);

   this.checkCardNumber = checkCardNumber;
   this.getExpiryDate = getExpiryDate;
   this.getCardType = getCardType;
   this.isCardNumber = isCardNumber;
//   this.isExpiryDate = isExpiryDate;
   this.luhnCheck = luhnCheck;
   return this;
}

function checkCardNumber()
{
   var argv = checkCardNumber.arguments;
   var argc = checkCardNumber.arguments.length;
   var cardnumber = (argc > 0) ? argv[0] : this.cardnumber;
   var year = (argc > 1) ? argv[1] : this.year;
   var month = (argc > 2) ? argv[2] : this.month;

   this.setCardNumber(cardnumber);

//   this.setExpiryDate(year, month);

   if (!this.isCardNumber())   return false;
//   if (!this.isExpiryDate()) return false;

   return true;
}

function getCardType()
{
	return this.cardtype;
}

function getExpiryDate()
{
	return this.month + "/" + this.year;
}

function isCardNumber()
{
   var argv = isCardNumber.arguments;
   var argc = isCardNumber.arguments.length;
   var cardnumber = (argc > 0) ? argv[0] : this.cardnumber;

   if (!this.luhnCheck()) return false;

   for (var n = 0; n < this.len.size; n++)

   if (cardnumber.toString().length == this.len[n])
   {
      for (var m = 0; m < this.rules.size; m++)
      {
         var headdigit = cardnumber.substring(0, this.rules[m].toString().length);
         if (headdigit == this.rules[m])
         return true;
		}
		return false;
	}
	return false;
}

function 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;
	else return true;
}

function luhnCheck() 
{
	var argv = luhnCheck.arguments;
	var argc = luhnCheck.arguments.length;
	
	var CardNumber = argc > 0 ? argv[0] : this.cardnumber;
	
	if (! isNum(CardNumber)) 
	{
		return false;
	}
	
	var no_digit = CardNumber.length;
	var oddoeven = no_digit & 1;
	var sum = 0;
	
	for (var count = 0; count < no_digit; count++) 
	{
		var digit = parseInt(CardNumber.charAt(count));
		if (!((count & 1) ^ oddoeven)) 
		{
			digit *= 2;
			if (digit > 9)
			digit -= 9;
		}
		sum += digit;
	}
	if (sum % 10 == 0)
	return true;
	else
	return false;
}

function makeArray(size) 
{
	this.size = size;
	return this;
}

function setCardNumber(cardnumber) 
{
	this.cardnumber = cardnumber;
	return this;
}

function setCardType(cardtype) 
{
	this.cardtype = cardtype;
	return this;
}

function 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;
}
//  End of ----------JavaScript To check Card Number

//-->


