/**
 * Product:     Layered Navigation Pro 24/11/11
 * Package:     AdjustWare_Nav_2.2.13_0.1.4_8_161798
 * Purchase ID: n/a
 * Generated:   2011-11-25 09:45:51
 * File path:   skin/frontend/default/default/js/adjnav-14.js
 * Copyright:   (c) 2011 AITOC, Inc.
 */
// checking if IE: this variable will be understood by IE: isIE = !false

isIE = /*@cc_on!@*/false;

/**
 * @author ksenevich@aitoc.com
 */
var canChangeLocationHash     = true;
var isProcessHashChange       = true;
var wasUrlHashed              = false;
var nestedOptions             = new Array();

Control.Slider.prototype.setDisabled = function()
{
    this.disabled = true;
    
    if (!isIE)
    {
        this.track.parentNode.className = this.track.parentNode.className + ' disabled';
    }
};


Control.Slider.prototype._isButtonForDOMEvents = function (event, code) {
    return event.which ? (event.which === code + 1) : (event.button === code);
}

Control.Slider.prototype.startDrag = function(event) {
    if((this._isButtonForDOMEvents(event,0))||(Event.isLeftClick(event)))  {
      if (!this.disabled){
        this.active = true;

        var handle = Event.element(event);
        var pointer  = [Event.pointerX(event), Event.pointerY(event)];
        var track = handle;
        if (track==this.track) {
          var offsets  = this.track.cumulativeOffset();
          this.event = event;
          this.setValue(this.translateToValue(
           (this.isVertical() ? pointer[1]-offsets[1] : pointer[0]-offsets[0])-(this.handleLength/2)
          ));
          var offsets  = this.activeHandle.cumulativeOffset();
          this.offsetX = (pointer[0] - offsets[0]);
          this.offsetY = (pointer[1] - offsets[1]);
        } else {
          // find the handle (prevents issues with Safari)
          while((this.handles.indexOf(handle) == -1) && handle.parentNode)
            handle = handle.parentNode;

          if (this.handles.indexOf(handle)!=-1) {
            this.activeHandle    = handle;
            this.activeHandleIdx = this.handles.indexOf(this.activeHandle);
            this.updateStyles();

            var offsets  = this.activeHandle.cumulativeOffset();
            this.offsetX = (pointer[0] - offsets[0]);
            this.offsetY = (pointer[1] - offsets[1]);
          }
        }
      }
      Event.stop(event);
    }
  };

 
function adj_nav_hide_products()
{
    var items = $('narrow-by-list').select('a', '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 = {};
        }
    }
    
	$$('div.category-title').each(function(el) {
		el.select('h1').each(function(e) {
			e.update(resp.category_name);
		});
	});
	
    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.gsub(ajaxUrl, $('adj-nav-url').value));
        
        $('adj-nav-ajax').value = ajaxUrl;  
    }
    
    var items = $('narrow-by-list').select('a','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)
{
    $('adj-nav-params').value = $('adj-nav-params').value.gsub(/\+/, ' ');
    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] = 'clear';
    }
    else {
        if (k == 'price')
            var values = strVal.split(',');
        else
            var values = strVal.split('-');
        
//        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(isChange)
{
    adj_nav_hide_products();   
    $('adj-nav-params').value = $('adj-nav-params').value.gsub(/\+/, ' ');
    var params = $('adj-nav-params').value.parseQuery();    
    
    if (!params['order']) // Respect Sort By settings!
	{
		select = null;
		$$('select').each(function(el) {
			if (el.onchange)
			{
				if (el.onchange.toString().match(/adj_nav_toolbar_make_request/))
				{
					select = el; 
				} // if (el.onchange.toString().match(/adj_nav_toolbar_make_request/))
			} // if (el.onchange)
		});
		
		if (select)
		{
			var selectParams = select.value.parseQuery();
			
			if (selectParams && selectParams['order'])
			{
				params['order'] = selectParams['order'];
			} // if (selectParams && selectParams['order']) 
		}    
	}
    
	if (!params['dir'])
    {
        params['dir'] = 'asc';
    }
	
	$('adj-nav-params').value = Object.toQueryString(params);

	/**
	 * @author ksenevich@aitoc.com
	 */
    if (canChangeLocationHash)
    {
        isProcessHashChange = false;
        wasUrlHashed        = true;
        location.hash = '!/' + $('adj-nav-params').value;
    }

    // tmp aitoc    
    new Ajax.Request($('adj-nav-ajax').value + '?' + $('adj-nav-params').value + '&no_cache=true', 
        {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_nav_attribute_listener(evt)
{
    adj_nav_add_params('p', 'clear', 1);
    adj_update_links(evt, 'adj-nav-attribute', 0);
}

function adj_nav_icon_listener(evt)
{
    adj_nav_add_params('p', 'clear', 1);
    adj_update_links(evt, 'adj-nav-icon', 0);
}

function adj_nav_price_listener(evt)
{
    adj_nav_add_params('p', 'clear', 1);
    adj_update_links(evt, 'adj-nav-price', 1);
}

function adj_nav_clear_listener(evt)
{
    var link = Event.findElement(evt, 'A'),
        varName = link.id.split('-')[0];
    
    adj_nav_add_params('p', 'clear', 1);
    adj_nav_add_params(varName, 'clear', 1);
    
    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_round(num){
    num = parseFloat(num);
    if (isNaN(num))
        num = 0;
        
    return Math.round(num);
}

function adj_nav_price_input_listener(evt){
    if (evt.type == 'keypress' && 13 != evt.keyCode)
        return;
        
    if (evt.type == 'keypress')
    {
        var inpObj = Event.findElement(evt, 'INPUT');
    }
    else 
    {
        var inpObj = Event.findElement(evt, 'BUTTON');
    }
        
    var sKey = inpObj.id.split('---')[1];
        
    var numFrom = adj_nav_round($('adj-nav-price-from---' + sKey).value),
        numTo   = adj_nav_round($('adj-nav-price-to---' + sKey).value);
 
    if (numFrom<0 || numTo<0)   
        return;

    adj_nav_add_params('p', 'clear', 1);
//    adj_nav_add_params('price', numFrom + ',' + numTo, true);
    adj_nav_add_params(sKey, numFrom + ',' + numTo, true);
    adj_nav_make_request();         
}

function adj_nav_category_listener(evt){
    var link = Event.findElement(evt, 'A');
    var catId = link.id.split('-')[1];
    
    var reg = /cat-/;
    if (reg.test(link.id)){ //is search
        adj_nav_add_params('cat', catId, 1);
        adj_nav_add_params('p', 'clear', 1);
        adj_nav_make_request(); 
        Event.stop(evt);  
    }
    //do not stop event
}

function adj_nav_toolbar_listener(evt){
    adj_nav_toolbar_make_request(Event.findElement(evt, 'A').href);
    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', '.view-by a');
    var items = $('adj-nav-container').select('.pages a', '.view-mode a', '.sort-by a');
    var i, n = items.length;
    for (i=0; i<n; ++i){
        Event.observe(items[i], 'click', adj_nav_toolbar_listener);
    }
}

function adj_nav_dt_listener(evt){
    var e = Event.findElement(evt, 'DT');
    e.nextSiblings()[0].toggle();
    e.toggleClassName('adj-nav-dt-selected');
}

function adj_nav_clearall_listener(evt)
{
    $('adj-nav-params').value = $('adj-nav-params').value.gsub(/\+/, ' '); 
    var params = $('adj-nav-params').value.parseQuery();
    $('adj-nav-params').value = 'adjclear=true';
    if (params['q'])
    {
        $('adj-nav-params').value += '&q=' + params['q'];
    }
    adj_nav_make_request();
	resetNestedOptions();
    Event.stop(evt); 
}

function adj_nav_init_other() {
    if(false == ajdnavExpandedLoaded ) {
        adj_nav_init(true);
        ajdnavExpandedLoaded = true;
    }
}

function adj_nav_init()
{
    var items, i, j, n, handler, 
        addOther = false,
        classes = ['category', 'attribute', 'icon', 'price', 'clear', 'dt', 'clearall'];
        
    if(typeof(arguments[0])!='undefined') {
        addOther = arguments[0];
    }        
    
    for (j=0; j<classes.length; ++j){
        items = $('narrow-by-list').select('.adj-nav-' + classes[j]);
        n = items.length;
        handler = eval('adj_nav_' + classes[j] + '_listener');
        for (i=0; i<n; ++i){
            if(ajdnavExpandedLoaded || addOther == items[i].hasClassName('other')) { //ajdnavExpandedLoaded || false == false || true == true
                Event.observe(items[i], 'click', handler);
            }
        }
    }
    if(addOther)
        return false;

// start new fix code    
    items = $('narrow-by-list').select('.adj-nav-price-input-id');
    
    n = items.length;
    
    var btn = $('adj-nav-price-go');
    
    for (i=0; i<n; ++i)
    {
        btn = $('adj-nav-price-go---' + items[i].value);
        if (Object.isElement(btn)){
            Event.observe(btn, 'click', adj_nav_price_input_listener);
            Event.observe($('adj-nav-price-from---' + items[i].value), 'keypress', adj_nav_price_input_listener);
            Event.observe($('adj-nav-price-to---' + items[i].value), 'keypress', adj_nav_price_input_listener);
        }
    }
// finish new fix code    
fillNestedOptions();
}
  
function adj_nav_create_slider(width, from, to, min_price, max_price, sKey) 
{
    var price_slider = $('adj-nav-price-slider' + sKey);

    return new Control.Slider(price_slider.select('.handle'), price_slider, {
      range: $R(0, width),
      sliderValue: [from, to],
      restricted: true,
      
      onChange: function (values){
//        var f = adj_nav_round(max_price*values[0]/width),
//            t = adj_nav_round(max_price*values[1]/width);
        var f = adj_nav_calculate(width, from, to, min_price, max_price, values[0]),
            t = adj_nav_calculate(width, from, to, min_price, max_price, values[1]);
           
//        adj_nav_add_params('price', f + ',' + t, true);
        adj_nav_add_params(sKey, f + ',' + t, true);
        
        // we can change values without sliding  
        $('adj-nav-range-from' + sKey).update(f); 
        $('adj-nav-range-to' + sKey).update(t);
            
        adj_nav_make_request();  
      },
      onSlide: function(values) { 
//          $('adj-nav-range-from' + sKey).update(adj_nav_round(max_price*values[0]/width));
//          $('adj-nav-range-to' + sKey).update(adj_nav_round(max_price*values[1]/width));
          $('adj-nav-range-from' + sKey).update(adj_nav_calculate(width, from, to, min_price, max_price, values[0]));
          $('adj-nav-range-to' + sKey).update(adj_nav_calculate(width, from, to, min_price, max_price, values[1]));
      }
    });
}

function adj_nav_calculate(width, from, to, min_price, max_price, value)
{
    var calculated = adj_nav_round(((max_price-min_price)*value/width) + min_price);
    
    return calculated;
}

/** 
 * uses jQuery
 * @author ksenevich@aitoc.com
 */
function adjnavHashChange()
{
    if (!isProcessHashChange)
    {
        isProcessHashChange = true;
        return false;
    }

	//if(jQuery.isFunction(jQuery.param))
	//	return false;

    var hash = jQuery.param.fragment();
    if (0 != hash.indexOf('!/') && !wasUrlHashed)
    {
        return false;
    }

    var hashParams = jQuery.deparam(hash.substr(2));

    jQuery('#adj-nav-params').val(jQuery.param(hashParams));

    canChangeLocationHash = false;
    adj_nav_make_request();
    canChangeLocationHash = true;
}

jQuery(document).ready(adjnavHashChange);
jQuery(window).bind('hashchange', adjnavHashChange);


/** Start featured attributes changes
 * 
 * @author ksenevich
 */

if ('undefined' == typeof adjnavExpandedFilters)
{
    adjnavExpandedFilters = {};
}

if ('undefined' == typeof adjnavExpandedAttributes)
{
    adjnavExpandedAttributes = false;
    ajdnavExpandedLoaded     = false;

}

function adjnavInitFeaturedValues()
{
    function observeMoreValues(links)
    {
        $$('#narrow-by-list a.attr-val-more').each(function(moreLink)
        {
            var rel = moreLink.readAttribute('rel');

            var isExpandedValues = false;
            for (var i in adjnavExpandedFilters)
            {
                if (i == rel)
                {
                    isExpandedValues = adjnavExpandedFilters[i];
                    break;
                }
            }

            $$('#adj-nav-filter-' + rel + ' li.attr-val-other').each(function(li)
            {
                if (isExpandedValues)
                {
                    li.show();
                }
                else if (0 == li.select('a.adj-nav-attribute-selected').length)
                {
                    li.hide();
                }
            });

            $$('li.attr-val-more-li-' + rel + ' a').each(function(el)
            {
                el.innerHTML = isExpandedValues ? $('adjnav-attr-val-collapse').value : $('adjnav-attr-val-expand').value;
            });
        });
    }

    observeMoreValues();

    $$('#narrow-by-list a.attr-val-more').each(function(moreLink)
    {
        moreLink.observe('click', function()
        {
            var rel = moreLink.readAttribute('rel');
            var isExpandedValues = false;
            for (var i in adjnavExpandedFilters)
            {
                if (i == rel)
                {
                    isExpandedValues = adjnavExpandedFilters[i];
                    break;
                }
            }
            adjnavExpandedFilters[rel] = !isExpandedValues;

            adj_nav_init_other();
            observeMoreValues();
        });
    });
}

function adjnavInitFeaturedAttributes()
{
    function hideOther(el)
    {
        switch (el.tagName.toLowerCase())
        {
            case 'dt':
                if (0 == el.select('a.adj-nav-clear').length)
                {
                    el.hide();
                }
                break;

            case 'dd':
                if (0 == el.select('a.adj-nav-attribute-selected').length)
                {
                    el.hide();
                }
                break;
        }
    }

    function observeMoreAttributes()
    {
        if (!adjnavExpandedAttributes)
        {
            $$('#narrow-by-list dt.adjnav-attr-other').each(hideOther);
            $$('#narrow-by-list dd.adjnav-attr-other').each(hideOther);

            $$('a.adjnav-attr-more').each(function(moreLink)
            {
                moreLink.innerHTML = $('adjnav-attr-expand').value;
            });
        }
        else
        {
            $$('#narrow-by-list dt.adjnav-attr-other').each(function(el){el.show();});
            $$('#narrow-by-list dd.adjnav-attr-other').each(function(el){el.show();});

            $$('a.adjnav-attr-more').each(function(moreLink)
            {
                moreLink.innerHTML = $('adjnav-attr-collapse').value;
            });
        }
    }

    observeMoreAttributes();

    $$('a.adjnav-attr-more').each(function(moreLink)
    {
        moreLink.observe('click', function()
        {
            adjnavExpandedAttributes = !adjnavExpandedAttributes;
            observeMoreAttributes();
        });
    });
}

/** Finish featured attributes changes */

function showSelectedOptions(element)
{
	var parentID = $(element).up('dd').id;
	var elementID = element.id;
	var arrayElementValue = parentID + ';' + elementID;
	if(!in_array(arrayElementValue, nestedOptions)) {
		nestedOptions.push(arrayElementValue);
	}
	else 
		removeNestedOption(arrayElementValue, nestedOptions);
}

function trigger_click(id)
{
	$(id).simulate("click");
}

function fillNestedOptions()
{
	if (nestedOptions.every)
	{
		for (var index = 0; index < nestedOptions.length; ++index)
		{
			var item = nestedOptions[index].split(";");
			item_key = item[0];
			item_val = item[1];
			if( jQuery('#'+item_val).text() )
			{
				jQuery('#nested-' + item_key).append('<li class="attr-val-featured nested-a"><a onclick="trigger_click(\''+ item_val +'\'); return false;" id="f_'+ item_val +'" href="#" class="adj-nav-attribute adj-nav-attribute-selected">' + jQuery('#'+item_val).text() + '</a></li>');
			}

			//remove filter background image
			jQuery('.nested-regfilter' + item_key).css('background', 'none');
		}
	}
}

function removeNestedOption(string, array)
{
	for(i=0; i<array.length; i++)
	{
		if(array[i].indexOf(string)>-1)
		{
			array.splice(i, 1);
		}
	}
	return array;
}


function resetNestedOptions()
{
	nestedOptions.length = 0;
}


function in_array (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;
}

