﻿// Construct function for OrderItemPanel class.
function CropOrderItemPanel(icropEditor) {
    this.cropEditor = icropEditor;
}

CropOrderItemPanel.prototype = {

    panelContainerID: 'OrderItem_list',
    cropOrderItemArray: [],
    selectedCropOrderItemArrayPosition: null,
    cropEditor: null,

    addCropOrderItemBySubOrderItem: function(subOrderItem, orderItemCropWrapper)
    {
        this.addNewCropOrderItem(this, subOrderItem, orderItemCropWrapper, this.cropOrderItemArray.length);
    },

    clearUI: function()
    {

        var cell = $get(this.panelContainerID);

        if (cell.hasChildNodes())
        {
            while (cell.childNodes.length >= 1)
            {
                cell.removeChild(cell.firstChild);
            }
        }
    },

    clear: function()
    {
        this.cropOrderItemArray = new Array();
        this.selectedCropOrderItemId = null;
        this.selectedCropOrderItemArrayPosition = 0;
    },

    ImagesRenderCompleted: function()
    {
        if (this.cropOrderItemArray.length > 0)
        {
            for (i = 0; i < this.cropOrderItemArray.length; i++)
            {
                if (!this.cropOrderItemArray[i].ImagesRenderCompleted())
                {
                    return false;
                }
            }
            return true;
        }
        return false;
    },

    render: function(selectedRpID)
    {
        this.clearUI();

        var div = document.createElement("div");
        var table = document.createElement("table");
        var tableBody = document.createElement("tbody");
        table.appendChild(tableBody);
        var tr = document.createElement("tr");

        for (i = 0; i < this.cropOrderItemArray.length; i++)
        {
            var td = document.createElement("td");
            td.style.width = "124px";
            td.style.height = "140px";
            td.appendChild(this.cropOrderItemArray[i].render());
            tr.appendChild(td);
            tableBody.appendChild(tr);
        }

        div.appendChild(table);
        div = this.crossBrowserRenderingAdjustment(div);
        $get(this.panelContainerID).appendChild(div);
        this.selectedCropOrderItemArrayPosition = this.getCurrentSelectedPosition(selectedRpID);
        this.cropOrderItemArray[this.selectedCropOrderItemArrayPosition].setToSelected();
    },

    getCurrentSelectedPosition: function(selectedRpID)
    {
        for (i = 0; i < this.cropOrderItemArray.length; i++)
        {
            if (this.cropOrderItemArray[i].orderItem.EncRetailerProductID == selectedRpID) return i;
        }
        if (this.cropOrderItemArray.length > 0) return 0; //default selected one is the first entry
        return -1;
    },

    crossBrowserRenderingAdjustment: function(div)
    {
        if (this.browserIsFirefox())
        {
            div.style.position = 'fixed';
            div.style.overflow = 'hidden';
            div.style.width = '540px';
            div.style.overflow = "auto";
            div.style.overflowY = 'hidden';
        }
        if (this.browserIsIE7())
        {
            div.style.height = '160px';
            div.style.width = (138 * this.cropOrderItemArray.length) + 'px';
            div.style.overflow = 'hidden';
        }
        return div;
    },

    renderCropOverlay: function()
    {
        for (i = 0; i < this.cropOrderItemArray.length; i++)
        {
            this.cropOrderItemArray[i].renderCropOverlay();
        }
    },

    updateSelectedCropOrderItemId: function(id)
    {
        selectedCropOrderItemId = id;
    },

    addNewCropOrderItem: function(panel, subOrderItem, orderItemCropWrapper, position)
    {
        var cropOrderItem = new CropOrderItem(panel, subOrderItem, orderItemCropWrapper, position);
        Array.add(this.cropOrderItemArray, cropOrderItem);
        return true;
    },

    itemSelected: function(position) //////////////
    {
        var oiSelected = this.cropOrderItemArray[position];
        if (oiSelected.cropArea == null) {
            oiSelected.renderCropOverlay();
        }
        var cropInfo = oiSelected.cropArea;
        
        this.selectedCropOrderItemArrayPosition = position;
        this.clearAllSelected();
        this.cropOrderItemArray[position].setToSelected();
        this.cropEditor.newOrderItemSelected();

        //enter crop mode when switching to a new image
        if (this.cropOrderItemArray[position].orderItem.WarnCrop)
            this.cropEditor.changeCrop();

        //activate the appropriate landscape/potrait radio button
        if (cropInfo.cropWidth > cropInfo.cropHeight)
            $get(this.cropEditor.cropEditorEditPanel.landscapeRadioId).checked = true;
        else
            $get(this.cropEditor.cropEditorEditPanel.portraitRadioId).checked = true;
    },

    clearAllSelected: function()
    {
        for (i = 0; i < this.cropOrderItemArray.length; i++)
        {
            this.cropOrderItemArray[i].setToUnSelected();
        }
    },

    getCurrentCropOrderItem: function()
    {
        return this.cropOrderItemArray[this.selectedCropOrderItemArrayPosition];
    },

    getOrderItemCropWrappers: function()
    {
        var returnWrapperArray = new Array();
        for (i = 0; i < this.cropOrderItemArray.length; i++)
        {
            Array.add(returnWrapperArray, this.cropOrderItemArray[i].getOrderItemCropWrapper());
        }
        return returnWrapperArray;
    },

    getCartItemByRPId: function(rpId)
    {
        for (i = 0; i < this.cropOrderItemArray.length; i++)
        {
            if (this.cropOrderItemArray[i].orderItem.EncRetailerProductID == rpId)
            {
                return this.cropOrderItemArray[i];
            }
        }
        return null;
    },

    browserIsFirefox: function()
    {
        return (navigator.userAgent.indexOf("Firefox") != -1);
    },

    browserIsIE7: function()
    {
        var agent = navigator.userAgent.toLowerCase();
        var is_ie = ((agent.indexOf("msie") != -1) && (agent.indexOf("opera") == -1));
        var is_ie7 = (is_ie && agent.indexOf("msie 7.0") != -1);
        return is_ie7;
    }
};