var CSeaFilter = Class.create();
CSeaFilter.prototype = {

	initialize: function(config){
		this.options = {
			'submitUrl': config['submitUrl'],
			'formId': config['formId'],
			'formContainer': config['formContainer'],
			'dataContainer': config['dataContainer'],
			'els': config['els']
		};
	},

	init: function()
	{
		var self = this;
		
		Event.observe(window, 'load', function() {
			self.formId = $(self.options['formId']);
			self.formContainer = $(self.options['formContainer']);
			self.dataContainer = $(self.options['dataContainer']);
			self.seaArr = new Array();
			self.seaArr[0] = 'Manufacturer';
			self.seaArr[1] = 'Color';
			self.seaArr[2] = 'SubCat';
			self.seaArr[3] = 'Size';
			self.seaArr[4] = 'Slug';
			self.seaArr[5] = 'Option';

			/*this.formContainer.select('label input').each(function(selected){
				Event.observe(selected, 'click', this.onClk.bind(this, selected));
			}.bind(this));*/
			
			jQuery("#sideBox").find('.controlBox label input').click(function(){
				self.onClk(this);
			});

			for (i = 0; i < self.options['els'].length; i++)
			{
				/*this.formContainer.select('a.sea' + this.options['els'][i] + 'All').each(function(selected){
					Event.observe(selected, 'click', this.onAll.bind(this, 'sea' + this.options['els'][i]));
				}.bind(this));
				this.formContainer.select('a.sea' + this.options['els'][i] + 'None').each(function(selected){
					Event.observe(selected, 'click', this.onNone.bind(this, 'sea' + this.options['els'][i]));
				}.bind(this));*/
				var els = self.options['els'][i];
				jQuery("#sideBox").find('.controlBox a.sea' + els + 'All').click(function(){
					self.onAll(jQuery(this).attr('class').substr(0, jQuery(this).attr('class').length - 3));
				});
				jQuery("#sideBox").find('.controlBox a.sea' + els + 'None').click(function(){
					self.onNone(jQuery(this).attr('class').substr(0, jQuery(this).attr('class').length - 4));
				});
			}

			/*this.formContainer.select('a.seaClearAll').each(function(selected){
				Event.observe(selected, 'click', function(){
					this.clearAll();
					this.clearPrice();
					this.onChange();
				}.bind(this));
			}.bind(this));*/

			jQuery("#sideBox").find('a.seaClearAll').click(function(){
				self.clearAll();
				self.clearPrice()
				self.onChange();
			});
			
			/*this.formContainer.select('a.seaPriceClear').each(function(selected){
				Event.observe(selected, 'click', function(){
					this.clearPrice();
					this.onChange();
				}.bind(this));
			}.bind(this));*/
			
			jQuery("#sideBox").find('a.seaPriceClear').click(function(){
				self.clearPrice()
				self.onChange();
			});

			/*this.formContainer.select('table.trackbar td.l').each(function(selected){
				Event.observe(selected, 'mouseup', this.onChange.bind(this));
			}.bind(this));
			this.formContainer.select('table.trackbar td.c').each(function(selected){
				Event.observe(selected, 'mouseup', this.onChange.bind(this));
			}.bind(this));
			this.formContainer.select('table.trackbar td.r').each(function(selected){
				Event.observe(selected, 'mouseup', this.onChange.bind(this));
			}.bind(this));*/
			jQuery("#sideBox").find('table.trackbar td.l').mouseup(function(){
				self.onChange();
			});
			jQuery("#sideBox").find('table.trackbar td.c').mouseup(function(){
				self.onChange();
			});
			jQuery("#sideBox").find('table.trackbar td.r').mouseup(function(){
				self.onChange();
			});

			curHash = window.location.hash;
			if (curHash)
			{
				self.loadHash(curHash);
			}
			
		}.bind(self));
	},

	onClk: function(sel)
	{
	    var self = this;
		//if(false == sel.up(0).hasClassName('checkboxDisabled'))
		if(false == jQuery(sel).parent().hasClass('checkboxDisabled'))
	    {
			/*if (false == sel.checked)
			{
			    sel.up(0).removeClassName('checkboxOn');
			    sel.up(0).addClassName('checkboxOff');
			    this.unCheck();
			}*/
			if (false == jQuery(sel).is(':checked'))
			{
				jQuery(sel).parent().removeClass('checkboxOn');
				jQuery(sel).parent().addClass('checkboxOff');
				self.unCheck();
			}
			else
			{
			    for (i = 0; i <= 3; i++)
			    {
					if ("undefined" != typeof $('input.sea' + self.seaArr[i]))
					{
					    if(jQuery(sel).hasClass('sea' + self.seaArr[i]))
					    {
							/*this.formContainer.select('input.sea' + this.seaArr[i]).each(function(selected){
								selected.up(0).addClassName('clearAll');
							}.bind(this));*/
					    	jQuery("#sideBox").find('input.sea' + self.seaArr[i]).each(function(){
					    		jQuery(this).parent().addClass('clearAll');
					    	});
					    	
					    } else {
							/*this.formContainer.select('input.sea' + this.seaArr[i]).each(function(selected){
							    selected.up(0).removeClassName('clearAll');
							}.bind(this));*/
					    	jQuery("#sideBox").find('input.sea' + self.seaArr[i]).each(function(){
					    		jQuery(this).parent().removeClass('clearAll');
					    	});
					    }
					}
			    }
	
			    //sel.up(0).removeClassName('checkboxOff');
			    //sel.up(0).addClassName('checkboxOn');
			    jQuery(sel).parent().removeClass('checkboxOff');
				jQuery(sel).parent().addClass('checkboxOn');
			}
			
			self.onChange();
	    }
		
	},

	unCheck: function()
	{
		var self = this;
	    if( $$('.checkboxOn').length < 1 && $('seaMinPrice').value == 0 && $('seaMaxPrice').value == 300 ){
			self.clearAll();
	    } else {

		var checkArr = new Array(0,0,0,0);
		var block_checked=0, block_key;
		
		for (i = 0; i <= 3; i++)
		{
		    if ("undefined" != typeof $('input.sea' + self.seaArr[i]))
		    {
				/*this.formContainer.select('input.sea' + this.seaArr[i]).each(function(selected){
				    if(true == selected.checked) checkArr[i]++;
				    selected.up(0).removeClassName('clearAll');
				    selected.up(0).removeClassName('checkboxDisabled');
				}.bind(this));*/
		    	jQuery("#sideBox").find('input.sea' + self.seaArr[i]).each(function(){
		    		if (true == jQuery(this).is(':checked'))
		    		{
		    			checkArr[i]++;
		    		}
		    		jQuery(this).parent().removeClass('clearAll');
		    		jQuery(this).parent().removeClass('checkboxDisabled');
		    	});
			if(checkArr[i] > 0){
			    block_checked++;block_key=i;
			}
		    }
		}

		if( block_checked == 1 ){
		    if ("undefined" != typeof $('input.sea' + self.seaArr[block_key]))
		    {
				/*this.formContainer.select('input.sea' + this.seaArr[block_key]).each(function(selected){
				    selected.up(0).addClassName('clearAll');
				    selected.up(0).removeClassName('checkboxDisabled');
				}.bind(this));*/
		    	jQuery("#sideBox").find('input.sea' + self.seaArr[block_key]).each(function(){
		    		jQuery(this).parent().addClass('clearAll');
		    		jQuery(this).parent().removeClass('checkboxDisabled');
		    	});
		    }
		}
	    }
	},
	
	clearAll: function()
	{
		var self = this;
		/*this.formContainer.select('input.seaManufacturer').each(function(selected){
			selected.checked = false;
			selected.up(0).removeClassName('checkboxOn');
			selected.up(0).addClassName('checkboxOff');
			selected.up(0).removeClassName('checkboxDisabled');
			selected.up(0).addClassName('clearAll');
		}.bind(this));
		this.formContainer.select('input.seaColor').each(function(selected){
			selected.checked = false;
			selected.up(0).removeClassName('checkboxOn');
			selected.up(0).addClassName('checkboxOff');
			selected.up(0).removeClassName('checkboxDisabled');
			selected.up(0).addClassName('clearAll');
		}.bind(this));
		this.formContainer.select('input.seaSize').each(function(selected){
			selected.checked = false;
			selected.up(0).removeClassName('checkboxOn');
			selected.up(0).addClassName('checkboxOff');
			selected.up(0).removeClassName('checkboxDisabled');
			selected.up(0).addClassName('clearAll');
		}.bind(this));
		this.formContainer.select('input.seaSlug').each(function(selected){
			selected.checked = false;
			selected.up(0).removeClassName('checkboxOn');
			selected.up(0).addClassName('checkboxOff');
			selected.up(0).removeClassName('checkboxDisabled');
			selected.up(0).addClassName('clearAll');
		}.bind(this));
		this.formContainer.select('input.seaOption').each(function(selected){
			selected.checked = false;
			selected.up(0).removeClassName('checkboxOn');
			selected.up(0).addClassName('checkboxOff');
			selected.up(0).removeClassName('checkboxDisabled');
			selected.up(0).addClassName('clearAll');
		}.bind(this));*/

		for (i = 0; i < self.options['els'].length; i++)
			{
				var els = self.options['els'][i];
				jQuery("#sideBox").find('input.sea' + els).each(function(){
					jQuery(this).attr('checked', false);
					jQuery(this).parent().removeClass('checkboxOn');
					jQuery(this).parent().addClass('checkboxOff');
					jQuery(this).parent().removeClass('checkboxDisabled');
					jQuery(this).parent().addClass('clearAll');
				});
			}
	},

	clearPrice: function()
	{
		$('seaMinPrice').value = 0;
		$('seaMaxPrice').value = 300;

		window.trackbar.getObject('one').updateLeftValue(0);
		window.trackbar.getObject('one').updateRightValue(300);
	},

	onAll: function(type)
	{
		var self = this;
		/*this.formContainer.select('input.' + type).each(function(selected){
			selected.checked = true;
			selected.up(0).removeClassName('checkboxOff');
			selected.up(0).addClassName('checkboxOn');
		}.bind(this));
		this.onChange();*/
		jQuery("#sideBox").find('input.' + type).each(function(){
			jQuery(this).attr('checked', true);
			jQuery(this).parent().removeClass('checkboxOff');
			jQuery(this).parent().addClass('checkboxOn');
		});
		self.onChange();
	},

	onNone: function(type)
	{
		var self = this;
		/*this.formContainer.select('input.' + type).each(function(selected){
			selected.checked = false;
			selected.up(0).removeClassName('checkboxOn');
			selected.up(0).addClassName('checkboxOff');
			selected.up(0).removeClassName('checkboxDisabled');
			selected.up(0).removeClassName('clearAll');
		}.bind(this));
		this.unCheck();
		this.onChange();*/
		jQuery("#sideBox").find('input.' + type).each(function(){
			jQuery(this).attr('checked', false);
			jQuery(this).parent().removeClass('checkboxOn');
			jQuery(this).parent().addClass('checkboxOff');
			jQuery(this).parent().removeClass('checkboxDisabled');
			jQuery(this).parent().addClass('clearAll');
		});
		self.unCheck();
		self.onChange();
	},

	evalResponse: function(transport) {
		var response = (
			Object.isUndefined(transport.responseText) ? transport : transport.responseText
		);

		return response;
	},

	setPage: function(page)	{
		$('sea_filter_page').value = page ? page : 1;
	},

	setRange: function(range) {
		$('sea_filter_range').value = range ? range : '';
	},

	setSort: function(sort)	{
		$('sea_filter_sort').value = sort ? sort : '';
	},

	setShow: function(show)	{
		$('sea_filter_show').value = show ? show : '';
	},
	
	loadHash: function(hash)
	{
		var self = this;
		hash = hash.gsub('#', '');
		self.hashArr = hash.toQueryParams();

		if (self.hashArr)
		{
			self.clearAll();
			self.clearPrice();
			
			for (i = 0; i <= 3; i++)
			{	
				if ("undefined" != typeof $('input.sea' + self.seaArr[i]))
				{
					/*this.formContainer.select('input.sea' + this.seaArr[i]).each(function(selected){
						if (("undefined" != typeof this.hashArr[selected.id]) && ("undefined" != $(this.hashArr[selected.id])))
						{		
							selected.checked = true;
							selected.up(0).addClassName('checkboxOn');
							selected.up(0).removeClassName('checkboxOff');
						}	
					}.bind(this));*/
					jQuery("#sideBox").find('input.sea' + self.seaArr[i]).each(function(){
						if (("undefined" != typeof self.hashArr[jQuery(this).attr('id')]) && ("undefined" != $(self.hashArr[jQuery(this).attr('id')])))
						{
							jQuery(this).attr('checked', true);
							jQuery(this).parent().addClass('checkboxOn');
							jQuery(this).parent().removeClass('checkboxOff');
						}
					});
				}	
			}
			this.unCheck();
			if ("undefined" != typeof self.hashArr['seaMinPrice'])
			{
				$('seaMinPrice').value = self.hashArr['seaMinPrice'];
				window.trackbar.getObject('one').updateLeftValue(self.hashArr['seaMinPrice']);
			}	
			if ("undefined" != typeof self.hashArr['seaMaxPrice'])
			{
				$('seaMaxPrice').value = self.hashArr['seaMaxPrice'];
				window.trackbar.getObject('one').updateRightValue(self.hashArr['seaMaxPrice']);
			}	
		}
		self.hash = hash;
		self.onChange();
	},
	
	hash: false,

	onChange: function()
	{
		var self = this;
		var cntr = self.dataContainer, f = self.formId, hash = Form.serializeElements(f.getElements());
		//cntr.startWaiting('bigWaiting');
		jQuery("#overlay").show();
		jQuery("#overlay").css({ width: jQuery(window).width(), height: jQuery(".mainContainer").height()});
		var left = (jQuery(window).width()) / 2;
		var top = jQuery(window).height()/2+jQuery(window).scrollTop();
		jQuery("#overlay").find("img").css({ top: top}); 
		jQuery("#overlay").find("img").css({ left: left});
		
		if (self.hash)
		{
			hash = self.hash;
			self.hash = false;
		}
		
		window.location.hash = hash;

		new Ajax.Request(self.options['submitUrl'], {
				method: 'POST',
				postBody: hash,
				onFailure: function(cntr) {
					//cntr.stopWaiting();
					jQuery("#overlay").hide();
				}.bind(self, cntr),
				onSuccess: function(cntr, transport) {
					var data;
					if (!(data = self.evalResponse(transport)))
					{
						alert('Sorry! Internal error!');
					}
					else
					{
						cntr.update(data);

						disableArr = eval('(' + $('hidden_filter').innerHTML + ')');
						for (i = 0; i <= 3; i++)
						{
						    if ("undefined" != typeof $('input.sea' + self.seaArr[i]))
						    {
							    /*this.formContainer.select('input.sea' + this.seaArr[i]).each(function(selected){
								if(false == selected.up(0).hasClassName('clearAll')){
								    if(false == selected.checked){
									selected.up(0).addClassName('checkboxDisabled');
									if (("undefined" != typeof disableArr[selected.id]) && ("undefined" != $(disableArr[selected.id])))
									{
									    selected.up(0).removeClassName('checkboxDisabled');
									}
								    }
								}
							    }.bind(this));*/
						    	jQuery("#sideBox").find('input.sea' + self.seaArr[i]).each(function(){
						    		if (false == jQuery(this).parent().hasClass('clearAll'))
						    		{
						    			if (false == jQuery(this).is(':checked'))
						    			{
						    				jQuery(this).parent().addClass('checkboxDisabled');
						    				if (("undefined" != typeof disableArr[jQuery(this).attr('id')]) && ("undefined" != $(disableArr[jQuery(this).attr('id')])))
						    				{
						    					jQuery(this).parent().removeClass('checkboxDisabled');
						    				}
						    			}
						    		}
						    	});
						    }
						}
					}
					jQuery("#overlay").hide();
					//cntr.stopWaiting();
				}.bind(this, cntr)
			}
		);
	}
}
