/*
	Author: Andrew Saunders
	Description: Overides the display characteristics of radio and checkbox elements, relying purely on the toggled formatting of associated the label.
	Requirements: A CSS 'checked' class is required for checked state.
*/
FL.fieldFormatter = FL.fieldFormatter ? FL.fieldFormatter : {
	// Configurables:
	targetElement: null,
	// Non-configurables:
	radioElements: null,
	checkboxElements: null,
	init: function(){
		
		FL.fieldFormatter.radioElements = $("input[type='radio']", FL.fieldFormatter.targetElement);
		FL.fieldFormatter.checkboxElements = $("input[type='checkbox']", FL.fieldFormatter.targetElement);
		
		$(FL.fieldFormatter.radioElements).bind('click', FL.fieldFormatter.handleChecked);
		$(FL.fieldFormatter.checkboxElements).bind('click', FL.fieldFormatter.handleTicked);
		
		FL.fieldFormatter.handleChecked();
		FL.fieldFormatter.handleTicked();
	},
	handleChecked: function(event){
		$.each(FL.fieldFormatter.radioElements,function(i,el){
			
			if ($(el).attr("checked")) {
				$("label[for='" + el.id + "']").addClass('checked');
			} else {
				$("label[for='" + el.id + "']").removeClass('checked');
			}
			
		});
		
	},
	handleTicked: function(){
		$.each(FL.fieldFormatter.checkboxElements,function(i,el){
			
			if ($(el).attr("checked")) {
				$("label[for='" + el.id + "']").addClass('checked');
			} else {
				$("label[for='" + el.id + "']").removeClass('checked');
			}
			
		});
	}
}
/*
	Author: Andrew Saunders
	Description: Show/Hide toggle class for navigation filter options
*/
FL.navExpander = FL.navExpander ? FL.navExpander : {
	// Configurables:
	maxDisplay: 5,
	targetElement: null,
	moreButton: '<div class="btn-more">More</div>',
	lessButton: '<div class="btn-less">Less</div>',
	// Non-configurable:
	fieldsetElements: null,
	init: function(){
		
		FL.navExpander.fieldsetElements = $(".nav-subfilter fieldset", FL.navExpander.targetElement);
		
		FL.navExpander.contract();
				
	},
	expand: function(event){

		$("label", $(event.target).parent()).slideDown();
		$(event.target).replaceWith($(FL.navExpander.lessButton).bind('click', FL.navExpander.contract));

	},
	contract: function(event){
		if (event === undefined) {
			$.each(FL.navExpander.fieldsetElements, function(i, fieldsetEl){
				
				var labelsCount = $("label", fieldsetEl).length;
				var uncheckedLabels = $("label[class!='checked']", fieldsetEl);
				
				if(uncheckedLabels.length > 0 && labelsCount > FL.navExpander.maxDisplay)		
					$(fieldsetEl).append($(FL.navExpander.moreButton).bind('click', FL.navExpander.expand));
								
				for(i=labelsCount+1;i>FL.navExpander.maxDisplay;i--){
					$(uncheckedLabels[uncheckedLabels.length--]).hide(); //hide quickly to avoid slide on load.
				}
			})
			
		} else {
			
			var labelsCount = $("label", event.target.parentNode).length;
			var uncheckedLabels = $("label[class!='checked']", event.target.parentNode);
			
			for(i=labelsCount+1;i>FL.navExpander.maxDisplay;i--){
				$(uncheckedLabels[uncheckedLabels.length--]).slideUp();
			}
			
			$(event.target).replaceWith($(FL.navExpander.moreButton).bind('click', FL.navExpander.expand));
				
		}
	}
};

/*
Author: Ben Dnnkley
Description: Ajax loading for product pages
*/
FL.filterAjax = FL.filterAjax ? FL.filterAjax : {
	// Configurables:
	targetElement: null,
	// Non-configurable:
	returnUrl: '',

	imageSelector: function(){
		var image_selector = 0;
		var image_item = 0;
	
		$('#primary_image_selector>li').each( function() { image_selector++; $(this).addClass(image_selector+''); });
		$('#primary_image>li').each( function() { image_item++; $(this).addClass(image_item+''); });
	
		
		$('#primary_image_selector>li.current').hide();
		
		$('#primary_image_selector>li').click( function() { 
			var image_selector = $(this).attr('class'); 
			
			$(this).removeClass('current');
			$(this).siblings().removeClass('current');
			
			$('#primary_image>li').hide();
			$('#primary_image>li.'+image_selector).show();
			$('#primary_image>li.'+image_selector+'>img').hide();
			$('#primary_image>li.'+image_selector+'>img').show();
			
			

			

			
			$(this).hide();	
			
			$(this).siblings().show();
			
		});
	
		/* t */
	
		$('#primary_image_selector>li a').click( function(e) { e.preventDefault(); });
	},
	ajaxLoadFull: function(location){
		$('#page_content').fadeTo('fast', 0, function(){
			$('#page_content').load(location, FL.filterAjax.onloadDetail);
		});
		return false;
	},	
	ajaxLoadBack: function(location, omit_fade){
		loader = function() {
			$('#page_content').load(location, function(){
				FL.initFilter();
			});
		};
		
		if (omit_fade)
		{
			loader();
		} else {
			$('#page_content').fadeTo('fast', 0, loader);
		}
		return false;
	},
	onloadDetail: function(){
		$('form#colour_selector_form').attr('action', $('form#colour_selector_form').attr('action') + FL.filterAjax.returnUrl);
	
		$("#colour_selector").bind("change", function() {
			var id = $('select#colour_selector').val();
			$('#page_content').fadeTo('fast', 0, function(){
				$('#page_content').load('/products/detail/'+id+'/1/ajax', FL.filterAjax.onloadDetail);
			});
		});
		
		var likes = $('div#like_content a');
		likes.each(function(){
			var href = $(this).attr('href');
			$(this).click(function(){
				$.address.value(href + '/1/ajax'); 
				return FL.filterAjax.ajaxLoadFull(href + '/1/ajax');
			});
		});
		FL.filterAjax.imageSelector();

		var script = 'http://s7.addthis.com/js/250/addthis_widget.js#domready=1';
		if (window.addthis){
		    window.addthis = null;
		}
		$.getScript( script );

		$('#detail_back').click(function(){
			$.address.value('/products/index/back'+FL.filterAjax.returnUrl); 
			return FL.filterAjax.ajaxLoadBack('/products/index/back'+FL.filterAjax.returnUrl);
		});
		
		$('#page_content').fadeTo('fast', 1);
	},
	init: function(){
		
		//FL.filterAjax.targetElement.find('fieldset.submit').hide();
		FL.filterAjax.targetElement.find('input').bind('change', FL.filterAjax.filterClicked);
		
		FL.filterAjax.onloadIndex();
		
	},
	onloadIndex: function(){

		var product_links = $('a.product_image');
		var re = /detail\/([0-9]+)/;
		product_links.each(function(){
			var id = re.exec($(this).attr('href'))[1];
			$(this).click(function(){
				$.address.value('/products/detail/'+id+'/1/ajax'); 
				return FL.filterAjax.ajaxLoadFull('/products/detail/'+id+'/1/ajax');
			});
		});
		
		var re2 = /page:([0-9]+)/;
		var pagination_links = $('#result_pagination a');
		pagination_links.each(function(){
			var href = $(this).attr('href');
			var page = re2.exec(href)[1];
			$(this).click(function(){
				FL.filterAjax.submitForm(page);
				$.address.value('/products/index/back'+FL.filterAjax.returnUrl); 
				return false;
			});
		});
		$('#results').fadeTo('fast', 1);
		$('#page_content').fadeTo('fast', 1);
	},
	filterClicked: function(event){
		FL.filterAjax.submitForm();
		$.address.value('/products/index/back'+FL.filterAjax.returnUrl); 
	},
	ajaxLoadDetail: function(location) {
		$('#results').fadeTo('fast', 0, function(){
			$('#results').load(location, function(){
				FL.filterAjax.onloadIndex();
			});
		});
	},
	submitForm: function(page) {
		page = typeof(page) != 'undefined' ? page : undefined;
		
		var product_type = FL.filterAjax.targetElement.find('input:checkbox:checked[name=product_type[]]');
		var p_types = [];
		product_type.each(function(){p_types.push($(this).val());});
		product_type = p_types.join(',');
		
		var product_gender = FL.filterAjax.targetElement.find('input:checkbox:checked[name=product_gender[]]');
		var p_genders = [];
		product_gender.each(function(){p_genders.push($(this).val());});
		product_gender = p_genders.join(',');
		
		var product_brand = FL.filterAjax.targetElement.find('input:checkbox:checked[name=product_brand[]]');
		var p_brands = [];
		product_brand.each(function(){p_brands.push($(this).val());});
		product_brand = p_brands.join(',');
		
		var product_category = FL.filterAjax.targetElement.find('input:checkbox:checked[name=product_category[]]');
		var p_cats = [];
		product_category.each(function(){p_cats.push($(this).val());});
		product_category = p_cats.join(',');
		
		var url="/products/index/ajax";
		return_url = product_type.length > 0 ? "/product_type:" + product_type:"";
		return_url += product_gender.length > 0 ? "/product_gender:" + product_gender:"";
		return_url += product_category.length > 0 ? "/product_category:" + product_category:"";
		return_url += product_brand.length > 0 ? "/product_brand:" + product_brand:"";
		return_url += page ? "/page:" + page:"";
		
		FL.filterAjax.returnUrl = return_url;
		FL.filterAjax.ajaxLoadDetail(url + return_url);
	}
};