/* Namespace checks */
if(typeof(SOS) == 'undefined'){ SOS = {}; }
if(typeof(SOS.Widgets) == 'undefined'){ SOS.Widgets = {}; }

/* Dependency checks */
SOS.Widgets.MultiSelect__deps = [];
if(typeof(JSAN) != 'undefined')
{
	for(var key in SOS.Widgets.MultiSelect__deps)
	{
		JSAN.require(SOS.Widgets.MultiSelect__deps[key]);
	}
}
else
{
	for(var key in SOS.Widgets.MultiSelect__deps)
	{
		if(typeof(window[SOS.Widgets.MultiSelect__deps[key]]) == 'undefined')
		{
			throw new Error(SOS.Widgets.MultiSelect__deps[key] + ' not loaded.');
		}
	}
}
delete SOS.Widgets.MultiSelect__deps;

/* Class definition */
SOS.Widgets.MultiSelect = function(sbSelector, sSelector, bSelector, pSelector, hasPrices, data)
{
	if($(sbSelector+","+sSelector+","+bSelector+","+pSelector).size() != 4)
	{
		throw new Error("Invalid Setup Parameters");
	}
	
	//set variables
	var self = this;
	this.sbSelector = sbSelector;
	this.sizeSelect = $(sSelector).get(0);
	this.backgroundSelect = $(bSelector).get(0);
	this.priceSpan = $(pSelector).get(0);
	this.hasPrices = hasPrices;
	this.data = data;
	
	$(self.sbSelector).parent().remove();
	$(self.sizeSelect).parent().parent().show();		

	$(self.sizeSelect).empty();		
	self.sizeSelect.backgrounds = {};		
	for(var i in data)
	{
		$(self.sizeSelect).addOption(data[i].id, data[i].name);
		self.sizeSelect.backgrounds[data[i].id] = data[i].backgrounds;
	}	
		
	$(self.backgroundSelect).sortOptions(false);
	$(self.sizeSelect).children().get(0).selected = true;
	$(self.sizeSelect).change(function() 
	{
		var oldValue = self.backgroundSelect.value;
		
		$(self.backgroundSelect).empty();
		self.backgroundSelect.prices = {};
		self.backgroundSelect.pricingtable = {};
		var backgrounds = this.backgrounds[this.value];
		for(var i in backgrounds)
		{
			$(self.backgroundSelect).addOption(backgrounds[i].id, backgrounds[i].name);

			if(self.hasPrices)
			{
				self.backgroundSelect.prices[backgrounds[i].id] = backgrounds[i].pricing.price;
				self.backgroundSelect.pricingtable[backgrounds[i].id] = backgrounds[i].pricing.table;
			}
		}

		$(self.backgroundSelect).sortOptions(true);
		$(self.backgroundSelect).children().get(0).selected = true;			
		$(self.backgroundSelect).selectOptions(oldValue);
		
		$(self.backgroundSelect).change();
	});					
	
	if(self.hasPrices)
	{		
		$(self.backgroundSelect).change(function() 
		{
			var price = document.createTextNode(this.prices[this.value]);
			var pricetable = this.pricingtable[this.value];
			if (pricetable)
			{
				$(".price-table").hide();
				$(pricetable).fadeIn("slow");
				$(self.priceSpan).hide();
			}
			else
			{
				$(self.priceSpan).show().empty().append(price);
			}
		});
	}
	else
	{
		$(self.priceSpan).parent().remove();
	}
	
	$(self.sizeSelect).change();
}