/**
 * Innovectra extention to Prototype library.
 * 
 * $Id: prototypeExt.js,v 1.3.8.1 2008/07/26 06:24:19 kyevenko Exp $
 */

Object.extend(Event, {
    safeObserve: function(element, name, observer, useCapture) {
        element = $(element);
        if (element) {
            Event.observe(element, name, observer, useCapture);
        }
    },
    
    safeObserveAll: function(className, name, observer, useCapture) {
        document.getElementsByClassName(className).each(function(e) {
            Event.safeObserve(e, name, observer, useCapture);
        });
    }
});

Object.extend(Element.Methods, {
    getPosition: function (targetElement) {
        var te = $(targetElement);
    
        var ce = te;
    
        var top = 0;
        var left = 0;
        if (ce.offsetParent) {
            while (ce.offsetParent) {
                top += ce.offsetTop;
                left += ce.offsetLeft;
                ce = ce.offsetParent;
            }
        } else if (ce.x) {
            top += ce.y;
            left += ce.x;
        }
        
        return {x:left, y:top};
    },
    
    fire: function(element, eventName, memo) {/*borrowed from prototype 1.6*/
      element = $(element);
      if (element == document && document.createEvent && !element.dispatchEvent)
        element = document.documentElement;

      if (document.createEvent) {
        var event = document.createEvent("HTMLEvents");
        event.initEvent("dataavailable", true, true);
      } else {
        var event = document.createEventObject();
        event.eventType = "ondataavailable";
      }

      event.eventName = eventName;
      event.memo = memo || { };

      if (document.createEvent) {
        element.dispatchEvent(event);
      } else {
        element.fireEvent(event.eventType, event);
      }

      return event;
    }
});
