
function addEventHandlers(classname)
{
  var elements = getElementsByClass(document,classname,"*");

  if (!elements)
    return;

  for (var j=0; j<elements.length; j++)
  {
    elements[j].onmouseover=function()
    {
      this.className+=" hover";
    }
    elements[j].onmouseout=function()
    {
      var re = new RegExp(" hover", "g");
      this.className= this.className.replace(re, "");
      re = new RegExp(" down", "g");
      this.className= this.className.replace(re, "");
    }
    elements[j].onmousedown=function()
    {
      this.className+=" down";
    }
    elements[j].onclick=function()
    {
      this.onmouseout();
    }
  }
  return;
}

function getElementsByClass(node,searchClass,tag)
{
  var classElements = new Array();
  var els = node.getElementsByTagName(tag); // use "*" for all elements
  var elsLen = els.length;
  var pattern = new RegExp("\\b"+searchClass+"\\b");
  for (i = 0, j = 0; i < elsLen; i++)
  {
    if ( pattern.test(els[i].className) )
    {
      classElements[j] = els[i];
      j++;
    }
  }
  return classElements;
}

function xfindPosX(obj)
{
  var curleft = 0;
  if (obj.offsetParent)
  {
    while (obj.offsetParent)
    {
            curleft += obj.offsetLeft
            obj = obj.offsetParent;
    }
  }
  else if (obj.x)
    curleft += obj.x;
  return curleft;
}

function xfindPosY(obj)
{
  var curtop = 0;
  if (obj.offsetParent)
  {
    while (obj.offsetParent)
    {
      curtop += obj.offsetTop
      obj = obj.offsetParent;
    }
  }
  else if (obj.y)
    curtop += obj.y;
  return curtop;
}

function getTopPosition(obj)
{
  var curtop;
  curtop = obj.offsetTop;
  if (obj.offsetParent != null)
  {
    curtop += getTopPosition(obj.offsetParent);
  }
  return curtop;
}

function getLeftPosition(obj)
{
  var curleft;

  curleft = obj.offsetLeft;
  if (obj.offsetParent != null)
  {
    curleft += getLeftPosition(obj.offsetParent);
  }

  return curleft;
}


function getMouseXPosition(e)
{
  if (!e)
    var e = window.event;

  var xpos;
  if (e.pageX) // mozilla, opera
    xpos = e.pageX;
  else if (event.clientX) // IE
    xpos = event.clientX + document.body.scrollLeft;
  return xpos;
}

function getMouseYPosition(e)
{
  if (!e)
    var e = window.event;

  var ypos;
  if (e.pageY) // mozilla, opera
    ypos = e.pageY;
  else if (event.clientY) // IE
    ypos = event.clientY + document.body.scrollTop;
  return ypos;
}

function insertIframe(obj)
{
  var iframe = document.createElement("iframe");
  iframe.frameBorder = 0;
  iframe.src = "javascript:;";
  iframe.style.display = "none";
  iframe.style.position = "absolute";
  iframe.style.filter = "progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=0)";
  return obj.parentNode.insertBefore(iframe, obj);
}

function insertDummy(obj)
{
  var dummy = document.createElement("img");
  dummy.border = 0;
  dummy.src = "../images/dummy.gif"; //FIXME: this should be an actual image, used in the grid to make IE A-tag behave properly
  dummy.width = "0";
  dummy.height = "0";
  dummy.alt = "";
  return obj.appendChild(dummy);
}


function addEvent( obj, type, fn )
{
  if ( obj.attachEvent )
  {
    obj['e'+type+fn] = fn;
    obj[type+fn] = function()
    {
      obj['e'+type+fn]( window.event );
    }
    obj.attachEvent( 'on'+type, obj[type+fn] );
  }

  else
    obj.addEventListener( type, fn, false );
}

function removeEvent( obj, type, fn )
{
  if ( obj.detachEvent )
  {
    obj.detachEvent( 'on'+type, obj[type+fn] );
    obj[type+fn] = null;
  }
  else
    obj.removeEventListener( type, fn, false );
}

function getKeyCode(e)
{
  var code;
  if (!e)
    var e = window.event;

  if (e.ctrlKey)
    return "CTRL";
  else if (e.shiftKey)
    return "SHIFT";
  else
    return "";
}

function stopClickBorder (event)
{
  if (document.attachEvent)
    return;

  if (event.preventDefault && event.ctrlKey)
    event.preventDefault();
}
