/*requires prototype.js*/

var option_line_array      = [];
var default_price_grid     = [];
var default_category_array = [];

var ProductOptionLine = Class.create();
ProductOptionLine.prototype = {
    initialize : function(args) {
        //constructor
        this.option_array = [];
        this.price_grid_array = [];
    },

    item_code         : '',
    prod_to_option_id : '',

    addOption : function(v_option) {
        this.option_array.push(v_option);
    },

    addPrice : function(v_price) {
        this.price_grid_array.push(v_price);
    },

    getPrice : function(v_currency, v_category) {
        var price;
        var cur_price;
        var i;
        for (i=0;i<this.price_grid_array.length;i++) {
            cur_price = this.price_grid_array[i];

            if (cur_price.currency == v_currency && cur_price.category == v_category) {
                return cur_price.price;
            }
        }

        return false;//reaches here if price could not be located
    },

    getWasPrice : function(v_currency, v_category) {
        var cur_price;
        var i;
        for (i=0;i<this.price_grid_array.length;i++) {
            cur_price = this.price_grid_array[i];

            if (cur_price.currency == v_currency && cur_price.category == v_category) {
                return cur_price.was_price;
            }
        }

        return false;//reaches here if price could not be located
    },

    removeOptionByCategory : function(v_cat_name) {
        var i;

        for (i=0;i<this.option_array.length;i++) {
            if (this.option_array[i].getCategoryName() == v_cat_name) {
                this.option_array[i] = null;
            }
        }

        this.option_array = this.option_array.compact();
    }
}

var PriceGrid = Class.create();
PriceGrid.prototype = {
    initialize : function(args) {
        //contructor
    },

    prod_to_option_id : '',
    price : '',
    was_price : '',
    currency : '',
    category : ''
}

var ProductOption = Class.create();
ProductOption.prototype = {
    initialize : function(args) {
        //constructor
    },

    prod_option_id          : '',
    prod_option_category_id : '',
    value                   : '',
    option_category         : '',
    prod_to_option_id       : '',

    addCategory : function(v_category) {
        this.option_category = v_category;
    },

    getCategoryName : function() {
        return this.option_category.name;
    }
}

var ProductOptionCategory = Class.create();
ProductOptionCategory.prototype = {
    initialize : function(args) {
        //constructor
    },

    prod_option_category_id : '',
    name : '',
    type : ''
}

/****** function definitions ******/

function addDefaultPrice(v_currency, v_category)
{
    var tmp_price_grid = new PriceGrid();
    tmp_price_grid.currency = v_currency;
    tmp_price_grid.category = v_category;

    default_price_grid.push(tmp_price_grid);
}

function addNewLine()
{
    //check for at least one price
    var i;
    var cur_price;
    var price_found = false;
    var price_value;
    for (i=0;i<default_price_grid.length && !price_found;i++) {
        cur_price = default_price_grid[i];

        price_value = $('price_'+cur_price.currency+'_'+cur_price.category).value;

        if (price_value) {
            price_found = true;
        }
    }
    if (!price_found) {
        alert('Please be sure enter a price!');
        return;
    }

    if (!$('item_code').value) {
        alert('Please be sure to enter an item code!');
        return;
    }

    //save to line array
    var new_line = new ProductOptionLine();

    var cur_cat;
    for (i=0;i<default_category_array.length;i++) {
        cur_cat = default_category_array[i];

        var new_category = new ProductOptionCategory();
        new_category.name = cur_cat;

        var new_option = new ProductOption();
        new_option.addCategory(new_category);
        new_option.value = $('cat_'+cur_cat).value;

        //replace " with \"
        new_option.value = new_option.value.replace(/\"/, "&quot;");

        new_line.addOption(new_option);
    }

    //var was_price = $('price_CAN_Retail_was_price').value;

    for (i=0;i<default_price_grid.length;i++) {
        cur_price = default_price_grid[i];

        price_value = $('price_'+cur_price.currency+'_'+cur_price.category).value;

        var new_price = new PriceGrid();
        new_price.currency = cur_price.currency;
        new_price.category = cur_price.category;
        new_price.price    = price_value;

        //if (cur_price.currency == 'CAN' && cur_price.category == 'Retail')
        //    new_price.was_price = was_price
        //else
            new_price.was_price = '0.0';

        new_line.addPrice(new_price);
    }

    new_line.item_code = $('item_code').value;

    option_line_array.push(new_line);

    renderOptions();
}

function removeLine(v_index)
{
    option_line_array[v_index] = null;
    option_line_array = option_line_array.compact();

    renderOptions();
}

function deduceDefaultCategories()
{
    //collect all available options
    var option_category_array = [];
    for (i=0;i<option_line_array.length;i++) {
        cur_line = option_line_array[i];

        var j;
        for (j=0;j<cur_line.option_array.length;j++) {
            var cur_option = cur_line.option_array[j];

            var category_name = cur_option.getCategoryName();


            //attempt to find in option cat array
            var k;
            var found = false;
            for (k=0;k<option_category_array.length && !found;k++) {
                var cur_opt = option_category_array[k];

                if (cur_opt == category_name) {
                    found = true;
                }
            }
            if (!found) {
                option_category_array.push(category_name);
            }
        }
    }

    default_category_array = option_category_array;
}

function addCategoryName(v_cat_name)
{
    if (v_cat_name) {
        var i;

        default_category_array.push(v_cat_name);

        for (i=0;i<option_line_array.length;i++) {
            var cur_line = option_line_array[i];

            var new_category = new ProductOptionCategory();
            new_category.name = v_cat_name;

            var new_option = new ProductOption();
            new_option.addCategory(new_category);

            cur_line.addOption(new_option);
        }

        renderOptions();
    }
}

function removeCategoryName(v_cat_name)
{
    if (v_cat_name) {
        var i;

        for (i=0;i<default_category_array.length;i++) {
            if (default_category_array[i] == v_cat_name) {
                default_category_array[i] = null;
            }
        }
        default_category_array = default_category_array.compact();

        for (i=0;i<option_line_array.length;i++) {
            var cur_line = option_line_array[i];

            cur_line.removeOptionByCategory(v_cat_name);
        }

        renderOptions();
    }
}

function renderOptions()
{
    $('option_listing').innerHTML = '';

    var i;
    var cur_line;
    var code_array = [];

    var option_category_array = default_category_array;

    //render html table of options
    code_array.push("<table cellpadding=\"5\">");
    code_array.push("<tr>");
        //add cat names
        for (i=0;i<option_category_array.length;i++) {
            code_array.push("<th>"+option_category_array[i]+" <a onclick=\"removeCategoryName('"+option_category_array[i]+"');\" href=\"javascript:void(0);\" title=\"remove column\">[x]</a></th>");
        }
        //item code
        code_array.push("<th>Item Code</th>");
        //price grid
        for (i=0;i<default_price_grid.length;i++) {
            var cur_price = default_price_grid[i];
            code_array.push("<th>"+cur_price.category.substring(0, 3)+" "+cur_price.currency+"</th>");
        }

        //code_array.push("<th>Old Retail CAN</th>");
        //code_array.push("<th></th>");

        //add option lines
        for (i=0;i<option_line_array.length;i++) {
            cur_line = option_line_array[i];

            code_array.push("<tr>");

            //options
            var j;
            for (j=0;j<cur_line.option_array.length;j++) {
                var cur_option = cur_line.option_array[j];
                code_array.push("<td><input name=\"option_line["+i+"][category]["+cur_option.getCategoryName()+"]\" type=\"text\" size=\"5\" value=\""+cur_option.value+"\" /></td>");
            }

            //item code
            code_array.push("<td><input name=\"option_line["+i+"][item_code]\" type=\"text\" size=\"5\" value=\""+cur_line.item_code+"\" /></td>");

            //prices
            for (j=0;j<default_price_grid.length;j++) {
                var price_value = cur_line.getPrice(default_price_grid[j].currency, default_price_grid[j].category);
                code_array.push("<td><input name=\"option_line["+i+"][price]["+default_price_grid[j].category+"]["+default_price_grid[j].currency+"][price]\" type=\"text\" size=\"5\" value=\""+price_value+"\" /></td>");
            }

            //retail was price - m&b only
            //var was_price = cur_line.getWasPrice('CAN', 'Retail');
            //code_array.push("<td><input name=\"option_line[" + i + "][price][Retail][CAN][was_price]\" type=\"text\" size=\"5\" value=\"" + was_price + "\" /></td>");

            code_array.push("<td><a href=\"javascript:void(0);\" onclick=\"removeLine("+i+");\">Remove</a></td>");
            code_array.push("</tr>");
        }

        //add new line
        code_array.push("<tr>");

        var j;
        for (j=0;j<default_category_array.length;j++) {
            code_array.push("<td><input id=\"cat_"+default_category_array[j]+"\" type=\"text\" size=\"5\" value=\"\" /></td>");
        }

        //item code
        code_array.push("<td><input id=\"item_code\" type=\"text\" size=\"5\" value=\"\" /></td>");

        //prices
        for (j=0;j<default_price_grid.length;j++) {
            var cur_price = default_price_grid[j];
            code_array.push("<td><input id=\"price_"+cur_price.currency+"_"+cur_price.category+"\" type=\"text\" size=\"5\" value=\"\" /></td>");
        }

        //retail was price
        //code_array.push("<td><input id=\"price_CAN_Retail_was_price\" type=\"text\" size=\"5\" value=\"\" /></td>");

        code_array.push("<td><a href=\"javascript:void(0);\" onclick=\"addNewLine();\">Add New</a></td>");

        code_array.push("</tr>");

    code_array.push("</tr>");
    code_array.push("</table>");

    $('option_listing').innerHTML = code_array.join('\n');
}

function updateCategorySelection(v_toggle, v_cat_id)
{
    var aCat = [];

    if ($('category_id').value) {
        aCat = $('category_id').value.split(',');
    }

    if (v_toggle) {
        //add to cat array
        aCat.push(v_cat_id);
    } else {
        //remove
        aCat = aCat.without(v_cat_id);
    }

    $('category_id').value = aCat.join(',');

    //alert(aCat.inspect());
}