+ handleEvent : function( e ){\r
+ var href;\r
+ switch( e.type ){\r
+ case 'beforeunload' :\r
+ \r
+ // ie では a href="javascript" な要素でも beforeunload が起こる\r
+ href = e.target && e.target.attr && e.target.attr( 'href' );\r
+ if( href && href.indexOf && href.indexOf( 'javascript:' ) === 0 ) return X.Callback.PREVENT_DEFAULT | X.Callback.STOP_PROPAGATION;\r
+ \r
+ return X.Dom.dispatch( X.Dom.Event.BEFORE_UNLOAD );\r
+ case 'unload' :\r
+ X.Dom.dispatch( X.Dom.Event.UNLOAD );\r
+ \r
+ Node._window.unlisten();\r
+ Node._document.unlisten();\r
+ Node._html._actualRemove( true );\r
+ break;\r
+ case 'visibilitychange' :\r
+ X.Dom.dispatch( { type : ( X_Dom_active = document[ 'hidden' ] ) ? X.Dom.Event.VIEW_DEACTIVATE : X.Dom.Event.VIEW_ACTIVATE } );\r
+ break;\r
+ case 'webkitvisibilitychange' :\r
+ X.Dom.dispatch( { type : ( X_Dom_active = document[ 'webkitHidden' ] ) ? X.Dom.Event.VIEW_DEACTIVATE : X.Dom.Event.VIEW_ACTIVATE } );\r
+ break;\r
+ case 'pageshow' :\r
+ case 'focus' :\r
+ X_Dom_active = true;\r
+ X.Dom.dispatch( X.Dom.Event.VIEW_ACTIVATE );\r
+ break;\r
+ case 'pagehide' :\r
+ case 'blur' :\r
+ X_Dom_active = false;\r
+ X.Dom.dispatch( X.Dom.Event.VIEW_DEACTIVATE );\r
+ break;\r
+ };\r
+ },\r
+\r
+ listen : function( type ){\r
+ if( type <= X_Dom_readyState ){\r
+ /*\r
+ * X.Event.XDOM_READY 以後に listen した場合の対策\r
+ */\r
+ X.Dom.asyncDispatch( 0, { type : type, w : X_Dom_width, h : X_Dom_height } );\r
+ };\r
+ return X_EventDispatcher_listen.apply( X.Dom, arguments );\r
+ },\r
+ \r
+ getPointerPosition : function(){\r
+ \r
+ },\r
+ \r
+ /* 要素が視界に入った http://remysharp.com/2009/01/26/element-in-view-event-plugin/ */\r
+ inView : function( elm ){\r
+ \r
+ },\r
+ \r
+ getSize : function(){\r
+ return [ X_Dom_width, X_Dom_height ];\r
+ },\r
+//https://developer.mozilla.org/en-US/docs/Web/API/Element.getBoundingClientRect\r
+//use window.pageXOffset and window.pageYOffset instead of window.scrollX and window.scrollY\r
+//(((t = document.documentElement) || (t = document.body.parentNode)) && typeof t.ScrollLeft == 'number' ? t : document.body).ScrollLeft;\r
+//(((t = document.documentElement) || (t = document.body.parentNode)) && typeof t.ScrollTop == 'number' ? t : document.body).ScrollTop\r
+ \r
+ getDocumentSize : function(){\r
+ // Opera は互換モードでは document.body.scrollHeight、標準モードでは document.documentElement.scrollHeight でページの高さが取れる。と思ってたんだけど、例外があった。\r
+ // http://orera.g.hatena.ne.jp/edvakf/20100515/1273908051\r
+ //http://onozaty.hatenablog.com/entry/20060803/p1\r
+ // Safari2.0.4では標準・互換どちらも document.body\r
+ \r
+ Node._body._updateTimerID && Node._body._startUpdate();\r
+ /*X.UA.Opera ?\r
+ ( document.documentElement && document.documentElement.clientWidth ?\r
+ new Function( 'return[document.documentElement.clientWidth,document.documentElement.clientHeight]' ) :\r
+ new Function( 'return[document.body.clientWidth,document.body.clientHeight]' )\r
+ ) :*/ \r
+ return [\r
+ X_Dom_rootElement.scrollWidth || X_Dom_rootElement.offsetWidth,\r
+ X_Dom_rootElement.scrollHeight || X_Dom_rootElement.offsetHeight\r
+ ];\r
+ },\r
+ \r
+ getScrollPosition :\r
+ window.pageXOffset !== undefined ?\r
+ ( function(){\r
+ Node._body._updateTimerID && Node._body._startUpdate();\r
+ return[ window.pageXOffset, window.pageYOffset ];\r
+ } ) :\r
+ window.scrollLeft !== undefined ?\r
+ ( function(){\r
+ Node._body._updateTimerID && Node._body._startUpdate();\r
+ return[ window.scrollLeft, window.scrollTop ];\r
+ } ) :\r
+ ( function(){\r
+ Node._body._updateTimerID && Node._body._startUpdate();\r
+ // body は Safari2-\r
+ return[ X_Dom_rootElement.scrollLeft || document.body.scrollLeft, X_Dom_rootElement.scrollTop || document.body.scrollTop ];\r
+ } ),\r
+\r
+ getScrollbarSize : function(){\r
+ return [ X.Dom.BoxModel.vScrollbarSize, X.Dom.BoxModel.hScrollbarSize ]; \r
+ },\r
+ \r
+ getBaseFontSize : function(){\r
+ if( Node._body._updateTimerID ){\r
+ Node._body._startUpdate();\r
+ return Node._fontSizeNode._rawObject.offsetHeight;\r
+ };\r
+ return X_Dom_baseFontSize;\r
+ }\r
+ }\r
+);\r
+\r
+\r
+\r
+\r
+\r