/**
* Client side scripts for FormGenerator
*/
var formGenerator = new function(){
	/* Static fields */


	/*MOUSE BUTTONS*/
	this.MB_UNKNOWN = -1;
	this.MB_LEFT = 0;
	this.MB_MIDDLE = 1;
	this.MB_RIGHT = 2;


	/* KEY CODES */
	this.KEY_ENTER = 13;

	this.state = "";

	this.initFunctions = new Array();
	
	/**
	 * Adds an event handler to an element
	 *
	 * This method automatically decides the proper way to attach an event handler based on the browser's Javascript implementation
	 * @link http://www.quirksmode.org/js/events_order.html
	 * @param element target element
	 * @param eventType string event to listen for (example: 'click')
	 * @param function function to call when event occurs
	 * @param bool capture events (default: false)
	 */
	this.addEventHandler = function(element, eventType, func, useCapture) {
		if (element){
			if (element.addEventListener) {
				element.addEventListener(eventType, func, useCapture);
				return true;
			} else if (element.attachEvent) {
				var r = element.attachEvent('on' + eventType, func);
				return r;
			} else {
				element['on' + eventType] = func;
			}
		}
	}


	/**
	* Cancel / stop event bubbling
	*/
	this.cancelEvent = function (e){
		if ( this.isIE() ){
			e.returnValue = false;
			e.cancelBubble = true;
		} else {
			if (e.stopPropagation){
				e.stopPropagation();
			} else if (e.preventDefault){
				e.preventDefault();
			}
		}
	}


	/**
	* Return source of event
	*/
	this.getEventSource = function(e){
		if (e.target){
			return e.target;
		} else if (e.srcElement){
			return e.srcElement;
		}

		return null;
	}

	/**
	* Let user know he missed something
	*/
	this.showMissingRequired = function(elementID){
		var element = document.getElementById(elementID);
		if (element){
			element.focus();
			/*
			var label = document.getElementById("label_" + elementID);
			alert("U heeft '" + label.innerHTML.replace("&nbsp;*","") + "' vergeten in te voeren");
			*/
		}
	}

	this.getElementName = function(elementID){
		var label = document.getElementById("label_" + elementID);
		if (label){			
			return label.innerHTML.replace("&nbsp;*","").replace(" *", "");
		}
		
		return "";
	}
	
	this.requestFocus = function(elementID){
		function doFocus(){
			var el = document.getElementById(elementID);
			if (el){
				el.focus();
			}
		}
		
		formGenerator.addInit(doFocus);
	}
	

	/**
	* Return which mouse button is pressed
	* @return: 	0: Left	1:Middle	2:Right	-1:Unknonw or an error occured
	*/
	this.getWhichButton = function(e){
		var result = formGenerator.MB_UNKNOWN;
		var undefined;

		if (e && (e.button != undefined) ){
			if (this.isIE()){
				switch (e.button){
					case 1: result = formGenerator.MB_LEFT; break;
					case 4: result = formGenerator.MB_MIDDLE; break;
					case 2: result = formGenerator.MB_RIGHT; break;
				}
			} else {
				switch (e.button){
					case 0: result = formGenerator.MB_LEFT; break;
					case 1: result = formGenerator.MB_MIDDLE; break;
					case 2: result = formGenerator.MB_RIGHT; break;
				}
			}
		}

		return result;
	}


	/**
	* Compare the key pressed of an event with what you expect
	* @param e The event triggered by the key press
	* @param compareTo what you expect the key to be
	* @return True if the key that triggerd the event is equal to compareTo
	*/
	this.isKey = function (e, compareTo){
		var result = formGenerator.KEY_UNKNOWN;
		var undefined;

		if (e.keyCode && e.keyCode != undefined){
			result = (e.keyCode == compareTo);
		}

		return result;
	}


	/* INIT FUNCTIONS */

	this.addInit = function(f){
		this.initFunctions[this.initFunctions.length] = f;
	}

	this.doInitFunctions = function(){
		for (i=0;i<formGenerator.initFunctions.length;i++){
			f = formGenerator.initFunctions[i];
			if (typeof f == "function"){			
				f();
			}
		}
	}
	

	/* State */
	this.getState = function(){
		return this.state;
	}

	this.setState = function(state){
		this.state = state;
	}
}
formGenerator.addEventHandler(window, 'load', formGenerator.doInitFunctions);