/*
 * @require jade/compat/Object.js
 */
jade.compat.Application=function(){jade.compat.Object.call(this,null,"application");this.updateClientSize();this.updateScrollPos();this.setupEvents()};
jade.inherit(jade.compat.Application,jade.compat.Object);jade.compat.Application.instance=null;jade.compat.Application.prototype.clientWidth=0;jade.compat.Application.prototype.clientHeight=0;jade.compat.Application.prototype.scrollLeft=0;jade.compat.Application.prototype.scrollTop=0;jade.compat.Application.prototype.mouseInApplication=!1;jade.compat.Application.prototype.mouseCapturer=null;jade.compat.Application.prototype.dragSource=null;jade.compat.Application.prototype.oldOnSelectStart=null;
jade.compat.Application.prototype.pageLoaded=!1;jade.compat.Application.prototype.imagesNeedAlphaHack=!1;jade.compat.Application.getInstance=function(){return jade.compat.Application.instance};
jade.compat.Application.prototype.setupEvents=function(){window.attachEvent?(window.attachEvent("onload",this.handleWindowLoad),window.attachEvent("onbeforeunload",this.handleWindowBeforeUnload),window.attachEvent("onunload",this.handleWindowUnload),window.attachEvent("onresize",this.handleWindowResize),window.attachEvent("onscroll",this.handleWindowScroll),document.attachEvent("onmousemove",this.handleWindowMouseMove),document.attachEvent("onmouseout",this.handleWindowMouseOut),document.attachEvent("onmousedown",
this.handleWindowMouseDown),document.attachEvent("onmouseup",this.handleWindowMouseUp),document.attachEvent("onclick",this.handleWindowClick),document.attachEvent("ondblclick",this.handleWindowDblClick),document.attachEvent("onkeydown",this.handleWindowKeyDown),document.attachEvent("onkeyup",this.handleWindowKeyUp),document.attachEvent("onkeypress",this.handleWindowKeyPress)):(window.addEventListener("load",this.handleWindowLoad,!1),window.addEventListener("unload",this.handleWindowUnload,!1),window.addEventListener("beforeunload",
this.handleWindowBeforeUnload,!1),window.addEventListener("resize",this.handleWindowResize,!1),window.addEventListener("scroll",this.handleWindowScroll,!1),window.addEventListener("mousemove",this.handleWindowMouseMove,!1),window.addEventListener("mouseout",this.handleWindowMouseOut,!1),window.addEventListener("mousedown",this.handleWindowMouseDown,!1),window.addEventListener("mouseup",this.handleWindowMouseUp,!1),window.addEventListener("click",this.handleWindowClick,!1),window.addEventListener("dblclick",
this.handleWindowDblClick,!1),window.addEventListener("keydown",this.handleWindowKeyDown,!1),window.addEventListener("keyup",this.handleWindowKeyUp,!1),window.addEventListener("keypress",this.handleWindowKeyPress,!1))};
jade.compat.Application.prototype.cancelEvent=function(a){a.cancelBubble=!0;a.preventDefault&&a.preventDefault();a.stopPropagation&&a.stopPropagation();return!1};
jade.compat.Application.prototype.handleWindowLoad=function(a){this instanceof jade.compat.Application?(this.updateClientSize(),this.updateScrollPos(),this.pageLoaded=!0,this.sendSignal("load")):jade.compat.application.handleWindowLoad(a)};
jade.compat.Application.prototype.handleWindowUnload=function(a){this instanceof jade.compat.Application?(this.pageLoaded=!1,this.sendSignal("unload")):jade.compat.application.handleWindowUnload(a)};
jade.compat.Application.prototype.handleWindowBeforeUnload=function(a){var b;if(!(this instanceof jade.compat.Application))return jade.compat.application.handleWindowBeforeUnload(a);if(b=this.sendQuery("beforeUnload",null))return a.returnValue=b};
jade.compat.Application.prototype.handleWindowResize=function(a){this instanceof jade.compat.Application?(this.updateClientSize(),this.updateScrollPos()):jade.compat.application.handleWindowResize(a)};
jade.compat.Application.prototype.handleWindowScroll=function(a){this instanceof jade.compat.Application?this.updateScrollPos():jade.compat.application.handleWindowScroll(a)};
jade.compat.Application.prototype.handleWindowMouseMove=function(a){var b,c,d,e;if(this instanceof jade.compat.Application)if(b=a.pageX!==void 0?a.pageX:a.clientX+this.scrollLeft,c=a.pageY!==void 0?a.pageY:a.clientY+this.scrollTop,b<this.scrollLeft||c<this.scrollTop||b>=this.clientWidth+this.scrollLeft||c>=this.clientHeight+this.scrollTop){if(this.mouseInApplication)this.mouseInApplication=!1,this.sendSignal("mouseLeave")}else{if(!this.mouseInApplication)this.mouseInApplication=!0,this.sendSignal("mouseEnter",
b,c);(d=this.mouseCapturer)?(e=d.getPagePosition(),d.mouseMove(b-e.x,c-e.y)):this.dragSource?this.sendSignal("dragOver",b,c,this.dragSource):this.sendSignal("mouseMove",b,c)}else jade.compat.application.handleWindowMouseMove(a)};
jade.compat.Application.prototype.handleWindowMouseOut=function(a){var b,c;if(this instanceof jade.compat.Application){if(b=a.pageX!==void 0?a.pageX-this.scrollLeft:a.clientX,c=a.pageY!==void 0?a.pageY-this.scrollTop:a.clientY,this.mouseInApplication&&(b<0||c<0||b>=this.clientWidth||c>=this.clientHeight))this.mouseInApplication=!1,this.sendSignal("mouseLeave")}else jade.compat.application.handleWindowMouseOut(a)};
jade.compat.Application.prototype.handleWindowMouseDown=function(a){var b,c;a.button>1||(this instanceof jade.compat.Application?(b=a.pageX!==void 0?a.pageX:a.clientX+this.scrollLeft,c=a.pageY!==void 0?a.pageY:a.clientY+this.scrollTop,this.sendSignal("mouseDown",b,c,a.shiftKey||a.altKey||a.ctrlKey)):jade.compat.application.handleWindowMouseDown(a))};
jade.compat.Application.prototype.handleWindowMouseUp=function(a){var b,c,d,e;if(!(a.button>1))this instanceof jade.compat.Application?(b=a.pageX!==void 0?a.pageX:a.clientX+this.scrollLeft,c=a.pageY!==void 0?a.pageY:a.clientY+this.scrollTop,(d=this.mouseCapturer)?(e=d.getPagePosition(),d.isMouseInWidget()&&(b<e.x||c<e.y||b>e.x+d.getWidth()||c>e.y+d.getHeight())&&d.mouseLeave(),d.mouseUp(b-e.x,c-e.y),this.releaseMouse()):(this.dragSource&&this.dragSource.endDrag(),this.sendSignal("mouseUp",b,c))):
jade.compat.application.handleWindowMouseUp(a)};
jade.compat.Application.prototype.handleWindowClick=function(a){var b,c;a.button>1||(this instanceof jade.compat.Application?(b=a.pageX!==void 0?a.pageX:a.clientX+this.scrollLeft,c=a.pageY!==void 0?a.pageY:a.clientY+this.scrollTop,this.sendSignal("click",b,c)):jade.compat.application.handleWindowClick(a))};
jade.compat.Application.prototype.handleWindowDblClick=function(a){var b,c;a.button>1||(this instanceof jade.compat.Application?(b=a.pageX!==void 0?a.pageX:a.clientX+this.scrollLeft,c=a.pageY!==void 0?a.pageY:a.clientY+this.scrollTop,this.sendSignal("dblClick",b,c)):jade.compat.application.handleWindowDblClick(a))};
jade.compat.Application.prototype.handleWindowKeyDown=function(a){return!(this instanceof jade.compat.Application)?jade.compat.application.handleWindowKeyDown(a):this.sendSignal("keyDown",a.keyCode)?!0:this.cancelEvent(a)};
jade.compat.Application.prototype.handleWindowKeyUp=function(a){return!(this instanceof jade.compat.Application)?jade.compat.application.handleWindowKeyUp(a):this.sendSignal("keyUp",a.keyCode)?!0:this.cancelEvent(a)};
jade.compat.Application.prototype.handleWindowKeyPress=function(a){return!(this instanceof jade.compat.Application)?jade.compat.application.handleWindowKeyPress(a):this.sendSignal("keyPress",a.keyCode,a.charCode)?!0:this.cancelEvent(a)};
jade.compat.Application.prototype.filterResults=function(a,b,c){var d;d=a;if(b&&(!d||b<d))d=b;c&&!d&&(d=c);return d};
jade.compat.Application.prototype.updateClientSize=function(){var a,b;a=this.clientWidth;b=this.clientHeight;this.clientWidth=this.filterResults(window.innerWidth?window.innerWidth:0,document.documentElement?document.documentElement.clientWidth:0,document.body?document.body.clientWidth:0);this.clientHeight=this.filterResults(window.innerHeight?window.innerHeight:0,document.documentElement?document.documentElement.clientHeight:0,document.body?document.body.clientHeight:0);(this.clientWidth!=a||this.clientHeight!=
b)&&this.sendSignal("resize")};
jade.compat.Application.prototype.updateScrollPos=function(){var a,b;a=this.scrollLeft;b=this.scrollTop;this.scrollLeft=this.filterResults(window.pageXOffset?window.pageXOffset:0,document.documentElement?document.documentElement.scrollLeft:0,document.body?document.body.scrollLeft:0);this.scrollTop=this.filterResults(window.pageYOffset?window.pageYOffset:0,document.documentElement?document.documentElement.scrollTop:0,document.body?document.body.scrollTop:0);(this.scrollLeft!=a||this.scrollTop!=b)&&
this.sendSignal("scroll")};
jade.compat.Application.prototype.getClientWidth=function(){return this.clientWidth};
jade.compat.Application.prototype.getClientHeight=function(){return this.clientHeight};
jade.compat.Application.prototype.getScrollLeft=function(){return this.scrollLeft};
jade.compat.Application.prototype.getScrollTop=function(){return this.scrollTop};
jade.compat.Application.prototype.getContentWidth=function(){return window.scrollMaxX?this.clientWidth+window.scrollMaxX:document.body.scrollWidth>document.body.offsetWidth?document.body.scrollWidth:document.body.offsetWidth+document.body.offsetLeft};
jade.compat.Application.prototype.getContentHeight=function(){return window.scrollMaxY?this.clientHeight+window.scrollMaxY:document.body.scrollHeight>document.body.offsetHeight?document.body.scrollHeight:document.body.offsetHeight+document.body.offsetTop};
jade.compat.Application.prototype.getScrollMaxX=function(){return window.scrollMaxX!==void 0?window.scrollMaxX:this.getContentWidth()-this.clientWidth};
jade.compat.Application.prototype.getScrollMaxY=function(){return window.scrollMaxY?window.scrollMaxY:this.getContentHeight()-this.clientHeight};
jade.compat.Application.prototype.scrollTo=function(a,b){window.scrollTo(a,b);this.updateScrollPos()};
jade.compat.Application.prototype.scrollBy=function(a,b){window.scrollBy(a,b);this.updateScrollPos()};
jade.compat.Application.prototype.update=function(){this.updateClientSize();this.updateScrollPos()};
jade.compat.Application.prototype.captureMouse=function(a){this.mouseCapturer&&this.releaseMouse();this.mouseCapturer=a;this.oldOnSelectStart=document.onselectstart;document.onselectstart=function(){return!1};
this.sendSignal("mouseCapture",a)};
jade.compat.Application.prototype.releaseMouse=function(){var a;a=this.mouseCapturer;this.mouseCapturer=null;document.onselectstart=this.oldOnSelectStart;this.oldOnSelectStart=null;this.sendSignal("mouseRelease",a)};
jade.compat.Application.prototype.isMouseCaptured=function(a){return a?this.mouseCapturer==a:this.mouseCapturer!==null};
jade.compat.Application.prototype.setCursor=function(a){document.body.style.cursor=a};
jade.compat.Application.prototype.resetCursor=function(){this.setCursor("default")};
jade.compat.Application.prototype.getCursor=function(){return document.body.style.cursor};
jade.compat.Application.prototype.isLoaded=function(){return this.pageLoaded};
jade.compat.Application.prototype.startDrag=function(a){this.dragSource=a;this.oldOnSelectStart=document.onselectstart;document.onselectstart=function(){return!1};
this.sendSignal("dragStart",a)};
jade.compat.Application.prototype.endDrag=function(){var a;a=this.dragSource;this.dragSource=null;document.onselectstart=this.oldOnSelectStart;this.oldOnSelectStart=null;this.sendSignal("dragEnd",a)};
jade.compat.Application.prototype.isDragging=function(){return this.dragSource!==null};
jade.compat.Application.prototype.getDragSource=function(){return this.dragSource};
jade.compat.Application.prototype.setImagesNeedAlphaHack=function(a){this.imagesNeedAlphaHack=a};
jade.compat.Application.prototype.getImagesNeedAlphaHack=function(){return this.imagesNeedAlphaHack};
jade.compat.application=jade.compat.Application.instance=new jade.compat.Application;
