home *** CD-ROM | disk | FTP | other *** search
/ PC World 2002 April / PCWorld_2002-04_cd.bin / Software / Komercni / abra / html / home / home_cbe_event.js < prev    next >
Text File  |  2001-11-09  |  11KB  |  325 lines

  1. /*******
  2. cbe_event.js
  3. CrossBrowserElement v3b15 (Events)
  4. Cross-Browser DHTML for IE 4+, NN 4+, Gecko, and Opera 4+
  5. Download the latest version at cross-browser.com
  6.  
  7. Copyright (c) 2001 Michael Foster (mfoster@cybrtyme.com)
  8. This library is free software; you can redistribute it and/or
  9. modify it under the terms of the GNU Lesser General Public
  10. License as published by the Free Software Foundation; either
  11. version 2.1 of the License, or (at your option) any later version.
  12. This library is distributed in the hope that it will be useful,
  13. but WITHOUT ANY WARRANTY; without even the implied warranty of
  14. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  15. Lesser General Public License for more details, at www.gnu.org.
  16. A copy of the GNU LGPL has been included with this distribution.
  17. *******/
  18.  
  19. var cbeEventJsLoaded = true;
  20.  
  21. function CrossBrowserEvent()
  22. {
  23.   ////// Methods
  24.   this.init = cbeInitEvent;
  25.   this.stopPropagation = cbeStopPropagation;
  26.   this.preventDefault = cbePreventDefault;
  27.   ////// Properties
  28.   //// from DOM2 Interface Event
  29.   this.type = "";
  30.   this.target = null;
  31.   this.currentTarget = null;
  32.   this.eventPhase = 0;
  33.   this.bubbles = true;
  34.   this.cancelable = true;
  35.   this.timeStamp = 0;
  36.   // eventPhase masks
  37.   this.AT_TARGET = 1;
  38.   this.BUBBLING_PHASE = 2;
  39.   this.CAPTURING_PHASE = 3;
  40.   //// from DOM2 Interface MouseEvent : UIEvent
  41.   this.screenX = 0;
  42.   this.screenY = 0;
  43.   this.clientX = 0;
  44.   this.clientY = 0;
  45.   this.ctrlKey = false;
  46.   this.shiftKey = false;
  47.   this.altKey = false;
  48.   this.metaKey = false;
  49.   this.button = 0;
  50.   this.relatedTarget = null;
  51.   // button masks
  52.   this.LEFT = 0;
  53.   this.MIDDLE = 1;
  54.   this.RIGHT = 2;
  55.   ////// from IE4+ Object Model
  56.   this.keyCode = 0;
  57.   this.offsetX = 0;
  58.   this.offsetY = 0;
  59.   ////// from NN4.xx Object Model
  60.   this.pageX = 0;
  61.   this.pageY = 0;  // pageX and pageY added in v3b15
  62. }
  63.  
  64. function cbeStopPropagation()
  65. {
  66.   // stub
  67.   return;
  68. }
  69.  
  70. function cbePreventDefault()
  71. {
  72.   // stub
  73.   return;
  74. }
  75.  
  76. function cbeInitEvent(e)
  77. {
  78.   if (is.ie) {
  79.     // from DOM2 Interface Event
  80.     cbeEvent.type = window.event.type;
  81.     cbeEvent.target = window.event.srcElement;
  82.     cbeEvent.currentTarget = window.event.toElement; //?
  83. //    cbeEvent.eventPhase = 0;
  84.     cbeEvent.bubbles = window.event.cancelBubble;
  85. //    cbeEvent.cancelable = false;
  86. //    cbeEvent.timeStamp = 0;
  87.     // from DOM2 Interface MouseEvent : UIEvent
  88.     cbeEvent.screenX = window.event.screenX;
  89.     cbeEvent.screenY = window.event.screenY;
  90.     cbeEvent.clientX = window.event.clientX;
  91.     cbeEvent.clientY = window.event.clientY;
  92.     cbeEvent.ctrlKey = window.event.ctrlKey;
  93.     cbeEvent.shiftKey = window.event.shiftKey;
  94.     cbeEvent.altKey = window.event.altKey;
  95. //    cbeEvent.metaKey = 0;
  96.     if (window.event.button == 1)
  97.       cbeEvent.button = cbeEvent.LEFT;
  98.     else if (window.event.button == 4)
  99.       cbeEvent.button = cbeEvent.MIDDLE;
  100.     else if (window.event.button == 2)
  101.       cbeEvent.button = cbeEvent.RIGHT;
  102.     cbeEvent.relatedTarget = window.event.fromElement; //?
  103.     // from IE4+ Object Model
  104.     cbeEvent.keyCode = window.event.keyCode;
  105.     cbeEvent.offsetX = window.event.offsetX;
  106.     cbeEvent.offsetY = window.event.offsetY;
  107.     // from NN4.xx Object Model
  108.     cbeEvent.pageX = cbeEvent.clientX + document.body.cbe.scrollLeft();
  109.     cbeEvent.pageY = cbeEvent.clientY + document.body.cbe.scrollTop();
  110.   }  
  111.   else if (is.gecko) {
  112.     // from DOM2 Interface Event
  113.     cbeEvent.type = e.type;
  114.     cbeEvent.target = e.target;
  115.     cbeEvent.currentTarget = e.currentTarget;
  116.     cbeEvent.eventPhase = e.eventPhase;
  117.     cbeEvent.bubbles = e.bubbles;
  118.     cbeEvent.cancelable = e.cancelable;
  119.     cbeEvent.timeStamp = e.timeStamp;
  120.     // from DOM2 Interface MouseEvent : UIEvent
  121.     cbeEvent.screenX = e.screenX;
  122.     cbeEvent.screenY = e.screenY;
  123.     cbeEvent.clientX = e.clientX;
  124.     cbeEvent.clientY = e.clientY;
  125.     cbeEvent.ctrlKey = e.ctrlKey;
  126.     cbeEvent.shiftKey = e.shiftKey;
  127.     cbeEvent.altKey = e.altKey;
  128.     cbeEvent.metaKey = e.metaKey;
  129.     if (e.button == 1)
  130.       cbeEvent.button = cbeEvent.LEFT;
  131.     else if (e.button == 2)
  132.       cbeEvent.button = cbeEvent.MIDDLE;
  133.     else if (e.button == 3)
  134.       cbeEvent.button = cbeEvent.RIGHT;
  135.     cbeEvent.relatedTarget = e.relatedTarget;
  136.     // from IE4+ Object Model
  137.     cbeEvent.keyCode = e.which;
  138.     cbeEvent.offsetX = e.layerX;
  139.     cbeEvent.offsetY = e.layerY;
  140.     // from NN4.xx Object Model
  141.     cbeEvent.pageX = cbeEvent.clientX + document.body.cbe.scrollLeft();
  142.     cbeEvent.pageY = cbeEvent.clientY + document.body.cbe.scrollTop();
  143.   }
  144.   else if (is.nav) {
  145.     // from DOM2 Interface Event
  146.     cbeEvent.type = e.type;
  147.     cbeEvent.target = e.target;
  148. //    cbeEvent.currentTarget = e.currentTarget;
  149. //    cbeEvent.eventPhase = e.eventPhase;
  150. //    cbeEvent.bubbles = e.bubbles;
  151. //    cbeEvent.cancelable = e.cancelable;
  152. //    cbeEvent.timeStamp = 0;
  153.     // from DOM2 Interface MouseEvent : UIEvent
  154.     cbeEvent.screenX = e.screenX;
  155.     cbeEvent.screenY = e.screenY;
  156.     cbeEvent.clientX = e.pageX - document.body.cbe.scrollLeft();
  157.     cbeEvent.clientY = e.pageY - document.body.cbe.scrollTop();
  158.     cbeEvent.ctrlKey = (e.modifiers & Event.CONTROL_MASK) != 0;
  159.     cbeEvent.shiftKey = (e.modifiers & Event.SHIFT_MASK) != 0; 
  160.     cbeEvent.altKey = (e.modifiers & Event.ALT_MASK) != 0;     
  161. //    cbeEvent.metaKey = e.metaKey;
  162.     if (e.which == 1)
  163.       cbeEvent.button = cbeEvent.LEFT;
  164.     else if (e.which == 2)
  165.       cbeEvent.button = cbeEvent.MIDDLE;
  166.     else if (e.which == 3)
  167.       cbeEvent.button = cbeEvent.RIGHT;
  168. //    cbeEvent.relatedTarget = e.relatedTarget;
  169.     // from IE4+ Object Model
  170.     cbeEvent.keyCode = e.which;
  171.     cbeEvent.offsetX = e.layerX;
  172.     cbeEvent.offsetY = e.layerY;
  173.     // from NN4.xx Object Model
  174.     cbeEvent.pageX = e.pageX;
  175.     cbeEvent.pageY = e.pageY;
  176.   }  
  177.   else if (is.opera) {
  178.     // from DOM2 Interface Event
  179.     cbeEvent.type = e.type;
  180.     cbeEvent.target = e.target;
  181.     cbeEvent.currentTarget = e.currentTarget;
  182. //    cbeEvent.eventPhase = e.eventPhase;
  183. //    cbeEvent.bubbles = e.bubbles;
  184. //    cbeEvent.cancelable = e.cancelable;
  185. //    cbeEvent.timeStamp = 0;
  186.     // from DOM2 Interface MouseEvent : UIEvent
  187.     cbeEvent.screenX = e.screenX;
  188.     cbeEvent.screenY = e.screenY;
  189.     cbeEvent.clientX = e.clientX - document.body.cbe.scrollLeft();
  190.     cbeEvent.clientY = e.clientY - document.body.cbe.scrollTop();
  191.     cbeEvent.ctrlKey = e.type=='mousemove' ? e.shiftKey : e.ctrlKey;
  192.     cbeEvent.shiftKey = e.type=='mousemove' ? e.ctrlKey : e.shiftKey;
  193.     cbeEvent.altKey = e.altKey;
  194. //    cbeEvent.metaKey = e.metaKey;
  195.     if ((e.type == 'click' && e.which == 0) || ((e.type == 'mousedown' || e.type == 'mouseup') && e.which == 1))
  196.       cbeEvent.button = cbeEvent.LEFT;
  197. //    cbeEvent.relatedTarget = e.relatedTarget; // this was crashing Opera, commented out in v3b12
  198.     // from IE4+ Object Model
  199.     cbeEvent.keyCode = e.which;
  200. //    cbeEvent.offsetX = e.offsetX;
  201. //    cbeEvent.offsetY = e.offsetY;
  202.     // from NN4.xx Object Model
  203.     cbeEvent.pageX = e.clientX;
  204.     cbeEvent.pageY = e.clientY;
  205.   }
  206. }
  207.  
  208. function _cbeAddEventListener(type, listener, capture)        // cbe method     
  209. {                                                                               
  210.   cbeAddEventListener(this.ele, type, listener, capture);                       
  211. }                                                                               
  212. function cbeWindowAddEventListener(type, listener, capture)   // window method  
  213. {                                                                               
  214.   cbeAddEventListener(window, type, listener, capture);                         
  215. }                                                                               
  216. function cbeDocumentAddEventListener(type, listener, capture) // document method
  217. {                                                                               
  218.   cbeAddEventListener(document, type, listener, capture);                       
  219. }                                                                               
  220. function cbeAddEventListener(obj, type, listener, capture)    // global         
  221. {
  222.   var eh = "obj.on" + type.toLowerCase() + "=" + listener;
  223.   var uType = type.toUpperCase();
  224.   if (!capture) capture = false;
  225.   
  226.   if (is.nav4 || is.opera) {
  227.     if (uType == 'SCROLL') {
  228.       window.cbeOldScrollTop = cbePageYOffset();
  229.       window.cbeOnScrollListener = listener;
  230.       cbeOnScrollEvent();
  231.       return;
  232.     }
  233.     else if (uType == 'RESIZE') {
  234.       window.cbeOldWidth = cbeInnerWidth();
  235.       window.cbeOldHeight = cbeInnerHeight();
  236.       window.cbeOnResizeListener = listener;
  237.       cbeOnResizeEvent();
  238.       return;
  239.     }
  240.   }
  241.   if (is.dom2events) {
  242.     obj.addEventListener(type, listener, capture);
  243.   }
  244.   else if (obj.captureEvents) {
  245.     if (capture) obj.captureEvents(eval("Event." + uType));
  246.     eval(eh);
  247.   }
  248.   else {
  249.     eval(eh);
  250.   }
  251. }
  252.  
  253. function _cbeRemoveEventListener(type, listener, capture)        // cbe method
  254. {
  255.   cbeRemoveEventListener(this.ele, type, listener, capture);
  256. }
  257. function cbeWindowRemoveEventListener(type, listener, capture)   // window method
  258. {
  259.   cbeRemoveEventListener(window, type, listener, capture); 
  260. }
  261. function cbeDocumentRemoveEventListener(type, listener, capture) // document method
  262. {
  263.   cbeRemoveEventListener(document, type, listener, capture); 
  264. }
  265. function cbeRemoveEventListener(obj, type, listener, capture)    // global
  266. {
  267.   var eh = "obj.on" + type.toLowerCase() + "=null";
  268.   var uType = type.toUpperCase();
  269.   if (!capture) capture = false;
  270.   
  271.   if (is.nav || is.opera) {
  272.     if (uType == 'SCROLL') {
  273.       window.cbeOnScrollListener = null;
  274.       return;
  275.     }
  276.     else if (uType == 'RESIZE') {
  277.       window.cbeOnResizeListener = null;
  278.       return;
  279.     }
  280.   }
  281.   if (is.dom2events) {
  282.     obj.removeEventListener(type, listener, capture);
  283.   }
  284.   else if (obj.releaseEvents) {
  285.     if (capture) obj.releaseEvents(eval("Event." + uType));
  286.     eval(eh);
  287.   }
  288.   else {
  289.     eval(eh);
  290.   }
  291. }
  292.  
  293. function cbeOnScrollEvent()
  294. {
  295.   if (!window.cbeOnScrollListener) {
  296.     return;
  297.   }
  298.   if (cbePageYOffset() != window.cbeOldScrollTop) {
  299.     window.cbeOnScrollListener();
  300.     window.cbeOldScrollTop = cbePageYOffset();
  301.   }
  302.   setTimeout("cbeOnScrollEvent()", 250);
  303. }
  304.  
  305. function cbeOnResizeEvent()
  306. {
  307.   if (!window.cbeOnResizeListener) {
  308.     return;
  309.   }
  310.   if (cbeInnerWidth() != window.cbeOldWidth || cbeInnerHeight() != window.cbeOldHeight) {
  311.     window.cbeOnResizeListener();
  312.     window.cbeOldWidth = cbeInnerWidth();
  313.     window.cbeOldHeight = cbeInnerHeight();
  314.   }
  315.   setTimeout("cbeOnResizeEvent()", 250);
  316. }
  317.  
  318. function cbeDefaultOnResizeListener()
  319. {
  320.   if (is.opera) location.replace(location.href);
  321.   else history.go(0);
  322. }
  323.  
  324. // End cbe_event.js
  325.