
var DOMHelper = {
	__event_handler : new Object(),
	addEventListener : function(obj, eventtype, functionhandle){
		if(!obj || !eventtype || !functionhandle) return;
		if(document.addEventListener==undefined && document.attachEvent!=undefined){ // IE
			obj.attachEvent("on"+eventtype,functionhandle);
		}else{
			if(eventtype == "mousewheel") eventtype = "DOMMouseScroll";
			obj.addEventListener(eventtype,functionhandle,false);
		}
		if(!this.__event_handler[obj])
			this.__event_handler[obj] = new Object();
		if(!this.__event_handler[obj][eventtype])
			this.__event_handler[obj][eventtype] = new Array();
		this.__event_handler[obj][eventtype].push(functionhandle);
	},
	triggerEventListener : function(obj, eventtype){
		if(!obj || !eventtype) return;
		var collEH = this.__event_handler[obj];
		if(!collEH) return;
		if(document.addEventListener!=undefined || document.attachEvent==undefined){ // non IE
			if(eventtype == "mousewheel") eventtype = "DOMMouseScroll";
		}
		collEH = this.__event_handler[obj][eventtype];
		if(!collEH) return;
		for(var i=0;i<collEH.length;++i){
			collEH[i]({target:obj, type:eventtype});
		}
	},
	removeEventListener : function(obj, eventtype, functionhandle){
		if(!obj) return;
		if(!eventtype && functionhandle) return;
		if(document.addEventListener!=undefined || document.attachEvent==undefined){ // non IE
			if(eventtype == "mousewheel") eventtype = "DOMMouseScroll";
		}
		if(!functionhandle){
			if(eventtype){
				var collEH = this.__event_handler[obj];
				if(!collEH) return;
				collEH = this.__event_handler[obj][eventtype];
				if(!collEH) return;
				for(var i=0;i<collEH.length;++i){
					this.removeEventListener(obj, eventtype, collEH[i]);
				}
			}else{
				var collEH = this.__event_handler[obj];
				if(!collEH) return;
				for(var _eventtype in collEH){
					this.removeEventListener(obj, _eventtype);
				}
			}
		}else if(!eventtype){
			return;
		}else{
			if(document.removeEventListener==undefined&&document.detachEvent!=undefined){ // IE
				obj.detachEvent("on"+eventtype,functionhandle);
			}else{
				obj.removeEventListener(eventtype,functionhandle,false);
			}
			this.__event_handler[obj][eventtype].remove(functionhandle);
		}
	},
	addClass : function(element, className){
		if(!element || element.className == undefined || !className) return;
		var arrClasses = element.className.split(' ');
		if(arrClasses.indexOf(className)<0){
			arrClasses.push(className);
		}
		element.className = arrClasses.join(' ');
	},
	hasClass : function(element, className){
		if(!element || element.className == undefined || !className) return false;
		var arrClasses = element.className.split(' ');
		return arrClasses.indexOf(className)<0?false:true;
	},
	removeClass : function(element, className){
		if(!element || element.className == undefined || !className) return;
		var arrClasses = element.className.split(' ');
		arrClasses.remove(className);
		element.className = arrClasses.join(' ');
	},
	getWindowSize : function(){
		var windowWidth, windowHeight;
		if(document.body == undefined)
			document.body = document.getElementsByTagName("body")[0];
		if(window.innerHeight != undefined){
			windowWidth = window.innerWidth;
			windowHeight = window.innerHeight;
		}else if(document.documentElement && document.documentElement.clientHeight){
			windowWidth = document.documentElement.clientWidth;
			windowHeight = document.documentElement.clientHeight;
		}else{
			windowWidth = document.body.clientWidth;
			windowHeight = document.body.clientHeight;
		}
		return {width:windowWidth, height:windowHeight};
	},
	fillValue : function(elems, value, separator){
		if(typeof elems == "string"){
			elems = document.getElementById(elems);
		}
		if(!elems) return;
		if(elems.tagName)
			elems = [elems];
		if(!value) value = '';
		if(!separator) separator = '';
		var nElem = elems.length;
		for(var i=0; i<nElem; ++i){
			var elem = elems[i];
			if(!elem.tagName) continue;
			switch((elem.tagName + '.' + (elem.type?elem.type:'')).toLowerCase()){
			case 'input.text':
			case 'input.hidden':
			case 'select.select-one':
			case 'select.select-multiple':
				elem.value = value;
				break;
			case 'textarea.textarea':
				elem.innerHTML = value;
				break;
			case 'input.checkbox':
			case 'input.radio':
				if(elem.value && (separator + value + separator).indexOf(elem.value) >= 0)
					elem.checked = true;
				break;
			}
		}
	}
};
