//g_rootpath is generated by Peak to locate the application root path
var g_ShoppingCartPath = g_rootpath + "/DM/ShoppingCart/";

/*
function name(parameterList)
{	
	//body
}
*/

function validateForm() {
    
}

function checkPOBox(){

            if(document.getElementById("ctl00_ContentBody_hiddenFieldHasProduct").value=="1") {          
            
			    var changestr = document.getElementById("ctl00_ContentBody_ShippingInfo_txtAddress1_txtAddress1").value;//cstr.value;
			    var newStr='';
			    for( var i = 0; i < changestr.length; ++i ) { 
		                    var c = changestr.charAt(i);
    		               
						    newStr=newStr+c.toUpperCase();
			     }
    			
			    if ( newStr.indexOf('PO.',0)!= -1 || newStr.indexOf('P.O.',0) != -1 || newStr.indexOf('PO BOX',0) != -1){
				    alert("Please enter a different shipping address. Orders cannot be shipped to a PO. Box Address.");
				    return false;
			    }
			    else {
				    return true; 
			    }
			}
			else {return true;}
		}

function ShoppingCart_HideSubmit()
{
    document.getElementById("ctl00_ContentBody_SubmitOrder").style.display='none';
    document.getElementById("ctl00_ContentBody_btnCheckoutStep1").style.display='none';
    document.getElementById("ctl00_ContentBody_WaitLabel").style.display='';    
}

function removeItemFromCart2(size)
{
    var removeItemList = "";
    for (var i = 0; i < size; i++)
    {
        var ID = "RemoveItem" + i;
        var item = document.getElementById(ID);
        if (item.type == "checkbox")
        {
            if (item.checked)
            {
                if (removeItemList == "")
                    removeItemList = i + ",";
                else
                    removeItemList = removeItemList + i + ",";
            }
        }
        else
            return false;
    }
    
    //truncate the last character in the list
    removeItemList = removeItemList.substring(0, removeItemList.length - 1);

    var removeString = document.getElementById("RemoveString");
    removeString.value = removeItemList; //write the string into a hidden field

    if (removeItemList != "") //if removeItemList is empty do not submit the form
    {
        document.forms[0].submit();
    }
    else
        return false;
}

function removeItemFromCart(size)
{
    var removeItemList = "";
    var elementList = document.getElementsByTagName("input");
    for (var i = 0; i < elementList.length; i++)
    {
        if (elementList[i].type == "checkbox")
        {
            //alert(elementList[i].id);
            var indexString = elementList[i].id.substring(18, 19);
            if (elementList[i].checked)
            {
                if (removeItemList == "")
                    removeItemList = indexString + ",";
                else
                    removeItemList = removeItemList + indexString + ",";
            }
        }
    }
    //truncate the last comma character in the list
    removeItemList = removeItemList.substring(0, removeItemList.length - 1);

    var removeString = document.getElementById("ctl00$ContentBody$RemoveString");
    removeString.value = removeItemList; //write the string into a hidden field

    if (removeItemList != "") //if removeItemList is empty do not submit the form
    {
        document.forms[0].submit();
    }
    else
        return false;
}

function handleEnter(event,objName,size)
{
        var keyCode = event.keyCode;
		if (keyCode == 13) {
		   updateItemQuantity(objName,size);
		} 
		else
		return false;
}


function updateItemQuantity(objName,size)
{
    var QuantityOldValue = document.getElementById("ctl00_ContentBody_QuantityOldValue");
    if(QuantityOldValue.value == objName.value)
    {
        return false;
    }
    
    if(checkNumeric(objName))
    {
            var updateQuantityList = "";
            var elementList = document.getElementsByTagName("input");
            for (var i = 0; i < elementList.length; i++)
            {
                if (elementList[i].type == "text")
                {
                    var indexString = elementList[i].id.substring(18, 19);
                    if (elementList[i].value != ""  && elementList[i].value !=0)
                    {
                        if (updateQuantityList == "")
                            updateQuantityList = indexString + "," + elementList[i].value + "|";
                        else
                            updateQuantityList = updateQuantityList + indexString + "," + elementList[i].value + "|";
                    }
                    else
                    {
                        objName.value = "1";
                        if (updateQuantityList == "")
                            updateQuantityList = indexString + "," + elementList[i].value + "|";
                        else
                            updateQuantityList = updateQuantityList + indexString + "," + elementList[i].value + "|";
                    }
                }
            }
            //truncate the last comma character in the list
            updateQuantityList = updateQuantityList.substring(0, updateQuantityList.length - 1);
            var quantityString = document.getElementById("ctl00$ContentBody$QuantityString");
            quantityString.value = updateQuantityList; //write the string into a hidden field
            
            if (updateQuantityList != "") //if removeItemList is empty do not submit the form
            {
                document.forms[0].submit();
            }
            else
                return false;
   }
   else
    return false;
}



function RecalculateShipping(dropDownList)
{
    var shipVia = document.getElementById("ctl00_ContentBody_ShipVia");
    shipVia.value = dropDownList.options[dropDownList.selectedIndex].value;
    document.forms[0].submit();
}

function checkAddressField(fieldName, checkboxName) //should we pass the name of the controls?
{
    //alert("DEBUG");
    var shipField = document.getElementById("ShippingAddress1_" + fieldName);
    //alert(shipField.value);
    var billField = document.getElementById("BillingAddress1_" + fieldName);
    //alert(billField.value);
    var checkbox = document.getElementById(checkboxName);
    //alert(checkbox.checked);
    
    if (checkbox.checked)    //billing address fields should be set to shipping address fields
    {
        if(shipField.type == "select")
        {
            billField.selectedIndex = shipField.selectedIndex;
        }
        else
        {
            billField.value = shipField.value;
        }
        
    }
    //alert("DEBUG");
}

function copyField(source, dest, checkbox) //should we pass the name of the controls?
{
    if (checkbox.checked)    //billing address fields should be set to shipping address fields
    {
        if(source.type == "select")
        {
            dest.selectedIndex = source.selectedIndex;
        }
        else
        {
            dest.value = source.value;
        }
    }
}

function copyShippingToBilling()    //function is hardcoded specifically to the checkout page
{
    //alert("DEBUG");
    var shipAddressLine1 = document.getElementById("Address1_AddressLine1");
    var shipAddressLine2 = document.getElementById("Address1_AddressLine2");
    var shipAddressLine3 = document.getElementById("Address1_AddressLine3");
    var shipAddressCity = document.getElementById("Address1_City");
    var shipAddressState = document.getElementById("Address1_State");
    var shipAddressZip = document.getElementById("Address1_Zip");
    //alert("DEBUG");
    var billAddressLine1 = document.getElementById("Address2_AddressLine1");
    var billAddressLine2 = document.getElementById("Address2_AddressLine2");
    var billAddressLine3 = document.getElementById("Address2_AddressLine3");
    var billAddressCity = document.getElementById("Address2_City");
    var billAddressState = document.getElementById("Address2_State");
    var billAddressZip = document.getElementById("Address2_Zip");
    
    var checkbox = document.getElementById("CheckAddressSame");
    //alert("DEBUG");
    if (checkbox.checked)
    {
        billAddressLine1.value = shipAddressLine1.value;
        billAddressLine2.value = shipAddressLine2.value;
        billAddressLine3.value = shipAddressLine3.value;
        billAddressCity.value = shipAddressCity.value;
        billAddressState.selectedIndex = shipAddressState.selectedIndex;
        billAddressZip.value = shipAddressZip.value;
    }
    else
    {
        billAddressLine1.value = "";
        billAddressLine2.value = "";
        billAddressLine3.value = "";
        billAddressCity.value = "";
        billAddressState.selectedIndex = 0;
        billAddressZip.value = "";
    }
    //alert("DEBUG");
}

    function checkNumeric(objName)
    {
	    var numberfield = objName;
	    if (chkNumeric(objName) == false)
	    {
//		    numberfield.select();
//		    numberfield.focus();
		    return true;
	    }
	    else
	    {
		    return true;
	    }
    }

function chkNumeric(objName)
{
    // only allow 0-9 be entered, plus any values passed
    var checkOK = "0123456789";
    var checkStr = objName;
    var allValid = true;
    var decPoints = 0;
    var allNum = "";
    for (i = 0;  i < checkStr.value.length;  i++)
    {
        ch = checkStr.value.charAt(i);
        for (j = 0;  j < checkOK.length;  j++)
            if (ch == checkOK.charAt(j))
                break;
            if (j == checkOK.length)
            {
                allValid = false;
                break;
            }
            if (ch != ",")
                allNum += ch;
    }

    if (!allValid)
    {	
        objName.value = "1";
        return true;
    }
}


/*************************************************************************\
CheckCardNumber(form)
function called when users click the "check" button.
\*************************************************************************/
function ShoppingCart_CheckCardNumber() {

    if(!checkPOBox()){
        return false;
    }
    
    var cNum = document.getElementById("ctl00_ContentBody_CardInfo1_CardNum");
    if(Page_IsValid && cNum.value != "")
    {
        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("DiscoverCard", "6011", "16");
        var DiscoverCard = 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];
        var LuhnCheckSum = Cards[7] = new CardType();
        
        var year = document.getElementById("ctl00_ContentBody_CardInfo1_Year");
        var month = document.getElementById("ctl00_ContentBody_CardInfo1_Month");
        
        tempyear  = year.value;
        tempmonth = month.value;
        
        if (!(new CardType()).isExpiryDate(tempyear, tempmonth)) 
        {
                alert("This card has already expired.");
                return false;
        }
        
        var cType = document.getElementById("ctl00_ContentBody_CardInfo1_CardType");
        card = cType.value;
        
        var retval = eval(card + ".checkCardNumber(\"" + cNum.value + "\", " + tempyear + ", " + tempmonth + ");");
        cardname = "";
        if (retval)
        {
            //// comment this out if used on an order form
            //alert("This card number appears to be valid.");
            return true;
        }
        else 
        {
            // The cardnumber has the valid luhn checksum, but we want to know which
            // cardtype it belongs to.
            for (var n = 0; n < Cards.size; n++) 
            {
                if (Cards[n].checkCardNumber(cNum.value, tempyear, tempmonth)) 
                {
                    cardname = Cards[n].getCardType();
                    break;
                }
            }
            if (cardname.length > 0) 
            {
                alert("This looks like a " + cardname + " number, not a " + card + " number.");
                return false;
            }
            else 
            {
                alert("This card number is not valid.");
                return false;
            }
        }
        return true;
    }
    
    
    
}

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;  // set CardNumber method.
this.setCardType = setCardType;  // setCardType method.
this.setLen = setLen;  // setLen method.
this.setRules = setRules;  // setRules method.
this.setExpiryDate = setExpiryDate;  // setExpiryDate method.

this.setCardType(tmpcardtype);
this.setLen(tmplen);
this.setRules(tmprules);
if (argc > 4)
this.setExpiryDate(argv[3], argv[4]);

this.checkCardNumber = checkCardNumber;  // checkCardNumber method.
this.getExpiryDate = getExpiryDate;  // getExpiryDate method.
this.getCardType = getCardType;  // getCardType method.
this.isCardNumber = isCardNumber;  // isCardNumber method.
this.isExpiryDate = isExpiryDate;  // isExpiryDate method.
this.luhnCheck = luhnCheck;// luhnCheck method.
return this;
}

/*************************************************************************\
boolean checkCardNumber([String cardnumber, int year, int month])
return true if cardnumber pass the luhncheck and the expiry date is
valid, else return false.
\*************************************************************************/
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;
}
/*************************************************************************\
String getCardType()
return the cardtype.
\*************************************************************************/
function getCardType() {
return this.cardtype;
}
/*************************************************************************\
String getExpiryDate()
return the expiry date.
\*************************************************************************/
function getExpiryDate() {
return this.month + "/" + this.year;
}
/*************************************************************************\
boolean isCardNumber([String cardnumber])
return true if cardnumber pass the luhncheck and the rules, else return
false.
\*************************************************************************/
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;
}

/*************************************************************************\
boolean isExpiryDate([int year, int month])
return true if the date is a valid expiry date,
else return false.
\*************************************************************************/
function isExpiryDate() {
var argv = isExpiryDate.arguments;
var argc = isExpiryDate.arguments.length;

year = argc > 0 ? argv[0] : this.year;
month = argc > 1 ? argv[1] : this.month;

if (!isNum(year+""))
return false;
if (!isNum(month+""))
return false;
today = new Date();
expiry = new Date(year, month);
if (today.getTime() > expiry.getTime())
return false;
else
return true;
}

/*************************************************************************\
boolean isNum(String argvalue)
return true if argvalue contains only numeric characters,
else 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;

return true;
}

/*************************************************************************\
boolean luhnCheck([String CardNumber])
return true if CardNumber pass the luhn check else return false.
Reference: http://www.ling.nwu.edu/~sburke/pub/luhn_lib.pl
\*************************************************************************/
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;
}

/*************************************************************************\
ArrayObject makeArray(int size)
return the array object in the size specified.
\*************************************************************************/

function makeArray(size) {
this.size = size;
return this;
}

/*************************************************************************\
CardType setCardNumber(cardnumber)
return the CardType object.
\*************************************************************************/
function setCardNumber(cardnumber) {
this.cardnumber = cardnumber;
return this;
}

/*************************************************************************\
CardType setCardType(cardtype)
return the CardType object.
\*************************************************************************/
function setCardType(cardtype) {
this.cardtype = cardtype;
return this;
}

/*************************************************************************\
CardType setExpiryDate(year, month)
return the CardType object.
\*************************************************************************/
function setExpiryDate(year, month) {
this.year = year;
this.month = month;
return this;
}

/*************************************************************************\
CardType setLen(len)
return the CardType object.
\*************************************************************************/
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;
}

function SaveAddressInfo(objAddress)
{
    var addressIdField = document.getElementById("ctl00_ContentBody_hiddenFieldAddressId");
    addressIdField.value = objAddress.options[objAddress.selectedIndex].value;
    
    var addressTypeField = document.getElementById("ctl00_ContentBody_hiddenFieldAddressType");
    addressTypeField.value = objAddress.options[objAddress.selectedIndex].text;
}


function ValidatePhone(source, args)
{
    var phoneNumber = document.getElementById("ctl00_ContentBody_txtPhone").value;
    
    if(!ValidateUSAPhone(phoneNumber))
    {
        alert("Please format phone number as 555-555-5555");
        args.IsValid=false; 
        return false;
    }  
}
function ValidateUSAPhone(phoneNumber) 
{
    var regPhone = /^[01]?[- .]?\(?[2-9]\d{2}\)?[- .]?\d{3}[- .]?\d{4}$/; 
    
    if(phoneNumber.length > 0)
    {
        if (phoneNumber.match(regPhone))
        {
                return true;
        }
        else
        {
                return false;
        }
       
    }
    else
    {
        return false;
    }
    return true;
}

function ValidateMarketCode(source, args)
{
    var marketCode = document.getElementById("ctl00_ContentBody_txtMarketCodes").value;
    if(marketCode.length <= 0)
    {
        var marketCodeDropDown = document.getElementById("ctl00_ContentBody_ddlMarketCodes");
        if(marketCodeDropDown.options[marketCodeDropDown.selectedIndex].value == "")
        {
            alert("Please enter or select a market code.");
            args.IsValid=false; 
            return false;
        }
        args.IsValid=true; 
        return true;
    }  
    else
    {
        args.IsValid=true; 
        return true;
    }
}