$(document).ready( function()
{
	if ($(".filterselector").length == 0 && $(".sortselector").length == 0)
	{
		return;
	}
	
    $.address.externalChange( function()
    {
        loadDynamicListing()
    });
    $(".filterselector").each( function()
    {
        $(this).dropdownchecklist({width:130})
    });
    $(".sortselector").each( function()
    {
        $(this).dropdownchecklist({width:130})
    });
    
    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)
                }
                $(".filterselector").each( function()
                {
                    $(this).dropdownchecklist("destroy")
                });
                $(".filterselector").each( function()
                {
                    $(this).dropdownchecklist({width:130})
                });
                $(".sortselector").each( function()
                {
                    $(this).dropdownchecklist("destroy")
                });
                $(".sortselector").each( function()
                {
                    $(this).dropdownchecklist({width:130})
                });
                $.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)
            }
        }
    }

    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:130})
        });
        $(".sortselector").each( function()
        {
            $(this).dropdownchecklist({width:130})
        });
        $("#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="images/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 d=[],c;
        var a=$.address.value().split("&");
        for(var b=0;b<a.length;b++)
        {
            c=a[b].split("=");
            d.push(c[0]);
            d[c[0]]=c[1]
        }
        return d;
    },getUrlVar: function(a)
    {
        return $.getUrlVars()[a];
    },getUrlVarsFromString: function(e)
    {
        var d=[],c;
        var a=e.split("&");
        for(var b=0;b<a.length;b++)
        {
            c=a[b].split("=");
            d.push(c[0]);
            d[c[0]]=c[1]
        }
        return d;
    },getUrlVarFromString: function(b,a)
    {
        return $.getUrlVarsFromString(b)[a];
    }});
