//////////////////////////////////////////////////////////////////////
// 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();
	if($('.facet-price-min').val() > 10) {
		options.min_price = $('.facet-price-min').val();
	} else {
		options.min_price = 0;
	}
	$.fn.fmRefine.sliderStart(options, options.min_price,options.max_price);
	
	
	$('.facet-page').live("click", function() {
		$('#refine-page').val(1);
		$.fn.fmRefine.collectFacets(options);
		
		
	});
	$('.facet-page-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-brand').live("click", function() {
		if($(this).attr("checked")) {
			var checked = '';
		} else {
			var checked = 'checked';
		}
		
		
		if($('#refine-brand-id').val() != '') {
			$('.facet-brand').each(function() {
				$(this).attr("checked", ''); 
			});
			$('#refine-brand-id').val('');
		}
		
		$(this).attr("checked", checked); 
		
		if($(this).attr("checked")) {
			$(this).attr("checked", ''); 
		} else {
			$(this).attr("checked", "checked");	
		}
		
		
		$('#refine-page').val(1);
		$.fn.fmRefine.collectFacets(options);
	});
	$('.facet-brand-link').live("click", function() {
		
		if($('#refine-brand-id').val() != '') {
			$('.facet-brand').each(function() {
				$(this).attr("checked", ''); 
			});
			$('#refine-brand-id').val('');
		}
		
		
		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);
		
	});
	
	$('.result-rows-link').live('click', function() {
		var val = $(this).attr('rel');
		var maxval = $('.result-max-rows').val();
		var output = '';
		var changeto = 0;
		
		
		
		if(val == 12) {
			changeto = 200;
		}
		if(val == 200) {
			changeto = 12;
		}
		
		if (changeto == 12) {
			output = '<span>View <a href="rows/'+changeto+'/" class="result-rows-link" rel="'+changeto+'">'+changeto+'</a> results per page</span>';
		} else if (changeto == 200) {
			if(maxval < changeto) {
				output = '<span>View <a href="rows/'+changeto+'/" class="result-rows-link" rel="'+changeto+'">all</a> results</span>';
			} else {
				output = '<span>View <a href="rows/'+changeto+'/" class="result-rows-link" rel="'+changeto+'">'+changeto+'</a> results per page</span>';
			}
		}
		
		
		$('.result-limit span').html(output);
		
		$('.result-rows').val(val);
		
		$('#refine-page').val(1);
		$.fn.fmRefine.collectFacets(options);
		return false;
	});
	
	
	
  });
  
  
  
  
  
  
 };

// SCROLL MINI BASKET DOWN
$.fn.fmRefine.collectFacets = function(options) {
	
	
	// start preloader
	var gridHeight = $('.fm-product-grid').height();
	var gridWidth = $('.fm-product-grid').width();
	
	$('.fm-product-grid').append('<div id="preloader_bg" class="ui-widget-overlay2"></div>');
	$('#preloader_bg').append('<div id="preloader_block">Loading</div>');
	$('#preloader_bg').css('position', 'absolute');
	$('#preloader_bg').css('top', '0px');
	$('#preloader_bg').css('left', '0px');
	$('#preloader_bg').css('height', gridHeight+ 'px');
	$('#preloader_bg').css('width', gridWidth+ 'px');
	
	
	
	/// collect facets
	var brand_ids = '';
	var brand_id = '';
	var price_min = 0;
	var price_max = 100000;
	var size_ids = '';
	var colour_ids = '';
	var page_ids = '';
	
	var params = new Object();
	
	$('.facet-page:checked').each(function() {
		page_ids += $(this).val() + ',';
	});
	
	$('.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.page_ids = page_ids;
	
	params.slug = $("#refine-page-slug").val();
	params.keyword = $("#refine-keyword").val();
	params.order = $(".order-by").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;
	params.rows = $(".result-rows").val();;
	
	
	options.params = params;
	
	
	var summary = price_min + " to " + price_max + "<br />";
	summary = summary + "page_ids: " + params.page_ids + "<br />";
	summary = summary + "page_id: " + params.page_id + "<br />";
	
	summary = summary + "size_ids: " + size_ids + "<br />";
	summary = summary + "brand_ids: " + brand_ids + "<br />";
	summary = summary + "brand_id: " + brand_id + "<br />";
	
	summary = summary + "colours: " + params.colours + "<br />";
	summary = summary + "keyword: " + params.keyword + "<br />";
	summary = summary + "order: " + params.order + "<br />";
	summary = summary + "rows: " + params.rows + "<br />";
	
	$('#summary').css('display', 'block');
	
	
	
	var url = 'http://www.greenwoodsonline.com/' + $('#refine-page-slug').val();
	
	
	
	if(params.page_ids != '' && params.page_ids != 'undefined') {
		url += '/page_ids/'+params.page_ids+''
	}
	if(params.price_min != '' && params.price_min != 'undefined') {
		url += '/price_min/'+params.price_min+''
	}
	
	
	if(params.sizes != '' && params.sizes != 'undefined') {
		url += '/sizes/'+params.sizes+''
	}
	if(params.colours != '' && params.colours != 'undefined') {
		url += '/colours/'+params.colours+''
	}
	
	if(params.keyword != '' && params.keyword != 'undefined') {
		url += '/keyword/'+params.keyword+''
	}
	
	if(params.rows != '' && params.rows != 'undefined') {
		url += '/rows/'+params.rows+''
	}
	
	
	$('#summary').html('<a href="'+url+'">+</a>');
	
	$.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 cols = 3;
	var img_dir = 'l';
	var img_width = 210;
	
	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());

	if($(xml).find('item').length > 6) {
		cols = 4;
		img_dir = 'm';
		img_width = 158;
	}
	
	var output = '';
	
	if($(xml).find('item').length) {
		
		
		i=1;
		$(xml).find('item').each(function(){
			var title = $(this).find('product_title').text();
			var product_id = $(this).find('product_id').text();	
			var sku_ref = $(this).find('product_sku_ref').text();	
			var price = $(this).find('sku_price').text();
			var was_price = $(this).find('sku_was_price').text();
			var rrp_price = $(this).find('sku_rrp').text();
			
			var filename = $(this).find('colour_filename').text();
			var filename_exists = $(this).find('colour_filename_exists').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 is_exclusive = $(this).find('product_is_exclusive').text();
			var colour_count = $(this).find('colour_count').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 cols = 3;

			if($(xml).find('item').length > 6) {
				cols = 4;
			}
			
			if(i % cols == 0 && i > 0) {
				if($(xml).find('item').length > 6) {
					output += '<div class="row last click-row">';
				} else {
					output += '<div class="row row-large last click-row">';
				}
			} else {
				if($(xml).find('item').length > 6) {
					output += '<div class="row click-row pngimg">';
				} else {
					output += '<div class="row row-large click-row pngimg">';
				}
			}
			
			if (is_sale > 0) {
				
				output += '<div class="sale pngimg"></div>';
			} else {
			
				if (is_new > 0) {
					output += '<div class="new pngimg"></div>';
				}	
				if (is_exclusive > 0) {
					output += '<div class="exclusive pngimg"></div>';
				}	
				
			
			}
			
			if (sku_ref.substring(0,1) == 'M') {
				output += '<div class="mansize pngimg"></div>';
			}	
			
			
			
			if(options.params.slug != '') {
				page_slug = options.params.slug;
			}
			output += '<div class="thumb">';
			output += '<a  href="/' + page_slug + '/product/'+slug+'/colour/'+colour_slug+'" title="'+filename+'">';
			if (filename && filename_exists == 1) {
				output += '<img src="/uploads/images/'+img_dir+'/'+filename+'" width="'+img_width+'" />';
			}
			output += '</a>';
			output += '</div>';
				
			output += '<div class="text">';
			output += '<a class="title" href="/' + page_slug + '/product/'+slug+'/colour/'+colour_slug+'">';
			limit_len = 40;
			if($(xml).find('item').length > 6) {
				limit_len = 32;	
			}
			output += $.fn.fmRefine.limit(options, title,limit_len);
			
			if(colour_count == 1) {
				output += '<br />Available in 1 colour';
			} else {
				output += '<br />Available in ' + colour_count + ' colours';	
			}
			output += '</a>';
			
			output += '<p class="price">&pound;' + price + '</p>';
			
			if (parseFloat(rrp_price) > parseFloat(price)) {
				output += '<p class="was-price">WAS &pound;' + rrp_price + '</p>';
			}
			
			output += '</div>';
			output += '</div>';
			
			i++;
		});
		
		var modulus = ($(xml).find('item').length % cols);
		var starter = ($(xml).find('item').length % cols)+1;
		var remaining_spaces = 0;
		
		if(modulus > 0) {
			remaining_spaces = cols- modulus;
		}
		
		if (remaining_spaces > 0) {
			for(i=0;i<remaining_spaces;i++) {
				
				
				if((starter+i) % cols == 0) {
					if($(xml).find('item').length > 6) {
						output += '<div class="row placeholder last">';
					} else {
						output += '<div class="row row-large placeholder last">';
					}
				} else {
					if($(xml).find('item').length > 6) {
						output += '<div class="row placeholder">';	
					} else {
						output += '<div class="row row-large placeholder">';	
					}
				}
				
				output += '</div>';	
				
			}
		}
		
		
		$('.fm-product-grid').html(output);
		if($(xml).find('item').length > 6) {
			$('.fm-product-grid').attr('id', 'grid-m');
		} else {
			$('.fm-product-grid').attr('id', 'grid-l');
		}
		//$('#preloader_bg').remove();
		
		criteria_sizes = new Array();
		criteria_brands = new Array();
		criteria_colours = new Array();
		criteria_pages = 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++;
		});
		
		i = 0;
		
		$(xml).find('criteria').find('page').each(function(){
			criteria_pages[i] = $(this).text();	
			
			i++;
		});
		
		
		output = '';
		$(xml).find('facets').find('page').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_pages,false)) {
				output += '<li><input type="checkbox" class="facet-page" value="'+id+'" checked="checked"/>';
			} else {
				output += '<li><input type="checkbox" class="facet-page" value="'+id+'" />';	
			}
			
			output += ' <a href="#" class="facet-page-link">' + title + '</a> ('+count+')';
			output += '</li>';
			
			
		});
		
		
		$('div#page_id ul').html(output);
		
		
		
		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, len) {
	
	if(str.length > len){  str = str.substring(0, len) + '...'; }
	return str;
}


})(jQuery);
