
$(function (){
	// plugin definition
	$.fn.searchResultFilter = function(options) { 
	
		var defaults = {
			refreshDelais: 250,
		    change: null
		};
		
		var opts = $.extend(defaults, options);
		

		var data = new Array();
		
		var stars = new Array();
		var villas = new Array();
		
		var locations = new Array();
		var themes = new Array();
		var pensions = new Array();
		var hebergements = new Array();
  	
	  	$(opts.selection).each(function (){
	  		
	  		var id = $(this).attr("id");
	  		
	  		
	  		
	  		
			var star  = $(this).find("#"+id+"_star").val();
			var price = $(this).find("#"+id+"_price").val();
			
			var heb_code = $(this).find("#"+id+"_type_code").val();
			if (heb_code == "84CMK20HO91" // Villa
	  			|| heb_code == "ELETS20") // Villas service h™telier 
	  		{
	  			villas = populateStars('villa', price, villas);
	  		}
	  		else {
	  			stars = populateStars(star, price, stars);
	  		}
			
			var loc = $(this).find("#"+id+"_loc").val();
			locations = populateArray(loc, locations);
			
			var objThemes = new Array();
			$(this).find(".fl-theme").each(function (){
				var theme = $(this).val();
				themes = populateArray(theme, themes);
				objThemes.push(theme);
			})		
			
			var objPensions = new Array();
			$(this).find(".fl-pension").each(function (){
				var pension = $(this).val();
				pensions = populateArray(pension, pensions);
				objPensions.push(pension);
			})			
	
			var heb = $(this).find("#"+id+"_type").val();
			hebergements = populateArray(heb, hebergements);
			
			
			data[id] = {
				'price': price
				, 'star': star
				, 'loc': loc
				, 'themes': objThemes
				, 'pensions': objPensions
				, 'hebergement': heb
				, 'ready': false
			};
	  	});
	  	
	  	showFilterInfos(stars, villas, locations, themes, hebergements, pensions);
	
	
		$("#filter-stars input[type=checkbox],#filter-loc input[type=checkbox],#filter-theme input[type=checkbox],#filter-heb input[type=checkbox],#filter-pension input[type=checkbox]").click(function (){
			var starValues = new Array();
			
			var elements = $("#filter-stars").find("input[type=checkbox]:checked");
			//if (elements.length==0) elements = $("#filter-stars").find("input[type=checkbox]");
			elements.each(function (){
				starValues.push($(this).val());
			});
				
			var locValues = new Array();
			elements = $("#filter-loc").find("input[type=checkbox]:checked");
			//if (elements.length==0) elements = $("#filter-loc").find("input[type=checkbox]");
			elements.each(function (){
				locValues.push($(this).val());
			});
	
			var themeValues = new Array();
			elements = $("#filter-theme").find("input[type=checkbox]:checked");
			//if (elements.length==0) elements = $("#filter-theme").find("input[type=checkbox]");
			elements.each(function (){
				themeValues.push($(this).val());
			});
			
			var hebValues = new Array();
			elements = $("#filter-heb").find("input[type=checkbox]:checked");
			//if (elements.length==0) elements = $("#filter-heb").find("input[type=checkbox]");
			elements.each(function (){
				hebValues.push($(this).val());
			});
			
			var pensionValues = new Array();
			elements = $("#filter-pension").find("input[type=checkbox]:checked");
			//if (elements.length==0) elements = $("#filter-pension").find("input[type=checkbox]");
			elements.each(function (){
				pensionValues.push($(this).val());
			});
			
			for(var id in data)
			{
				var obj = data[id];
				
				if (
					(jQuery.inArray(obj.star, starValues) > -1  || starValues.length == 0)
					&& (jQuery.inArray(obj.loc, locValues) > -1 || locValues.length == 0)
	 				&& (arrayInArray(obj.themes, themeValues)   || themeValues.length == 0)
					&& (jQuery.inArray(obj.hebergement, hebValues) > -1 || hebValues.length == 0)
					&& (arrayInArray(obj.pensions, pensionValues) || pensionValues.length == 0)
					)
				{
					$("#"+id).show();
					
				}
				else {
					$("#"+id).hide();
				}
			}
			
			
			
			var offset = $("#listehotels").offset();
			$(document).scrollTop(offset.top);
			
			
			setTimeout(function (){animFilters(opts.selection)}, opts.refreshDelais);
		});
		  
		
		  
		function animFilters(selection)
		{
	
			var lstvillas = new Array();
			var lststars = new Array();
			var locations = new Array();
			var themes = new Array();
			var pensions = new Array();
			var hebergements = new Array();
			
			var data = new Array();
			$(selection+":visible").each(function (){
			
			var id  = $(this).attr("id");
			
			//alert("visible")  		
			var star  = $(this).find("#"+id+"_star").val();
			var price = $(this).find("#"+id+"_price").val();
		
			var heb_code = $(this).find("#"+id+"_type_code").val();
			if (heb_code == "84CMK20HO91" // Villa
	  			|| heb_code == "ELETS20") // Villas service h™telier 
	  		{
	  			villas = populateStars('villa', price, villas);
	  		}
	  		else {
	  			lststars = populateStars(star, price, lststars);
	  		}
		
			
		
			//lststars = populateIntArray(star, lststars);
			
			var loc = $(this).find("#"+id+"_loc").val();
			locations = populateArray(loc, locations);
			
			var objThemes = new Array();
			$(this).find(".fl-theme").each(function (){
				var theme = $(this).val();
				objThemes.push(theme);
				themes = populateArray(theme, themes);
			})		
		
			var objPensions = new Array();
			$(this).find(".fl-pension").each(function (){
				var pension = $(this).val();
				objPensions.push(pension);
				pensions = populateArray(pension, pensions);
			})			
		
			var heb = $(this).find("#"+id+"_type").val();
			hebergements = populateArray(heb, hebergements);
			
			var id = $(this).attr("id");
			data[id] = {
				'price': price
				, 'star': star
				, 'loc': loc
				, 'themes': objThemes
				, 'pensions': objPensions
				, 'hebergement': heb
			};
		
			});
			
			
			updateStarsInfos("#filter-stars input[type=checkbox]", lststars);
			updateFilterInfos("#filter-loc input[type=checkbox]", locations);
			updateFilterInfos("#filter-heb input[type=checkbox]", hebergements);
			updateFilterInfos("#filter-theme input[type=checkbox]", themes);
			updateFilterInfos("#filter-pension input[type=checkbox]", pensions);

		}
		  
		function updateStarsInfos(selector, anArray)
		{
			$(selector).each(function (){
				var index = "_"+$(this).val();
			
				if (! ("_"+$(this).val() in  anArray)) {
					//$(this).attr("disabled", 'disabled');
					$(this).parents("tr").addClass("disabled");
					
					//$(this).parents("tr").find("td:eq(2),td:eq(3)").html('');
				}
				else {
					$(this).attr("disabled", '');
					$(this).parents("tr").removeClass("disabled");
					
					if (anArray[index].minPrice == anArray[index].maxPrice)
						$(this).parents("tr").find("td:eq(2)").html(anArray[index].minPrice + '&euro;');
					else
						$(this).parents("tr").find("td:eq(2)").html(anArray[index].minPrice + "&euro; - " + anArray[index].maxPrice + '&euro;');
						
					$(this).parents("tr").find("td:eq(3)").html('('+anArray[index].nbHotels+')');
				}
			});
		}
		
		function updateFilterInfos(selector, anArray)
		{
			$(selector).each(function (){
		
				if (! ($(this).val() in  anArray)) {
					$(this).attr("disabled", 'disabled');
					$(this).parents("tr").addClass("disabled");
				}
				else {
					$(this).attr("disabled", '');
					$(this).parents("tr").removeClass("disabled");
					$(this).parents("tr").find("td:eq(2)").html('('+ anArray[$(this).val()] + ')');
				}
			});
		}
		
		function arrayInArray(array1, array2)
		{
			for (var index in array1){
				var item = array1[index];
				
				if (jQuery.inArray(item, array2) > -1)
					return true;
			}
			return false;
		}
		
		function showFilterInfos(stars, villas, locations, themes, hebergements, pensions)
		{
		
			stars = ksort(stars);
			for (var star in stars){
				
				var lib = star.substring(1);
				
				var label = (lib == "7") ? "6" : (lib == "6") ? "5" : lib;
				
				
				var el = '<tr>';
				el += '<td class="box"><input type="checkbox" id="etoile'+lib+'" value="'+lib+'"></td>';
				el += '<td class="puce"><label for="etoile'+lib+'">'+label+' <img src="../www/public/default/hotelissima/img/etoile.gif" alt="etoile" width="12" height="10"/> '+ ((lib == "7" || lib == "6") ? 'luxe': '')+'</label></td>';
				
				if (stars[star].minPrice == stars[star].maxPrice)
					el += '<td>'+stars[star].minPrice +'&euro;</td>';
				else
					el += '<td>'+stars[star].minPrice +'&euro; - '+stars[star].maxPrice+'&euro;</td>';
				el += '<td class="nb">('+stars[star].nbHotels+')</td>';
				el += '</tr>';
				
				$("#filter-stars").append(el);
			}
			
			for (var index in villas){
				var villa = villas[index];
				
				var el = '<tr>';
				el += '<td class="box"><!--<input type="checkbox" id="" value="">--></td>';
				el += '<td class="puce" style="background-position:0 3px;"><label for="">Villas</label></td>';
				
				if (villa.minPrice == villa.maxPrice)
					el += '<td>'+villa.minPrice +'&euro;</td>';
				else
					el += '<td>'+villa.minPrice +'&euro; - '+villa.maxPrice+'&euro;</td>';
				el += '<td class="nb">('+villa.nbHotels+')</td>';
				el += '</tr>';
				
				$("#filter-stars").append(el);
			}
			
			locations = ksort(locations);
			var i=0;
			for (var loc in locations){
				var el = '<tr>';
				el += '<td class="box"><input type="checkbox" id="loc'+i+'" value="'+loc+'"></td>';
				el += '<td class="puce"><label for="loc'+i+'">'+loc+'</label></td>';
				el += '<td class="nb">('+locations[loc]+')</td>';
				el += '</tr>';
				i++;
				$("#filter-loc").append(el);
			}
			
			themes = ksort(themes);
			i=0;
			for(var theme in themes){
				var el = '<tr>';
				el += '<td class="box"><input type="checkbox" id="theme'+i+'" value="'+theme+'"></td>';
				el += '<td class="puce"><label for="theme'+i+'">'+theme+'</label></td>';
				el += '<td class="nb">('+themes[theme]+')</td>';
				el += '</tr>';
				i++;
				$("#filter-theme").append(el);
			}
			
			hebergements = ksort(hebergements);
			i=0;
			for(var heb in hebergements){
				var el = '<tr>';
				el += '<td class="box"><input type="checkbox" id="heb'+i+'" value="'+heb+'"></td>';
				el += '<td class="puce"><label for="heb'+i+'">'+heb+'</label></td>';
				el += '<td class="nb">('+hebergements[heb]+')</td>';
				el += '</tr>';
				i++;
				$("#filter-heb").append(el);
			}
			
			pensions = ksort(pensions);
			i=0;
			for(var pension in pensions){
				var el = '<tr>';
				el += '<td class="box"><input type="checkbox" id="pension'+i+'" value="'+pension+'"></td>';
				el += '<td class="puce"><label for="pension'+i+'">'+pension+'</label></td>';
				el += '<td class="nb">('+pensions[pension]+')</td>';
				el += '</tr>';
				i++;
				$("#filter-pension").append(el);
			}
		}
		
		function populateStars(nbstar, price, arrayStars) {
			nbstar = "_" + nbstar;
			var found = false;
			
			var newPrice = parseInt(price);
			
			
			
			for (var aStar in arrayStars)
			{
				if (aStar == nbstar)
				{
					found = true;
					if (arrayStars[aStar].minPrice > newPrice) {
		  				arrayStars[aStar].minPrice = newPrice;
					}
					
					if (arrayStars[aStar].maxPrice < newPrice) {
						arrayStars[aStar].maxPrice = newPrice;
					}	
						
					arrayStars[aStar].nbHotels += 1;
					break;
				}
			}
			if (!found){
				arrayStars[nbstar] = {
					'minPrice': newPrice
					, 'maxPrice': newPrice
					, 'nbHotels': 1
				}
			}
		
			return arrayStars;
		}
		
		function populateArray(entry, anArray){
		
			var found = false;
			for (var aEntry in anArray){
				if (aEntry == entry){
					found = true;
					
					anArray[aEntry] += 1;
					break;
				}
			}
			if (!found){
				anArray[entry] = 1;
			}
			
			return anArray;
		}
		
		function populateIntArray(entry, anArray){
		
			var found = false;
			for (var aEntry in anArray){
				if (anArray[aEntry] == entry){
					found = true;
					break;
				}
			}
			if (!found){
				anArray.push(entry);
			}
			
			return anArray;
		}
		
		function ksort(array) 
		{
		
			var tmp_arr={}, keys=[], sorter, i, key, that=this;
			
			sorter = function (a, b) {
				  if (a > b) 
         			 return 1 
			      if (a < b) 
			         return -1 
			      return 0;	
		    	//return(a.localeCompare(b));
			};
		
			// Make a list of key names
			for (key in array) {
			    keys.push(key);
			}
			
			keys.sort(sorter);
			
			// Rebuild array with sorted key names
			for (i = 0; i < keys.length; i++) {
			    key = keys[i];
			    tmp_arr[key] = array[key];
			}
			
			delete array;
			
			return tmp_arr;
		}	
	};
})
  
  
  
    	
	
  
  
  
  
  
