/*
 * DOMHelper.js
 * The file contains handy helper (utility) functions used throughout 
 * the javascript script files.
 */
DOMHelper = {

	/*
	 * Cross-browser event handling for IE5+, NS6+ and Mozilla/Gecko
	 * by Scott Andrew
	 */
	addEvent : function(elm, evType, fn, useCapture) {
		if (elm.addEventListener) {
			elm.addEventListener(evType, fn, useCapture);
		} else if (elm.attachEvent) {
			elm.attachEvent('on' + evType, fn);
		} else {
			elm['on' + evType] = fn;
		}
	},
			
	/*
	 * The following function: createLink, cssjs, safariClickFix, cancelClick, getTarget
	 * have been taken from Christian Heilmann DOMhelp object.
	 */
	createLink:function(to,txt){
		var tempObj=document.createElement('a');
		tempObj.appendChild(document.createTextNode(txt));
		tempObj.setAttribute('href',to);
		return tempObj;
	},
	
	cssjs:function(a,o,c1,c2){
		switch (a){
			case 'swap':
				o.className=!DOMHelper.cssjs('check',o,c1)?o.className.replace(c2,c1):o.className.replace(c1,c2);
			break;
			case 'add':
				if(!DOMHelper.cssjs('check',o,c1)){o.className+=o.className?' '+c1:c1;}
			break;
			case 'remove':
				var rep=o.className.match(' '+c1)?' '+c1:c1;
				o.className=o.className.replace(rep,'');
			break;
			case 'check':
				var found=false;
				var temparray=o.className.split(' ');
				for(var i=0;i<temparray.length;i++){
					if(temparray[i]==c1){found=true;}
				}
				return found;
			break;
		}
	},
	
    safariClickFix:function(){
      return false;
    },
    
    cancelClick:function(e){
		if (window.event){
			window.event.cancelBubble = true;
			window.event.returnValue = false;
		}
		if (e && e.stopPropagation && e.preventDefault){
			e.stopPropagation();
			e.preventDefault();
		}
	},
	
	getTarget : function (e) {
		var target = window.event ? window.event.srcElement : e ? e.target : null;
		return target ? target : false;
	},
	
	/*
	 * Returns the version of InternetExplorer or -1 if another
	 * browser. This is an official MS way of doing UserAgent sniffing
	 * to detect the version (http://msdn.microsoft.com/workshop/author/dhtml/overview/browserdetection.asp).
	 */
	getInternetExplorerVersion:function() {
		
		var iBrowserVersion = -1; 
		
		if (navigator.appName == 'Microsoft Internet Explorer') {
		
			var sUserAgent = navigator.userAgent;
			var regMSIERegExp = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})");
    		
    		if (regMSIERegExp.exec(sUserAgent) != null) { iBrowserVersion = parseFloat(RegExp.$1); }
  		}
  		
  		return iBrowserVersion;	
	},
	
	/*
	 * Formats amount with currency. 
	 * The source has been taken from http://javascript.internet.com
	 */
	formatCurrency:function(iNumber) {

		var sNumber = iNumber.toString();
		
		if(isNaN(sNumber)) { sNumber = "0"; }
		
		sSign = (sNumber == (sNumber = Math.abs(sNumber)));
		sNumber = Math.floor(sNumber*100+0.50000000001);
		cents = sNumber%100;
		sNumber = Math.floor(sNumber/100).toString();
		
		if(cents<10) { cents = "0" + cents; }

		for (var i = 0; i < Math.floor((sNumber.length-(1+i))/3); i++) {
			sNumber = sNumber.substring(0, sNumber.length-(4*i+3))+','+ sNumber.substring(sNumber.length-(4*i+3));
		}
		
		return (((sSign)?'':'-') + sNumber + '.' + cents);
	},
	
	/*
	 * Firefox onchange event for arrow keys workaround.
	 * See https://bugzilla.mozilla.org/attachment.cgi?id=235225
	 */
	 registerOnChangeForDropDowns:function() {
	 
	 	if (navigator.userAgent.indexOf("Gecko") != -1) { DOMHelper.initGeckoSelectHack(); }
	 	 
	 },
	 
	 initGeckoSelectHack:function() {
	 	
	 	var arrSelectElms = document.getElementsByTagName('select');
	 		 	
	 	for(var i = 0; i < arrSelectElms.length; i++) {
	 	
	 		if (!arrSelectElms[i].getAttribute('size') || (arrSelectElms[i].getAttribute('size') == 1)) {
	 			DOMHelper.addEvent(arrSelectElms[i], 'keyup', DOMHelper.fireGeckoSelectKeyUp, false);
	 		}
	 	}	
	 	
	 	return true; 
	 },
	 
	 fireGeckoSelectKeyUp:function(e) {
	 	// Prevent tab, esp, alt, ctrl keys from firing the event

	 	if (e.keyCode && (e.keyCode == 1 || e.keyCode == 9 || e.keyCode == 16 || e.keyCode == 27 ||
	 					  e.altKey || e.ctrlKey)) { return true; }

			// Force event to fire
			var oTarget = DOMHelper.getTarget(e);
			
			evObj = document.createEvent('Events');
			evObj.initEvent('change', true, false);
			oTarget.dispatchEvent(evObj);

	 		return true;				  	
	 }
}

DOMHelper.addEvent(window, 'load', DOMHelper.registerOnChangeForDropDowns, false);