var yaili = yaili || {};
yaili.event = {
	ready : function(fn) {
		var booReady=false; //flag to indicate whether target function has already been run

		if (document.addEventListener) {
			document.addEventListener("DOMContentLoaded", function(){
				booReady=true;
				fn();
			}, false);		
		} else if (document.all && !window.opera) {
			 document.write('<script type="text/javascript" id="contentloadtag" defer="defer" src="javascript:void(0)"><\/script>');
			 var contentloadtag=document.getElementById("contentloadtag");
			 contentloadtag.onreadystatechange=function(){
				if (this.readyState=="complete"){
					booReady=true;
					fn();
				}
			 };
		}
		window.onload=function(){
			setTimeout(function() {
				if (!booReady) {
					fn();
				}
			}, 0);
		};
	},
	click : function(el,fn) {
		yaili.event.add(el,'click',fn);
	},
	mousemove : function(el,fn) {
		yaili.event.add(el,'mousemove',fn);
	},
	mousedown : function(el,fn) {
		yaili.event.add(el,'mousedown',fn);
	},
	mouseup : function(el,fn) {
		yaili.event.add(el,'mouseup',fn);
	},
	mouseover : function(el,fn) {
		yaili.event.add(el,'mouseover',fn);
	},
	add : function(el, eventType, fn, useCapture) {
		if (el.addEventListener) {
			el.addEventListener(eventType, fn, useCapture);
			return true;
		} else if (el.attachEvent) {
			return el.attachEvent('on' + eventType, fn);
		} else {
			//TODO: only supports one event at a time
			el['on' + eventType] = fn;
		}
	},
	remove : function(el, eventType, fn, useCapture) {
		if (el.removeEventListener) {
			el.removeEventListener(eventType, fn, useCapture);
			return true;
		} else if (el.detachEvent) {
			return el.detachEvent('on' + eventType, fn);
		} else {
			//TODO: only supports one event at a time
			el['on' + eventType] = null;
		}
	},
	stopPropagation : function(e) {
		e == e || window.event;
		if (e) {
			e.cancelBubble = true;	
			if (e.stopPropagation) {
				e.stopPropagation();
			}
		}
		return false;
	},
	preventDefault : function(e) {
		e == e || window.event;
		if (e) {
			e.returnValue = false;
			if (e.preventDefault) {
				e.preventDefault();
			}
		}
		return false;
	},
	nullifyEvent : function() {
        yaili.event.preventDefault();
        yaili.event.stopPropagation();
        return false;
    }
};
yaili.dom = {
	getStyle : function(el, cssProperty){
		if (el.currentStyle) {//IE
			cssProperty = yaili.tools.cssToJS(cssProperty);
			return el.currentStyle[cssProperty];
		} else if (document.defaultView && document.defaultView.getComputedStyle) {
			if (document.defaultView.getComputedStyle(el, null).getPropertyValue) {//Opera
				return document.defaultView.getComputedStyle(el, null).getPropertyValue(cssProperty);
			} else { //safari
				return document.defaultView.getComputedStyle(el, null)[cssProperty];	
			}
		} else {
		  return el.style[cssProperty];
		}
	}	
};
yaili.tools = {};
yaili.tools.cssToJS = function(s) {
	s = s.split('-');
	for (var i=1, j = s.length; i < j; i++) {
		s[i] = iat.tools.capitalise(s[i]);
	};
	return s.join('');
};