/* Common functions */

/* Use the DOM if browser is compliant, else use IE proprietary if MS */
/* getEvent: Gets the event */
var getEvent = function (e) {return null;};
if (document.all) getEvent = function (e) {return window.event;};
if (document.addEventListener) getEvent = function (e) {return e;};

/* getEventSource: Gets the target element for an event */
var getEventSource = function (e) {return null;};
if (document.all) getEventSource = function (e) {return window.event.srcElement;};
if (document.addEventListener) getEventSource = function (e) {return e.target;};

/* addEvent: Add an event listener */
var addEvent = function () {return false;};
if (document.all) addEvent = function (e,t,f) {return e.attachEvent ('on'+t, f);};
if (document.addEventListener) addEvent = function (e,t,f,c) {e.addEventListener (t, f, c);return true;};

/* removeEvent: Remove an event listener */
var removeEvent = function () {return false;};
if (document.all) removeEvent = function (e,t,f) {return e.detachEvent ('on'+t, f);};
if (document.removeEventListener) removeEvent = function (e,t,f,c) {e.removeEventListener (t, f, c);};


function addEvent(elm, evType, fn, useCapture)
// addEvent and removeEvent
// cross-browser event handling for IE5+,  NS6 and Mozilla
// By Scott Andrew
{
  if (elm.addEventListener){
    elm.addEventListener(evType, fn, useCapture);
    return true;
  } else if (elm.attachEvent){
    var r = elm.attachEvent("on"+evType, fn);
    return r;
  } else {
    alert("Handler could not be removed");
  }
}



function show (name)
{
   var obj = document.getElementById (name);
   if (obj.style)
      obj = obj.style;
   obj.display = 'block';
   if (obj.contentWindow)
      obj.contentWindow.focus();
}
function hide (name)
{
   var obj = document.getElementById (name);
   if (obj.style)
      obj = obj.style;
   obj.display = 'none';
}

String.prototype.trim = function()
{
	return this.replace( /^\s+|\s+$/, "" );
}
String.prototype.elide = function (t)
{
   return _elide (this,t);
}
Array.prototype.contains = function(s)
{
	var retVal = false;
	for (var n = 0; n < this.length; n++)
	{
	   if (this [n] == s)
	   {
	      retVal = true;
	      break;
	   }
	}
	return retVal;
}


// Elide the sub-string t from s, if present
function _elide (s, t)
{
   var sReturn = s;
   if (s)
   {
      idx = s.indexOf (t);
      if (idx != -1) // elide the string t from the s
      {
         len = t.length;
         if ((idx > 0) && (s.charAt(idx-1) == ' '))
         {
            idx -= 1;
            len += 1;
         }
         else if (s.charAt(idx+len) == ' ')
         {
            len += 1;
         }
         sReturn =  s.substring (0,idx) + s.substring (idx+len);
      }
   }
   return sReturn;
}

/* isDigit: returns true if the character was a digit */
function isDigit (c)
{
   var strAllowed = "1234567890";
   return (strAllowed.indexOf (c) != -1);
}

/* Close the standard struts error message display */
function closeErrorMessage ()
{
   var o = document.getElementById('errormsgclose');
   if (o && o.parentNode && o.parentNode.style)
      o.parentNode.style.display='none';
}

function getVisib(obj)
{
   var value = obj.style.visibility;
   if (!value)
   {
      if (document.defaultView && typeof (document.defaultView.getComputedStyle) == "function")
      { // Gecko, W3C
         if (!Calendar.is_khtml)
            value = document.defaultView.
               getComputedStyle(obj, "").getPropertyValue("visibility");
         else
            value = '';
      } else if (obj.currentStyle) { // IE
         value = obj.currentStyle.visibility;
      } else
         value = '';
   }
   return value;
};


function getAbsolutePos (el)
{
   var SL = 0, ST = 0;
   var is_div = /^div$/i.test(el.tagName);
   if (is_div && el.scrollLeft)
      SL = el.scrollLeft;
   if (is_div && el.scrollTop)
      ST = el.scrollTop;
   var r = { x: el.offsetLeft - SL, y: el.offsetTop - ST };
   if (el.offsetParent) {
      var tmp = this.getAbsolutePos(el.offsetParent);
      r.x += tmp.x;
      r.y += tmp.y;
   }
   return r;
};

function setFormReadonly (id)
{
  var form = document.getElementById (id);
  for (var n = 0; n < form.length; n++)
  {
     var elm = form [n];
     if (elm.tagName == 'INPUT' && elm.type == 'text')
     {
        elm.readOnly = true;
     }
     else if (elm.tagName == 'INPUT' && (elm.type == 'checkbox' || elm.type == 'radio'))
     {
        elm.disabled = true;
     }
     else if (elm.tagName == 'SELECT')
     {
        elm.disabled = true;
     }
  }
}

function hideObjects (el, hidden)
{
//        alert ('hideObjects');
   var tags = new Array("iframe", "select");

   var p = getAbsolutePos(el);
   var EX1 = p.x;
   var EX2 = el.offsetWidth + EX1;
   var EY1 = p.y;
   var EY2 = el.offsetHeight + EY1;

   for (var k = tags.length; k > 0; )
   {
      var ar = document.getElementsByTagName(tags[--k]);
      var cc = null;

      for (var i = ar.length; i > 0;)
      {
         cc = ar[--i];
         var parent = cc.parentNode;
         while ((parent != null) && (parent.tagName != 'BODY') && (parent != el))
         {
            parent = parent.parentNode;
         }
         if (parent == el)
            continue;
         p = getAbsolutePos(cc);
         var CX1 = p.x;
         var CX2 = cc.offsetWidth + CX1;
         var CY1 = p.y;
         var CY2 = cc.offsetHeight + CY1;

         if (hidden || (CX1 > EX2) || (CX2 < EX1) || (CY1 > EY2) || (CY2 < EY1))
         {
            if (!cc.__ms_save_visibility)
            {
               cc.__ms_save_visibility = getVisib(cc);
            }
            cc.style.visibility = cc.__ms_save_visibility;
         }
         else
         {
            if (!cc.__ms_save_visibility)
            {
               cc.__ms_save_visibility = getVisib(cc);
            }
            cc.style.visibility = "hidden";
         }
      }
   }
};

function hasClass (elm, cls)
{
   var ret = false;
   if (elm)
   {
      var s = elm.className;
      if (s)
      {
         var a = s.split (' ');
         ret = a.contains (cls);
      }
   }
   return ret;
};

function getElementsByClassName (cls)
{
   var results = new Array ();
   var tags = new Array("input", "select");

   for (var t = 0; t < tags.length; t++)
   {
      var elms = document.getElementsByTagName(tags[t]);
      for (var i = 0; i < elms.length; i++)
      {
         var elm = elms [i];
         if (elm && hasClass (elm, cls))
         {
            results[results.length] = elm;
         }
      }
   }
   return results;
};

