/**
* Generic toggle module   
* @author a.weeber, Wisdom
* @date 03-2009
* @namespace YAHOO.widgets 
* @module toggle
* @static
* @requires yahoo, dom, event, animation (optional), cookie (optional) from YUI Library 2.x
*/ 

YAHOO.namespace("widgets");
YAHOO.widgets.toggle = (function() {


	/**
	* Yui shortcut variables 
	* @final 
	*/

	var Dom = YAHOO.util.Dom,
		Event = YAHOO.util.Event;
	
	/**
	* Module settings object 
	* @final 
	*/
	
	var settings = {
		toggleClass 		: "toggle",
		activeClass			: "active",
		showClass			: "show",
		toggleRegionClass	: "toggleRegion"
	};


	/**
	* Initializes the module based on CSS (toggle) context 
	* @method init
	*/

	var init = function() {
		var toggleControls = Dom.getElementsByClassName(settings.toggleClass, "a");		
		Event.on(toggleControls,"click",function(e){Event.preventDefault(e);toggleElement(this);});
	};
	
	/**
	* Toggles an element based on source elements properties stored in the 'rel' attribute
	* @method toggleElement
	* @private
	* @param toggleControl {HTMLElement}  HTML source element (<a>)
	*/

	var toggleElement = function(toggleControl) {
		
		/* toggle parameters are stored in the a's rel attribuut */
		/* param order : target(id),effect(string),effectLength(int) */
		/* 1st param targetId is always required */
		
		var toggleSettings		= toggleControl.rel.split(",");
		var toggleTarget		= Dom.get(toggleSettings[0]);
		var toggleEffect		= toggleSettings[1];
		var toggleEffectLength	= toggleSettings[2];
		
		var isValidEffect = function(toggleEffect) {
			if(!toggleEffect) { 
				return false;
			}
			else  {
				return toggleEffect === "collapse"; /* add extra effects with ||*/
			}
		};
	
		if(isValidEffect(toggleEffect) && YAHOO.util.Anim) {
			var toggleAnim;
			
			if(toggleEffect == "collapse") {
				var currentHeight,toHeight;
		
				if(Dom.hasClass(toggleTarget,settings.showClass)) {
					currentHeight = Dom.getRegion(toggleTarget).bottom - Dom.getRegion(toggleTarget).top;
					
				} else {
					currentHeight = 0;
				}

				if(currentHeight == "0") {
					// check original height
					Dom.addClass(toggleTarget,settings.showClass);
					Dom.setStyle(toggleTarget, "height", "auto");
					toHeight = Dom.getRegion(toggleTarget).bottom - Dom.getRegion(toggleTarget).top;
					Dom.setStyle(toggleTarget, "height", "0px");
					Dom.addClass(toggleControl, settings.activeClass);

				} else {
					toHeight = 0;
					Dom.removeClass(toggleControl, settings.activeClass);
					
					// custom addon, set reference value in target box
					var controlSettings = toggleControl.rel.split(",");
					
					var selectedValue = toggleControl.title;
					var selectedKey	= controlSettings[3];
					
					var targetBox = Dom.get("selectedDictionaryLanguage");
					if(targetBox && selectedValue) {
						targetBox.innerHTML = selectedValue; // set visual value
						Dom.get("selectedDictionary").value = selectedKey;  // set hidden form value
						Dom.get("selectedDictionaryName").value = selectedValue;  // set hidden form value name
					}
					
					Dom.removeClass("toggleLanguages", "active");
				}
				
				toggleAnim = new YAHOO.util.Anim(toggleTarget, { height: { to: toHeight }},toggleEffectLength);
				toggleAnim.useSeconds = false;
				
				// set the height back to auto at the end of the animation
				if(toHeight > 0) {
					toggleAnim.onComplete.subscribe(function() {Dom.setStyle(toggleTarget, "height", "auto");});
				} else {
					toggleAnim.onComplete.subscribe(function() {Dom.removeClass(toggleTarget, settings.showClass);});
				}
				
				// start animation
				toggleAnim.animate();
			}
		}
		/* normal toggle mode*/
		else {
			if(Dom.hasClass(toggleTarget,settings.showClass)) {
				Dom.removeClass(toggleTarget, settings.showClass);
				Dom.removeClass(toggleControl, settings.activeClass);
			} else {
				Dom.addClass(toggleTarget, settings.showClass);
				Dom.addClass(toggleControl, settings.activeClass);
			}
		}
	};

	/**
	* @return {Object} collection of public methods
	*/
	
	return  {
		init:init
		
	};

})();

YAHOO.util.Event.onDOMReady(YAHOO.widgets.toggle.init, YAHOO.widgets.toggle, true);


/**
* 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 trefwoord..",
		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 initField
	* @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);


YAHOO.namespace("widgets");
YAHOO.widgets.payoffLoader = (function() {

	/**
	* Yui shortcut variables 
	* @final 
	*/
	
	var Dom = YAHOO.util.Dom,
		Event = YAHOO.util.Event;

	/**
	* Module settings object 
	* @final 
	*/
	
	var settings = {
		iframeId			: "payoffPlaceholderIframe",
		payoffContainer		: "payoffPlaceholder",
		embedId				: "payoffEmbed",
		linkContainerId		: "dictionaryLanguageBox"
	};
	
	var init = function() {
		var payloadLinks = Dom.get(settings.linkContainerId).getElementsByTagName("a");
		Event.on(payloadLinks, "click", setPayoff);
	};
	
	var setPayoff = function(e) {
		Event.preventDefault(e);
		var rndNum = Math.ceil(1000000 * Math.random());
		var payoffEmbed = Dom.get(settings.embedId);		
		var payoffContainer = payoffEmbed.parentNode;

		payoffContainer.removeChild(payoffEmbed);

		var embedObj = document.createElement("embed");
		embedObj.setAttribute("id","payoffEmbed");
		embedObj.setAttribute("src",this.rev + "?rnd=r" + rndNum);
		embedObj.setAttribute("type","application/x-shockwave-flash");
		embedObj.setAttribute("allowscriptaccess","always");
		embedObj.setAttribute("wmode","transparent");
		embedObj.setAttribute("width",payoffEmbed.width);
		embedObj.setAttribute("height",payoffEmbed.height);
		
		payoffContainer.appendChild(embedObj);

	};
	
	/**
	* @return {Object} collection of public methods
	*/

	return {
		init:init
	};

})();

YAHOO.util.Event.onDOMReady(YAHOO.widgets.payoffLoader.init, YAHOO.widgets.payoffLoader, true);
