/* $Id: domutils.js,v 1.2 2010/10/13 11:11:39 colin Exp $ */

var isIE = !window.opera && navigator.userAgent.indexOf('MSIE') != -1;

function addEvent(obj, evType, fn, useCapture) {
  if (obj.addEventListener) {
    obj.addEventListener(evType, fn, useCapture);
    return true;
  } else if (obj.attachEvent) {
    var r = obj.attachEvent('on' + evType, fn);
    return r;
  } else {
    obj['on' + evType] = fn;
  }
}

function removeElement( elmID )
{
      var elm = document.getElementById(elmID);

      if (elm) {
         var elmParent = elm.parentNode;

         elmParent.removeChild(elm);

         return elm;
      }

}

function addElement(parent, elmType, elmID) {

    var newElm = document.createElement(elmType);

    newElm.id = elmID;

    parent.appendChild(newElm);

    return newElm;

}

function addElementBefore(sibling, elmType, elmID) {

    var newElm = document.createElement(elmType);

    newElm.id = elmID;

    sibling.parentNode.insertBefore(newElm,sibling);

    return newElm;

}

function addTextNode(parent,text) {

 return parent.appendChild(document.createTextNode(text));

}

// climb up the tree to the supplied tag.
function ascendDOM(e, target) {
  while (e.nodeName.toLowerCase() != target &&
      e.nodeName.toLowerCase() != 'html')
    e = e.parentNode;

  return (e.nodeName.toLowerCase() == 'html') ? null : e;
}

function findTarget(e)
{
  var target;

  if (window.event && window.event.srcElement)
    target = window.event.srcElement;
  else if (e && e.target)
    target = e.target;
  if (!target)
    return null;

  while (target != document.body &&
      target.nodeName.toLowerCase() != 'a')
    target = target.parentNode;

  if (target.nodeName.toLowerCase() != 'a')

    return null;

  return target;
}

function getEventSource(e) {

  var source;

  if (window.event && window.event.srcElement)
    source = window.event.srcElement;
  else if (e && e.target)
    source = e.target;
  if (!source)
    return null;

  return source;

}

function GetKeyCode(e) {

    var characterCode;
	if(e && e.which)
	{
		//e = e;
		characterCode = e.which;
	}
	else
	{
		//e = event;
		characterCode = e.keyCode;
	}

    return characterCode;
}

function deleteChildren(id) {

  var parent = document.getElementById(id);
  //alert('deleting '+parent.childNodes.length+' child nodes from '+id);
  while (parent.childNodes.length>0) {
     parent.removeChild(parent.firstChild);
  }

}

function addOption(selectId,label,value) {

    var objOption = new Option(label,value);
    document.getElementById(selectId).options.add(objOption);


}

// copied from xajax
document.getElementsByClassName = function(className) {
  var children = document.getElementsByTagName('*') || document.all;
  var elements = new Array();

  for (var i = 0; i < children.length; i++) {
    var child = children[i];
    var classNames = child.className.split(' ');
    for (var j = 0; j < classNames.length; j++) {
      if (classNames[j] == className) {
        elements.push(child);
        break;
      }
    }
  }

  return elements;
}


function $() {
	var elements = new Array();
	for (var i = 0; i < arguments.length; i++) {
		var element = arguments[i];
		if (typeof element == 'string')
			element = document.getElementById(element);
		if (arguments.length == 1)
			return element;
		elements.push(element);
	}
	return elements;
}

function isEven(x) { return (x%2)?false:true; }
function isOdd(x) { return !isEven(x); }

