Codebase.load("http://codebase.gd-ks.com/js/Object.js"); Codebase.load("http://codebase.gd-ks.com/js/Array.js"); Codebase.load("http://codebase.gd-ks.com/js/Browser.js");Event.natives=["abort", "blur", "change", "click", "dblclick", "error", "focus", "keydown", "keypress", "keyup", "load", "mousedown", "mousemove", "mouseout", "mouseover", "mouseup", "paste", "reset", "resize", "select", "submit", "unload"];function Event(){}Event.SHIFT=1; Event.ENTER=13;Event.getEvent=function(e){ return (e!=undefined ? e : window.event); };Event.getTarget=function(e){ return (e.target ? e.target : e.srcElement); }; Event.stop=function(e){ try{ e.stopPropagation(); }catch(E){}; try{ e.preventDefault(); }catch(E){}; }; Event.getKeystroke=function(e){ e["character"]=String.fromCharCode(Browser.isFF ? e.charCode : e.keyCode); return e; }; Event.isKeystroke=function(e, character, modifier){ var keystroke=Event.getKeystroke(e); if(character==e.character && (e.shiftKey && modifier==Event.SHIFT)){ return true; }}; Event.getMouseCoords=function(e){ return {"x":Event.getMouseX(e), "y":Event.getMouseY(e)}; };Event.getMouseX=function(e){ return (e.pageX ? e.pageX : (e.clientX + document.body.scrollLeft + document.documentElement.scrollLeft)); }; Event.getMouseY=function(e){ return (e.pageY ? e.pageY : (e.clientY + document.body.scrollTop + document.documentElement.scrollTop)); };Event.getListeners=function(obj, type){ return obj["on" + type]; }; Event.register=function(obj, type){ if(!Event.isRegistered(obj, type)){ obj["on" + type]=[]; }}; Event.isRegistered=function(obj, type){ return Object.keyExists(obj, "on" + type); }; Event.addListener=function(){ var obj=arguments[0]; var type=arguments[1]; var fn=arguments[2]; var useCapture=(arguments.length==4 ? arguments[3] : false); if(window.addEventListener){ obj.addEventListener(type, fn, useCapture); }else{ obj.attachEvent("on" + type, fn); }}; Event.removeListener=function(){ var type=arguments[0]; var fn=arguments[1]; var useCapture=(arguments.length==3 ? arguments[2] : false); Event.natives.indexOf(type)>=0 ? this.removeEventListener ? this.removeEventListener(type, fn, useCapture) : this.detachEvent("on" + type, fn) : Event.remove(this, type, fn); }; Event.isNative=function(type){ var i=Event.natives.length; while (i--){ if(Event.natives[i] === type){ return true; }} return false; }; Event.observe=function(obj, type, fn, data){ if(Event.isNative(type)){ Event.addListener(obj, type, function(e){ fn.call(obj, Object.extend(e, data)); }); }else{ Event.register(obj, type); obj["on" + type].push([fn, (arguments.length!=4 ? {} : arguments[3])]); }}; Event.removeObservers=function(obj, type){ obj["on" + type]=[]; }; Event.removeObserver=function(obj, type, fn, useCapture){ useCapture=(arguments.length==4 ? useCapture : false); Event.natives.indexOf(type)>=0 ? obj.removeEventListener ? obj.removeEventListener(type, fn, useCapture) : obj.detachEvent("on" + type, fn) : null; };Event.fire=function(obj, type){ if(Event.isRegistered(obj, type)){ var listeners=Event.getListeners(obj, type); for(var i=0; i<listeners.length; i++){ listeners[i][0].call(obj, Object.extend(listeners[i][1], (arguments.length==3 ? arguments[2] : {}))); } delete listeners; } };