// 8< ---[rita.js]---

var rita=rita||{}
var self=rita
rita.$=jQuery
rita.ROOT_PATH=undefined
rita.LANG=(((window.location.href.indexOf('/fr/') != -1) && 'fr') || 'en')
rita.INVENTORY=undefined
rita.Inventory=extend.Class({
	name:'rita.Inventory', parent:undefined,
	shared:{
		URL:'/../api/inventory.php',
		I:undefined
	},
	properties:{
		products:undefined,
		isLoaded:undefined
	},
	initialize:function(){
		var self=this
		self.products = {}
		self.isLoaded = false
		self.getClass().I = self;
		rita.INVENTORY = self;
	},
	methods:{
		load:function(){
			var self=this
			if ( (! self.isLoaded) )
			{
				rita.$.ajax({'url':(rita.ROOT_PATH + self.getClass().URL), 'success':function(d, s, r){
					self.onDataReceived(d, s, r)
				}})
			}
		},
		onDataReceived:function(data, status, request){
			var self=this
			var get_row_value=function(row, defval){
				if ( (extend.isDefined(row) && extend.isDefined(row.v)) )
				{
					return row.v
				}
				else if ( true )
				{
					return defval
				}
			};
			if ( (! self.isLoaded) )
			{
				var json=extend.slice(data,'google.visualization.Query.setResponse('.length,-2);
				var data=eval((('(' + json) + ')'));
				var rows=data.table.rows;
				var current_product=undefined;
				var current_option=undefined;
				var current_qty=undefined;
				var current_price=undefined;
				extend.iterate(rows, function(row_data, i){
					var row=row_data.c;
					if ( row[1].v )
					{
						current_product = (row[0].v || current_product);
						current_option = get_row_value(row[1], 'standard');
						var name_en=get_row_value(row[2], 'unnamed');
						var name_fr=get_row_value(row[3], name_en);
						current_qty = get_row_value(row[4], 0);
						current_cmd = get_row_value(row[5], 0);
						current_price = get_row_value(row[6], 0);
						if ( (! extend.isDefined(self.products[current_product])) )
						{
							self.products[current_product] = {};
						}
						var product=self.products[current_product];
						product[current_option] = {'code':current_option, 'product':current_product, 'fr':name_fr, 'en':name_en, 'price':current_price, 'qty':current_qty, 'cmd':current_cmd, 'index':(i + 2)};
					}
				}, self)
				rita.$(document).trigger('inventory.loaded')
			}
			self.isLoaded = true;
		},
		listProducts:function(){
			var self=this
			var keys=[];
			extend.iterate(self.products, function(_, k){
				keys.push(k)
			}, self)
			keys.sort()
			return keys
		},
		listOptions:function(product){
			var self=this
			var keys=[];
			extend.iterate(self.products[product], function(_, k){
				keys.push(k)
			}, self)
			keys.sort()
			return keys
		}
	}
})
rita.OrderForm=extend.Class({
	name:'rita.OrderForm', parent:undefined,
	properties:{
		pid:undefined,
		ui:undefined,
		uis:undefined
	},
	initialize:function(selector){
		var self=this
		selector = selector === undefined ? '.OrderForm' : selector
		self.pid = undefined
		self.ui = undefined
		self.uis = {}
		self.ui = rita.$(selector);
		self.bindUI()
		window.setTimeout(function(){
			if ( rita.$('.when-ok', self.ui).hasClass('hidden') )
			{
				rita.$('.when-loading', self.ui).addClass('hidden')
				rita.$('.when-error', self.ui).removeClass('hidden')
			}
		}, (1000 * 10))
	},
	methods:{
		setProductId:function(pid){
			var self=this
			self.pid = pid;
			if ( rita.INVENTORY.isLoaded )
			{
				self.updateOptions()
			}
			else if ( true )
			{
				rita.$(document).bind('inventory.loaded', function(){
					self.updateOptions()
				})
				rita.INVENTORY.load()
			}
			return this
		},
		bindUI:function(){
			var self=this
			self.uis.qtyField = rita.$('input[name=quantity]', self.ui);
			self.uis.itemField = rita.$('input[name=item_number]', self.ui);
			self.uis.priceField = rita.$('input[name=amount]', self.ui);
			self.uis.priceText = rita.$('.out-price', self.ui);
			self.uis.submit = rita.$('input[type=submit]', self.ui);
			self.uis.options = rita.$('.options-group select', self.ui);
			self.uis.optionsGrp = rita.$('.options-group', self.ui);
			self.uis.optTpl = rita.$('option.template', self.ui);
			self.uis.options.change(function(){
				self.onOptionSelected(this)
			})
			self.uis.qtyField.val('1').change(function(){
				self.checkQuantity()
				return false
			})
			rita.$('.do-add', self.ui).click(function(){
				self.uis.qtyField.val(('' + (parseInt(self.uis.qtyField.val()) + 1)))
				self.checkQuantity()
			})
			rita.$('.do-remove', self.ui).click(function(){
				self.uis.qtyField.val(('' + (parseInt(self.uis.qtyField.val()) - 1)))
				self.checkQuantity()
			})
		},
		updateOptions:function(){
			var self=this
			var options=rita.INVENTORY.listOptions(self.pid);
			if ( (options.length > 1) )
			{
				extend.iterate(options, function(option){
					var product=rita.INVENTORY.products[self.pid];
					var option_data=product[option];
					var o_ui=self.uis.optTpl.clone().removeClass('template').html(option_data[rita.LANG]);
					o_ui.attr({'value':option_data.code, 'qty':option_data.qty, 'price':option_data.price, 'i':option_data.index})
					self.uis.options.append(o_ui)
				}, self)
				self.uis.optTpl.remove()
				self.uis.optionsGrp.removeClass('hidden')
			}
			if ( rita.INVENTORY.products[self.pid] )
			{
				rita.$('.when-loading', self.ui).addClass('hidden')
				rita.$('.when-ok', self.ui).removeClass('hidden')
			}
			else if ( true )
			{
				rita.$('.when-loading', self.ui).addClass('hidden')
				rita.$('.when-error', self.ui).removeClass('hidden')
			}
			self.uis.options.trigger('change')
		},
		onOptionSelected:function(option){
			var self=this
			var product=rita.INVENTORY.products[self.pid];
			var opt_name=rita.$(option).val();
			self.uis.itemField.val(((((self.pid + '-') + opt_name) + '-') + rita.$(':selected', option).attr('i')))
			if ( extend.isDefined(product) )
			{
				var option=product[self.uis.options.val()];
				if ( extend.isDefined(option) )
				{
					var available=(parseInt(option.qty) - parseInt(option.cmd));
					var price=sprintf('$%0.2f', parseFloat(option.price));
					self.uis.priceText.html(price)
					self.uis.priceField.val(price)
					if ( (available <= 0) )
					{
						self.checkQuantity()
						self.setOutOfStock()
					}
					else if ( true )
					{
						self.checkQuantity()
						self.setAvailable()
					}
				}
			}
		},
		getAvailableQuantity:function(){
			var self=this
			var option=rita.INVENTORY.products[self.pid][self.uis.options.val()];
			return Math.max(0, (option.qty - option.cmd))
		},
		checkQuantity:function(){
			var self=this
			var n_qty=parseInt(self.uis.qtyField.val());
			if ( (('' + n_qty) == 'NaN') )
			{
				self.uis.qtyField.val('1')
			}
			else if ( (n_qty < 0) )
			{
				self.uis.qtyField.val('0')
			}
			else if ( (n_qty > self.getAvailableQuantity()) )
			{
				self.uis.qtyField.val(('' + self.getAvailableQuantity()))
			}
			else if ( true )
			{
				self.uis.qtyField.val(('' + n_qty))
			}
			n_qty = parseInt(self.uis.qtyField.val());
			self.uis.qtyField.val(('' + parseFloat(n_qty)))
			return n_qty
		},
		setOutOfStock:function(){
			var self=this
			self.uis.submit.attr('disabled')
			self.ui.addClass('is-soldOut')
			self.ui.removeClass('is-available')
		},
		setAvailable:function(){
			var self=this
			self.uis.submit.removeAttr('disabled')
			self.ui.addClass('is-available')
			self.ui.removeClass('is-soldOut')
		}
	},
	operations:{
		Bind:function(){
			var self = this;
			extend.iterate(rita.$('.OrderForm'), function(s){
				new rita.OrderForm(s)
			}, self)
		}
	}
})
rita.Categories=extend.Class({
	name:'rita.Categories', parent:undefined,
	shared:{
		thumbnails:[],
		categories:{}
	},
	operations:{
		setup:function(){
			var self = this;
			self.thumbnails = rita.$('.rita-portfolio .thumbnail');
			cui = rita.$('.rita-categories');
			var cat_tpl=rita.$('.template-category', cui);
			var sep_tpl=rita.$('.template-separator', cui);
			var res=self.categories;
			var cat_count=0;
			extend.iterate(self.thumbnails, function(thumbnail){
				var cat=rita.$.trim(rita.$('span.category', thumbnail).html().toLowerCase());
				rita.$(thumbnail).attr('category', cat)
				if ( extend.isDefined(res[cat]) )
				{
					res[cat] = (res[cat] + 1);
				}
				else if ( true )
				{
					res[cat] = 1;
					cat_count = (cat_count + 1);
				}
			}, self)
			var i=0;
			extend.iterate(res, function(count, name){
				var nui=cat_tpl.clone().removeClass('hidden').removeClass('template-category');
				rita.$('a', nui).attr('href', ('#' + name)).html((((name + ' (') + count) + ')'))
				rita.$('ul li.last', cui).before(nui)
				i = (i + 1);
				nui.click(function(){
					self.showCategory(name)
				})
			}, self)
			self.showCategory(rita.Location.getAnchor())
			rita.$('.do-showAllCategories').click(function(){
				self.showCategory()
			})
		},
		showCategory:function(name){
			var self = this;
			name = name === undefined ? undefined : name
			if ( (name == 'all') )
			{
				name = undefined;
			}
			if ( (extend.isDefined(name) && extend.isDefined(self.categories[name])) )
			{
				extend.iterate(self.thumbnails, function(tui){
					tui = rita.$(tui);
					if ( (tui.attr('category') == name) )
					{
						tui.removeClass('hidden')
					}
					else if ( true )
					{
						tui.addClass('hidden')
					}
				}, self)
			}
			else if ( true )
			{
				extend.iterate(self.thumbnails, function(tui){
					rita.$(tui).removeClass('hidden')
				}, self)
			}
		}
	}
})
rita.Location=extend.Class({
	name:'rita.Location', parent:undefined,
	operations:{
		getAnchor:function(){
			var self = this;
			var href=('' + window.location.href);
			if ( (href.indexOf('#') >= 0) )
			{
				href = extend.slice(href,(href.indexOf('#') + 1),undefined);
			}
			else if ( true )
			{
				href = undefined;
			}
			return href
		}
	}
})
rita.adjustWindow=	function(){
		var self=rita;
		var thumbnails=rita.$('.rita-content .thumbnail');
		var offset_left=105;
		var width=275;
		var total_width=(thumbnails.length * width);
		var body_width=rita.$('body').width();
		var final_w=((thumbnails.length * width) + 'px');
		if ( (total_width >= body_width) )
		{
			final_w = (Math.floor(((body_width - offset_left) / parseFloat(width))) * width);
		}
		rita.$('.foreground-section').css('min-height', (window.innerHeight - 130))
		rita.$('.background-section').css('min-height', (rita.$('body').height() + 19))
	}
rita.setRootPath=	function(path){
		var self=rita;
		rita.ROOT_PATH = path;
	}
rita.init=	function(){
		var self=rita;
		new rita.Inventory()
		rita.$(window).resize(function(){
			rita.adjustWindow()
		})
		rita.$(document).ready(function(){
			rita.$('.back-to-top a').live('click', function(){
				window.scrollTo(0, 0)
				return false
			})
			rita.adjustWindow()
			rita.Categories.setup()
		})
		window.setTimeout(rita.adjustWindow, 200)
	}
rita.init()


