 $(document).ready(function(){
 	
 	$.address.externalChange(function() {loadDynamicListing();} );
 	//S4L UB 20110117 width von 130 auf 100 bzw. 97 reduziert
 	$(".filterselector").each(function() { $(this).dropdownchecklist({ width: 97 }) } );
 	$(".sortselector").each(function() { $(this).dropdownchecklist({ width: 100 }) } );
 	loadSlider($("#minimumPrice").val(), $("#maximumPrice").val());    
    function loadDynamicListing() {
    	var url = window.location.href;
    	var hash = window.location.hash;
    	if (hash.length > 0) {	 	
    		if (hasNoRunningRequest()) {
    			setRunningRequest(true);
				var ajaxRequest = {};
				ajaxRequest.callfrom = 'ajax';
				ajaxRequest.filters = '';
    			jQuery.each($.getUrlVars(), function(index, value) {
    					if (value.substr(0,7) == 'filter[') {
    						key = value.replace(/[a-zA-Z\[\]]/g ,'');
    						if ($.getUrlVar(value).indexOf(',') > -1) {    							
    							values = $.getUrlVar(value).split(',');
    							$("#filter_" + key).val(values);   							
    						} else {
    							$("#filter_" + key).val($.getUrlVar(value));
    						}   
    						ajaxRequest.filters += escape("filter[") + key + escape("]") + "=" + escape($.getUrlVar(value)) + "&"; 	
    					} else if (value.indexOf('_sort') > -1) {    					
    						$("#"+value).val($.getUrlVar(value));
    						ajaxRequest.filters += escape(value) + "=" + escape($.getUrlVar(value)) + "&"; 	
    					}
					}
				);
				
    			if ($.getUrlVar('page') != 'undefined') ajaxRequest.page = $.getUrlVar('page');
    			
    			if ($.getUrlVar('minimumPrice') != 'undefined') {
    				ajaxRequest.minimumPrice = $.getUrlVar('minimumPrice');
    			}
    			if ($.getUrlVar('maximumPrice') != 'undefined') {
    				ajaxRequest.maximumPrice = $.getUrlVar('maximumPrice');    				    				
    			}
    			if ($.getUrlVar('maximumPrice') != 'undefined' && $.getUrlVar('minimumPrice') != 'undefined') {    				
    				$("#slider").slider("values", 0, parseFloat($.getUrlVar('minimumPrice')));
				    $("#slider").slider("values", 1, parseFloat($.getUrlVar('maximumPrice')));
				    $("#amount").val('EUR ' + $("#slider").slider("values", 0) + ' - EUR ' + $("#slider").slider("values", 1));		
    			}
    			if ($.getUrlVar('perpageVal') != 'undefined') {
    				ajaxRequest.maxPerPage = $.getUrlVar('perpage_selector');
    				$("#perpageselector").val(ajaxRequest.maxPerPage);
    			}
    			if ($.getUrlVar('displayVal') != 'undefined') {
    				ajaxRequest.display_type = $.getUrlVar('display_selector');
    				$("#display_selector").val(ajaxRequest.display_type);
    			}
    			//S4L UB 20110117 width von 130 auf 100 bzw. 97 reduziert
				$(".filterselector").each(function() { $(this).dropdownchecklist("destroy") } );
				$(".filterselector").each(function() { $(this).dropdownchecklist({ width: 97 }) } );
				$(".sortselector").each(function() { $(this).dropdownchecklist("destroy") });
				$(".sortselector").each(function() { $(this).dropdownchecklist({ width: 100 }) } );
	    		
				$.get(substrUrl(), ajaxRequest,
					   function(data) { 
					    showListingContent(data, false);	
					   },
					   "json");
				setRunningRequest(false);
				updateCounter();
			}  	
	    } else {
	    	setUrlOnly();
	    }
	    
    }; 
    function loadSlider(min, max) {    
		$("#slider").slider({
			range: true,
			min: parseFloat(min),
			max: parseFloat(max),
			values: [parseFloat(min), parseFloat(max)],
			slide: function(event, ui) {
				$("#amount").val('EUR ' + ui.values[0] + ' - EUR ' + ui.values[1]);  						
			},
			change: function(event, ui) {
				updateCounter();
			}
		});
		$("#amount").val('EUR ' + $("#slider").slider("values", 0) + ' - EUR ' + $("#slider").slider("values", 1));   
    }       
    function setUrlOnly() {
    	var minimumPrice = $("#slider").slider("values", 0);
    	var maximumPrice = $("#slider").slider("values", 1);
    	window.location.href = substrUrl() + '#page=1&' + prepareFiltersForUrl() + '&minimumPrice=' + minimumPrice + '&maximumPrice=' + maximumPrice;
    }
    function showResults(showProgress) {
		var filters = $("#filterForm").serialize();
    	var minimumPrice = $("#slider").slider("values", 0);
    	var maximumPrice = $("#slider").slider("values", 1);
    	var perpageVal = $('#perpageselector').val();
    	var displayVal = $('#display_selector').val();
    	if (hasNoRunningRequest()) {
	    	setRunningRequest(true);
	    	if (showProgress) checkProgress();	    		    	   		    		
	    	$.get(substrUrl(), { filters: filters, callfrom: 'ajax', minimumPrice: minimumPrice, maximumPrice: maximumPrice, maxPerPage: perpageVal[0], display_type: displayVal[0] },
	    			function(data) {	    			 
	    			 showListingContent(data, true);
	    			 window.location.href = substrUrl() + '#page=1&' + prepareFiltersForUrl() + '&minimumPrice=' + minimumPrice + '&maximumPrice=' + maximumPrice;
	    			},
	    			"json");
	    	setRunningRequest(false);
	    }     
    }
    $(".show_filter_results_btn").click(function() {
    	showResults(true);   	
    	}
    );
    $(".reset_filter_results_btn").click(function() { resetForm('filterForm'); return false; } );
    function updateCounter() {	    
    	if ($(".filterResultCounter").length > 0) {
	    	var filters = $("#filterForm").serialize();
	    	var minimumPrice = $("#slider").slider("values", 0);
    		var maximumPrice = $("#slider").slider("values", 1);
    		if (hasNoRunningRequest()) {
	    		setRunningRequest(true); 
		    	$.get(substrUrl(), { filters: filters, callfrom: 'ajax', minimumPrice: minimumPrice, maximumPrice: maximumPrice, onlynumbers: true },
			    			function(data) {
				    			$(".filterResultCounter").css("visibility", "visible");
				    			$(".msgIcon").fadeOut('fast');
				    			$(".msgIcon").fadeIn('fast');
				    			$(".filterResultCounter").fadeIn('fast');
				    			$(".filterResultCounterInput").html(data.counter);
				    			if (data.counter == 0) {
				    			 	$(".sortInputs").hide();
				    			 	$(".show_filter_results_btn").hide();
				    			} else {
				    				$(".sortInputs").show();
				    			 	$(".show_filter_results_btn").fadeOut('fast');
				    				$(".show_filter_results_btn").fadeIn('fast');
				    			 	$(".show_filter_results_btn").show();				    			 	
				    			}				    			
			    			},
			    			"json");				    	
			    	setRunningRequest(false);		    	  				
			    }
    		}	    			
    }
	//S4L UB 20110117 width von 130 auf 100 bzw. 97 reduziert
   function resetForm(id) {
    	setRunningRequest(true);
   		$(".filterselector option").each(function() { $(this).attr('selected', false); });
   		$(".sortselector option").each(function() { $(this).attr('selected', false); });
   		$(".filterselector").each(function() { $(this).dropdownchecklist("destroy") });
   		$(".sortselector").each(function() { $(this).dropdownchecklist("destroy") });
	 	$(".filterselector").each(function() { $(this).dropdownchecklist({ width: 97 }) } );
	 	$(".sortselector").each(function() { $(this).dropdownchecklist({ width: 100 }) } );
	    $("#slider").slider("values", 0, parseFloat($("#minimumPrice").val()));
	    $("#slider").slider("values", 1, parseFloat($("#maximumPrice").val()));
	    $("#amount").val('EUR ' + $("#slider").slider("values", 0) + ' - EUR ' + $("#slider").slider("values", 1));	    
	    setRunningRequest(false);
	    updateCounter();
	}
    $(".filterselector").each(function() {
    	$(this).change(function() {
    		updateCounter();
    	});
    	}
    );
	$(".pageResults").live("click", function() {
			var minimumPrice = $("#slider").slider("values", 0);
    		var maximumPrice = $("#slider").slider("values", 1);
    		window.location.href = substrUrl() + '#page=' + $.getUrlVarFromString($(this).attr("href"), 'page') + "&" + prepareFiltersForUrl() + '&minimumPrice=' + minimumPrice + '&maximumPrice=' + maximumPrice;
			return false;
		}
	);	
	$(".shippingPopup").live("click", function() {
			window.open($(this).attr("href"), 'popup', 'toolbar=0, scrollbars=yes, resizable=yes, height=400, width=400');
			return false;
		}
	);
	function checkProgress() {
		if (hasNoRunningRequest()) {
			
		} else {
			$.showprogress('','Loading.....','<img src="templates/vctlicht/img/loading.gif"/>');
		}
	}
	function hasNoRunningRequest() {
		if ($("#runningRequest").val() == '1') return false;
		if ($("#runningRequest").val() == '0') return true;
	};
	function setRunningRequest(running) {
		if (running == true) {
			$("#runningRequest").val("1");
		} else {
			$("#runningRequest").val("0");
		}
	};
	function showListingContent(data, fading) {
	    if (fading == true) {
	    	$("#productListing").fadeTo("fast", 0.33, function() { $("#productListing").html(data.content); } );
			$("#productListing").fadeTo("fast", 100);
	    } else {
			$("#productListing").html(data.content);
		}
		$.hideprogress();
	};
	function substrUrl() {
		var url = window.location.href;
		var indexer = url.indexOf("#");
		if (indexer > 0) {
			return url.substring(0, indexer);
		} else {
			return url;
		}
	};
	function prepareFiltersForUrl() {
		var filters = $("#filterForm").serialize();
		var tmp = {};
		var filter = filters.split("&");
		jQuery.each(filter, function(index, value) {
			var pair = value.split("=");
			eval("tmp." + getTmpKey(pair[0]) + " += \"" + escape(pair[1]) + ",\"");
		});	
		var returnFilters = '';	
		$.each(tmp, function(key, value) {
			value = value.replace("undefined", "");
			value = value.substr(0, value.length - 1);
			returnFilters += replaceTmpKey(key) + "=" + value + "&";
		});
		return returnFilters.substr(0, returnFilters.length - 1);
	}
	function getTmpKey(k) {
		k = unescape(k);
		k = k.replace("[", "__OPEN__");
		k = k.replace("]", "__CLOSE__");
		return k;
	}
	function replaceTmpKey(k) {
		k = k.replace("__CLOSE__", "]");
		k = k.replace("__OPEN__", "[");
		k = escape(k);
		return k;
	}
 });
 
$.extend({
  getUrlVars: function(){
    var vars = [], hash;
    var hashes = $.address.value().split('&');
    for(var i = 0; i < hashes.length; i++)
    {
      hash = hashes[i].split('=');
      vars.push(hash[0]);
      vars[hash[0]] = hash[1];
    }
    return vars;
  },
  getUrlVar: function(name){
    return $.getUrlVars()[name];
  },
  getUrlVarsFromString: function(str){
    var vars = [], hash;
    var hashes = str.split('&');
    for(var i = 0; i < hashes.length; i++)
    {
      hash = hashes[i].split('=');
      vars.push(hash[0]);
      vars[hash[0]] = hash[1];
    }
    return vars;  
  },
  getUrlVarFromString: function(str, name){
  	return $.getUrlVarsFromString(str)[name];
  }
});
