
ycn=window.ycn||{};

//--------   ycn.Event  ---------
ycn.Event={
//add event
addEvent:function(obj,evType,fn){
	if(obj.addEventListener){obj.addEventListener(evType,fn,false);return true;}
	else if(obj.attachEvent)
	{var r=obj.attachEvent("on"+evType,fn);ycn.EventCache.add(obj,evType,fn);return r;}
	else
	{return false;}},
//remove Event
removeEvent:function(obj,evType,fn){
if(obj.removeEventListener){obj.removeEventListener(evType,fn,false);return true;}
else if(obj.detachEvent){var r=obj.detachEvent("on"+evType,fn);return r;}else{return false;}},
//get event
getEvent:function(e){
e=window.event||e;e.leftButton=false;
if(e.srcElement==null&&e.target!=null){e.srcElement=e.target;e.leftButton=(e.button==1);}
else if(e.target==null&&e.srcElement!=null){e.target=e.srcElement;e.leftButton=(e.button==0);}
else if(e.srcElement!=null&&e.target!=null){}
else{return null}
if(document.body&&document.documentElement)
{e.mouseX=e.pageX||(e.clientX+Math.max(document.body.scrollLeft,document.documentElement.scrollLeft));e.mouseY=e.pageY||(e.clientY+Math.max(document.body.scrollTop,document.documentElement.scrollTop));}
else
{e.mouseX=-1;e.mouseY=-1;}
return e;},
//stop event
stopEvent:function(e){
if(e&&e.cancelBubble!=null){e.cancelBubble=true;e.returnValue=false;}
if(e&&e.stopPropagation&&e.preventDefault){e.stopPropagation();e.preventDefault();
}
//
return false;
}
};
//-----------end-------


//------ ycn.EventCache  ------- 
ycn.EventCache=function(){
//
var listEvents=[];
//
return{
listEvents:listEvents,

add:function(node,sEventName,fHandler,bCapture){listEvents[listEvents.length]=arguments;},

flush:function(){
var i,item;
for(i=listEvents.length-1;i>=0;i=i-1)
{
item=listEvents[i];
if(item[0].removeEventListener){
item[0].removeEventListener(item[1],item[2],item[3]);};
if(item[1].substring(0,2)!="on"){item[1]="on"+item[1];};
if(item[0].detachEvent){item[0].detachEvent(item[1],item[2]);};
item[0][item[1]]=null;};
}
};
}();

ycn.Event.addEvent(window,"unload",ycn.EventCache.flush);
function error_handler(a,b,c)
{
window.status=(c+"\n"+b+"\n\n"+a+"\n\n"+error_handler.caller);
return true;
}
