
function submitCCN() {
	var formName = getForm("CreditCardNumberForm");
	var type = "AmEx";
	if (formName.orderNo.value == null || formName.orderNo.value == '') {
		alert("Please enter your order number.");
	}
	
	var ccnum = formName.creditCardNumber.value;
 	var returnValue = false;
   if (type == "Visa") {
      // Visa: length 16, prefix 4, dashes optional.
      var re = /^4\d{3}-?\d{4}-?\d{4}-?\d{4}$/;
   } else if (type == "MC") {
      // Mastercard: length 16, prefix 51-55, dashes optional.
      var re = /^5[1-5]\d{2}-?\d{4}-?\d{4}-?\d{4}$/;
   } else if (type == "Disc") {
      // Discover: length 16, prefix 6011, dashes optional.
      var re = /^6011-?\d{4}-?\d{4}-?\d{4}$/;
   } else if (type == "AmEx") {
      // American Express: length 15, prefix 34 or 37.
      var re = /^3[4,7]\d{13}$/;
   } else if (type == "Diners") {
      // Diners: length 14, prefix 30, 36, or 38.
      var re = /^3[0,6,8]\d{12}$/;
   }
 
   if (!re.test(ccnum)) {
    returnValue = false;
   } else {
    // Remove all dashes for the checksum checks to eliminate negative numbers
     ccnum = ccnum.split("-").join("");
    // Checksum ("Mod 10")
   // Add even digits in even length strings or odd digits in odd length strings.
    var checksum = 0;
    for (var i=(2-(ccnum.length % 2)); i<=ccnum.length; i+=2) {
       checksum += parseInt(ccnum.charAt(i-1));
    }
    // Analyze odd digits in even length strings or even digits in odd length strings.
    for (var i=(ccnum.length % 2) + 1; i<ccnum.length; i+=2) {
       var digit = parseInt(ccnum.charAt(i-1)) * 2;
       if (digit < 10) { checksum += digit; } else { checksum += (digit-9); }
    }
    if ((checksum % 10) == 0) {returnValue = true;} else {returnValue = false;}
   }
   if (returnValue)
		formName.submit();
   else
	    alert("Invalid Credit Card Number");
}

function ShowHideDeliveryInfo()
{
	var formName = getForm("DeliveryInfoForm");
	if (formName.sameAddress.checked == true) {
		$("div.labelAddressLine1").slideUp(200);
	} else {
		$("div.labelAddressLine1").slideDown(200);	
	}
}

function setDeliveryInfo()
{
	var formName = getForm("CustomerInfoForm");
	if (formName.sameAddress.checked == true) {
		document.getElementById('deliveryAddressDetails').style.display = 'none';
		clearDeliveryInfo();
	} else {
		document.getElementById('deliveryAddressDetails').style.display = 'inline';
		clearDeliveryInfo();
	}
}

function clearDeliveryInfo() {
	var formName = getForm("CustomerInfoForm");
	formName.deliveryAddressLine1.value = '';
	formName.deliveryAddressLine2.value = '';
	formName.deliveryCity.value = '';
	formName.deliveryCountryCode.value = '';
	formName.deliveryPostalCode.value = '';
	formName.deliveryProvinceCode.value = '';
	
}

function bookmarksite(title,url){
	if (window.sidebar) {// firefox
		window.sidebar.addPanel(title, url, "");
	} else if(window.opera && window.print){ // opera
		var elem = document.createElement('a');
		elem.setAttribute('href',url);
		elem.setAttribute('title',title);
		elem.setAttribute('rel','sidebar');
		elem.click();
	}
	else if(document.all)// ie
		window.external.AddFavorite(url, title);
}

function zoomIn() {
	var formName = getForm("OrderForm");
	document.getElementById('productPicture').style.display = 'none';
	document.getElementById('zoomInProductPicture').style.display = 'inline';
}

function zoomOut() {
	var formName = getForm("OrderForm");
	document.getElementById('productPicture').style.display = 'inline';
	document.getElementById('zoomInProductPicture').style.display = 'none';
}


function showLoginInfo() {
	var formName = getForm("CustomerInfoForm");
	if (formName.saveInfo.checked == false)  {
		document.getElementById('logininfo1').style.display = 'none';
		document.getElementById('logininfo2').style.display = 'none';
		document.getElementById('logininfo3').style.display = 'none';
		document.getElementById('logininfo4').style.display = 'none';
		document.getElementById('logininfo5').style.display = 'none';
		document.getElementById('logininfo6').style.display = 'none';
	} else {
		document.getElementById('logininfo1').style.display = 'inline';
		document.getElementById('logininfo2').style.display = 'inline';
		document.getElementById('logininfo3').style.display = 'inline';
		document.getElementById('logininfo4').style.display = 'inline';
		document.getElementById('logininfo5').style.display = 'inline';
		document.getElementById('logininfo6').style.display = 'inline';
	
	}
}

function getForm(theFormName) {
	var formName;
	for (var i=0; i < document.forms.length; i++) {
		if (document.forms[i].id == theFormName) {
			formName = document.forms[i];
			break;
		}
	}
	return formName;
}

function trackOrder() {
	var formName = getForm("SearchOrderForm");
	var str=formName.emailAddress.value;
	var filter=/^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i
	if (filter.test(str))
		formName.isValidEmailAddress.value = true;
	else
		formName.isValidEmailAddress.value = false;
	formName.submit();
}

function promotionInquiry() {
	var formName = getForm("PromotionInquiryForm");
	formName.submit();
}

function enterNow() {
	var str=document.GiveawaySignUpForm.emailAddress.value;
	var filter=/^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i
	if (filter.test(str))
		document.GiveawaySignUpForm.isValidEmailAddress.value = true;
	else
		document.GiveawaySignUpForm.isValidEmailAddress.value = false;
	//document.EmailSignUpForm.emailAddress.value = document.SignUpForm.signUpEmail.value;
	document.GiveawaySignUpForm.submit();
}

function giftGuideSubmit() {
	var formName = getForm("GiftGuideCriteriaForm");
	formName.submit();
}

function newWindow(pTargetPage, height, width) {

// Set height and width
var NewWinHeight=height;
var NewWinWidth=width;

// Place the window
var NewWinPutX=10;
var NewWinPutY=10;

//Get what is below onto one line
TheNewWin =window.open(pTargetPage,'TheNewpop', 'fullscreen=no,toolbar=no,location=no,directories=no, status=no,menubar=no,scrollbars=yes,resizable=yes'); 

//Get what is above onto one line

TheNewWin.resizeTo(NewWinHeight,NewWinWidth);
TheNewWin.moveTo(NewWinPutX,NewWinPutY);
}

function priceWatch(productCode) {
	var target = "/goToPriceWatch.do?productCode=" + productCode;
	newWindow(target, '420', '280');
}

function notifyMe(context, productCode, mainCategory) {
	var target = context + "/goToNotifyMe.do?productCode=" + productCode + '&mainCategory=' + mainCategory;
	newWindow(target, '500', '380');
}

function tellFriends(context, productCode, mainCategory) {
	var target = context + "/goToTellFriends.do?productCode=" + productCode + '&mainCategory=' + mainCategory;
	newWindow(target, '540', '540');
}

function emailFriends() {
	var formName = getForm("EmailFriendsForm");
	var filter=/^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i
   	var separator = ",";
   	var emailAddresses = formName.toEmail.value;
   	var tokenizer = new StringTokenizer(emailAddresses, separator);
   	while (tokenizer.hasMoreTokens())
   	{
   		var email = tokenizer.nextToken();
		if (filter.test(email)) {
			formName.isValidToEmailAddress.value = true;
		} else {
			formName.isValidToEmailAddress.value = false;
			break;
		}
   	}  // end while

	var str=formName.fromEmail.value;
	var filter=/^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i
	if (filter.test(str))
		formName.isValidFromEmailAddress.value = true;
	else
		formNamem.isValidFromEmailAddress.value = false;
		
	document.body.style.cursor = 'wait';
	formName.submit();
}

function previewCard(){
	var str=document.DeliveryInfoForm.email.value;
	var filter=/^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i
	if (filter.test(str))
		document.DeliveryInfoForm.isValidEmailAddress.value = true;
	else
		document.DeliveryInfoForm.isValidEmailAddress.value = false;
	document.DeliveryInfoForm.actionPerform.value = "viewcard";
	document.DeliveryInfoForm.submit();
}


function emailSignUp() {
	var formName = getForm("EmailSignUpForm");
	var str=formName.emailAddress.value;
	var filter=/^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i
	if (filter.test(str))
		formName.isValidEmailAddress.value = true;
	else
		formName.isValidEmailAddress.value = false;
	formName.submit();
}

function simpleSearch() {
	var formName = getForm("SimpleSearchForm");
	formName.submit();
}

function closePopUp() {
	self.close();
	return false;
}

function updateParent(selectedValue, from) {
	var formName = getForm("DeliveryInfoForm");
	if (from == 'mini')
		opener.document.DeliveryInfoForm.giftTagStyle1.value = selectedValue;
	else if (from == 'normal')
		opener.document.DeliveryInfoForm.giftTagStyle2.value = selectedValue;
	else
		opener.document.DeliveryInfoForm.giftTagStyle3.value = selectedValue;
	self.close();
	return false;
}
                
function handleEnter (field, event) {
	var keyCode = event.keyCode ? event.keyCode : event.which ? event.which : event.charCode;
	if (keyCode == 13) {
		var i;
		for (i = 0; i < field.form.elements.length; i++)
			if (field == field.form.elements[i])
				break;
		i = (i + 1) % field.form.elements.length;
		field.form.elements[i].focus();
		return false;
	} 
	else
	return true;
}      


function openNewWindow(context, pTargetPage) {
	var target = context + pTargetPage;
	newWindow(target, 650, 500) 
}


function sendMessage() {
	var formName = getForm("MessageForm");
	var str=formName.email.value;
	var filter=/^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i
	if (filter.test(str))
		formName.isValidEmailAddress.value = true;
	else
		formName.isValidEmailAddress.value = false;
	formName.submit();
}

function giftCardTracking() {
	document.GiftCardTrackingForm.submit();
}

function viewOrderDetails(pOrderNo) {
	var formName = getForm("SearchOrderForm");
	formName.actionPerformed.value = "view";
	formName.orderNo.value = pOrderNo;
	formName.submit();
}

function cancelOrder(pOrderNo) {
	var formName = getForm("SearchOrderForm");
	formName.actionPerformed.value = "cancel";
	formName.orderNo.value = pOrderNo;
	formName.submit();
}

function submitCancelOrder() {
	var formName = getForm("CancelOrderForm");
	formName.submit();
}

function changePassword() 
{
	var formName = getForm("ChangePasswordForm");
	formName.submit();
}

function updateReminder() {
	var formName = getForm("ReminderForm");
	formName.submit();
}

function addReminder() {
	var formName = getForm("ReminderForm");
	formName.submit();
}

function removeReminder(reminderId) {
	var formName = getForm("ReminderForm");
	formName.reminderId.value = reminderId;
	formName.actionPerform.value = "remove";
	formName.submit();
}

function editReminder(pReminderId) {
	var formName = getForm("ReminderForm");
	formName.reminderId.value = pReminderId;
	formName.actionPerform.value = "edit";
	formName.submit();
}

function editShippingInfo() {
	var formName = getForm("EditShippingInfoForm");
	formName.submit();
}

function editAccountInfo() {
	var formName = getForm("EditShippingInfoForm");
	var str=formName.contactEmail.value;
	var filter=/^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i
	if (filter.test(str))
		formName.isValidEmailAddress.value = true;
	else
		formName.isValidEmailAddress.value = false;
	formName.submit();
}

function changeLanguage(language) {
	var formName = getForm("ChangeLanguageForm");
	formName.language.value = language;
	formName.submit();
}

function changeCurrency(currency) {
	var formName = getForm("ChangeCurrencyForm");
	formName.currency.value= currency;
	formName.submit();
}

function changeCurrency(currency) {
	var formName = getForm("ChangeCurrencyForm");
	formName.currency.value = currency;
	formName.submit();
}

function sendPassword() {
	var formName = getForm("ForgotPasswordForm");
	formName.submit();
}


function accountLogin() 
{
	var formName = getForm("AccountLoginForm");
	formName.submit();
}

function submitOrder(){
	document.body.style.cursor = 'wait';
	var formName = getForm("PaymentInfoForm");
	formName.submit();
}

function reviewOrder(action, itemNo) {
	var formName = getForm("ReviewOrderForm");
	formName.actionPerform.value = action;
	formName.itemNo.value = itemNo;
	formName.submit();
}

function nextStep(){
	var formName = getForm("CustomerInfoForm");
	formName.actionPerform.value = "next_step";
	formName.submit();
}

function goToLogin() {
	document.CustomerInfoForm.actionPerform.value = "goToLogin";
	document.CustomerInfoForm.submit();
}

function removeItem(pItemNo) {
	var formName = getForm("ShoppingCartForm");
	formName.itemNo.value = pItemNo;	
	formName.actionPerform.value = "remove_item";
	formName.submit();
}

function removeMatchingItem(pItemNo) {
	var formName = getForm("ShoppingCartForm");
	formName.itemNo.value = pItemNo;	
	formName.actionPerform.value = "remove_matching";
	formName.submit();
}

function editItem(pItemNo) {
	var formName = getForm("ShoppingCartForm");
	formName.itemNo.value = pItemNo;	
	formName.actionPerform.value = "edit_item";
	formName.submit();
}


function addToCart(productCode, hasColor, hasSize, doubleMonogram){
	var formName = getForm("OrderForm");
	formName.productCode.value = productCode;
	formName.isDoubleMonogram.value = doubleMonogram;
	if (hasColor == "Y")
		formName.productColorCode.value = formName.selectedColor.value;
	else 
		formName.productColorCode.value = "001";
	if (hasSize == "Y")
		formName.productSizeCode.value = formName.selectedSize.options[formName.selectedSize.selectedIndex].value;
	else 
		formName.productSizeCode.value = "001";
	formName.submit();
}

function goToPage(pageIndex){
	var formName = getForm("ChangePageForm");
	formName.pageIndex.value = pageIndex;
	formName.submit();
}


function StringTokenizer (material, separator)
{
   // Attributes.
   this.material = material;
   this.separator = separator;

   // Operations.
   this.getTokens = getTokens;
   this.nextToken = nextToken;
   this.countTokens = countTokens;
   this.hasMoreTokens = hasMoreTokens;
   this.tokensReturned = tokensReturned;

   // Initialisation code.
   this.tokens = this.getTokens();
   this.tokensReturned = 0;

}  // end constructor




/*
   Go through material, putting each token into a new array.

   Return      - the array with all the tokens in it.
*/
function getTokens()
{
   // Create array of tokens.
   var tokens = new Array();
   var nextToken;

   // If no separators found, single token is the material string itself.
	if (this.material.indexOf (this.separator) < 0)
	{
		tokens [0] = this.material;
		return tokens;
	}  // end if

   // Establish initial start and end positions of the first token.
   start = 0;
   end = this.material.indexOf (this.separator, start);

   // Counter for how many tokens were found.
   var counter = 0;

   // Go through material, token at a time.
   var trimmed;
 	while (this.material.length - start >= 1)
	{
		nextToken = this.material.substring (start, end);
		start = end + 1;
		if (this.material.indexOf (this.separator, start + 1) < 0)
		{
			end = this.material.length;
		}  // end if
		else
		{
			end = this.material.indexOf (this.separator, start + 1);
		}  // end else

      trimmed = trim (nextToken);

      // Remove any extra separators at start.
      while (trimmed.substring(0, this.separator.length) == this.separator) {
         trimmed = trimmed.substring (this.separator.length);
      }
      trimmed = trim(trimmed);
      if (trimmed == "") {
         continue;
      }
      tokens [counter] = trimmed;
		counter ++;
	}   // end if

   // Return the initialised array.
   return tokens;


}  // end getTokens function


/*
   Return a count of the number of tokens in the material.

   Return      - int number of tokens in material.
*/
function countTokens()
{
  return this.tokens.length;
}  // end countTokens function



/*
   Get next token in material.

   Return      - next token in material.
*/
function nextToken()
{

   if (this.tokensReturned >= this.tokens.length)
   {
      return null;
   }  // end if
   else
   {
      var returnToken = this.tokens [this.tokensReturned];
      this.tokensReturned ++;
      return returnToken;
   }  // end else

}  // end nextToken function



/*
   Tests if there are more tokens available from this tokenizer's string. If
   this method returns true, then a subsequent call to nextToken
   will successfully return a token.

   Return      true if more tokens, false otherwise.
*/
function hasMoreTokens()
{
   if (this.tokensReturned < this.tokens.length)
   {
      return true;
   }  // end if
   else
   {
      return false;
   }  // end else
}  // end hasMoreTokens function

function tokensReturned()
{
   return this.tokensReturned;
}  // end tokensReturned function


function trim (strToTrim) {
   return(strToTrim.replace(/^\s+|\s+$/g, ''));
}  // end trim function


function enableSameAsBillingAddress ()
{
	var formName = getForm("CustomerInfoForm");
	if (formName.countryCode.value == 'CA' ||
		formName.countryCode.value == 'US') {
		document.getElementById('sameAsBillingAddress').style.display = 'inline';
		document.getElementById('sameAsBillingAddressText').style.display = 'inline';
		formName.sameAddress.checked = true;		
	} else {
		document.getElementById('sameAsBillingAddress').style.display = 'none';
		document.getElementById('sameAsBillingAddressText').style.display = 'none';
		formName.sameAddress.checked = false;
		document.getElementById('deliveryAddressDetails').style.display = 'inline';
		clearDeliveryInfo();
	};

}

function setSameAsBox ()
{
	var formName = getForm("CustomerInfoForm");
	if (formName.sameAddress.checked == true) {
		document.getElementById('deliveryAddressDetails').style.display = 'none';
	} else {
		document.getElementById('deliveryAddressDetails').style.display = 'inline';
	}
}


