/*
  Utility Functions to access IE 4.01, IE 5.+, Netscape 6.0 & Mozilla 0.8+

  It is an adaption of the code: in http://www.alistapart.com/stories/dom2/domutils.txt
  and the ideas in the series of articles DOM Design Tricks
  http://www.alistapart.com/stories/dom2/index.html

*/



function getElementStyle(name)
{
	if (document.getElementById)
	{
	   return document.getElementById(name).style;
	}
	else if (document.all)
	{
		return document.all[name].style;
	}
	else if (document.layers)
	{
		return document.layers[name];
	}


}

function getSelectedOptionValue(strSelectId)
{
	var sel, val,i;
	sel = getElement(strSelectId);
	if(sel){
	   i =  sel.selectedIndex;
	   if (i == null)
	       i = 1;
	    val = sel.options[i].value;
	    return val;
	}
	return null;
}

function getSelectedOption(strSelectId)
{
	var sel, val,i;
	sel = getElement(strSelectId);
	if(sel){
	   i = sel.selectedIndex;
	   if (i == null)
	       i = 0;
	    return i;
	}
	return null;
}


function Contains(ancestor,descendant)
{
	var parent;


	if (ancestor.contains)
	{
	   return ancestor.contains(descendant);
	}
	else {
	   parent = descendant;
	   while (parent){
	     if( parent == ancestor)
	        return true;

	     parent = parent.parentNode;
	   }

	   return false;
	}

}




function getElementAttribute(elem,name)
{
	if (elem.getAttribute)
	{
		return elem.getAttribute(name);
	}
	else if (document.all)
	{

		return elem[name];
	}


    return null;
}

function setElementAttribute(e,name,value)
{
	if (e.setAttribute)
	{
		 e.setAttribute(name,value);
	}
	else if (document.all)
	{
		 e[name] = value;
	}

    return null;
}




function getElement(name)
{
	if (document.getElementById){ return document.getElementById(name);}
	else if (document.all) {return document.all[name] ;}
	else if (document.layers) {return document.layers[name];}
}

function getEvent(e){
	var evt;
	if(window.event)
	   evt = window.event;
	else
	   evt = e;

   return evt;
}


// Pick the event target under netscape the nodes maybe text nodes hence to need to climb the DOM tree
function getEventTarget(evt){

  var node = (evt.srcElement) ? evt.srcElement : evt.target;

  while (node)
   {
      if(node.tagName){

         return node;
      }

      if(node.parentNode)
         node = node.parentNode;
      else
         node = node.parentElement;
  }


  return null;
}

function getParentNode(node){

    var parentNode;
    if(node.parentNode)
         parentNode = node.parentNode;
    else
         parentNode = node.parentElement;



  return parentNode;
}



// for use in collapsing multi-level menus where the class of the parent LI  has to be changed
function getEventLItarget(evt){

  var node = (evt.srcElement) ? evt.srcElement : evt.target;

  while (node)
   {
      if(node.tagName ){
        if(node.tagName.toUpperCase() == "LI" ) { return node;}
      }
      if(node.parentNode)
         node = node.parentNode;
      else
         node = node.parentElement;
  }


  return null;
}


function getEventMouseoutTo(mouseOutEvt)
{
   var to;
   if(mouseOutEvt.relatedTarget)
	  to = mouseOutEvt.relatedTarget;
   else
	  to = mouseOutEvt.toElement;

	return to

}


function stopEvtProp(evt){

  if (evt.stopPropagation)
        evt.stopPropagation();
  else
        evt.cancelBubble = true;

}

/*



*/

function LinkEvent(strElementId, strEventName, fpEventHandler ){
  var sEvent,sOnEvent;
  var oTarget = getElement(strElementId);

  if (oTarget) {
       sEvent = strEventName.toLowerCase().replace(/^on/,'');

       sOnEvent = "on" + sEvent;

  		if(document.attachEvent){      // cater for IE 5+
             oTarget.attachEvent(sOnEvent,fpEventHandler);
  			 return;
  		}
  		if(document.addEventListener){      // cater for proper DOM level 1 Events
  		     oTarget.addEventListener(sEvent,fpEventHandler,false);
  			 return;
  		}


       // cater for $#@%^  IE 4  note mutiple events cannote be used in IE4
        eval("oTarget." + sOnEvent + "=" + fpEventHandler);

  }

}


function DeLinkEvent(strElemId, strEventName, fnEvent){
	var sEvent,sOnEvent;
	var oTarget = getElement(strElementId);


  if (oTarget) {
       sEvent = strEventName.toLowercase().replace(/^on/,''); // remove any leading "on"
       sOnEvent = "on" + sEvent;

       if(document.detachEvent){      // cater for IE 5+
             oTarget.detachEvent(sOnEvent,fpEventHandler);
  			 return;
  		}

  		if(document.removeEventListener){      // cater for proper DOM level 1 Events
  		     oTarget.removeEventListener(sEvent,fpEventHandler,false);
  			 return;
  		}

        eval("oTarget." + sOnEvent + "= null" );

  }


}






// functions for use in debugging.
/*
function showTarget(e){
  window.status = ("Div Target:  " + event.srcElement.id
  +   " Tag: " + event.srcElement.tagName
  +   " Src: " + event.srcElement.src
  + " Parent Tag: " + event.srcElement.parentNode.tagName
  + " Parent ID: " + event.srcElement.parentNode.id
  );
}
*/

