
Slice.prototype.validate = Slice_validate;
Slice.prototype.getId = Slice_getId;
Slice.prototype.getTitle = Slice_getTitle;
Slice.prototype.getElement = Slice_getElement;
Slice.prototype.isSkuSelected = Slice_isSkuSelected;
Slice.prototype.filterSlices = Slice_filterSlices;
Slice.prototype.getSelectedValue = Slice_getSelectedValue;
Slice.prototype.getSelectedSkuData = Slice_getSelectedSkuData;
Slice.prototype.isDefaultSelected = Slice_isDefaultSelected;
Slice.prototype.getSkuDataMap = Slice_getSkuDataMap;
Slice.prototype.getOptions = Slice_getOptions;
Slice.prototype.showError = Slice_showError;
Slice.prototype.hideError = Slice_hideError;

function Slice(id, pid, title)
{
    this.elementId = id;
    this.pid = pid;
    this.errorId = pid + "_" + id + "Error";
    this.title = title;
}

function Slice_getId()
{
    return this.elementId;
}

function Slice_getTitle()
{
    return this.title;
}

function Slice_getElement()
{
    return document.getElementById(this.pid + "_" + this.elementId);
}

function Slice_isSkuSelected(sku)
{
    var ret = false;
    var val = this.getSelectedValue();
    if(val != "0")
    {
        var skuData = sliceSkuData[this.elementId];
        var skuMap = skuData[val].skuMap;
        ret = skuMap[sku];
    }
    return ret;
}

function Slice_validate()
{
    var value = this.getSelectedValue();
    if(value == 0)
    {
        //alert("Please select a " + this.getTitle());
        this.showError();
        return false;
    }
    return true;
}

function Slice_filterSlices()
{
    var filters = new Array();
    var slices = sliceData.slices;
    for(var sid in slices)
    {
        var slice = slices[sid];
        if(slice != this)
        {
            if(!slice.isDefaultSelected())
            {
                filters.push(slice);
            }
        }
    }

    var currentSelection = this.getSelectedValue();
    var options = this.getOptions();
    options.length = 0;
    var option = new Option();
    options[options.length] = option;
    option.innerHTML = this.title;
    option.value = "0";

    var skuDataMap = this.getSkuDataMap();
    for(var sd in skuDataMap)
    {
        var skuMap = skuDataMap[sd].skuMap;
        var validOption = false;
        for(var sku in skuMap)
        {
            if(skuMap[sku])
            {
                var s = 0;
                for(s=0; s<filters.length; ++s)
                {
                    if(!filters[s].isSkuSelected(sku))
                    {
                        break;
                    }
                }
                if(s == filters.length)
                {
                    validOption = true;
                    break;
                }
            }
        }
        if(validOption)
        {
            var opt = new Option();
            options[options.length] = opt;
            opt.innerHTML = skuDataMap[sd].title;
            opt.value = sd;
            if(sd == currentSelection)
            {
                opt.selected = true;
            }
        }
    }
}

function Slice_getSelectedValue()
{
    return this.getElement().value;
}

function Slice_getSelectedSkuData()
{
    var value = this.getSelectedValue();
    var skuData = this.getSkuDataMap();
    return skuData[value];
}

function Slice_isDefaultSelected()
{
    return this.getSelectedValue() == "0";
}

function Slice_getSkuDataMap()
{
    return sliceSkuData[this.elementId];
}

function Slice_getOptions(options)
{
    return this.getElement().options;
}

function Slice_showError()
{
    showElement(this.errorId);
}

function Slice_hideError()
{
    hideElement(this.errorId);
}
