//////////////////////////////////////////////////////////////////////
// Plugin: fmBasket
// Purpose: Handle basket interactions throughout the site
//////////////////////////////////////////////////////////////////////
(function($){
 $.fn.fmRefine = function(options) {
  
  // A. set defaults
  var defaults = {
		max_price: 100,
		min_price: 0
  };
  
  var options = $.extend(defaults, options);
   
   
  return this.each(function() {
  	var obj = $(this);
	var objID = obj.attr('id');
	
	options.max_price = $('.facet-price-max').val();
	options.min_price = 0;
	
	$.fn.fmRefine.sliderStart(options, options.min_price,options.max_price);
	
	
	
	$('.facet-brand').live("click", function() {
		$('#refine-page').val(1);
		$.fn.fmRefine.collectFacets(options);
	});
	$('.facet-brand-link').live("click", function() {
		
		if($(this).prev('input').attr("checked")) {
			$(this).prev('input').attr("checked", ''); 
		} else {
			$(this).prev('input').attr("checked", "checked");	
		}

		
		$('#refine-page').val(1);
		$.fn.fmRefine.collectFacets(options);
		
		return false;
	});
	
	
	
	$('.facet-size').live("click", function() {
		$('#refine-page').val(1);
		$.fn.fmRefine.collectFacets(options);
		
		
	});
	$('.facet-size-link').live("click", function() {
		
		if($(this).prev('input').attr("checked")) {
			$(this).prev('input').attr("checked", ''); 
		} else {
			$(this).prev('input').attr("checked", "checked");	
		}

		
		$('#refine-page').val(1);
		$.fn.fmRefine.collectFacets(options);
		
		return false;
	});
	
	
	$('.facet-colour').live("click", function() {
		
		//$(this).children('input').attr("checked", 'checked'); 
		

		
		$('#refine-page').val(1);
		$.fn.fmRefine.collectFacets(options);
		
		return false;
	});
	
	$('.facet-colour-link').live("click", function() {
		
		if($(this).prev('input').attr("checked")) {
			$(this).prev('input').attr("checked", ''); 
		} else {
			$(this).prev('input').attr("checked", "checked");	
		}

		
		$('#refine-page').val(1);
		$.fn.fmRefine.collectFacets(options);
		
		return false;
	});
	
	$('.fm-facet h4').live('click', function() {
			$(this).next('div.fm-facet-list').slideToggle();					  
	});
	
	$('.np-links a').live('click', function() {
			
			var href = $(this).attr('href');
			var href_arr = href.split("?page=");
			
			
			$('#refine-page').val(href_arr[1]);
			$.fn.fmRefine.collectFacets(options);
			return false;				  
	});
	
	$('.order-by').change(function() {
		$('#refine-page').val(1);
		$.fn.fmRefine.collectFacets(options);
		
		
	});
	
	
	
  });
  
  
  
  
  
  
 };

// SCROLL MINI BASKET DOWN
$.fn.fmRefine.collectFacets = function(options) {
	
	var brand_ids = '';
	var brand_id = '';
	var price_min = 0;
	var price_max = 100000;
	var size_ids = '';
	var colour_ids = '';
	
	var params = new Object();
	
	
	$('.facet-brand:checked').each(function() {
		brand_ids += $(this).val() + ',';
	});
	
	if($('#refine-brand-id').val()) {
		brand_id += $('#refine-brand-id').val();
	}
	
	
	$('.facet-size:checked').each(function() {
		size_ids += $(this).val() + ',';
	});
	
	$('.facet-colour:checked').each(function() {
		colour_ids += $(this).val() + ',';
	});
	
		
	price_min = $(".fm-facet-list-slider").slider("values", 0);
	price_max = $(".fm-facet-list-slider").slider("values", 1);

	params.page = $("#refine-page").val();
	params.page_id = $("#refine-page-id").val();
	params.slug = $("#refine-page-slug").val();
	params.keyword = $("#refine-keyword").val();
	params.order = $(".order-by").val();
	
	params.price_min = price_min;
	//params.price_max = 30;
	params.sizes = size_ids;
	params.brand_ids = brand_ids;
	params.brand_id = brand_id;
	params.colours = colour_ids;
	
	options.params = params;
	
	
	var summary = price_min + " to " + price_max + "<br />";
	summary = summary + "sizes: " + size_ids + "<br />";
	summary = summary + "brands: " + brand_ids + "<br />";
	summary = summary + "brand: " + brand_id + "<br />";
	summary = summary + "page: " + params.page_id + "<br />";
	summary = summary + "colour: " + params.colours + "<br />";
	summary = summary + "keyword: " + params.keyword + "<br />";

	$('#summary').html(summary);
	//$('#summary').css('display', 'block');
	
	
	
	$.ajax({
		type: "POST",
		url: '/default/product/xml',
		dataType: "xml",
		data: params,
		success: function(xml) {
			
			
			$.fn.fmRefine.parseXml(options, xml, true);
			
		}
	});
	
	
	return false;
};

$.fn.fmRefine.collectFacetsPrice = function(options) {
	
	var brand_ids = '';
	var brand_id = '';
	var price_min = 0;
	var price_max = 100000;
	var colour_ids = '';
	var size_ids = '';
	var params = new Object();
	
	$('.facet-brand:checked').each(function() {
		brand_ids += $(this).val() + ',';
	});
	if($('#refine-brand-id').val()) {
		brand_id += $('#refine-brand-id').val();
	}
	$('.facet-size:checked').each(function() {
		size_ids += $(this).val() + ',';
	});
	
	$('.facet-size:checked').each(function() {
		size_ids += $(this).val() + ',';
	});
	
	$('.facet-colour:checked').each(function() {
		colour_ids += $(this).val() + ',';
	});
	
	price_min = $(".fm-facet-list-slider").slider("values", 0);
	price_max = $(".fm-facet-list-slider").slider("values", 1);

	
	params.page_id = $("#refine-page-id").val();
	params.slug = $("#refine-page-slug").val();
	params.price_min = price_min;
	params.price_max = price_max;
	params.sizes = size_ids;
	params.brand_ids = brand_ids;
	params.brand_id = brand_id;
	params.keyword = $("#refine-keyword").val();
	params.order = $(".order-by").val();
	params.colours = colour_ids;
	options.params = params;
	
	
	var summary = price_min + " to " + price_max + "<br />";
	summary = summary + "sizes: " + size_ids + "<br />";
	summary = summary + "brands: " + brand_ids + "<br />";
	summary = summary + "brand: " + brand_id + "<br />";
	summary = summary + "page: " + params.page_id + "<br />";
	summary = summary + "colour: " + params.colours + "<br />";
	summary = summary + "keyword: " + params.keyword + "<br />";

	$('#summary').html(summary);
	//$('#summary').css('display', 'block');
	
	
	
	
	
	$.ajax({
		type: "POST",
		url: '/default/product/xml',
		dataType: "xml",
		data: params,
		success: function(xml) {
			
			$.fn.fmRefine.parseXml(options, xml, false);
			
		}
	});
	
	
	return false;
};



// SCROLL MINI BASKET UP

$.fn.fmRefine.parseXml = function(options, xml, price_bol) {
	
	var output = '';
	var facets_node = $(xml).find('facets');
	var price_node = facets_node.find('price');
	var price_min = price_node.find('min').text();
	var price_max = price_node.find('max').text();
	
	
	var paging_node = $(xml).find('paging');
	
	$('.pagination-links').html(paging_node.text());
	
	var paging_summary_node = $(xml).find('pagination_summary');
	
	$('.pagination-summary').html(paging_summary_node.text());
	
	
	var output = '';
	
	if($(xml).find('item').length) {
		i=1;
		$(xml).find('item').each(function(){
			var title = $(this).find('product_title').text();	
			var price = $(this).find('sku_price').text();
			var was_price = $(this).find('sku_was_price').text();
			
			var filename = $(this).find('colour_filename').text();
			var is_featured = $(this).find('product_is_featured').text();
			var is_new = $(this).find('product_is_new').text();
			var is_sale = $(this).find('product_is_sale').text();
			
			
			
			var slug = $(this).find('product_slug').text();
			var colour = $(this).find('colour_title').text();
			var colour_slug = $(this).find('colour_slug').text();
			var page_slug = $(this).find('page_slug').text();
			var resultofmod = i % 3;
			
			if(i % 4 == 0 && i > 0) {
				
				output += '<div class="row last click-row">';
			} else {
				output += '<div class="row click-row">';	
			}
			
			if (is_sale > 0) {
				
				output += '<div class="sale"></div>';
			} else {
			
				if (is_featured > 0) {
					output += '<div class="offer"></div>';
				} else {
					if (is_new > 0) {
						output += '<div class="new"></div>';
					}	
				}
			
			}
			
			if(options.params.slug != '') {
				page_slug = options.params.slug;
			}
			output += '<div class="thumb">';
			output += '<a  href="/' + page_slug + '/product/'+slug+'/colour/'+colour_slug+'">';
			if (filename) {
				output += '<img src="/uploads/images/m/'+filename+'" />';
			}
			output += '</a>';
			output += '</div>';
				
			output += '<div class="text">';
			output += '<a class="title" href="/' + page_slug + '/product/'+slug+'/colour/'+colour_slug+'">';
			output += $.fn.fmRefine.limit(options, title)
			output += '<br />' + $.fn.fmRefine.limit(options, colour);
			output += '</a>';
			
			output += '<p class="price">&pound;' + price + '</p>';
			
			if (is_sale > 0) {
				output += '<p class="was-price">WAS &pound;' + was_price + '</p>';
			}
			
			output += '</div>';
			output += '</div>';
			
			i++;
		});
		
		var modulus = ($(xml).find('item').length % 4);
		var starter = ($(xml).find('item').length % 4)+1;
		var remaining_spaces = 0;
		
		if(modulus > 0) {
			remaining_spaces = 4- modulus;
		}
		
		if (remaining_spaces > 0) {
			for(i=0;i<remaining_spaces;i++) {
				
				
				if((starter+i) % 4 == 0) {
					
					output += '<div class="row placeholder last">';
				} else {
					output += '<div class="row placeholder">';	
				}
				
				output += '</div>';	
				
			}
		}
		
		
		$('.fm-product-grid').html(output);
		
		
		
		criteria_sizes = new Array();
		criteria_brands = new Array();
		criteria_colours = new Array();
		i = 0;
		
		$(xml).find('criteria').find('size').each(function(){
			criteria_sizes[i] = $(this).text();	
			
			i++;
		});
		
		
		i = 0;
		
		$(xml).find('criteria').find('brand').each(function(){
			criteria_brands[i] = $(this).text();	
			
			i++;
		});
		
		
		i = 0;
		
		$(xml).find('criteria').find('colour').each(function(){
			criteria_colours[i] = $(this).text();	
			
			i++;
		});
		
		output = '';
		$(xml).find('facets').find('size').each(function(){
			var id = $(this).find('key').text();	
			var title = $(this).find('label').text();	
			var count = $(this).find('total').text();
			
			if ($.fn.fmRefine.inArray(title, criteria_sizes,false)) {
				output += '<li><input type="checkbox" class="facet-size" value="'+id+'" checked="checked"/>';
			} else {
				output += '<li><input type="checkbox" class="facet-size" value="'+id+'" />';	
			}
			
			output += ' <a href="#" class="facet-size-link">' + title + '</a> ('+count+')';
			output += '</li>';
			
			
		});
		
		
		$('div#size_id ul').html(output);
		
		
		output = '';
		
	
		
		
		$(xml).find('facets').find('brand').each(function(){
			var id = $(this).find('key').text();	
			var title = $(this).find('label').text();
			var count = $(this).find('total').text();
			
			if ($.fn.fmRefine.inArray(id, criteria_brands,false)) {
				output += '<li><input type="checkbox" class="facet-brand" value="'+id+'" checked="checked"/>';
			} else {
				output += '<li><input type="checkbox" class="facet-brand" value="'+id+'" />';	
			}
			
			output += ' <a href="#" class="facet-brand-link">' + title + '</a> ('+count+')';
			output += '</li>';
			
			
		});
		
		
		$('div#brand_id ul').html(output);
		
		
		
		
		output = '';
		$(xml).find('facets').find('colour').each(function(){
			var id = $(this).find('key').text();	
			var title = $(this).find('label').text();
			var count = $(this).find('total').text();
			
			if ($.fn.fmRefine.inArray(id, criteria_colours,false)) {
				output += '<li><input type="checkbox" class="facet-colour" value="'+id+'" checked="checked"/>';
			} else {
				output += '<li><input type="checkbox" class="facet-colour" value="'+id+'" />';	
			}
			
			output += ' <a href="#" class="facet-colour-link">' + title + '</a> ('+count+')';
			output += '</li>';
			
			
		});
		
		
		$('div#colour_id ul').html(output);
		
		
		
		
		if(price_bol) {
			i=0;
			var maximum = '';
			var minimum = '';
			$(xml).find('facets').find('price').each(function(){
				var id = $(this).find('key').text();	
				var title = $(this).find('label').text();
				var count = $(this).find('total').text();
				
				maximum = title;
				
				i++
			});
			
			maximum = Math.ceil(maximum);
			minimum = Math.floor(minimum);
				
				if(minimum < 10) { minimum = 0; }
				
				$('.fm-facet-list-slider').slider('option', 'values', [0,maximum]);
				$( "#amount" ).val( "£" + $( ".fm-facet-list-slider" ).slider( "values", 0 ) +
			" - £" + $( ".fm-facet-list-slider" ).slider( "values", 1 ) );
			
			
		}
		
		
	} else {
		alert('no results for those criteria you results have not been modified');
	}
	
	
	return false;
};

$.fn.fmRefine.inArray = function(needle, haystack, argStrict) {
  
    var key = '',
        strict = !! argStrict;

    if (strict) {
        for (key in haystack) {
            if (haystack[key] === needle) {
                return true;
            }
        }
    } else {
        for (key in haystack) {
           
			if (haystack[key] == needle) {
                return true;
            }
        }
    }

    return false;
};

$.fn.fmRefine.sliderStart = function(options, minprice, maxprice) {
	
	options.min_price = minprice;
	options.max_price = maxprice;
	
	$('.fm-facet-list-slider').slider({
  			range: "max",
			min: options.min_price,
			max: Math.ceil(options.max_price),
			values: [options.min_price,Math.ceil(options.max_price)],
range: true,

			stop: function(event, ui) { 
			 	$.fn.fmRefine.collectFacetsPrice(options);
				
			 },
			 slide: function(event, ui) { 
			 	$( "#amount" ).val( "£" + ui.values[ 0 ] + " - £" + ui.values[ 1 ] );

			 }
		});
		$( "#amount" ).val( "£" + $( ".fm-facet-list-slider" ).slider( "values", 0 ) +
			" - £" + $( ".fm-facet-list-slider" ).slider( "values", 1 ) );
}

$.fn.fmRefine.limit = function(options, str) {
	
	if(str.length > 20){  str = str.substring(0, 20) + '...'; }
	return str;
}


})(jQuery);
