function addEvent(obj,evType,fn,useCapture)
{if(!useCapture)useCapture=false;if(obj.addEventListener)
{obj.addEventListener(evType,fn,useCapture);}
else
{if(useCapture)
{alert('This browser does not support event capturing!');}
else
{var evTypeRef='__'+evType;if(obj[evTypeRef])
{if(array_search(fn,obj[evTypeRef])>-1)return;}
else
{obj[evTypeRef]=[];if(obj['on'+evType])obj[evTypeRef][0]=obj['on'+evType];obj['on'+evType]=IEEventHandler;}
obj[evTypeRef][obj[evTypeRef].length]=fn;}}}
function removeEvent(obj,evType,fn,useCapture)
{if(!useCapture)useCapture=false;if(obj.removeEventListener)
{obj.removeEventListener(evType,fn,useCapture);}
else
{var evTypeRef='__'+evType;if(obj[evTypeRef])
{var i=array_search(fn,obj[evTypeRef]);if(i>-1)
{try
{delete obj[evTypeRef][i];}
catch(e)
{obj[evTypeRef][i]=null;}}}}}
function IEEventHandler(e)
{e=e||window.event;var evTypeRef='__'+e.type,retValue=true;for(var i=0,j=this[evTypeRef].length;i<j;i++)
{if(this[evTypeRef][i])
{if(Function.call)
{retValue=this[evTypeRef][i].call(this,e)&&retValue;}
else
{this.__fn=this[evTypeRef][i];retValue=this.__fn(e)&&retValue;}}}
if(this.__fn)try{delete this.__fn;}catch(e){this.__fn=null;}
return retValue;}
function array_search(val,arr)
{var i=arr.length;while(i--)
if(arr[i]&&arr[i]===val)break;return i;}