(function(jq){
	jq(document).ready(function(){
	
		Accordion = $.klass({
					
			TRIGGER: '<h3><a href="#" rel="@cat@">@cat@</a></h3>',
			PRODUCT: '<li><a rel="@rel@" href="#">@product@</a></li>',
			
			results: {},

		
			initialize: function() {
				this.getFile('includes/js/categories.js', this.draw);
			},
			
			
			getFile: function(url, callback) {
				var self = this;
				jq.getJSON(url, function(json) {
					self.results = json.ResultSet;
					jq(document).trigger('productsload', json.ResultSet);
					callback.call(self);
				});
			},
			
			
			getImages: function() {
				var arr = [];
				jq.each(this.results, function() {
					jq.each(this, function() {
						if(this.images !== undefined) {
							jq.merge(arr, this.images);
						};
					});
				});
				return arr;
			},
			
			
			preload: function() {
				jq.each(this.getImages(), function() {
					var img = new Image();
					img.onload = function() {
						//console.log(img);
					};
					img.src = 'images/products/'+this;
				});
			},
			
			
			draw: function(){
				var self = this;
				//this.preload();
				jq.each(this.results, function(category, products){
					var html = [];
					var trigger = self.TRIGGER.slice(0, self.TRIGGER.length);
					html.push(trigger.replace(/@cat@/g, category));
					jq.each(products, function(i, value) {
						arguments.callee.list = arguments.callee.list || [];
						var product = self.PRODUCT.slice(0, self.PRODUCT.length);
						product = product.replace(/@product@/g, value.title);
						product = product.replace(/@rel@/g, 
							category.toLowerCase().replace(/\s/g, '-')+'$'+i
						);
						arguments.callee.list.push(product);
						if (i+1 === products.length) {
							html.push(
								'<div class="categories">\n<ul>\n'+
									arguments.callee.list.join('\n')+
								'</ul>\n</div>\n'
							);
						}
					});
					jq(self.element).append(html.join('\n'));
					jq('.categories ul li a').eq(0).addClass('active');
				});
				jq("#accordion").accordion({  
					active: false, autoHeight: false, collapsible: true, animated: 'easeout', active: 0
				});
			}
		});
		
		
		
		Trigger = $.klass({
		
			initialize: function() {
				//console.log('Navigation created');
			},
			
			onclick: function(e) {
				jq('.categories a').attr('class', '');
				jq(e.target).attr('class', 'active');
				var a = jq(this.element).attr('rel').split('$');
				jq(document).trigger('productchange', {index: a[1], category: a[0]});
				return false;
			}
			
		});
	})
})(jQuery);

