// ein Object anhand seiner ID ausfindig machen
function getElement(id)
{
   if (document.getElementById)
   {
      return document.getElementById(id);
   }
   if (document.all)
   {
      return document.all[id];
   }
   return null;
}

// X-Position of element on page
function getPageX(element)
{
   if (element.pageX)
   {
      return pageX;
   }

   var x = 0;

   while (element.offsetParent)
   {
      x += element.offsetLeft;
      element = element.offsetParent;
   }
   x += element.offsetLeft;
   return x;
}

function setPageX(element, x)
{
  if (element.pageX)
  {
     element.pageX = x;
  }

  element.style.pixelLeft = x;
  element.style.left = x + "px";
}

// Y-Position of element on page
function getPageY(element) {

   if (element.pageY)
   {
      return element.pageY;
   }

   var y = 0;

   while (element.offsetParent)
   {
      y += element.offsetTop;
      element = element.offsetParent;
   }
   y += element.offsetTop;
   return y;
}

function setPageY(element, y)
{
  if (element.pageY)
  {
     element.pageY = y;
  }

  element.style.pixelTop = y;
  element.style.top = y + "px";
}

// Size of element
function getWidth(element)
{
   if (element.clip)
   {
      return parseInt(element.clip.width);
   }

   return element.offsetWidth;
}

function getHeight(element)
{
   if (element.clip)
   {
      return parseInt(element.clip.height);
   }

   return element.offsetHeight;
}

// Are the corrdinates inside the element?
function isInside(element, x, y)
{
   var ex = getPageX(element);
   if (x < ex)
   {
      return false;
   }
   var ew = getWidth(element);
   if (x > ex + ew)
   {
      return false;
   }
   var ey = getPageY(element);
   if (y < ey)
   {
      return false;
   }
   var eh = getHeight(element);
   if (y > ey + eh)
   {
      return false;
   }

   return true;
}

// Centering
function getCenteredLeft(element, width)
{
   var x = 0;
   var w = 0;

   if (element)
   {
      if (element.screenX != null)
      {
         x = element.screenX;
         w = element.outerWidth;
      }
      else
     if (window.screenLeft)
     {
         if (document.documentElement)
         {
            x = element.screenLeft;
            w = element.document.documentElement.offsetWidth;
         }
         else
         {
            x = element.screenLeft;
            w = element.document.body.offsetWidth;
         }
     }
   }

   if (w == 0)
   {
      w = screen.availWidth;
   }

   return x + Math.round((w - width) / 2);
}

function getCenteredTop(element, height)
{
   var y = 0;
   var h = 0;

   if (element)
   {
      if (element.screenY != null)
      {
         y = element.screenY;
         h = element.outerHeight;
      }
      else
     if (window.screenTop)
     {
         if (document.documentElement)
         {
            y = element.screenTop;
            h = element.document.documentElement.offsetHeight;
         }
         else
         {
            y = element.screenTop;
            h = element.document.body.offsetHeight;
         }
     }
   }

   if (h == 0)
   {
      h = screen.availHeight;
   }

   return y + Math.round((h - height) / 2);
}


// Visibility of element
function showElement(element, doShow)
{
   if (doShow == null || doShow)
   {
      element.style.visibility = 'visible';
   }
   else
   {
      element.style.visibility = 'hidden';
   }
}

function hideElement(element)
{
   showElement(element, false);
}

// Display of an element
function displayElement(element, mode)
{
   element.style.display = mode;
}

// Events
function getEventTarget(event) {
   if (!event)
   {
      event = window.event;
   }

   var target = (event.target) ? event.target : event.srcElement;

   if (target != null)
   {
      if (target.nodeType == 3)
       {
         target = target.parentNode;
      }
   }

   return target;
}

function getEventX(event) {
   if (!event)
   {
      event = window.event;
   }

   if (event.pageX)
   {
      return event.pageX;
   }
   if (event.clientX)
   {
      return event.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;
   }

   return 0;
}

function getEventY(event) {
   if (!event)
   {
      event = window.event;
   }

   if (event.pageY)
   {
      return event.pageY;
   }
   if (event.clientY)
   {
      return event.clientY + document.body.scrollTop + document.documentElement.scrollTop;
   }

   return 0;
}

// Popup windows
function openModalPopup(url, windowName, left, top, width, height, options)
{
   if (left == null)
   {
      left = 32767;
   }
   if (top == null)
   {
      top = 32767;
   }
   if (width == null)
   {
      width = 100; // min
   }
   if (height == null)
   {
      height = 100; // min
   }

   var opts = new Object();
   opts.options = options;

   var w;
   if (window.showModalDialog)
   {
      opts.opener = window;
      w = window.showModalDialog(url, opts,
        'dialogLeft: ' + left + 'px; dialogTop: ' + top + 'px; ' +
        'dialogWidth: ' + width + 'px; dialogHeight: ' + height + 'px; ' +
        'center: no; resizable: yes; ' +
        'help: no; status: no;');
   }
   else
   {
      w = window.open(url, windowName,
        'left=' + left + ',top=' + top + ',' +
        'width=' + width + ',height=' + height + ',' +
        'location=no,menubar=no,resizable=yes,scrollbars=yes,status=no,toolbar=no,' +
        'dependent=yes,modal=yes');
      w.options = opts;
   }

   return w;
}

function getWindowOptions()
{
   if (window.dialogArguments)
   {
      return window.dialogArguments.options;
   }
   else
   {
      return window.options.options;
   }
}

function openCenteredModalPopup(url, windowName, width, height, options)
{
  return openModalPopup(url, windowName,
          getCenteredLeft(window, width), getCenteredTop(window, height),
          width, height, options);
}

function resizeWindow(width, height)
{
   if (window.dialogWidth)
   {
      window.dialogWidth = width + 'px';
      window.dialogHeight = height + 'px';
   }
   else
   {
      window.resizeTo(width, height);
   }
}

function moveWindow(left, top)
{
   if (window.dialogLeft)
   {
      window.dialogLeft = left + 'px';
      window.dialogTop = top + 'px';
   }
   else
   {
      window.moveTo(left, top);
   }
}

function getOpener()
{
   if (opener)
   {
      return opener;
   }
   else if (window.dialogArguments)
   {
      return window.dialogArguments.opener;
   }
   else
   {
      return null;
   }
}

function centerOnOpener()
{
   var w = 0;
   var h = 0;
   if (window.dialogWidth)
   {
      w = parseInt(window.dialogWidth);
      h = parseInt(window.dialogHeight);
   }
   else
   {
      if (window.outerWidth)
      {
         w = window.outerWidth;
         h = window.outerHeight;
      }
      else
      {
         w = document.body.offsetWidth;
         h = document.body.offsetHeight;
      }
   }

   moveWindow(getCenteredLeft(element, w), getCenteredTop(element, h));
}

// Parameter
function appendParameter(url, parameter)
{
   if (parameter)
   {
      var p;
      if (url.indexOf('?') < 0)
      {
         p = '?';
      }
      else
      {
         p = '&';
      }
      p = p + parameter;

      var pos = url.indexOf('#');
      if (pos < 0)
      {
         url = url + p;
      }
      else
      {
         url = url.substring(0, pos) + p + url.substring(pos);
      }
   }

   return url;
}

// Frames
function getFrame(frameName, base)
{
   if (base && base.frames)
   {
      var frames = base.frames;
      for (var i = 0; i < frames.length; i++)
      {
         var frame = frames[i];
         if (frame.name == frameName)
         {
            return frame;
         }
      }

      for (var i = 0; i < frames.length; i++)
      {
         var frame = frames[i];
         frame = getFrame(frameName, frame);
         if (frame != null)
         {
            return frame;
         }
      }

      return null;
   }
   else
   {
      if (frameName == '_self')
      {
         return window;
      }
      if (frameName == '_top')
      {
         return top;
      }
      if (frameName == '_parent')
      {
         return parent;
      }
      return getFrame(frameName, top);
   }
}

function existsFrame(target)
{
   return (getFrame(target) != null);
}

function ensureTarget(target)
{
   var parts = target.split(',');
   var targetName = parts[0];
   var frame = getFrame(targetName);
   if (frame == null)
   {
      if (targetName == '_blank')
      {
         targetName = new String(Math.random());
         targetName = 'new' + targetName.substring(2);
      }

      window.open('', targetName, parts.slice(1).join(','));
   }

   return targetName;
}

function toTarget(url, target, ifnew)
{
   var parts = target.split(',');
   var targetName = parts[0];
   var frame = getFrame(targetName);
   if (targetName != '_blank' && frame)
   {
      frame.location.href = url;
   }
   else
   {
      if (targetName == '_blank')
      {
         targetName = new String(Math.random());
         targetName = 'new' + targetName.substring(2);
      }
      if (ifnew)
      {
         url = appendParameter(url, ifnew);
      }

      window.open(url, targetName, parts.slice(1).join(','));
   }
}

// String functions
function ltrim(str)
{
   var whitespace = new String(" \t\n\r");

   var s = new String(str);

   if (whitespace.indexOf(s.charAt(0)) >= 0)
   {
      var j = 0;
      var i = s.length;
      while (j < i && whitespace.indexOf(s.charAt(j)) >= 0)
      {
         j++;
      }
      s = s.substring(j, i);
   }
   return s;
}

function rtrim(str)
{
   var whitespace = new String(" \t\n\r");

   var s = new String(str);

   if (whitespace.indexOf(s.charAt(s.length - 1)) >= 0) {
      var i = s.length - 1;
      while (i >= 0 && whitespace.indexOf(s.charAt(i)) >= 0)
      {
         i--;
      }
      s = s.substring(0, i + 1);
   }

   return s;
}

function trim(str)
{
   return rtrim(ltrim(str));
}

function startsWith(str, start)
{
   return (str.substring(0, start.length) == start);
}

function endsWith(str, end)
{
   return (str.substring(str.length - end.length) == end);
}

function contains(str, s)
{
   return (str.indexOf(s) >= 0);
}


