/* protoload 0.1 beta by Andreas Kalsch
 * last change: 09.07.2007
 *
 * This simple piece of code automates the creating of Ajax loading symbols.
 * The loading symbol covers an HTML element with correct position and size - example:
 * $('myElement').startWaiting() and $('myElement').stopWaiting()
 */
 
Protoload = {
  // the script to wait this amount of msecs until it shows the loading element
  timeUntilShow: 150,
  
  // opacity of loading element
  opacity: 0.7,

  // Start waiting status - show loading element
  startWaiting: function(element, className, timeUntilShow) {
    if (typeof element == 'string')
      element = document.getElementById(element);
    if (className == undefined)
      className = 'waiting';
    if (timeUntilShow == undefined)
      timeUntilShow = Protoload.timeUntilShow;
    
    element._waiting = true;
    if (!element._loading) {
      var e = document.createElement('div');
      (element.offsetParent || document.body).appendChild(element._loading = e);
      e.style.position = 'absolute';
      try {e.style.opacity = Protoload.opacity;} catch(e) {}
      try {e.style.MozOpacity = Protoload.opacity;} catch(e) {}
      try {e.style.filter = 'alpha(opacity='+Math.round(Protoload.opacity * 100)+')';} catch(e) {}
      try {e.style.KhtmlOpacity = Protoload.opacity;} catch(e) {}
      
      /*var zIndex = 0;
      if (window.UI)
        if (UI.zIndex)
          zIndex = ++UI.zIndex;
      if (!zIndex)
        zIndex = ++Protoload._zIndex;
      e.style.zIndex = zIndex;*/
    }
    element._loading.className = className;
    window.setTimeout((function() {
      if (this._waiting) {
        var pos =  [this.offsetLeft,this.offsetTop];
        if (Prototype.Browser.IE) pos = Element.cumulativeOffset(this);
        var left = pos[0], 
          top = pos[1],
          width = this.offsetWidth,
          height = this.offsetHeight,
          l = this._loading;
        
        // alert("Left:"+left+" Top:"+top+" Width:"+width+" Height"+height);
        l.style.left = left+'px';
        l.style.top = top+'px';
        l.style.width = width+'px';
        l.style.height = height+'px';
        l.style.display = 'inline';
        l.style.zIndex = Protoload._zIndex;
        
        // overlay for selection fields in IE
        if (Prototype.Browser.IE) l.innerHTML = "<iFrame src='/common/loader.php' style='width:100%;height:100%;border:none;overflow:hidden;' border='0' frameborder='0'></iFrame>";
      }
      
    }).bind(element), timeUntilShow);
  },
  
  // Stop waiting status - hide loading element
  stopWaiting: function(element) {
    if (typeof element == 'string') element = document.getElementById(element);
    if (element._waiting) {
      element._waiting = false;
      element._loading.parentNode.removeChild(element._loading);
      element._loading = null;
    }
  },
  _zIndex: 1000000
};

if (Prototype) {
  Element.addMethods(Protoload);
  Object.extend(Element, Protoload);
}
/* */