// Define trim function
function stringTrim() {
  return this.replace(/^\s+/, '').replace(/\s+$/, '');
}
String.prototype.trim = stringTrim;

// Check email address
function validEmail(email) {
  invalidChars = " /:,;+=$#%&*";
  if (email == "") {
    return false;
  }
  for (i=0; i<invalidChars.length; i++) {
    badChar = invalidChars.charAt(i);
    if (email.indexOf(badChar,1) > -1) {
       return false;
    }
  }
  atPos = email.indexOf("@",1);
  if (atPos == -1) {
    return false;
  }
  if (email.indexOf("@",atPos+1) > -1) {
    return false;
  }
  periodPos = email.indexOf(".",atPos);
  if (periodPos == -1) {
    return false;
  }
  if (periodPos+2 > email.length) {
    return false;
  }
  return true;
}

// Validate zip code
function validZipCode(input) {
  // TODO: consider other countries
  validChars = "0123456789-";
  myLength = input.length;
  if (myLength != 5 && myLength != 9 && myLength != 10) {
    return false;
  }
  for (i=0; i<myLength; i++) {
    positionChar = input.charAt(i);
    if (validChars.indexOf(positionChar,0) < 0) {
       return false;
    }
  }
  return true;
}

// Validate phone number
function validPhone(input) {
  // TODO: consider other countries
  validChars = "0123456789- ext.()";
  myLength = input.length;
  if (myLength < 10) {
    return false;
  }  
  for (i=0; i<myLength; i++) {
    positionChar = input.charAt(i);
    if (validChars.indexOf(positionChar,0) < 0) {
       return false;
    }
  }
  return true;
}

//Smart search
function smartSearch(domain) {
  form = document.form1;
  var keyword = form.txtSearch.value;
  //keyword = keyword.replace(/\W/g, " ");
  //keyword = keyword.replace(/ +/g, " ");   
  keyword = keyword.trim();
  if(keyword != "") {
    document.location.href = domain + "search.aspx?keyword=" + escape(keyword);
  }
}

//Addon search
function addonSearch(domain) {
  form = document.form1;
  var keyword = form.txtAddonSearch.value;
  //keyword = keyword.replace(/\W/g, " ");
  //keyword = keyword.replace(/ +/g, " ");   
  keyword = keyword.trim();
  if(keyword != "") {
    document.location.href = domain + "search.aspx?keyword=" + escape(keyword);
  }
}

//Check keyword
function checkKeyword(domain,vthis,vevent) {
  form = document.form1;  
  if(vevent.keyCode == 13) {
    //smartSearch;
    var keyword = vthis.value;
    keyword = keyword.trim();
    if(keyword != "") {
      document.location.href = domain + "search.aspx?keyword=" + escape(keyword);
    }
    return false;
  } else {
    return true;
  }
}

// Convert invalid characters
function specialCharsConverter(inString) {
  var outString = inString;
  var charMidDot = String.fromCharCode(183);
  outString = outString.replace(/’/g, "'")
  outString = outString.replace(/–/g, "-")
  outString = outString.replace(/—/g, "-")
  outString = outString.replace(/•/g, charMidDot)
  return outString 
}

// Live chat
function openChat() {
  var theURL = "https://server.iad.liveperson.net/hc/53452500/?cmd=file&amp;file=visitorWantsToChat&amp;site=53452500&amp;referrer=" + escape(document.location);
  window.open(theURL, "Chat53452500", "width=472,height=320");
}

// Message box
function msgOKCancel(message) {
  OKOrCancel = confirm(message); 
  if (!OKOrCancel) {
    return false;
  } else {
    return true;
  }
}

//Open a intro guide window
function openWindow(url) {	
	window.open(url, '', 'width=600,height=475,resizable,scrollbars');
}

//To be compatible with the old version
function referViaEmail(ReferralSource, DesignID, ItemID) {
	window.open('ReferByEmail.aspx?ReferralSource=' + ReferralSource + '&DesignID=' + DesignID + '&ItemID=' + ItemID, '', 'width=600,height=495,resizable,scrollbars');
}

function referViaEmailForHome(ReferralSource) {
	window.open('ReferByEmail.aspx?ReferralSource=' + ReferralSource, '', 'width=600,height=495,resizable,scrollbars');
}

function referViaEmailForDesign(ReferralSource, DesignID, ItemID, ImgURL) {
	window.open('ReferByEmail.aspx?ReferralSource=' + ReferralSource + '&DesignID=' + DesignID + '&ItemID=' + ItemID + '&ImgURL=' + ImgURL, '', 'width=600,height=495,resizable,scrollbars');
}

function referViaEmailForDesignClass(ReferralSource, DesignClassID, Page, ItemID) {
	window.open('ReferByEmail.aspx?ReferralSource=' + ReferralSource + '&DesignClassID=' + DesignClassID + '&Page=' + Page + '&ItemID=' + ItemID, '', 'width=600,height=495,resizable,scrollbars');
}

function mouse_over_add_icon(DesignID) {
	var button_name = 'refer_button_' + DesignID;
	document.getElementById(button_name).src='images/icnEmailHover.gif ';	
}

function mouse_out_add_icon(DesignID) {
	var button_name = 'refer_button_' + DesignID;	
	document.getElementById(button_name).src='images/icnEmail.gif ';	
}

function openStudioAjaxLite(ItemID, DesignID, DocID, ucMatchingItemIdx, IdxType) {
	width = 800;
	switch (ItemID)	{
		//Letterhead
		case 100021:			{height=830; break}
		//Addr Label
		case 100020:			{height=400; break}
		//Mailing Label
		case 100027:			{height=450; break}
		//#10 Envelope
		case 100018:
		case 100187:			{height=500; break}
		//Business Card
		case 100001:
		case 100110:			{height=600; break}
		//Postcard
		case 100010:			{height=600; break}
		//Large Memopad
		case 100025:			{height=600; break}
		default:				{height=600; break}
	}
	var leftPos = (window.screen.width-width)/2, topPos = (window.screen.height-height)/2;	
	
	window.open('StudioAjaxLite.aspx?ucMatchingItemIdx=' + ucMatchingItemIdx + '&IdxType=' + IdxType + '&DocID=' + DocID + '&DesignID=' + DesignID + '&ItemID=' + ItemID, '', 'width=' + width +',height=' + height + ',top=' + topPos + ',left=' + leftPos +',resizable,scrollbars');	
}

function getCookie(strCookieName) {
    if (document.cookie.length>0)  {
        intStart=document.cookie.indexOf(strCookieName + "=")
        if (intStart!=-1) { 
            intStart=intStart + strCookieName.length+1 
            intEnd=document.cookie.indexOf(";",intStart)
            if (intEnd==-1) intEnd=document.cookie.length
            return unescape(document.cookie.substring(intStart,intEnd))
        } 
     }
    return ""
}

function dc_settabactive(curtab, numtab) {        
    for (i=0; i<=numtab; i++){       
        if (i != curtab){        
            document.getElementById('dc_tab' + i).className="dc_tabinactive custom";
            document.getElementById('dc_tablink' + i).className="dc_linkinactive";            
            document.getElementById('dc_tabdetail' + i).style.display = "none";
        }
    }    
    document.getElementById('dc_tab' + curtab).className="dc_tabactive custom";   
    document.getElementById('dc_tablink' + curtab).className="dc_linkactive";    
    document.getElementById('dc_tabdetail' + curtab).style.display = "block";
}

function di_settabactive(curtab, numtab) {        
    for (i=0; i<=numtab; i++){       
        if (i != curtab){        
            document.getElementById('di_tab' + i).className="di_tabinactive custom";
            document.getElementById('di_tablink' + i).className="di_linkinactive";            
            document.getElementById('di_tabdetail' + i).style.display = "none";
        }
    }    
    document.getElementById('di_tab' + curtab).className="di_tabactive custom";   
    document.getElementById('di_tablink' + curtab).className="di_linkactive";    
    document.getElementById('di_tabdetail' + curtab).style.display = "block";
}

function setTab(tab) {
	var tablist = document.getElementById('menucontents').getElementsByTagName("ul")[0].getElementsByTagName("li");
	var contentlist = document.getElementById('innercontents').getElementsByTagName("div");
	for (var i=0, il=tablist.length; i<il; i++)	{
		if (i == tab){
			tablist[i].className="selected";
			contentlist[i].style.display = 'block';
		}else{
			tablist[i].className="";
			contentlist[i].style.display = 'none';
		}
	}
}

function setTab960(tab) {
	var tablist = document.getElementById('menucontents960').getElementsByTagName("ul")[0].getElementsByTagName("li");
	var contentlist = document.getElementById('innercontents960').getElementsByTagName("div");
	for (var i=0, il=tablist.length; i<il; i++)	{
		if (i == tab){
			tablist[i].className="selected";
			contentlist[i].style.display = 'block';
		}else{
			tablist[i].className="";
			contentlist[i].style.display = 'none';
		}
	}
}

function setCagTab(tab){
		var tablist = document.getElementById('menucontents2').getElementsByTagName("ul")[0].getElementsByTagName("li");
		var contentlist = document.getElementById('innercontents2').getElementsByTagName("div");
		for (var i=0, il=tablist.length; i<il; i++){
			if (i == tab){
				tablist[i].className="selected";
				contentlist[i].style.display = 'block';
			}else{
				tablist[i].className="";
				contentlist[i].style.display = 'none';
			}
		}
	}

//Open a learn-how window
function openPriceQuotePopup(CategoryID) {	
    if (CategoryID == 0)
        window.open('PriceQuotePopUp.aspx', '', 'width=750,height=475,resizable,scrollbars');
    else
        window.open('PriceQuotePopUp.aspx?CategoryID=' + CategoryID, '', 'width=750,height=475,resizable,scrollbars');
}

function eventTrigger (e) {
    if (! e)
        e = event;
    return e.target || e.srcElement;
}
    
function radioClick(e){
    var obj=eventTrigger(e);   
    if (obj.value == 11 || obj.value == 12 || obj.value == 13) { 
        document.getElementById("shipBox").innerHTML="<font color='red'>*</font> Artistic Labels only ships to the U.S. and cannot ship to P.O. Boxes. " +
                                                     "The shipping information you enter below does not affect product imprint." +
                                                     " Please make sure your shipping information is correct.";
        var strNoPoBox ="*<b>Address&nbsp;</b><font color=#ff0000>(No P.O. Box)</font>:";
       // document.getElementById("noPoBox").innerHTML="*<b>Address <font color='#ff0000'>(No P.O. Box)</font></b>:";
       document.getElementById("noPoBox").innerHTML=strNoPoBox;
    }else{
        document.getElementById("shipBox").innerHTML="<font color='red'>*</font> Artistic Labels only ships to the U.S. The shipping information you enter " +
                                                     "below does not affect product imprint. Please make sure your shipping " +
                                                     "information is correct. ";
        document.getElementById("noPoBox").innerHTML="*<b>Address </b>:";
    }
}

//Check form input  
function validCustomerShipping() { 
 var objShippingFName = document.getElementById("txtShippingFName");
  if(objShippingFName.value.trim() == "") {
    alert("Please enter your first name.");
    objShippingFName.focus();
    objShippingFName.select();
    return false;
  }
  var objShippingLName = document.getElementById("txtShippingLName");
  if(objShippingLName.value.trim() == "") {
    alert("Please enter your last name.");
    objShippingLName.focus();
    objShippingLName.select();
    return false;
  }
  var myradio=document.forms[0].elements['rblShippingMethods'];
  var objShippingAddressLine1 = document.getElementById("txtShippingAddressLine1");
  var strShippingAddressLine1 = objShippingAddressLine1.value.trim().toUpperCase();
  if(strShippingAddressLine1 == "") {
    
    alert("Please enter your address.");
    objShippingAddressLine1.focus();
    objShippingAddressLine1.select();
    return false;
  } else 
  {    
       if ((parseInt(myradio[0].value) == 11 || parseInt(myradio[0].value) == 12 || parseInt(myradio[0].value) == 13)||
          ((parseInt(myradio[0].value) == 10 || parseInt(myradio[0].value) == 15) && myradio[0].checked==false)){
                if(strShippingAddressLine1.indexOf("PO BOX") != -1 ||
		        strShippingAddressLine1.indexOf("P.O. BOX") != -1 ||
		        strShippingAddressLine1.indexOf("P. O. BOX") != -1 ||
		        strShippingAddressLine1.indexOf("P.O BOX") != -1 ||
		        strShippingAddressLine1.indexOf("P.O.BOX") != -1 ||
		        strShippingAddressLine1.indexOf("POST OFFICE BOX") != -1 ||
		        strShippingAddressLine1.indexOf("P.O.B.") != -1 ||
		        strShippingAddressLine1.indexOf("P.O.B") != -1 ||
		        strShippingAddressLine1.indexOf("P. O. B.") != -1) {
                    alert("We cannot ship to P.O. Boxes. Please verify your address. ");
                    objShippingAddressLine1.focus();
                    objShippingAddressLine1.select();
                    return false;
            }
     }
  }
  var objShippingAddressLine2 = document.getElementById("txtShippingAddressLine2");
  var strShippingAddressLine2 = objShippingAddressLine2.value.trim().toUpperCase();  
  if ((parseInt(myradio[0].value) == 11 || parseInt(myradio[0].value) == 12 || parseInt(myradio[0].value) == 13)||
    ((parseInt(myradio[0].value) == 10 || parseInt(myradio[0].value) == 15) && myradio[0].checked==false)){
        if(strShippingAddressLine2.indexOf("PO BOX") != -1 ||
	    	strShippingAddressLine2.indexOf("P.O. BOX") != -1 ||
	    	strShippingAddressLine2.indexOf("P. O. BOX") != -1 ||
	    	strShippingAddressLine2.indexOf("P.O BOX") != -1 ||
	    	strShippingAddressLine2.indexOf("P.O.BOX") != -1 ||
	    	strShippingAddressLine2.indexOf("POST OFFICE BOX") != -1 ||
	    	strShippingAddressLine2.indexOf("P.O.B.") != -1 ||
	    	strShippingAddressLine2.indexOf("P.O.B") != -1 ||
	    	strShippingAddressLine2.indexOf("P. O. B.") != -1) {
            alert("We cannot ship to P.O. Boxes. Please verify your address. ");
            objShippingAddressLine2.focus();
            objShippingAddressLine2.select();
            return false;
    }
  }
  var objShippingCity = document.getElementById("txtShippingCity");
  if(objShippingCity.value.trim() == "") {
    alert("Please enter your city.");
    objShippingCity.focus();
    objShippingCity.select();
    return false;
  }
  var objShippingState = document.getElementById("txtShippingState");
  if(objShippingState.value.trim().length != 2) {
    alert("Please enter your 2-char state abbreviation.");
    objShippingState.focus();
    objShippingState.select();
    return false;
  }
  var objShippingZipCode = document.getElementById("txtShippingZipCode");
  if(!validZipCode(objShippingZipCode.value.trim())) {
    alert("Please enter your valid zip code.");
    objShippingZipCode.focus();
    objShippingZipCode.select();
    return false;
  }
  var objShippingPhone = document.getElementById("txtShippingPhone");
  if(!validPhone(objShippingPhone.value.trim())) {
    alert("Please enter your valid phone number including area code.");
    objShippingPhone.focus();
    objShippingPhone.select();
    return false;
  }        
  return true;
} 

// Check form input  
function validCustomerBilling() {  
  var objBillingFName = document.getElementById("txtBillingFName");
  if(objBillingFName.value.trim() == "") {
    alert("Please enter your first name.");
    objBillingFName.focus();
    objBillingFName.select();
    return false;
  }
  var objBillingLName = document.getElementById("txtBillingLName");
  if(objBillingLName.value.trim() == "") {
    alert("Please enter your last name.");
    objBillingLName.focus();
    objBillingLName.select();
    return false;
  }
  var objBillingAddressLine1 = document.getElementById("txtBillingAddressLine1");
  if(objBillingAddressLine1.value.trim() == "") {
    alert("Please enter your address.");
    objBillingAddressLine1.focus();
    objBillingAddressLine1.select();
    return false;
  }
  var objBillingCity = document.getElementById("txtBillingCity");
  if(objBillingCity.value.trim() == "") {
    alert("Please enter your city.");
    objBillingCity.focus();
    objBillingCity.select();
    return false;
  }
  var objBillingState = document.getElementById("txtBillingState");
  if(objBillingState.value.trim().length != 2) {
    alert("Please enter your 2-char state abbreviation.");
    objBillingState.focus();
    objBillingState.select();
    return false;
  }
  var objBillingZipCode = document.getElementById("txtBillingZipCode");
  if(!validZipCode(objBillingZipCode.value.trim())) {
    alert("Please enter your valid zip code.");
    objBillingZipCode.focus();
    objBillingZipCode.select();
    return false;
  }
  var objBillingPhone = document.getElementById("txtBillingPhone");
  if(!validPhone(objBillingPhone.value.trim())) {
    alert("Please enter your valid phone number including area code.");
    objBillingPhone.focus();
    objBillingPhone.select();
    return false;
  }        
  return true;
} 

// Check Credit Card number
function validCCNumber(type, number) {
  validChars = "0123456789";
  for (i=0; i<number.length; i++) {
    positionChar = number.charAt(i);
    if (validChars.indexOf(positionChar,0) < 0) {
      return false;
    }   
  }   
  switch(type) {
    case "Visa":
      if (((number.length != 13) && (number.length != 16)) || (number.substr(0,1) != "4")) {
        return false;
      }
      break;
    case "MasterCard":
      if ((number.length != 16) || (parseInt(number.substr(0,2)) < 51) || (parseInt(number.substr(0,2)) > 55)) {
        return false;
      }
      break;
    case "AmericanExpress":
      if ((number.length != 15) || ((number.substr(0,2) != "34") && (number.substr(0,2) != "37"))) {
        return false;
      }
      break;
    case "Discover":
      if ((number.length != 16) || (number.substr(0,4) != "6011")) {
        return false;
      }
      break;
    default:
      alert("Please select a valid credit card.");   
      return false; 
      break;
  } 
  luhnTotal = 0  
  for (j=0; j<number.length; j++) {
    positionNum = parseInt(number.charAt(number.length-1-j));
    luhnTotal = luhnTotal + ((positionNum*(j%2+1)-1)%9+1);
  }
  if (luhnTotal%10 != 0) {
    return false;
  }
  return true;
}   

// Check credit card CID
function validCID(number) {
  validChars = "0123456789";
  if (number.length < 3) {
    return false;
  }
  for (i=0; i<number.length; i++) {
    positionChar = number.charAt(i);
    if (validChars.indexOf(positionChar,0) < 0) {
       return false;
    }   
  }           
  return true;
}   

function validPaymentWoEmail() {  
  // Get System Date
  sysDate = new Date();
  sysYear = sysDate.getFullYear();
  sysMonth = sysDate.getMonth()+1;  
  var objCreditCardType = document.getElementById("ddlCreditCardType");
  creditCardType = objCreditCardType.value;
  if (creditCardType == "") {
    alert("Please select your credit card type.");
    objCreditCardType.focus();
    return false;
  }     
  var objCreditCardNumber = document.getElementById("txtCreditCardNumber");
  creditCardNumber = objCreditCardNumber.value.trim();
  if (!validCCNumber(creditCardType, creditCardNumber)) {
    alert("Please make sure your credit card number is correct.");
    objCreditCardNumber.focus();
    return false;
  }    
  var objCreditCardMonth = document.getElementById("ddlCreditCardMonth");
  creditCardMonth = objCreditCardMonth.value;
  var objCreditCardYear = document.getElementById("ddlCreditCardYear");
  creditCardYear = objCreditCardYear.value;
  if (creditCardMonth == "" || creditCardYear == "" || parseInt(creditCardYear, 10) < sysYear-2000
  	|| (parseInt(creditCardYear, 10) == sysYear-2000 && parseInt(creditCardMonth, 10) < sysMonth)) {
    alert("Please select your credit card expiration date.");
    objCreditCardMonth.focus();
    return false;
  }  
  var objCreditCardCID = document.getElementById("txtCreditCardCID");
  creditCardCID = objCreditCardCID.value.trim();
  if (!validCID(creditCardCID)) {
    alert("Please enter your credit card CID.");
    objCreditCardCID.focus();
    return false;
  }      
  return true;
} 

function validPaymentWiEmail() {  
  if(!validPaymentWoEmail()) {
    return false;
  }
  var objCustomerEmail = document.getElementById("txtCustomerEmail");
  if(!validEmail(objCustomerEmail.value.trim())) {
    alert("Please enter your valid email.");
    objCustomerEmail.focus();
    objCustomerEmail.select();
    return false;
  }
  document.getElementById("btnSubmitOrder").disabled = true;
  return true;
} 

//Only check email address
function validPaymentWiEmailWoCC() {  
  var objCustomerEmail = document.getElementById("txtCustomerEmail");
  if(!validEmail(objCustomerEmail.value.trim())) {
    alert("Please enter your valid email.");
    objCustomerEmail.focus();
    objCustomerEmail.select();
    return false;
  }
  document.getElementById("btnSubmitOrder").disabled = true;
  return true;
} 
