/**
 * @namespace com.thesis.util.Event
 * @author 钟军锐 August.R@263.net
 * imports com.thesis.base.Detect
 */

/** @id Listener */
function Listener(){
	this.Listeners=new Array();
	if(typeof Listener._initialized == "undefined"){
		/** @id notify */
		Listener.prototype.notify = function(oTarget,sEventType,oMsg){
			for (var i = 0; i < this.Listeners.length; i++){
				if (this.Listeners[i].oTarget== oTarget && this.Listeners[i].sEventType == sEventType && typeof this.Listeners[i].fnHandler == "function"){
					this.Listeners[i].fnHandler(oMsg);
				}
			}
		};
		/** @id add */
		Listener.prototype.add = function(oTarget,sEventType,fnHandler){
			this.Listeners.push({oTarget: oTarget,sEventType: sEventType,fnHandler: fnHandler});
		};
		/** @id remove */
		Listener.prototype.remove = function(oTarget,sEventType,fnHandler){
			for(var i=this.Listeners.length-1;i>-1;i--){
				if(this.Listeners[i].oTarget==oTarget && this.Listeners[i].sEventType== sEventType && 
					(this.Listeners[i].fnHandler==fnHandler || typeof fnHandler == "undefined")){
					this.Listeners.splice(i,1);
				}
			}
		};
	}
}

/** @id uEvent */
var uEvent ={
	/** @id formatBrowserEvent */
	formatBrowserEvent: function(oEvent){
		if(typeof Detect=="undefined") Detect=new doDetect;
		if(Detect.isIE && Detect.isWin){
			oEvent.charCode=(oEvent.type=="keypress")? oEvent.keyCode :0;
			oEvent.eventPhase=2;
			oEvent.isChar=(oEvent.charCode>0);
			oEvent.pageX= oEvent.clientX + (document.documentElement.scrollLeft || document.body.scrollLeft);
			oEvent.pageY= oEvent.clientY + (document.documentElement.scrollTop || document.body.scrollTop);
			oEvent.preventDefault=function(){
				this.returnvalue=false;
			};
			if(oEvent.type=="mouseout"){
				oEvent.relatedTarget= oEvent.toElement;
			}
			else if(oEvent.type=="mouseover"){
				oEvent.relatedTarget= oEvent.fromElement;
			}
			oEvent.stopPropagation= function(){
				this.cancelBubble=true;
			};
			oEvent.target= oEvent.srcElement;
			oEvent.time=(new Date()).getTime();
		}
		return oEvent;
	},
	/** @id getBrowserEvent */
	getBrowserEvent: function(){
		if(window.event){
			return this.formatBrowserEvent(window.event);
		}
		else{
			return uEvent.getBrowserEvent.caller.arguments[0];
		}
	},
	/** @id addBrowserHandler */
	addBrowserHandler: function(oTarget,sEventType,fnHandler){
		if (oTarget.addEventListener) {//for DOM-compliant browers
			oTarget.addEventListener(sEventType, fnHandler, false);
		}
		else if (oTarget.attachEvent){//for IE brower
			oTarget.attachEvent("on" + sEventType,fnHandler);
		}
		else{//for all others
			oTarget["on" + sEventType] = fnHandler;
		}
	},
	/** @id removeBrowserHandler */
	removeBrowserHandler:function(oTarget,sEventType,fnHandler){
		if(oTarget.removeEventListener){
			oTarget.removeEventListener(sEventType,fnHandler,false);
		}
		else if(oTarget.detachEvent){
			oTarget.detachEvent("on" + sEventType,fnHandler);
		}
		else{
			oTarget["on"+ sEventType]=null;
		}
	}
};
/** @id Listener */
uEvent.Listener=new Listener();

