/*

 dlib events extension library.

*/

/* config */
cfg_events_plugins_path="js/dlib/events/plugins/";

/* overide config by setting config variables in document object */
if(document.cfg_events_plugins_path) cfg_events_plugins_path=document.cfg_events_plugins_path;
if(document.cfg_prefix_path) cfg_events_plugins_path=document.cfg_prefix_path+cfg_events_plugins_path;

// loading needing plugin
load_required_lib (cfg_events_plugins_path, __CURRENT_NAVIGATOR__+"events.js");

//variables
__arrEventNameMap=[];
__arrEventNameMap["onmouseover"]=__arrEventNameMap["mouseover"]="mouseover";
__arrEventNameMap["onmouseout"]=__arrEventNameMap["mouseout"]="mouseout";
__arrEventNameMap["onmousemove"]=__arrEventNameMap["mousemove"]="mousemove";
__arrEventNameMap["onmouseup"]=__arrEventNameMap["mouseup"]="mouseup";
__arrEventNameMap["onmousedown"]=__arrEventNameMap["mousedown"]="mousedown";
__arrEvents=[];

__arrMouseButtonName=[];
__arrMouseButtonName["left"]=true;
__arrMouseButtonName["right"]=true;
__arrMouseButtonName["middle"]=true;

// methodsallBackFunction;

dlib.object.prototype.captureEvent=dlib.captureEvent=function (strEventName, strCallBackFunction, strMouseButton){

        if(dlib.debugLog(this.type+"s.captureEvent", this.name, false,  (arguments.length>1)?true:false, 5, true)){

		if(dlib.debugLog(this.type+"s.captureEvent : "+strEventName, this.name, false,  (__arrEventNameMap[strEventName.toLowerCase()])?true:false, 9, true))  captureEventName=__arrEventNameMap[strEventName.toLowerCase()];
		else return false;

		strMouseButton=(arguments.length>2)? (dlib.debugLog(this.type+"s.captureEvent : "+strMouseButton.toLowerCase(), this.name, false,  (__arrMouseButtonName[strMouseButton.toLowerCase()])?true:false, 9, true))?strMouseButton.toLowerCase():"left":"left";
		dlibEventObject=document;
        	if(this && this.exists) dlibEventObject=this.object;
		dlibEventExtName=(captureEventName=="mousedown" ||  captureEventName=="mouseup")? strMouseButton:"";

		intCreateEvent=false;
		if(!dlibEventObject["dlib"+captureEventName+dlibEventExtName+"Callback"]) {
			dlibEventObject["dlib"+captureEventName+dlibEventExtName+"Callback"]=[];
			intCreateEvent=true;
		}
		dlibEventObject["dlib"+captureEventName+dlibEventExtName+"Callback"][strCallBackFunction]=true;

		if(intCreateEvent) dlib._captureEvent(dlibEventObject, captureEventName, dlibEventExtName, strCallBackFunction);

		dlib.debugLog(((dlibEventObject==document)?"dlib":this.type)+"s.captureEvent", (dlibEventObject==document)?"dlib":this.name, strEventName+" -> "+strCallBackFunction+" : waiting" ,  true, false, false);

		return true;
	}
	return false;
};


dlib.object.prototype.releaseEvent=dlib.releaseEvent=function (strEventName, strCallBackFunction, strMouseButton){

	 if(dlib.debugLog(this.type+"s.releaseEvent", this.name, false,  (arguments.length>1)?true:false, 5, true)){

		if(dlib.debugLog(this.type+"s.releaseEvent : "+strEventName, this.name, false,  (__arrEventNameMap[strEventName.toLowerCase()])?true:false, 9, true))  captureEventName=__arrEventNameMap[strEventName.toLowerCase()];
		else return false;

		strMouseButton=(arguments.length>2)? (dlib.debugLog(this.type+"s.releaseEvent : "+strMouseButton.toLowerCase(), this.name, false,  (__arrMouseButtonName[strMouseButton.toLowerCase()])?true:false, 9, true))?strMouseButton.toLowerCase():"left":"left";

        	if(arguments.length<2) strCallBackFunction=false;
		dlibEventObject=document;
        	if(!this.exists) return false;
        	else dlibEventObject=this.object;

		/* debug zone for plugins that create second debug event */
		if(dlibEventObject.debugEvents && dlibEventObject.debugEvents["dlib"+strEventName+strEventExtName+"Callback"]){
			if(!dlib.cleanCallBackFuncArray(dlibEventObject, strCallBackFunction, dlibEventObject.debugEvents["dlib"+strEventName+strEventExtName+"Callback"][0], dlibEventObject.debugEvents["dlib"+strEventName+strEventExtName+"Callback"][1])){
				dlibEventObject["dlib"+dlibEventObject.debugEvents["dlib"+strEventName+strEventExtName+"Callback"][0]+dlibEventObject.debugEvents["dlib"+strEventName+strEventExtName+"Callback"][1]+"Callback"]=false;
				dlib._releaseEvent(dlibEventObject, dlibEventObject.debugEvents["dlib"+strEventName+strEventExtName+"Callback"][0]);
			}
			dlibEventObject.debugEvents["dlib"+strEventName+strEventExtName+"Callback"]=false;
		}
		/* /debug zone for plugins that create second debug event */

		if(dlib.cleanCallBackFuncArray(dlibEventObject, strCallBackFunction, captureEventName, dlibEventExtName)) {
			dlibEventObject["dlib"+captureEventName+dlibEventExtName+"Callback"]=false;
           		dlib._releaseEvent(dlibEventObject, captureEventName);
		}

		dlib.debugLog(((dlibEventObject==document)?"dlib":this.type)+"s.releaseEvent", (dlibEventObject==document)?"dlib":this.name, strEventName+" -> "+strCallBackFunction+" : killed" ,  true, false, false);

		return true;
	}
	return false;
};

dlib.cleanCallBackFuncArray=function(dlibEventObject, strCallBackFunction, captureEventName, dlibEventExtName){

	intCallbackFunc=0;
	if(strCallBackFunction && dlibEventObject["dlib"+captureEventName+dlibEventExtName+"Callback"]){
		arrCallbackFunc=[];
		for(var strCallbackfunc in dlibEventObject["dlib"+captureEventName+dlibEventExtName+"Callback"]) {
			if(strCallbackfunc!=strCallBackFunction){
				arrCallbackFunc[strCallbackfunc]=true;
				intCallbackFunc++;
			}
		}
		dlibEventObject["dlib"+captureEventName+dlibEventExtName+"Callback"]=arrCallbackFunc;
	}

	return  intCallbackFunc;
};



