    /* ProductDimensionControl.js */

    function UpdatePage(dimensionControlsArray)
    {
        UpdateDimensionAvailability(dimensionControlsArray);
        UpdateItemInfo(dimensionControlsArray);
    }

    function UpdateItemInfo(dimensionControlsArray)
    {
        var selectedChoices = GetSelectedChoices(dimensionControlsArray);
        if (selectedChoices.length == dimensionControlsArray.length)
        {
            //Final selection made, enable add to cart if available.               
            LaGarde.ECommerce.WebServices.MatrixProductService.GetSKUItem(selectedChoices, ProductId, CustomerId, LoadItemInfo);
        }
    }
    
    function UpdateCustomField(skuItemId) {
        LaGarde.ECommerce.WebServices.MatrixProductService.GetCustomFieldsFromSKUItemId(skuItemId, PlugCustomFieldValue);
    }

    function PlugCustomFieldValue(result) {
        var currentValue;
        var customFieldName;
        var tooltip;
        var customFieldValuesCollection = new Array();
        
        if(typeof(customFieldValues) ==="undefined")
            return;
        for (index in customFieldValues) {
            var customFieldNameId = customFieldValues[index].split(",")[0];
            var customFieldLabel = customFieldValues[index].split(",")[1];
            var customFieldValueId = customFieldValues[index].split(",")[2];
            customFieldValuesCollection[customFieldLabel.toLowerCase()] = customFieldValueId;
        }

        for (index in result) {
            customFieldName = index;
            tooltip = result[index].First;
            currentValue = result[index].Second;
            
            var customFieldValueId = customFieldValuesCollection[customFieldName.toLowerCase()];
            $get(customFieldValueId).innerHTML = currentValue;
        }
        if (typeof(UpdateCustomFieldDisplay) !=="undefined")
            UpdateCustomFieldDisplay();
    }

    function UpdateDimensionAvailability(dimensionControlsArray)
    {
        var selectedChoices = GetSelectedChoices(dimensionControlsArray);
        if (selectedChoices.length == dimensionControlsArray.length)
        {
            //Solve for each dimension sequentially
            for (var i = 0; i < dimensionControlsArray.length; i++)
            {
                var tempChoices = GetSelectedChoices(dimensionControlsArray[i]);
                LaGarde.ECommerce.WebServices.MatrixProductService.GetDimensionChoiceAvailability(tempChoices, ProductId, CustomerId, LoadDimensionChoiceAvailability);    
            }
        }
        if (selectedChoices.length == dimensionControlsArray.length - 1)
        {
            //Solve for the unknown dimension
            LaGarde.ECommerce.WebServices.MatrixProductService.GetDimensionChoiceAvailability(selectedChoices, ProductId, CustomerId, LoadDimensionChoiceAvailability);
        }                
    }

    function SetProductImage(result)
    {
        if (result.ImageSet)
        {
            if (ProductImage)
            {
                if (result.ImageSet.LargeImage)
                {
                    if (result.ImageSet.LargeImage != "")
                    {
                        if (BaseURL)
                        {
                            setImage(ProductImage, result.ImageSet.LargeImage.replace("~\/",BaseURL));
                        }
                        else
                        {
                           setImage(ProductImage, result.ImageSet.LargeImage);
                        }
                    }
                }
            }
            if (ProductZoomImage)
            {
                if (result.ImageSet.ZoomImage)
                {
                    if (result.ImageSet.ZoomImage != "")
                    {
                        if (BaseURL)
                        {
                            setImage(ProductZoomImage, result.ImageSet.ZoomImage.replace("~\/",BaseURL));
                        }
                        else
                        {
                           setImage(ProductZoomImage, result.ImageSet.ZoomImage);
                        }
                    }
                }
            }
        }
    }

    function LoadItemInfo(result)
    {
        SetManufacturerLabel(result.Manufacturer);
        
        SetPriceLabel(result);
        SetAvailability(result);
        SetSelectedIdsField();
        SetProductImage(result);
        SetAddToCartButton(result);
        
        // Update Custom Fields upon dimension choice change
        UpdateCustomField(result.SKUItemId);
    }

    function SetManufacturerLabel(manufacturer)
    {
        setInnerText(ManufacturerLabel, manufacturer);
    }
    
    function SetPriceLabel(result)
    {
        setInnerText(MSRPLabel, String.format(PriceLabel_MSRP,result.FormattedMSRP));
        setInnerText(OriginalPriceLabel, String.format(PriceLabel_UnitPrice,result.FormattedOriginalPrice));
        setInnerText(PriceLabel, String.format(PriceLabel_UnitSellPrice, result.FormattedPrice));
        setClass(MSRPLabel, (result.MSRP > result.OriginalPrice && result.OriginalPrice > result.Price ? OtherMSRPCssClass : result.MSRP > result.OriginalPrice && result.OriginalPrice == result.Price ? OtherMSRPCssClass : result.MSRP == result.OriginalPrice && result.OriginalPrice > result.Price ? OtherMSRPCssClass : result.MSRP == result.OriginalPrice && result.OriginalPrice == result.Price ? MSRPCssClass : DisabledMSRPCssClass));
        setClass(OriginalPriceLabel, (result.MSRP > result.OriginalPrice && result.OriginalPrice > result.Price ? OtherMainPriceCssClass : result.MSRP > result.OriginalPrice && result.OriginalPrice == result.Price ? MainPriceCssClass : result.MSRP == result.OriginalPrice && result.OriginalPrice > result.Price ? DisabledMainPriceCssClass : result.MSRP == result.OriginalPrice && result.OriginalPrice == result.Price ? DisabledMainPriceCssClass : DisabledMainPriceCssClass));
        setClass(PriceLabel, (result.MSRP > result.OriginalPrice && result.OriginalPrice > result.Price ? SellPriceCssClass : result.MSRP > result.OriginalPrice && result.OriginalPrice == result.Price ? DisabledSellPriceCssClass : result.MSRP == result.OriginalPrice && result.OriginalPrice > result.Price ? SellPriceCssClass : result.MSRP == result.OriginalPrice && result.OriginalPrice == result.Price ? DisabledSellPriceCssClass : DisabledSellPriceCssClass));
    }
    
    function SetAvailability(item)
    {
        if (item.TrackInventory)
        {
            if (item.InStockQuantity <=0 && item.TrackInventory)
            {
                setInnerText(AvailabilityLabel, OutOfStockMessage);
                $(".InStockDate").show();
            }
            else if(item.InStockQuantity <= item.LowQuantityThreshold)
            {
                setInnerText(AvailabilityLabel, LimitedStockMessage);
                $(".InStockDate").show();
            }
            else
            {
                setInnerText(AvailabilityLabel, InStockMessage);
                $(".InStockDate").hide();
            }
        }
        else
        {
            setInnerText(AvailabilityLabel, "");
        }
    }
    
    function SetAddToCartButton(item)
    {
        var addToCartButton = document.getElementById(AddToCartButton);
        if (item.TrackInventory)
        {
//            if (item.InStockQuantity <=0 && !item.AllowBackOrder)
//            {   
//                AddToCartEnabled = false;
//                addToCartButton.off = true;
//            }
//            else
//            {
                AddToCartEnabled = true;
                if(addToCartButton != null)
                addToCartButton.removeAttribute("off");
//            }
        }
        else
        {
            AddToCartEnabled = true;
             if(addToCartButton != null)
            addToCartButton.removeAttribute("off");       
        }   
    }
    
    function SetSelectedIdsField()
    {        
        if (SelectedIdsField)
        {
            var selectedIds = document.getElementById(SelectedIdsField);
            selectedIds.value = GetSelectedMatrixValueList();
        }
    }

    function GetSelectedMatrixValueList()
    {
        var selectedValuesList = "";
        //Get all selections
        if(typeof(dimensionControlsDropDown)!='undefined')
        if (dimensionControlsDropDown && activeControl == "DropDown")
            var dimensionControlsArray = eval(dimensionControlsDropDown);
            
        if(typeof(dimensionControlsIcon)!='undefined')
        if (dimensionControlsIcon && activeControl == "Icon")
            var dimensionControlsArray = eval(dimensionControlsIcon);
            
        if(typeof(dimensionControlsTable)!='undefined')
        if (dimensionControlsTable && activeControl == "Table")
            var dimensionControlsArray = eval(dimensionControlsTable);
            
        var selectedChoices = GetSelectedChoices(dimensionControlsArray);
        for(i=0;i<selectedChoices.length;i++)
        {
            selectedValuesList += selectedChoices[i].UId;
            if (i < selectedChoices.length -1)
            {
                selectedValuesList += ",";
            }
        }
        return selectedValuesList;
    }

    function GetSelectedChoices(dimensionControlsArray, controlIdToSkip)
    {
        var selectedChoices = new Array();
        var j=0;
        for (var i=0;i<dimensionControlsArray.length;i++)
        {
            if (dimensionControlsArray[i] != controlIdToSkip)
            {
                var control = document.getElementById(dimensionControlsArray[i]);
                if (control)
                {
                    if (control.tagName == "SELECT")
                    {
                        selectedChoices[j] = GetSelectedChoiceDropDown(dimensionControlsArray[i]);
                        if (window.SetSelectedChoiceIcon) 
                            SetSelectedChoiceIcon(j, selectedChoices[j]);
                    }
                    else
                    {
                        selectedChoices[j] = GetSelectedChoiceIcon(dimensionControlsArray[i]);
                        if (window.SetSelectedChoiceDropDown) 
                            SetSelectedChoiceDropDown(j, selectedChoices[j]);
                        if (activeControl == "DropDown")
                        {
                            var dimensionControlsDropDownArray = eval(dimensionControlsDropDown);
                            UpdateItemInfo(dimensionControlsDropDownArray);
                        }
                    }
                }
                j++;
            }            
        }
        return selectedChoices;
    }
    if (typeof(Sys) != 'undefined') Sys.Application.notifyScriptLoaded();