var NarrowResults = Class.create();

NarrowResults.prototype = {
	initialize: function( el ){
		this.el = el;
		try{
			var btnEl = this.el.select( '.MinMaxBtn' )[0];
		}
		catch( e ){
			var btnEl = this.el.select( '.MinMaxBtn' )[0];
		}
		try{
			Event.observe( btnEl, 'click', this.toggleView.bindAsEventListener(this) );
		}
		catch( e ){}
	},
	toggleView: function(){
		if( this.el.hasClassName( 'On' ) ){
			this.el.removeClassName( 'On' );
			this.el.addClassName( 'Off' );
		}
		else{
			this.el.removeClassName( 'Off' );
			this.el.addClassName( 'On' );
		}
	},
	toUrl: function( current_url ){
		var els = this.el.getElementsByTagName( "select" );
		for( yar=0; yar<els.length; yar++ ){
			var temp = els[yar];
			current_url = this.removeFromUrl( current_url, temp.name );
			if( $F(temp) != '' && $F(temp) != '0' )
				current_url += temp.name +'/'+ $F( temp ) + '/';
		}
		els = this.el.getElementsByTagName( "input" );
		var multiValueFields = {};
		for( yar=0; yar<els.length; yar++ ){
			var temp = $(els[yar]);
			current_url = this.removeFromUrl( current_url, temp.name );
			if(temp.getValue() != null && temp.getValue() != '' && temp.getValue() != "-1" && temp.getValue() != "0" ){
				if( temp.name.indexOf( "[" ) == ( temp.name.length - 2) ){
					var tempName = temp.name.replace( "[]", "" );
					if( multiValueFields[ tempName ] == undefined || multiValueFields[ tempName ] == null )
						multiValueFields[ tempName ] = '';
					multiValueFields[ tempName ] += ( multiValueFields[ tempName ] == '' ? '' : ',' ) + temp.getValue();
				}
				else
					current_url += temp.name +'/'+ temp.getValue() + '/';
			}
		}
		for( key in multiValueFields ){
			current_url += key + '/' + multiValueFields[ key ] + '/';
		}
		return current_url;
	},
	removeFromUrl: function( current_url, field_name ){
		field_name = field_name.replace( '[', '' ).replace( ']', '' );
		var re = new RegExp( "/"+field_name+"/[^/]*/", "g");
		re.compile( field_name+"/[^/]*/", "g");
		return current_url.replace( re, '' );
	}
}

var NarrowResultsCollection = Class.create();
NarrowResultsCollection.prototype = {
	initialize: function( el ){
		this.el = el;
		this.collection = new Array();
		try{
			var els = this.el.select( '.ResultNarrowerItem' );
		}
		catch( e ){
			var els = this.el.select( '.ResultNarrowerItem' );
		}
		for( c=0; c<els.length; c++ )
			this.collection.push( new NarrowResults( els[c] ) );
		
		try{
			var tempv = this.el.select( '.ResultNarrowerBtn' )[0];
		}
		catch( e ){
			var tempv = this.el.select( '.ResultNarrowerBtn'  )[0];
		}
		if(tempv){
			Event.observe(tempv, 'click', this.submit_changes.bind(this) );
		}
	},
	submit_changes: function(){
		var current_url = document.location.pathname;
		if( current_url[ current_url.length -1 ] != '/' ) current_url += '/';
		for( boo=0; boo<this.collection.length; boo++ )
			current_url = this.collection[boo].toUrl( current_url );
			
		var temp_array = current_url.split("/");
		for( i = 0; i < temp_array.length; i++ ) {
			if( temp_array[i] == 'offset' || temp_array[i] == 'count') {
				delete temp_array[i];
				delete temp_array[i+1];
			}
		}
		current_url = temp_array.join("/");
		current_url = current_url.replace( "//", "/").replace( "//", "/").replace( "//", "/");

		var newUrl = current_url + document.location.search;
		document.location.href = newUrl.replace('//', '/');
	}
}

NarrowResults.InitPage = function(){
	var els = $$( ".ResultNarrower" );
	for( c=0; c<els.length; c++ )
		new NarrowResultsCollection( els[c] );
}

Event.observe( window, 'load', NarrowResults.InitPage );