/** 
 * $Id:$ 
 *
 * SchockSearch
 * @author: Beau Bishop 
 * @date: 1/2009
**/
var RESULTS_MODE = -1;

var SchockSearch = new Class({
	options: {
		slides: [],
		filters: {},
		effect: {
			duration: 700, 
			transition:Fx.Transitions.Quad.easeOut,
			wait: false
		},
		postURL: "search_controller.php",
		autoSearch: false
	},
	
	initialize : function (container, options, mode) {
		this.setOptions(options);
		this.options.filters;
		this.container = $(container);
		this.response = null;
		this.setSlides();
		this.setTriggers();
		this.mode = mode;
		this.comparisonTotal = 0;
		
		
		this.container.onsubmit = function() {
			this.runSearch();
			return !window.searchPage;
		}.bind(this);
		
		window.onload = function() {
			if( this.options.filters.slide_type ) {
				$('search-form').elements.slide_type[this.options.filters.slide_type[0]].checked = true;
			}
			/*else if( $("slide_type_1") ) {
				$("slide_type_1").checked = true;
			}*/
			
			if (window.searchPage) {
				this.runSearch();
			}
			$('hideable-options').show();
			$('name_search').onsubmit = function() {
				$('slide_name').setProperty('value', $('slide_name_proxy').getProperty('value'));
				$('slide_type_3').setProperty('checked',true)
				this.runSearch();
				return !window.searchPage;
			}.bind(this);
			
			var metricIDArr = ["width_metric_1", "width_metric_2"];
			metricIDArr.each(function(radioID){
				if( $(radioID) && $(radioID).checked) {
					$("length_metric").value = $(radioID).value;
					$("height_metric").value = $(radioID).value;
				}
			});
		}.bind(this);
		
		if (this.options.autoSearch) {
			this.autoSearch();
		}
		
	},
	
	setSlides : function () {
		this.container.getElements("li").each(function(li) {
			if (li.hasClass('no-slide')) return;
			
			var toggle = li.getElements("div.toggle");//childNodes[1];
						
				var dl = li.getElements("dl").getProperty("id");//childNodes[3];	

				if (dl != "base-options") {
					
					var slide = new Fx.Slide(dl.toString(), this.options.effect);
					toggle.addEvent('click', function(e) {
						e = new Event(e);
						slide.toggle();
						position = (slide.wrapper.offsetHeight == 0) ? "246px -18px" : "246px 0px";
						this.setStyle('background-position', position);
						e.stop();
					});
					tmp = dl.toString().split('-')[0];
					if (!this.options.slides.contains(tmp)) slide.hide();
				}
			
		}, this);
	},	

	setTriggers : function () {
		var metricIDArr = ["width_metric_1", "width_metric_2"];
		metricIDArr.each(function(radioID){
			if( $(radioID) ) {
				$(radioID).addEvent("click", function(e){
					$("length_metric").value = $(radioID).value;
					$("height_metric").value = $(radioID).value;
				});
			}	
		});
		
		this.container.getFormElements().each(function (elem) {
			if (/select/.test(elem.type)) {
				elem.addEvent('change', this.runSearch.bind(this));
				if (elem.getProperty('id')=="slide_type") {	
					elem.addEvent('change', this.toggleHiddenFields.bindWithEvent(elem));
				}
			}
			if (/checkbox/.test(elem.type)) {
				elem.addEvent('click', this.runSearch.bind(this));
			}
			if (/radio/.test(elem.type)) {
				elem.addEvent('click', this.runSearch.bind(this));
			}
			if (/reset/.test(elem.type)) {
				elem.addEvent('click', this.resetForm.bind(this));
			}
		},this);
		
		if($defined($('submit_name'))) $('submit_name').addEvent('click', this.handleNameCheck.bind(this));
		
	},
	
	toggleHiddenFields : function (e) {
		var elem = e.target;
		/*if ($defined(elem) && elem.value==2) {
			$('hideable-options').setStyle('display', "none").getFormElements().setProperty('value','');
			
			$$('#length_metric, #height_metric, #width_metric').each(function(elem){
				elem.setProperty('value','inch');
			});
			
			$('load_capacity_10k_metric').setProperty('value','lbs');
			
			
		} else {
			$('hideable-options').setStyle('display', "")
		}*/
		
	},
	
	hideSlideImage : function (evt) {
		var elem = evt.target;
		elem.remove();
	}, 
	
	showSlideImage : function (evt) {
		var elem = evt.target;
		$$('.hover-image').hide();
		var img = new Element('img', { src: elem.getProperty('rel') }).addClass('hover-image').setStyles({'z-index':1000,'position':"absolute"}).addEvent('mouseout', this.hideSlideImage.bindWithEvent(elem)).injectAfter(elem.getParent());
	},

	
	resetForm : function (e) {
		new Event(e).stop();
		this.container.getFormElements().each(function (elem) {
			if (/select/.test(elem.type)) {
				elem.options[0].selected = true;
			}
			if (/checkbox/.test(elem.type)) {
				elem.checked = false;
			}
		});
		window.location = (/search/.test(document.location)) ? "search.php?reset" : "../search.php?reset";
	},
	
	autoSearch : function () {
		var queryString = "?ajax"; 
		if (this.mode == RESULTS_MODE) {
			queryString = "?ajax&amp;results&sortby="+window.sortby;
		    this.showLoader("search-results-list");
		} else {
			this.showLoader("search-result-count");
		}
		
		this.searchAjax = new Ajax(this.options.postURL+queryString, {
			method: 'post', 
			data: this.container.toQueryString()+'&submit_search=true',
			onSuccess: this.evalResponse.bind(this)
		});
	
		(function() { this.searchAjax.request(); }.bind(this)).delay(250); //< pause for 1/4 of a second
	},
	
	runSearch : function (e) {
		if (window.searchPage === false) {
			return;
		}
		
		var j, inputs = document.getElementsByTagName("INPUT");
		for (j = 0;j < inputs.length;j += 1) {
			if (inputs[j].type === 'text' && !/slide_name/.test(inputs[j].name)) {
				// remove non-digit characters from input
				inputs[j].value = inputs[j].value.replace(/[^\d\.]/,'');
			}
		}
		
		var queryString = "?ajax"; 
		if (this.mode == RESULTS_MODE) {
			
		//$('slide_name').setProperty('value','');
		if ($('load_capacity_10k_min').getProperty('value').trim() === '') {
			$('load_capacity_10k_min').setProperty('value', '0');
		}
			
			queryString = "?ajax=true&results=true&sortby="+window.sortby;
		    this.showLoader("search-results-list");
		} else {
			this.showLoader("search-result-count");
		}
		
		this.searchAjax = new Ajax(this.options.postURL+queryString, {
			method: 'post', 
			data: this.container.toQueryString()+'&submit_search=true',
			onSuccess: this.evalResponse.bind(this)
		});
	
		(function() { this.searchAjax.request(); }.bind(this)).delay(250); //< pause for 1/4 of a second
	},
	
	evalResponse: function (response) {
		var res = Json.evaluate(response);
		$('search-result-count').setHTML("<b>Found "+res.total+" Results</b>");
		
		if ( this.mode == RESULTS_MODE ){ 
			$('search-results-list').setHTML(res.results.fromB64());
			$$('#width_popup, #height_popup, #length_popup').each(function(elem){
				moopop.add_pop_to(elem);
			});
			
						
			$$('img.hover-icon').addEvent('mouseover', this.showSlideImage.bindWithEvent(this));
						
			this.comparisonTotal = 0; //< always reset after search
			$each($('search-results-list').getFormElements(), function(elem) {
				if (/checkbox/.test(elem.type)) {
					elem.addEvent('change', this.handleComparisonOptions.bind(this,elem));
				}
			},this);
			//attach pre-check to go button to keep from posting empty requests
			if($defined($('submit-action'))) $('submit-action').addEvent('click', this.handleComparisonCheck.bind(this));
		} else {
			$('submit-search').value = (res.total == 0) ? 'Create Custom Slide' : 'SUBMIT SEARCH';
		}
		
	},
	
	handleComparisonOptions : function (elem) {
		if (elem.checked && (this.comparisonTotal+1) > 5) {
			elem.checked = false;
			alert('Sorry, you can only select up to 5 slides at a time!');
		} 
		else if (elem.checked) { this.comparisonTotal += 1; }
		else if (!elem.checked) { this.comparisonTotal -= 1; }
	},
	
	handleComparisonCheck : function (e) {
		if (this.comparisonTotal == 0) {
			alert('Sorry, you must select at least one slide!');
			new Event(e).stop()
		}
	},

	handleNameCheck : function (e) {
		
		if ($('slide_name').value.length<2) {
			alert('Sorry, the Name is too short!');
			new Event(e).stop()
		}
		
	},

	
	
	showLoader : function (elem) {
		var area = $(elem);
		area.setHTML("<p id='loader'>Searching<br /><img src='images/shared/ajax-loader.gif' alt='' />");
	}
		
});
SchockSearch.implement(new Options, new Events);

