alecpl
2008-10-07 2727053c61cac4a37a76b9e58e607acff7fc8dfb
program/js/common.js
@@ -49,6 +49,7 @@
  this.ie4 = (this.ie && !this.dom);
  this.ie5 = (this.dom && this.appver.indexOf('MSIE 5')>0);
  this.ie6 = (this.dom && this.appver.indexOf('MSIE 6')>0);
  this.ie7 = (this.dom && this.appver.indexOf('MSIE 7')>0);
  this.mz = (this.dom && this.ver>=5);  // (this.dom && this.product=='Gecko')
  this.ns = ((this.ver<5 && this.name=='Netscape') || (this.ver>=5 && this.vendor.indexOf('Netscape')>=0));
@@ -95,14 +96,32 @@
// static functions for event handling
var rcube_event = {
 /**
  * returns the event key code
  */
 get_keycode: function(e)
 {
   e = e || window.event;
   return e && e.keyCode ? e.keyCode : (e && e.which ? e.which : 0);
 },
/**
 * returns the event target element
 */
get_target: function(e)
{
  e = e || window.event;
  return e && e.target ? e.target : e.srcElement;
},
/**
 * returns the event key code
 */
get_keycode: function(e)
{
  e = e || window.event;
  return e && e.keyCode ? e.keyCode : (e && e.which ? e.which : 0);
},
/**
 * returns the event key code
 */
get_button: function(e)
{
  e = e || window.event;
  return e && (typeof e.button != 'undefined') ? e.button : (e && e.which ? e.which : 0);
},
/**
 * returns modifier key (constants defined at top of file)
@@ -162,7 +181,12 @@
  if (p.element.addEventListener)
    p.element.addEventListener(p.event, p.object._rc_events[key], false);
  else if (p.element.attachEvent)
    {
    // IE allows multiple events with the same function to be applied to the same object
    // forcibly detach the event, then attach
    p.element.detachEvent('on'+p.event, p.object._rc_events[key]);
    p.element.attachEvent('on'+p.event, p.object._rc_events[key]);
    }
  else
    p.element['on'+p.event] = p.object._rc_events[key];
},
@@ -230,23 +254,28 @@
    var obj;
    obj = document.createElement('DIV');
    with(obj)
      {
      id = this.name;
      with(style)
        {
        position = 'absolute';
   position = 'absolute';
        visibility = (vis) ? (vis==2) ? 'inherit' : 'visible' : 'hidden';
        left = l+'px';
        top = t+'px';
        if(w) width = w+'px';
        if(h) height = h+'px';
        if (w)
     width = w.toString().match(/\%$/) ? w : w+'px';
        if (h)
     height = h.toString().match(/\%$/) ? h : h+'px';
        if(z) zIndex = z;
        }
   }
      }
    if(parent) parent.appendChild(obj);
    else document.body.appendChild(obj);
    if (parent)
      parent.appendChild(obj);
    else
      document.body.appendChild(obj);
    this.elm = obj;
    };
@@ -399,7 +428,8 @@
    var domain = sub_domain+'(\\x2e'+sub_domain+')*';
    var local_part = word+'(\\x2e'+word+')*';
    var addr_spec = local_part+'\\x40'+domain;
    var reg1 = inline ? new RegExp('(^|<)'+addr_spec+'(>|$)', 'i') : new RegExp('^'+addr_spec+'$', 'i');
    var delim = '[,;\s\n]';
    var reg1 = inline ? new RegExp('(^|<|'+delim+')'+addr_spec+'($|>|'+delim+')', 'i') : new RegExp('^'+addr_spec+'$', 'i');
    return reg1.test(input) ? true : false;
    }
  return false;
@@ -472,7 +502,7 @@
// return the absolute position of an object within the document
function rcube_get_object_pos(obj)
function rcube_get_object_pos(obj, relative)
  {
  if(typeof(obj)=='string')
    obj = rcube_find_object(obj);
@@ -482,22 +512,29 @@
  var iX = (bw.layers) ? obj.x : obj.offsetLeft;
  var iY = (bw.layers) ? obj.y : obj.offsetTop;
  if(bw.ie || bw.mz)
  if(!relative && (bw.ie || bw.mz))
    {
    var elm = obj.offsetParent;
    while(elm && elm!=null)
      {
      iX += elm.offsetLeft;
      iY += elm.offsetTop;
      iX += elm.offsetLeft - (elm.parentNode && elm.parentNode.scrollLeft ? elm.parentNode.scrollLeft : 0);
      iY += elm.offsetTop - (elm.parentNode && elm.parentNode.scrollTop ? elm.parentNode.scrollTop : 0);
      elm = elm.offsetParent;
      }
    }
  //if(bw.mac && bw.ie5) iX += document.body.leftMargin;
  //if(bw.mac && bw.ie5) iY += document.body.topMargin;
  return {x:iX, y:iY};
  }
// determine whether the mouse is over the given object or not
function rcube_mouse_is_over(ev, obj)
{
  var mouse = rcube_event.get_mouse_pos(ev);
  var pos = rcube_get_object_pos(obj);
  return ((mouse.x >= pos.x) && (mouse.x < (pos.x + obj.offsetWidth)) &&
    (mouse.y >= pos.y) && (mouse.y < (pos.y + obj.offsetHeight)));
}
/**
@@ -564,18 +601,22 @@
// tiny replacement for Firebox functionality
function rcube_console()
{
  this.box = rcube_find_object('console');
  this.log = function(msg)
  {
    if (this.box)
      this.box.value += str+'\n--------------------------------------\n';
    box = rcube_find_object('console');
    if (box)
      if (msg.charAt(msg.length-1)=='\n')
        box.value += msg+'--------------------------------------\n';
      else
        box.value += msg+'\n--------------------------------------\n';
  };
  this.reset = function()
  {
    if (this.box)
      this.box.value = '';
    box = rcube_find_object('console');
    if (box)
      box.value = '';
  };
}
@@ -591,3 +632,38 @@
  {
  return String(str).replace(/([.*+?^=!:${}()|[\]\/\\])/g, '\\$1');
  }
// Make getElementById() case-sensitive on IE
if (bw.ie)
  {
  document._getElementById = document.getElementById;
  document.getElementById = function(id)
    {
    var i = 0;
    var o = document._getElementById(id);
    if (!o || o.id != id)
      while ((o = document.all[i]) && o.id != id)
        i++;
    return o;
    }
  }
// Fire event on specified element
function exec_event(element,event)
{
  if (document.createEventObject) {
    // dispatch for IE
    var evt = document.createEventObject();
    return element.fireEvent('on'+event,evt)
  }
  else {
    // dispatch for firefox + others
    var evt = document.createEvent("HTMLEvents");
    evt.initEvent(event, true, true); // event type,bubbling,cancelable
    return !element.dispatchEvent(evt);
   }
}