/**
 * Layered Navigation (more/less)
 */
var LayeredNavigationFilter = Class.create();
LayeredNavigationFilter.prototype =
{
	initialize: function(selector,itemsPerClick) //this function is called as a constructor
	{
		this.selector = selector;
		
		$$(this.selector).each(function(list) { // hide all
			
			list.writeAttribute('current_priority',1);
			list.writeAttribute('items_per_click',itemsPerClick);
			
			if (list.select('li').size() <= itemsPerClick) {
				LayeredNavigationFilter.prototype.addLastClass(list);
				return;
			}
			
			list.childElements()
				.invoke('hide')
				.invoke('addClassName','hidden');

			LayeredNavigationFilter.prototype.displayByPriority(list,'show');
			
			var a = new Element('a', { 'class': 'more', 'href': '#' })
				.update('<span>More</span>')
				.observe('click', function(event){
					event.stop();
					LayeredNavigationFilter.prototype.displayByPriority(list);
				});
			
			list.insert({'after': a});
		}); 
	},
	addLastClass: function(list)
	{
		list.select('li:not(.hidden)').invoke('removeClassName', 'last');
		$(list.select('li:not(.hidden)').last()).addClassName('last');
	},
	displayByPriority: function(list,showFn)
	{
		if (!showFn) showFn='appear';
		
		var itemsPerClick = parseInt(list.readAttribute('items_per_click'));
		var currentPriority = parseInt(list.readAttribute('current_priority'));
		
		var i = 0;
		
		while( i < itemsPerClick && list.select('li.hidden').size() > 0) {
			list.select('li.' + 'priority-' + currentPriority + '.hidden')
				.invoke('removeClassName','hidden')
				.invoke(showFn);
			
			currentPriority++;
			i++;
		}
		
		if (list.select('li.hidden').size() == 0) {
			list.next().remove();
		}
		
		LayeredNavigationFilter.prototype.addLastClass(list);
		
		list.writeAttribute('current_priority',currentPriority);
	}
};

document.observe("dom:loaded", function() {
	new LayeredNavigationFilter('.applymore', 25);
});

