/*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
	},
	
	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 : '',
	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);
	}
	
	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;
		
		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+" "+cur_price.currency+"</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+"]\" type=\"text\" size=\"5\" value=\""+price_value+"\" /></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>");
		}
		
		code_array.push("<td><a href=\"javascript:void(0);\" onclick=\"addNewLine();\">Add This Line</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());
}