var storeLocNames = null;
var quickPicksXML = null;
var imagesAddedToCB = false;
var numImagesAdded = 0;
var numResStopImages = 0;
var wsCall = null;
var cartItemID = "";
var itemName = "";
var storeLocID;
var responseGood = false;
var MerchantProductID = null;

//Store Locator Functions
function FindLocationsByZip() {
    if(document.getElementById("zipCode").value == "")
    {
        alert("Please enter a Zip Code.");
    }
    else
    {    
        wsCall = new wsObj();
        wsCall.functionName = "GetLocationsByZip";
        wsCall.callbackFunction = FindLocationsResponse;
        wsCall.addParam("MerchantID", merchantID);
        wsCall.addParam("radiusMiles", document.getElementById("radiusMiles").value);
        wsCall.addParam("zipCode", document.getElementById("zipCode").value);
        wsCall.sendRequest();
    }
}

function FindLocationsByCity() {
    wsCall = new wsObj();
    wsCall.functionName = "GetLocationsByCity";
    wsCall.callbackFunction = FindLocationsResponse;
    wsCall.addParam("MerchantID", merchantID);
    wsCall.addParam("City", document.getElementById("citySelect").value);
    wsCall.addParam("State", document.getElementById("stateSelect").value);
    wsCall.sendRequest();
}

function FindLocationsResponse() {
    if(wsCall.goodResponse()) {
        var storeLocs = wsCall.http.responseXML.getElementsByTagName("location");
        if(storeLocs) {
            var locResults = document.getElementById("storeResults");
            if(storeLocs.length > 0) {
                locResults.innerHTML = "";
                storeLocNames = new Array();
                for(i=0; i<storeLocs.length; i++) {
                    storeLocNames[storeLocs[i].getAttribute("refNum")] = storeLocs[i].getAttribute("name") + ", " + 
                                                                            storeLocs[i].getAttribute("address") + ", " + 
                                                                            storeLocs[i].getAttribute("city") + ", " + 
                                                                            storeLocs[i].getAttribute("state") + " " + 
                                                                            storeLocs[i].getAttribute("zip");
                    var locHTML = "";
                    locHTML += "<table class=\"resultsTable\">";
                    locHTML += "<tr>";
                    locHTML += "<td style=\"padding-left:10px;\" width=\"251px\">";
                    locHTML += storeLocs[i].getAttribute("name");
                    locHTML += "</td>";
                    locHTML += "<td width=\"149px\" align=\"center\">";
                    locHTML += storeLocs[i].getAttribute("phone");
                    locHTML += "</td>";
                    locHTML += "<td width=\"140px\" align=\"center\">";
                    locHTML += "<a href=\"javascript:ChooseStore(" + storeLocs[i].getAttribute("refNum") + ")\"><img src=\"/common/images/cartimages/ChooseStoreBtn.gif\" /></a>";
                    locHTML += "</td>";
                    locHTML += "</tr>";
                    locHTML += "<tr>";
                    locHTML += "<td style=\"padding-left:10px;\">";
                    locHTML += storeLocs[i].getAttribute("address") + "<br />";
                    locHTML += storeLocs[i].getAttribute("city") + ", " + storeLocs[i].getAttribute("state") + " " + storeLocs[i].getAttribute("zip");
                    locHTML += "</td>";
                    locHTML += "</tr>";
                    locHTML += "<tr>";
                    locHTML += "<td colspan=\"2\" style=\"padding-left:10px; color:Blue;\" width=\"400px\">";
                    locHTML += (storeLocs[i].getAttribute("distance") ? storeLocs[i].getAttribute("distance") + " miles" : "");
                    locHTML += "</td>";
                    locHTML += "<td width=\"164px\">";
                    locHTML += "";
                    locHTML += "</td>";
                    locHTML += "</tr>";
                    locHTML += "<tr>";
                    locHTML += "<td colspan=\"3\" style=\"padding-left:10px\">";
                    locHTML += "<img src=\"/common/images/cartimages/resultsDiv.gif\" />";
                    locHTML += "</td>";
                    locHTML += "</tr>";
                    locHTML += "</table>";
                    
                    locResults.innerHTML += locHTML;
                }
            } else {
                locResults.innerHTML = "No results found.  Please go back and try again.";
            }
        }
        ShowStoreLocationResults();
    }
}

function PopulateStateDDL() {
    wsCall = new wsObj();
    wsCall.functionName = "GetLocationStates";
    wsCall.callbackFunction = PopulateStateResponse;
    wsCall.addParam("MerchantID", merchantID);
    wsCall.sendRequest();
}

function PopulateStateResponse() {
    if(wsCall.goodResponse()) {
        var states = wsCall.http.responseXML.getElementsByTagName("state");
        var stateSelect = document.getElementById("stateSelect");
        if(states) {
            for(i=0; i<states.length; i++) {
                stateSelect.options[i+1] = new Option(states[i].getAttribute("value"), states[i].getAttribute("value"));
            }
        }
    }
}

function PopulateCityDDL() {
    wsCall = new wsObj();
    wsCall.functionName = "GetLocationCities";
    wsCall.callbackFunction = PopulateCityResponse;
    wsCall.addParam("MerchantID", merchantID);
    wsCall.addParam("State", document.getElementById("stateSelect").value);
    wsCall.sendRequest();
}

function PopulateCityResponse() {
    if(wsCall.goodResponse()) {
        var cities = wsCall.http.responseXML.getElementsByTagName("city");
        var citySelect = document.getElementById("citySelect");
        citySelect.options.length=0;
        citySelect.options[0] = new Option("Please Select...", 0);
        if(cities) {
            for(i=0; i<cities.length; i++) {
                citySelect.options[i+1] = new Option(cities[i].getAttribute("value"), cities[i].getAttribute("value"));
            }
        }
        document.getElementById("cityLabel").style.visibility = "visible";
        document.getElementById("cityCriteria").style.visibility = "visible";
    }
}

//Cart Functions
var AITCBCall = null;
function AddImagesToCartBucket() { 
    AITCBCall = new wsObj();
    AITCBCall.functionName = "AddImagesToCartBucket";
    AITCBCall.callbackFunction = AddImagesToCBResponse;
    AITCBCall.addParam("ShopperID", shopperID);
    AITCBCall.addParam("MerchantID", merchantID);
    AITCBCall.addParam("ImageIDs", thumbSelectedList);
    AITCBCall.sendRequest();
}

function AddImagesToCBResponse() {
    if(AITCBCall.goodResponse()) {
        var dom = AITCBCall.http.responseXML;
        var crMessage = dom.getElementsByTagName("AddImagesToCartBucketResult")[0].firstChild.nodeValue;
     
        if(crMessage > 0) 
        {
            numImagesAdded = crMessage;
        }
                    
        imagesAddedToCB = true;
        
        //alert("selectPickupShipping:" + selectPickupShipping);
   
        if(selectPickupShipping == true)
        {      
            pickupOrShip.style.top = "0px";
            pickupOrShip.style.display = "block";
           
            if(preferredStore == 0)
            {
                changeLocation.style.display = "none";
                //ShowExpressPrintOrder();
            }
            else 
            {
                if (multipleLocations == false)
                {
                    changeLocation.style.display = "none";
                }
                else
                {
                    changeLocation.style.display = "block";
                }
            }
        }
        else
        {
            //alert("HERE");
            ShowExpressPrintOrder();
        }
    }
}

function AddQuickPickToCart() {
    var answer = true;
    var finish = "";
    
    if(document.getElementById("Qty").value != "" && document.getElementById("Qty").value != 0 && document.getElementById("Qty").value > 0 && IsNumeric(document.getElementById("Qty").value) == true)
    { 
        document.getElementById("Qty").value = parseInt(document.getElementById("Qty").value);
    }
    else
    {
        document.getElementById("Qty").value = "1";
    }
        
    if(!imagesAddedToCB) {
        AddImagesToCartBucket();
    }
    
    if(GlossyMatteOn == 1)
    {
        if(document.getElementById("Glossy").checked)
        {
            finish = "Glossy";
        }
        else
        {
            finish = "Matte";
        }
        
        for(var i=0; i<cartArray.length; i++) {
            if((document.getElementById("Glossy").checked && (cartArray[i].Name.indexOf("Matte") > -1 || cartArray[i].Name.indexOf("Lustre") > -1 || cartArray[i].Name.indexOf("Metallic") > -1)) || (document.getElementById("Matte").checked && cartArray[i].Name.indexOf("Glossy") > -1))
            {
                answer = confirm("You currently have products in your shopping cart with a different finish than you have selected.  All products with a different finish will be removed.");
                break;
            }
        }
        
        if(answer)
        {
            //REMOVE ITEMS FROM CARTARRAY THAT DO NOT MATCH
            for(var i=0; i<cartArray.length; i++) {
                if(document.getElementById("Glossy").checked)
                {
                    //REMOVE ALL MATTE, LUSTRE, AND METALLIC FINISHES
                    if(cartArray[i].Name.indexOf("Matte") > -1 || cartArray[i].Name.indexOf("Lustre") > -1 || cartArray[i].Name.indexOf("Metallic") > -1)
                    {
                        cartArray.splice(i, 1);
                    }
                }
                else
                {
                    //REMOVE ALL GLOSSY FINISHES
                    if(cartArray[i].Name.indexOf("Glossy") > -1)
                    {
                        cartArray.splice(i, 1);
                    }
                }
            }
                                    
            //ADD ITEM TO CART
            var mpID = document.getElementById("quickPicks").value;
            
//            alert("mpID:" + mpID);
//            alert("PackageUpAttributes(mpID):" + PackageUpAttributes(mpID));
//            alert("document.getElementById('Qty').value:" + document.getElementById("Qty").value);
//            alert("thumbSelectedList:" + thumbSelectedList);
            
            wsCall = new wsObj();
            wsCall.functionName = "AddItemToCartResWarning";
            wsCall.callbackFunction = AddItemToCartResponse;
            wsCall.addParam("MerchantProductID", mpID);
            wsCall.addParam("AttributeStr", PackageUpAttributes(mpID));
            wsCall.addParam("Qty", document.getElementById("Qty").value);
            wsCall.addParam("ShopperID", shopperID);
            wsCall.addParam("MerchantID", merchantID);
            wsCall.addParam("ImageIDs", thumbSelectedList);
            wsCall.sendRequest();
        }
    }
    else
    {
        var mpID = document.getElementById("quickPicks").value;
        wsCall = new wsObj();
        wsCall.functionName = "AddItemToCartResWarning";
        wsCall.callbackFunction = AddItemToCartResponse;
        wsCall.addParam("MerchantProductID", mpID);
        wsCall.addParam("AttributeStr", PackageUpAttributes(mpID));
        wsCall.addParam("Qty", document.getElementById("Qty").value);
        wsCall.addParam("ShopperID", shopperID);
        wsCall.addParam("MerchantID", merchantID);
        wsCall.addParam("ImageIDs", thumbSelectedList);
        wsCall.sendRequest();
    }
}

function IsNumeric(strString) {
   //  check for valid numeric strings 
   var strValidChars = "0123456789.-";
   var strChar;
   var blnResult = true;

   if (strString.length == 0) return false;

   //  test strString consists of valid characters listed above
   for (i = 0; i < strString.length && blnResult == true; i++)
      {
      strChar = strString.charAt(i);
      if (strValidChars.indexOf(strChar) == -1)
         {
         blnResult = false;
         }
      }
   return blnResult;
}

function AddItemToCartResponse() {
    if(wsCall.goodResponse()) {
        var dom = wsCall.http.responseXML;
        var errorMessage = dom.getElementsByTagName("Error");
                
        if(errorMessage.length > 0) {
            errorMessage = dom.getElementsByTagName("Error")[0].firstChild.nodeValue;
            
            //Show the error message.
            alert(errorMessage);
        } 
        else {
            cartItemID = dom.getElementsByTagName("CartItemID")[0].firstChild.nodeValue;
            
//            alert("cartItemID:" + cartItemID);
            
            var resolutionWarningImages = dom.getElementsByTagName("Image");
            var resolutionWarningImageBucket = document.getElementById("ResolutionWarningImageBucket");
            resolutionWarningImageBucket.innerHTML = "";
            
//            alert("resolutionWarningImages.length:" + resolutionWarningImages.length);
            
            if (resolutionWarningImages.length > 0)
            {
                document.getElementById("AddedToCartHeader").style.display = "none";
                document.getElementById("ResWarningIcon").style.display = "block";
                document.getElementById("ResolutionHeader").style.display = "block";
                document.getElementById("ResolutionWarning").style.display = "block";
                document.getElementById("help-content").style.display = "block";
            
                //If the images can't be added then remove it from the count
                if (document.getElementById("ResolutionStop").style.display == "block")
                {
                    numResStopImages = resolutionWarningImages.length;
                }
            
                for(var i=0; i<resolutionWarningImages.length; i++) {
                    resolutionWarningImageBucket.innerHTML += "<div><img src=\"" + resolutionWarningImages[i].firstChild.nodeValue + "&resWarn=1\"></div>\n";                
                }            
            }
            else
            {
                document.getElementById("AddedToCartHeader").style.display = "block";
                document.getElementById("ResWarningIcon").style.display = "none";
                document.getElementById("ResolutionHeader").style.display = "none";
                document.getElementById("ResolutionWarning").style.display = "none";
                document.getElementById("help-content").style.display = "none";
            }
            
//            alert("cartItemID: " + cartItemID);
            
            if (cartItemID != 0)
            {
                document.getElementById("AddedToCart").style.display = "block";
                document.getElementById("confirmMsg").style.display = "block";
                document.getElementById("CheckoutButton").style.display = "block";
                
                GetCartItemProductName(cartItemID);
            }
            else
            {
                document.getElementById("AddedToCart").style.display = "none";
                document.getElementById("confirmMsg").style.display = "none";
                
                if (cartArray.length == 0)
                {
                    document.getElementById("CheckoutButton").style.display = "none";
                }
                
                //Now show the last div of the quick cart series.
                ShowAddCartConfirm();
            }           
        }    
    }
}

function GetCartItemProductName(cartItemID) {
    wsCall = new wsObj();
    wsCall.functionName = "GetCartItemProductName";
    wsCall.callbackFunction = GetCartItemProductNameResponse;
    wsCall.addParam("CartItemID", cartItemID);
    wsCall.sendRequest();
}

function GetCartItemProductNameResponse() {
    if(wsCall.goodResponse()) {
        
        var dom = wsCall.http.responseXML;
        var crMessage = dom.getElementsByTagName("GetCartItemProductNameResult")[0].firstChild.nodeValue;
        
        if(crMessage.substring(0,5) == "ERROR") {
            //Show the error message.
            alert(crMessage);
        } else {            
            itemName = crMessage;
            
            GetPrintCartItemPrice(cartItemID);
        }
    }
}

function GetPrintCartItemPrice(cartItemID) {
    wsCall = new wsObj();
    wsCall.functionName = "GetCartItemPrice";
    wsCall.callbackFunction = GetPrintCartItemPriceResponse;
    wsCall.addParam("CartItemID", cartItemID);
    wsCall.sendRequest();
}

function GetPrintCartItemPriceResponse() {
    if(wsCall.goodResponse()) {
        
        var dom = wsCall.http.responseXML;
        var crMessage = dom.getElementsByTagName("GetCartItemPriceResult")[0].firstChild.nodeValue;
        
        if(crMessage.substring(0,5) == "ERROR") {
            //Show the error message.
            alert(crMessage);
        } else {            
            var itemPrice = 0;
            itemPrice = crMessage;
            
            var totalQty = 0;
            
            totalQty = parseInt(document.getElementById("Qty").value) * (numImagesAdded - numResStopImages);
            
            numResStopImages = 0;
            
//            alert(itemName);
//            alert(itemPrice);
//            alert(document.getElementById("quickPicks").value);
//            alert(totalQty);
                        
            AddItemToSidebar(itemName, itemPrice, document.getElementById("quickPicks").value, totalQty);
            
            //Populate the confirmMsg that'll be show in the next div.
            document.getElementById("confirmMsg").innerHTML = totalQty + " - " + itemName + "(s) have been added to your shopping cart.";
            
            if(thumbSelectedList.split(',').length - numImagesAdded != 0)
            {
                document.getElementById("confirmMsg").innerHTML += "<br/>" + (thumbSelectedList.split(',').length - numImagesAdded) + " - Templated Image(s)  have been added to your shopping cart.";
            }
            
            //Now show the last div of the quick cart series.
            ShowAddCartConfirm();  
        }
    }
}

function AddItemToSidebar(itemName, itemPrice, itemNum, itemQty) {
    var itemFound = false;
    
//    alert("itemName: " + itemName);
//    alert("itemPrice: " + itemPrice);
//    alert("itemNum: " + itemNum);
//    alert("itemQty: " + itemQty);
    
    //If the item is already in the cart, just update the qty.
    for(var i=0; i<cartArray.length; i++) {
        if(cartArray[i].Name == itemName) {
            itemFound = true;
            cartArray[i].Qty += parseInt(itemQty);            
        }
        
        if(cartArray[i].MerchantProductID == itemNum) {
            cartArray[i].Price = itemPrice;
        }        
    }

    if (itemPrice == 0)
    {
        //Find the item's price.
        var qpProducts = quickPicksXML.getElementsByTagName("qpProduct");
        for(var i=0; i<qpProducts.length; i++) {
            if(qpProducts[i].getAttribute("MerchantProductID") == itemNum) {
                itemPrice = parseFloat(qpProducts[i].getAttribute("Price"));
            }
        }
    }
    
    if(!itemFound) {
        cartArray[cartArray.length] = new CartItem(itemNum, itemName, itemQty, itemPrice);
    }
    
    RebuildSidebarText();
}

function RebuildSidebarText() {
//     alert("sidebarItems: " + sidebarItems);
     
    if(typeof(sidebarItems) != "undefined" && sidebarItems) {
        //Clear out the sidebar's child nodes
        while(sidebarItems.hasChildNodes()) {
            sidebarItems.removeChild(sidebarItems.lastChild);
        }
                
        var subtotal = 0;
        
//        alert("cartArray.length: " + cartArray.length);
        
        for(var i=0; i<cartArray.length; i++) {
            //Accumulate the amount into the subtotal.
            var itemTotal = roundNumber(parseInt(cartArray[i].Qty) * parseFloat(cartArray[i].Price), 2);
            var itemStr = new String(itemTotal);
            subtotal += itemTotal;
            //Write the line item to the sidebar.
            var newRow = document.createElement("tr");
            var newRow2 = document.createElement("tr");
            var nameCell = document.createElement("td");
            var priceCell = document.createElement("td");
            nameCell.innerHTML = cartArray[i].Qty + " - " + cartArray[i].Name;
            nameCell.setAttribute("width", "100%");
            nameCell.setAttribute("align", "center");
            priceCell.innerHTML = "<font style='color:#861717; font-size:14px; font-weight:bold;'> $" + formatPriceString(itemTotal) + "</font>" ;
            priceCell.setAttribute("width", "100%");
            priceCell.setAttribute("align", "center");
            newRow.appendChild(nameCell);
            newRow2.appendChild(priceCell);
            sidebarItems.appendChild(newRow);
            sidebarItems.appendChild(newRow2);
        }
        
        if(cartArray.length > 0) {
            //Write the subtotal to the subtotal box.
            var subStr = new String(subtotal);
            document.getElementById("Header1_ctl00_subtotalTD").innerHTML = "$" + formatPriceString(roundNumber(subtotal, 2));
            document.getElementById("Header1_ctl00_extraCartParts").style.display = "block";
        }
    }
}

function PackageUpAttributes(mpID) {
    var qpProducts = quickPicksXML.getElementsByTagName("qpProduct");
    var attrStr = "";
    var AttributeValue = "";
    
    for(var i=0; i<qpProducts.length; i++) {
        if(qpProducts[i].getAttribute("MerchantProductID") == mpID) {
            var attrGroups = qpProducts[i].getElementsByTagName("Group");
            
//            alert("Attribute Groups: " + attrGroups.length);
            
            for(var j=0; j<attrGroups.length; j++) {
                var attrObj = document.getElementById("attr" + attrGroups[j].getAttribute("Name"));
                if(attrObj) {
                //alert(attrObj.id);
                    if(attrObj.type == "checkbox") {
                        attrStr += attrGroups[j].firstChild.getAttribute("AttributeID") + "=" + attrObj.name + (attrObj.checked ? "=True|" : "=False|");
                    } else {
                        if (attrObj.value.indexOf("|") > 0)
                        {
                            AttributeValue = attrObj.value.substring(0, attrObj.value.indexOf("|"));
                        }
                        else
                        {
                            AttributeValue = attrObj.value;
                        }
                        
                        attrStr += attrGroups[j].firstChild.getAttribute("AttributeID") + "=" + attrObj.name + "=" + AttributeValue + "|";
                    }
                } else {
                    alert("Object not found");
                }
//                alert(attrStr);
            }
            attrStr = attrStr.substring(0, attrStr.length-1);
        }
    }
//    alert(attrStr);
    return attrStr;
}

function UpdatePricingPackage() {
    var PricingPackageName = "";
    var IsPickup = "";
    
    if(document.getElementById("pickup").checked)
    {
        PricingPackageName = "Regular Pickup";
        IsPickup = "1";
    }
    else
    {
        PricingPackageName = "Regular Shipping";
        IsPickup = "0";
    }
    
    if (storeLocID != null)
    {
        preferredStore = storeLocID;
    }
    
    wsCall = new wsObj();
    wsCall.functionName = "UpdateCartPricingPackage";
    wsCall.callbackFunction = UpdatePPResponse;
    wsCall.addParam("MerchantID", merchantID);
    wsCall.addParam("ShopperID", shopperID);
    wsCall.addParam("IsPickup", IsPickup);
    wsCall.addParam("PricingPackageName", PricingPackageName);    
    wsCall.addParam("PickupLocID", preferredStore);    
    wsCall.sendRequest();
}

function UpdatePPResponse() {
    if(wsCall.goodResponse()) {
        if(numImagesAdded > 0)
        {
            expressPrintOrder.style.top = "0px";
            expressPrintOrder.style.display = "block";
            
            PopulateQuickPicks();
        }
        else
        {
            parent.location = "/net/Ordering/Cart.aspx";
        }
    }
}

function PopulateQuickPicks() {   
    wsCall = new wsObj();
    wsCall.functionName = "GetMerchantQuickPicks";
    wsCall.callbackFunction = PopulateQPResponse;
    wsCall.addParam("MerchantID", merchantID);
    wsCall.addParam("ShopperID", shopperID);
    wsCall.sendRequest();
}

function PopulateQPResponse() {
    if(wsCall.goodResponse()) {
        quickPicksXML = wsCall.http.responseXML;
        
        var qpProducts = quickPicksXML.getElementsByTagName("qpProduct");
        var quickPicks = document.getElementById("quickPicks");
        
        //REMOVE PRODUCTS THAT DON'T CONTAIN CORRECT GLOSSY OR MATTE FINISH
        if(GlossyMatteOn == 1)
        {   
            //RESET DROPDOWN TO CONTAIN ALL POSSIBLE PRINTS
            for(var i=quickPicks.length-1; i>=0; i--)
            {
                quickPicks.options[i] = null;
            }
            
            for(var j=0; j<qpProducts.length; j++)
            {
                var containsProduct = false;
                
                for(var i=0; i<quickPicks.length; i++)
                {
                    if(quickPicks.options[i].value == qpProducts[j].getAttribute("MerchantProductID"))
                    {
                        containsProduct = true;
                    }
                }
                
                if(containsProduct == false)
                {
                    var opt = document.createElement("option");
                    
                    quickPicks.options.add(opt);
                    opt.text = qpProducts[j].getAttribute("Name");
                    opt.value = qpProducts[j].getAttribute("MerchantProductID");
                }
            }
            
            for(var i=0; i<quickPicks.length; i++)
            {
                for(var j=0; j<qpProducts.length; j++)
                {
                    if(quickPicks.options[i].value == qpProducts[j].getAttribute("MerchantProductID"))
                    {
                        var attrGroups = qpProducts[j].getElementsByTagName("Group");
                
                        for(var k=0; k<attrGroups.length; k++) 
                        {
                            if(attrGroups[k].getAttribute("Name") == "Finish")
                            {
                                var removePrint = true;
                                
                                for(var z=0; z<attrGroups[k].childNodes.length; z++) 
                                {
                                    if((document.getElementById("Glossy").checked && attrGroups[k].childNodes[z].getAttribute("Value") == "Glossy") || (document.getElementById("Matte").checked && attrGroups[k].childNodes[z].getAttribute("Value") == "Matte"))
                                    {
                                        removePrint = false;
                                    }
                                }
                                
                                if(removePrint)
                                {
                                    quickPicks.options[i] = null;
                                }
                            }
                        }
                    }
                }
            }
        }
        else
        {
            quickPicks.options.length=0;
            
            for(var i=0; i<qpProducts.length; i++) 
            {
                quickPicks.options[i] = new Option(qpProducts[i].getAttribute("Name"), qpProducts[i].getAttribute("MerchantProductID"));
            }
        }
        
        ChangeQuickPick(quickPicks.options[0].value);
    }
}

function ChooseStore(storeRefNum) {
    document.getElementById("preferredStoreInfo").innerHTML = storeLocNames[storeRefNum];
    preferredStore = storeRefNum;
    storeLocID = preferredStore;
    UpdateLocationPreference();
}

function UpdateLocationPreference() {   
    wsCall = new wsObj();
    wsCall.functionName = "UpdateLocationPreference";
    wsCall.callbackFunction = UpdateLocationPreferenceResponse;
    wsCall.addParam("ShopperID", shopperID);
    wsCall.addParam("LocationID", preferredStore);
    wsCall.sendRequest();
}

function UpdateCartPreference() {
    if (storeLocID > 0 && preferredStore == 0)
    {
        preferredStore = storeLocID;
    }
    else if (preferredStore > 0)
    {
        storeLocID = preferredStore;
    }  
    wsCall = new wsObj();
    wsCall.functionName = "UpdateLocationPreference";
    wsCall.callbackFunction = UpdateCartPreferenceResponse;
    wsCall.addParam("ShopperID", shopperID);
    wsCall.addParam("LocationID", preferredStore);
    wsCall.sendRequest();
}
function UpdateCartPreferenceResponse() {
//we don't want to start quick cart over, just update the cart pickuplocationid
    if(wsCall.goodResponse()) { 
    responseGood = true;
    ShowExpressPrintOrder();}
}

function UpdateLocationPreferenceResponse() {
    HideAllDivs();
    //selectPickupShipping = false;
    StartQuickCart();   
}

function ChangeQuickPick(mpID) {
    var qpProducts = quickPicksXML.getElementsByTagName("qpProduct");
    var attrDivContainer = document.getElementById("AttributeDivs");
    var priceTierDiv = document.getElementById("TieredPricing");
    attrDivContainer.innerHTML = "";
    priceTierDiv.innerHTML = "";
    
//    alert(quickPicksXML.xml);
//    alert("mpID:" + mpID);
    
    for(var i=0; i<qpProducts.length; i++) {
        if(qpProducts[i].getAttribute("MerchantProductID") == mpID) {
            //Show Pricing Tier Info if product has tiered pricing setup
            var priceTiers = qpProducts[i].getElementsByTagName("Tier");
            var priceTierHTML = "";
            
            if(priceTiers.length > 0) 
            {
                priceTierDiv.style.display = "block";
                
                priceTierHTML = "<ul id=\"discount-pricing\"><li class=\"header\">Discount pricing:</li><li>(</li>";
            }
            else 
            {
                priceTierDiv.style.display = "none";
            }
                        
            var EndQuantity;
            
            for(var m=0; m<priceTiers.length; m++) {
                if(m != 0)
                {
                    priceTierHTML += "<li class=\"divide\">|</li>";
                }
                else
                {
                    priceTierHTML += "<li>";
                }
                                
                if(priceTiers[m].getAttribute("TierEndQuantity") == "")
                {
                    EndQuantity = " And Up";
                }
                else
                {
                    EndQuantity = "-" + priceTiers[m].getAttribute("TierEndQuantity");
                }
                
                priceTierHTML += priceTiers[m].getAttribute("TierStartQuantity") + EndQuantity + " &#x2014; <span class=\"unit-discount-price\">$" + priceTiers[m].getAttribute("Price") + "</span></li>";
            }
            
            if(priceTiers.length > 0) 
            {
                priceTierHTML += "<li>)</li></ul>";
            
                priceTierDiv.innerHTML = priceTierHTML;
            }
            
            //Build out the attribute divs.
            var attrGroups = qpProducts[i].getElementsByTagName("Group");
            
            for(var j=0; j<attrGroups.length; j++) {
                var curAttrHTML = "<table><tr><td>";
                curAttrHTML += attrGroups[j].getAttribute("Name") + ": ";
                curAttrHTML += "</td><td>";
                
//                alert("attrGroups[j].childNodes.length: " + attrGroups[j].childNodes.length);
                
                switch(attrGroups[j].getAttribute("DisplayType")) {
                    case "dropdown":
                        curAttrHTML += BuildAttributeDropdown(attrGroups[j].getAttribute("Name"), attrGroups[j].childNodes, attrGroups[j].getAttribute("AttributeGroupID"), mpID);
                        break;
                    case "checkbox":
                        curAttrHTML += BuildAttributeCheckbox(attrGroups[j].getAttribute("Name"), attrGroups[j].childNodes, attrGroups[j].firstChild.getAttribute("Value"), (attrGroups[j].firstChild.getAttribute("IsDefault") == "True" ? true : false), attrGroups[j].getAttribute("AttributeGroupID"), attrGroups[j].childNodes.length, mpID);
                        break;
                    case "radio":
                        curAttrHTML += BuildAttributeRadio(attrGroups[j].getAttribute("Name"), attrGroups[j].childNodes, "&nbsp;&nbsp;", attrGroups[j].getAttribute("AttributeGroupID"));
                        break;
                    default:
                        curAttrHTML += BuildAttributeCustom(attrGroups[j].getAttribute("DisplayType"), attrGroups[j].getAttribute("Name"), attrGroups[j].getAttribute("AttributeGroupID"), attrGroups[j].firstChild.getAttribute("Value"));
                        break;
                }
                curAttrHTML += "</td></tr></table>";
                
//                alert(curAttrHTML);
                
                attrDivContainer.innerHTML += curAttrHTML;
            }
        }
    }
}

function BuildAttributeDropdown(attributeName, theAttributes, attributeGroupID, merchantProductID) {
    var hasBranch = false;
    var TreeLevel = 0;
    var GlossySelected = false;
    var MatteSelected = false;
    var GlossyAttributeTreeID = "";
    var MatteAttributeTreeID = "";
    var AttributeTreeID = "";
    
    for(var z=0; z<theAttributes.length; z++) 
    {        
        if (theAttributes[z].getAttribute("EndPoint") != null && theAttributes[z].getAttribute("EndPoint") == "False")
        {
            hasBranch = true;
            TreeLevel = theAttributes[z].getAttribute("TreeLevel");
        }
        
//        alert("attributeName: " + attributeName);
        
        if(GlossyMatteOn == 1 && attributeName == "Finish")
        {
//            alert("theAttributes[z].getAttribute(Value): " + theAttributes[z].getAttribute("Value"));

            if(theAttributes[z].getAttribute("Value") == "Glossy")
            {
                if (theAttributes[z].getAttribute("MerchantProductAttributeTreeID") != null && theAttributes[z].getAttribute("MerchantProductAttributeTreeID") != "")
                {
                    GlossyAttributeTreeID = "|" + theAttributes[z].getAttribute("MerchantProductAttributeTreeID");
                }
            }
            else if(theAttributes[z].getAttribute("Value") != "Glossy")
            {
                if (theAttributes[z].getAttribute("MerchantProductAttributeTreeID") != null && theAttributes[z].getAttribute("MerchantProductAttributeTreeID") != "")
                {
                    MatteAttributeTreeID = "|" + theAttributes[z].getAttribute("MerchantProductAttributeTreeID");
                }
            }
            
            
            if(theAttributes[z].getAttribute("Value") == "Glossy" && theAttributes[z].getAttribute("Selected") == "True")
            {
//                alert("Glossy Selected");
                GlossySelected = true;
            }
            else if(theAttributes[z].getAttribute("Value") != "Glossy" && theAttributes[z].getAttribute("Selected") == "True")
            {
//                alert("Matte Selected");
                MatteSelected = true;
            }            
        }
    }
    
    var rtnStr;
    
//    alert("hasBranch: " + hasBranch);
    
    if (hasBranch)
    {
        rtnStr = "<select id=\"attr" + attributeName + "\" name=\"" + attributeGroupID + "\" onchange=\"javascript:UpdateAttributeTree(" + merchantProductID + ",this.value," + TreeLevel + ")\">";
    }
    else
    {
        rtnStr = "<select id=\"attr" + attributeName + "\" name=\"" + attributeGroupID + "\">";
    }
    
    if(GlossyMatteOn == 1 && attributeName == "Finish" && hasBranch)
    {
        if(document.getElementById("Glossy").checked && GlossySelected == false)
        {
            UpdateAttributeTree(merchantProductID, "Glossy" + GlossyAttributeTreeID, theAttributes[0].getAttribute("TreeLevel"));
        }
        else if (document.getElementById("Matte").checked && MatteSelected == false)
        {
            UpdateAttributeTree(merchantProductID, "Matte" + MatteAttributeTreeID, theAttributes[0].getAttribute("TreeLevel"));
        }
    }
    
//    alert("theAttributes.length: " + theAttributes.length);
    
    for(var z=0; z<theAttributes.length; z++) {
        var selectedText = "";
        
        if (theAttributes[z].getAttribute("Selected") == "True")
        {
            selectedText = " selected";
        }
    
        if (theAttributes[z].getAttribute("MerchantProductAttributeTreeID") != null && theAttributes[z].getAttribute("MerchantProductAttributeTreeID") != "")
        {
            AttributeTreeID = "|" + theAttributes[z].getAttribute("MerchantProductAttributeTreeID");
        }
    
        if(GlossyMatteOn == 1 && attributeName == "Finish")
        {        
//            alert("document.getElementById('Glossy').checked: " + document.getElementById("Glossy").checked); 
//            alert("document.getElementById('Matte').checked: " + document.getElementById("Matte").checked);               
            
            if(document.getElementById("Glossy").checked && theAttributes[z].getAttribute("Value") == "Glossy")
            {
                rtnStr += "<option value=\"" + theAttributes[z].getAttribute("Value") + AttributeTreeID + "\"" + selectedText + ">" + theAttributes[z].getAttribute("Value") + "</option>";
            }
            else if (document.getElementById("Matte").checked && theAttributes[z].getAttribute("Value") != "Glossy")
            {
                rtnStr += "<option value=\"" + theAttributes[z].getAttribute("Value") + AttributeTreeID + "\"" + selectedText + ">" + theAttributes[z].getAttribute("Value") + "</option>";
            }
        }
        else
        {   
            rtnStr += "<option value=\"" + theAttributes[z].getAttribute("Value") + AttributeTreeID + "\"" + selectedText + ">" + theAttributes[z].getAttribute("Value") + "</option>";
        }
    }
    rtnStr += "</select>";
    
    return rtnStr;
}

function BuildAttributeCheckbox(groupName, theAttributes, attributeName, checkedByDefault, attributeGroupID, numOptions, merchantProductID) {
    var hasBranch = false;
    var TreeLevel = 0;
    var rtnStr = "";
    var disabledText = "";
    var checkedText = " checked";
    var isSelected = false;
    var SelectedValue = "";
    var AttributeTreeID = "";
    var SelectedAttributeTreeID = "";
    
//    alert("groupName: " + groupName);
//    alert("attributeName: " + attributeName);
    
    for(var z=0; z<theAttributes.length; z++) 
    {
//        alert(theAttributes[z].getAttribute("Value"));
//        alert(theAttributes[z].getAttribute("Selected"));
        
        if (theAttributes[z].getAttribute("Selected") == "True")
        {
            isSelected = true;
            SelectedValue = theAttributes[z].getAttribute("Value");
            
            if (theAttributes[z].getAttribute("MerchantProductAttributeTreeID") != null && theAttributes[z].getAttribute("MerchantProductAttributeTreeID") != "")
            {
                if (z==0)
                {
                    SelectedAttributeTreeID = "|" + theAttributes[1].getAttribute("MerchantProductAttributeTreeID");
                }
                else
                {
                    SelectedAttributeTreeID = "|" + theAttributes[0].getAttribute("MerchantProductAttributeTreeID");
                }
            }
        }
               
        if (theAttributes[z].getAttribute("EndPoint") != null && theAttributes[z].getAttribute("EndPoint") == "False")
        {
            hasBranch = true;
            TreeLevel = theAttributes[z].getAttribute("TreeLevel");
        }
    }
    
    if (numOptions == 1)
    {
        disabledText = " disabled";
    }
            
    if (isSelected)
    {
        if (SelectedValue.indexOf("No ") > -1 || SelectedValue.indexOf("Not ") > -1)
        {
            checkedText = "";
        }
        
        if (SelectedValue.indexOf("No ") > -1)
        {
            attributeName = SelectedValue.substring(3);
        }
        else if (SelectedValue.indexOf("Not ") > -1)
        {
            attributeName = SelectedValue.substring(4);
        }
        
        if (hasBranch)
        {
            AttributeTreeID = SelectedAttributeTreeID;
        }
    }
    else
    {
        if (attributeName.indexOf("No ") > -1 || attributeName.indexOf("Not ") > -1)
        {
            checkedText = "";
        }
        
        if (attributeName.indexOf("No ") > -1)
        {
            attributeName = attributeName.substring(3);
        }
        else if (attributeName.indexOf("Not ") > -1)
        {
            attributeName = attributeName.substring(4);
        }
        
        if (hasBranch)
        {
            AttributeTreeID = "|" + theAttributes[1].getAttribute("MerchantProductAttributeTreeID");
        }
    }
    
    if (hasBranch)
    {
        rtnStr = "<input type=\"checkbox\" name=\"" + attributeGroupID + "\"" + disabledText + " id=\"attr" + groupName + "\"" + checkedText + " onclick=\"javascript:UpdateAttributeTree(" + merchantProductID + ",'" + attributeName + AttributeTreeID + "'," + TreeLevel + ")\">";
    }
    else
    {
        rtnStr = "<input type=\"checkbox\" name=\"" + attributeGroupID + "\"" + disabledText + " id=\"attr" + groupName + "\"" + checkedText + ">";
    }
    
//    alert(rtnStr); 
    return rtnStr;
}

function BuildAttributeRadio(attributeName, theAttributes, radioSeperator, attributeGroupID) {
    var rtnStr = "";
    
    for(var z=0; z<theAttributes.length; z++) {
        rtnStr += "<input type=\"radio\" id=\"attr" + attributeName + "\" name=\"" + attributeGroupID + "\" value=\"" + theAttributes[z].getAttribute("Value") + "\"" + (theAttributes[z].getAttribute("IsDefault") == "True" ? " selected " : "") + "> " + attributeName + radioSeperator;
    }
    
    return rtnStr;
}

function BuildAttributeCustom(inputType, inputName, attrGroupID, inputValue) {
    return "<input type=\"" + inputType + "\" name=\"" + attrGroupID + "\" id=\"attr" + inputName + "\" value=\"" + inputValue + "\" />";
}

function UpdateAttributeTree(merchantProductID, attributeValue, TreeLevel) {
    var MerchantProductAttributeTreeID = "";
//    alert("merchantProductID: " + merchantProductID);
//    alert("attributeValue: " + attributeValue);
//    alert("TreeLevel: " + TreeLevel);
    
    MerchantProductAttributeTreeID = attributeValue.substring(attributeValue.indexOf("|")+1, attributeValue.length);
    
    MerchantProductID = merchantProductID;
        
    wsCall = new wsObj();
    wsCall.functionName = "GetAttributeTree";
    wsCall.callbackFunction = UpdateAttributeTreeResponse;
    wsCall.addParam("MerchantID", merchantID);
    wsCall.addParam("ShopperID", shopperID);
    wsCall.addParam("MerchantProductID", merchantProductID);
    wsCall.addParam("CategoryName", "");
    wsCall.addParam("AttributeValue", attributeValue);
    wsCall.addParam("TreeLevel", TreeLevel);
    wsCall.addParam("MerchantProductAttributeTreeID", MerchantProductAttributeTreeID);
    wsCall.sendRequest();
}

function UpdateAttributeTreeResponse() {    
    if(wsCall.goodResponse()) {
        var AttributeTreeXML = wsCall.http.responseXML;
        var AttributeTreeGroups = AttributeTreeXML.getElementsByTagName("Group");
    
        // Update the quickPicksXML for Attributes for a product
//        alert(AttributeTreeXML.xml);
//        alert(quickPicksXML.xml);
        
        var qpProducts = quickPicksXML.getElementsByTagName("qpProduct");
        
//        alert("qpProducts.length: " + qpProducts.length);
        
        for(var i=0; i<qpProducts.length; i++) {
//            alert("MerchantProductID: " + qpProducts[i].getAttribute("MerchantProductID"));
            
            if(qpProducts[i].getAttribute("MerchantProductID") == MerchantProductID) {
                //Update the attribute divs                                
                var AttributeGroups = qpProducts[i].getElementsByTagName("AttributeGroups");
                
                for(var j=0; j<AttributeGroups.length; j++) {
                    AttributeGroups[j].parentNode.removeChild(AttributeGroups[j]);                    
                }
                
                var newAttributeGroupsNode = quickPicksXML.createElement("AttributeGroups");
                
                for(var k=0; k<AttributeTreeGroups.length; k++) {
                    var newGroupNode = quickPicksXML.createElement("Group");
                    newGroupNode.setAttribute("Name", AttributeTreeGroups[k].getAttribute("Name"));
                    newGroupNode.setAttribute("DisplayType", AttributeTreeGroups[k].getAttribute("DisplayType"));
                    newGroupNode.setAttribute("AttributeGroupID", AttributeTreeGroups[k].getAttribute("AttributeGroupID"));
                    
                    var Attributes = AttributeTreeGroups[k].getElementsByTagName("Attribute");
                    
//                    alert("Attributes.length: " + Attributes.length);
                    
                    for(var m=0; m<Attributes.length; m++) {
                        var newAttributeNode = quickPicksXML.createElement("Attribute");
                        newAttributeNode.setAttribute("Value", Attributes[m].getAttribute("Value"));
                        newAttributeNode.setAttribute("IsDefault", Attributes[m].getAttribute("IsDefault"));
                        newAttributeNode.setAttribute("AttributeID", Attributes[m].getAttribute("AttributeID"));
                        newAttributeNode.setAttribute("TreeLevel", Attributes[m].getAttribute("TreeLevel"));
                        newAttributeNode.setAttribute("EndPoint", Attributes[m].getAttribute("EndPoint"));
                        newAttributeNode.setAttribute("Selected", Attributes[m].getAttribute("Selected"));
                        newAttributeNode.setAttribute("MerchantProductAttributeTreeID", Attributes[m].getAttribute("MerchantProductAttributeTreeID"));
                        
                        newGroupNode.appendChild(newAttributeNode);
                    }
                                        
                    newAttributeGroupsNode.appendChild(newGroupNode);
                }
           
                qpProducts[i].appendChild(newAttributeGroupsNode);
            }
        }
        
//        alert(quickPicksXML.xml);
        
        var attrGroups = AttributeTreeXML.getElementsByTagName("Group");
        
        var attrDivContainer = document.getElementById("AttributeDivs");
        attrDivContainer.innerHTML = "";
        
        for(var i=0; i<attrGroups.length; i++) {
            var curAttrHTML = "<table><tr><td>";
            curAttrHTML += attrGroups[i].getAttribute("Name") + ": ";
            curAttrHTML += "</td><td>";
            switch(attrGroups[i].getAttribute("DisplayType")) {
                case "dropdown":
                    curAttrHTML += BuildAttributeDropdown(attrGroups[i].getAttribute("Name"), attrGroups[i].childNodes, attrGroups[i].getAttribute("AttributeGroupID"), MerchantProductID);
                    break;
                case "checkbox":
                    curAttrHTML += BuildAttributeCheckbox(attrGroups[i].getAttribute("Name"), attrGroups[i].childNodes, attrGroups[i].firstChild.getAttribute("Value"), (attrGroups[i].firstChild.getAttribute("IsDefault") == "1" ? true : false), attrGroups[i].getAttribute("AttributeGroupID"), attrGroups[i].childNodes.length, MerchantProductID);
                    break;
                case "radio":
                    curAttrHTML += BuildAttributeRadio(attrGroups[i].getAttribute("Name"), attrGroups[i].childNodes, "&nbsp;&nbsp;", attrGroups[i].getAttribute("AttributeGroupID"));
                    break;
                default:
                    curAttrHTML += BuildAttributeCustom(attrGroups[i].getAttribute("DisplayType"), attrGroups[i].getAttribute("Name"), attrGroups[i].getAttribute("AttributeGroupID"), attrGroups[i].firstChild.getAttribute("Value"));
                    break;
            }
            curAttrHTML += "</td></tr></table>";
            
//            alert(curAttrHTML);
            
            attrDivContainer.innerHTML += curAttrHTML;
        }
    }
}

function CartItem(mpID, itemName, itemQty, itemPrice) {
    this.MerchantProductID = mpID;
    this.Name = itemName;
    this.Qty = itemQty;
    this.Price = itemPrice;
}

//Functions for showing and hiding the Quick Cart divs.

function StartQuickCart() {
    //alert("selectPickupShipping:" + selectPickupShipping);
    if(useNewCheckout == 0) {
        ValidateOrderPrints();
    } else {
        if(thumbSelectedList == "") {
            alert("Please select at least one image before clicking Order Prints.");       
        } else {
            //Add images to cart bucket
            AddImagesToCartBucket();
        }
    }
}

function ShowStoreLocator() {
    HideAllDivs();
    PopulateStateDDL();
    storeLocator.style.top = "0px";
    storeLocator.style.display = "block"; 
}

function ShowStoreLocationResults() {
    HideAllDivs();
    storeLocationResults.style.top = "0px";
    storeLocationResults.style.display = "block";
}

function ShowExpressPrintOrder() {
    if ((preferredStore > 0 && !radShip.checked && responseGood == false) || (preferredStore > 0 && selectPickupShipping == true && responseGood == false))
    {
        HideAllDivs();
        UpdatePricingPackage(); 
        if (!radShip.checked)
        {
            UpdateCartPreference();
        }
    }  
    else if(!radShip.checked && (selectPickupShipping == false && preferredStore == 0 && multipleLocations == true) || (selectPickupShipping == true && radPickup.checked && preferredStore == 0 && multipleLocations == true))
    {
        ShowStoreLocator();
    }
    else
    {     
        selectPickupShipping = false;
        
        if(pickupOrShip.style.display == "block")
        {
            HideAllDivs();
            UpdatePricingPackage();  
            if (!radShip.checked)
                UpdateCartPreference();    
            HideAllDivs(); 
        }
        else
        {        
            if(numImagesAdded > 0)
            {
                expressPrintOrder.style.top = "0px";
                expressPrintOrder.style.display = "block";
                
                PopulateQuickPicks();
            }
            else
            {
                parent.location = "/net/Ordering/Cart.aspx";
            }
        }
    }
}

function ShowAddCartConfirm() {
    selectPickupShipping = false;
    
    HideAllDivs();
    addCartConfirm.style.top="0px";
    addCartConfirm.style.display="block";
}

function HideAllDivs() {
    pickupOrShip.style.display = "none";
    storeLocator.style.display = "none";
    storeLocationResults.style.display = "none";
    expressPrintOrder.style.display = "none";
    addCartConfirm.style.display="none";
}

function roundNumber(num, dec) {
	var result = Math.round(num*Math.pow(10,dec))/Math.pow(10,dec);
	return result;
}

function formatPriceString(priceStr) {
    var resultStr = new String(priceStr);
	if(resultStr.indexOf(".") == -1) {
	    resultStr += ".00";
	} else {
	    if(resultStr.length - resultStr.indexOf(".") < 3) {
	        resultStr += "0";
	    }
	}
	
	return resultStr;
}