function adj_nav_hide_products()
{
    var items = $('layered-navigation').select('select', 'input');
    n = items.length;
    for (i=0; i<n; ++i){
        items[i].addClassName('adj-nav-disabled');
    }
    
    if (typeof(adj_slider) != 'undefined')
        adj_slider.setDisabled();
    
    var divs = $$('div.adj-nav-progress');
    for (var i=0; i<divs.length; ++i)
        divs[i].show();
}

function adj_nav_show_products(transport)
{
    var resp = {} ;
    if (transport && transport.responseText){
        try {
            resp = eval('(' + transport.responseText + ')');
        }
        catch (e) {
            resp = {};
        }
    }
    
    if (resp.products){
        var el = $('adj-nav-container');
        var ajaxUrl = $('adj-nav-ajax').value;
        
        el.update(resp.products.gsub(ajaxUrl, $('adj-nav-url').value));
        adj_nav_toolbar_init(); // reinit listeners
                
        $('adj-nav-navigation').update(resp.layer);
        $('cms-block').update(resp.cms);
        $('adj-nav-ajax').value = ajaxUrl;  
    }
    
    var items = $('layered-navigation').select('select','input');
    n = items.length;
    for (i=0; i<n; ++i){
        items[i].removeClassName('adj-nav-disabled');
    }
    if (typeof(adj_slider) != 'undefined')
        adj_slider.setEnabled();
}

function adj_nav_add_params(k, v, isSingleVal)
{
    var el = $('adj-nav-params');
    var params = el.value.parseQuery();
    
    var strVal = params[k];
    if (typeof strVal == 'undefined' || !strVal.length){
        params[k] = v;
    }
    else if('clear' == v ){
        params[k] = '';
        delete params[k];           
    }
    else {
        var values = strVal.split('-');
        if (-1 == values.indexOf(v)){
            if (isSingleVal)
                values = [v];
            else 
                values.push(v);
        } 
        else {
            values = values.without(v);
        }
                
        params[k] = values.join('-');
    } 
    
   el.value = Object.toQueryString(params).gsub('%2B', '+');
}



function adj_nav_make_request()
{
    adj_nav_hide_products();
    new Ajax.Request($('adj-nav-ajax').value + '?' + $('adj-nav-params').value, 
        {method: 'get', onSuccess: adj_nav_show_products}
    );
}

function adj_update_links(evt, className, isSingleVal)
{
    var link = Event.findElement(evt, 'A'),
        sel = className + '-selected';
    
    if (link.hasClassName(sel))
        link.removeClassName(sel);    
    else
        link.addClassName(sel);
    
    //only one  price-range can be selected
    if (isSingleVal){
        var items = $('narrow-by-list').getElementsByClassName(className);
        var i, n = items.length;
        for (i=0; i<n; ++i){
            if (items[i].hasClassName(sel) && items[i].id != link.id)
                items[i].removeClassName(sel);   
        }
    }

    adj_nav_add_params(link.id.split('-')[0], link.id.split('-')[1], isSingleVal);
    
    adj_nav_make_request();    
    
    Event.stop(evt);    
}

function adj_update_select(evt, className, isSingleVal)
{
    var link = Event.element(evt),
        sel = className + '-selected';

    if (link.hasClassName(sel))
        link.removeClassName(sel);
    else
        link.addClassName(sel);

    //only one  price-range can be selected
    if (isSingleVal){
        var items = $('layered-navigation').getElementsByClassName(className);
        var i, n = items.length;
        for (i=0; i<n; ++i){
            if (items[i].hasClassName(sel) && items[i].id != link.id)
                items[i].removeClassName(sel);
        }
    }

    adj_nav_add_params(link.getValue().split('-')[0], link.getValue().split('-')[1], isSingleVal);

    adj_nav_make_request();

    Event.stop(evt);
}


function adj_nav_attribute_listener(evt)
{
    adj_update_select(evt, 'adj-nav-attribute', 1);
}

function adj_nav_clear_listener(evt)
{
    var link = Event.findElement(evt, 'A'),
        varName = link.id.split('-')[0];
    
    adj_nav_add_params(varName, 'clear', 1);
    
    //remove selection
    var classes = ['icon', 'attribute', 'price'];
    var currClass = '';
    for (var j=0; j<classes.length; ++j){
        currClass = 'adj-nav-' + classes[j] + '-selected';
        var items = $('adj-nav-filter-'+varName).getElementsByClassName(currClass);
        var i, n = items.length;
        for (i=0; i<n; ++i){
            items[i].removeClassName(currClass);   
        }
    }
    if ('price' == varName){
        var from =  $('adj-nav-price-from'),
            to   = $('adj-nav-price-to');
          
        if (Object.isElement(from)){
            from.value = from.name;
            to.value   = to.name;
        }
        
    }
    
    adj_nav_make_request();    
    
    Event.stop(evt);  
}

function adj_nav_toolbar_listener(evt) {
    adj_nav_toolbar_make_request(Event.findElement(evt, 'A').href);
    Event.stop(evt); 
}

function adj_nav_cms_listener(evt) {
    var link = Event.element(evt);
    adj_nav_add_params(link.getValue().split('-')[0], link.getValue().split('-')[1], 1);
    setLocation('http://trendheads.de/produkte.html?' + $('adj-nav-params').value);
    Event.stop(evt);
}

function adj_nav_toolbar_make_request(href)
{
    var pos = href.indexOf('?');
    if (pos > -1){
        $('adj-nav-params').value = href.substring(pos+1, href.length);
    }
    adj_nav_make_request();
}


function adj_nav_toolbar_init()
{
    var items = $('adj-nav-container').select('.pages a');
    var n = items.length;
    for (i=0; i<n; ++i){
        Event.observe(items[i], 'click', adj_nav_toolbar_listener);
    }
}

function adj_nav_init(cms)
{
    var items, i, n;
    items = $('layered-navigation').select('.adj-nav-attribute');
    n = items.length;
    if (cms) {
        for (i=0; i<n; ++i){
            Event.observe(items[i], 'change', adj_nav_cms_listener);
        }
    } else {
        for (i=0; i<n; ++i){
            Event.observe(items[i], 'change', adj_nav_attribute_listener);
        }
    }
}

