/**
* Site searchbox initializer
* This script adds and removes default search input text, applies focus and validates input
* @author a.weeber, Wisdom
* @date 03-2009
* @namespace YAHOO.widgets 
* @module siteSearch
* @static
* @requires yahoo, dom, event from YUI Library 2.x
*/ 


YAHOO.namespace("widgets");
YAHOO.widgets.siteSearch = (function() {

	/**
	* Yui shortcut variables 
	* @final 
	*/
	
	var Dom = YAHOO.util.Dom,
		Event = YAHOO.util.Event;

	/**
	* Module settings object 
	* @final 
	*/

	var settings = {
		inputClass				: "siteSearch",
		defaultSearchText		: "Typ een zoekterm",
		focusClass				: "focus",
		activeClass				: "active",
		enableClearFieldClass	: "enableClearField",
		clearFieldClass			: "clearField",
		submitClass				: "submit"
	};
	
	/**
	* Initializes the module based on CSS context 
	* @method init
	*/
	
	var init = function() {

		var searchInputs = Dom.getElementsByClassName(settings.inputClass);
	
		for(var i=0; i<searchInputs.length; i++) {
			var searchText = searchInputs[i].value;
			
			if(!searchText || searchText === "") {
				searchText = settings.defaultSearchText;
			} 			
			
			searchInputs[i].setAttribute("title", searchText);

			initField(searchInputs[i], searchText);
		}
	};
	
	/**
	* Initializes several events on a field
	* @method resizeFont
	* @private
	* @param field {HTMLElement} HTML input element
	* @param msg {String} default input value
	*/

	var initField = function(field, msg) {

		field.value = msg;
		
		var formContext = Dom.getAncestorByTagName(field, "fieldset") || Dom.getAncestorByTagName(field, "form"); // support .NET sites
		var formSubmitBtn = Dom.getElementsByClassName(settings.submitClass, "input", formContext)[0];

		/**
		* Field click handler 
		* @method clickHandler
		* @for initField
		*/
		
		var clickHandler = function() {
			if(field.value  == msg) {
				// reset value
				field.value = "";
			}

			// add focus class
			if(!Dom.hasClass(field, settings.focusClass)) {
				Dom.addClass(field, settings.focusClass);
			}
			// focus field
			field.focus();
		};
		
		/**
		* Field blur handler 
		* @method blurHandler
		* @for initField
		*/
		
		var blurHandler = function() {
			if(field.value === "") {
				field.value  = msg;
			}

			// remove focus class
			if(Dom.hasClass(field, settings.focusClass)) {
				Dom.removeClass(field, settings.focusClass);
			}
		};
		
		/**
		* Field submit handler 
		* @method submitHandler
		* @for initField
		*/
		
		var submitHandler = function(e) {

			if(field.value === "" || field.value === msg) {
				Event.preventDefault(e);
				clickHandler();
				return false;
			} else {
				return true;
			}
		};

		/**
		* Field keypress handler 
		* @method keyPressHandler
		* @for initField
		*/
		
		var keypressHandler = function(e) {
			var clearFieldEl = Dom.getElementsByClassName(settings.clearFieldClass, "a", formContext)[0];
			if(field.value === "") {
				Dom.removeClass(clearFieldEl, settings.activeClass);
			} else {
				Dom.addClass(clearFieldEl, settings.activeClass);
			}
		}
		
		Event.on(field, "click", clickHandler);
		Event.on(field, "blur", blurHandler);
		Event.on(field, "blur", blurHandler);
		
	
		if(Dom.hasClass(formContext, settings.enableClearFieldClass)) {
			Event.on(field, "keyup", keypressHandler);
			var clearFieldEl = Dom.getElementsByClassName(settings.clearFieldClass, "a", formContext)[0];
			if(clearFieldEl) {
				Event.on(clearFieldEl, "click", function(e){
					Event.preventDefault(e); 
					field.value = "";
					field.focus();
					Dom.addClass(field, settings.focusClass);
					Dom.removeClass(clearFieldEl, settings.activeClass);
				});
			}
		}
	
		if(formSubmitBtn) {
			Event.on(formSubmitBtn, "click", function(e){return submitHandler(e);});
		}
	};

	
	/**
	* @return {Object} collection of public methods
	*/

	return {
		init:init
	};

})();

YAHOO.util.Event.onDOMReady(YAHOO.widgets.siteSearch.init, YAHOO.widgets.siteSearch, true);

