// Algemene dom-functies
///////////////////////////////////////////////////

// This code is necessary for browsers that don't reflect the DOM constants
// (like IE).
if (document.ELEMENT_NODE == null) 
{
	document.ELEMENT_NODE = 1;
  	document.TEXT_NODE = 3;
};

function getObject( sID )
{
	if ( !document.getElementById )
		return false;
		
	var oObj = 	document.getElementById( sID );
	if ( !oObj )
		return false;
	else
		return oObj;
};

		
function findEventTarget( e )
{
	if (window.event && window.event.srcElement) 
		lnk = window.event.srcElement;
	else if (e && e.target) 
		lnk = e.target;
	else
		lnk = e;
			
	 return lnk;
}
		
//////////////////////////////////////////////////////////////
// toevoegen van event aan een object met id = sID
function addEvent( sID, evname, func )
{			
	var oTag = getObject( sID );
	if ( oTag )
		return addEventToObject( oTag, evname, func );
	else
		return false;
};	

// toevoegen van event aan object oObject
function addEventToObject( oObj, evname, func )
{
	if ( !oObj )
		return false;
		
	if ( oObj.addEventListener )
		oObj.addEventListener( evname, func, true );
	else
		oObj.attachEvent( "on" + evname, func );
		
};

//////////////////////////////////////////////////////////////
// verwijderen van event van een object met id = sID
function removeEvent( sID, evname, func )
{
	var oTag = getObject( sID );
	if ( oTag )
		return removeEventFromObject( oTag, evname, func );
	else
		return false;
};

function removeEventFromObject( oObj, evname, func )
{
	if ( !oObj )
		return false;
		
  	if ( document.removeEventListener ) 
    	oObj.removeEventListener( evname, func, true );
	else  	
    	oObj.detachEvent( "on" + evname, func );
};

//////////////////////////////////////////////////////////////
// event blokkeren
function stopEvent( event )
{
  	if ( event.preventDefault )
  		event.preventDefault();
  	else
	{  	
	    event.cancelBubble = true;
	   	event.returnValue = false;
	}	
}

//////////////////////////////////////////////////////////////
// class name toevoegen aan een element met id = strID
function addClassName( sID, sClassName )
{
	var oTag = getObject( sID );
	if ( oTag )
		addClassNameToObject( oTag, sClassName );
};

// class name toevoegen aan element oObject
function addClassNameToObject( oObj, sClassName) 
{
	if ( !oObj )
		return;

/*	if (typeof oObj == 'undefined')
		return; */

	if (oObj.className == null)
		return;

	if ( oObj.className.indexOf( sClassName ) < 0 )
		oObj.className += " " + sClassName;
};

//////////////////////////////////////////////////////////////
// class name verwijderen van een element met id = sid
function removeClassName( sID, sClassName) 
{
	var oTag = getObject( sID );
	if ( oTag )
		removeClassNameFromObject( oTag, sClassName );
};

// class name verwijderen van een element oObj
function removeClassNameFromObject( oObj, sClassName ) 
{
	if ( !oObj )
		return;

	if (oObj.className == null)
		return;
		
	var s = oObj.className;
	var p = s.split(" ");
	var np = [];
	var l = p.length;
	var j = 0;
	for (var i = 0; i < l; i++) 
	{
		if (p[i] != sClassName)
			np[j++] = p[i];
	}
	oObj.className = np.join(" ");
};

//////////////////////////////////////////////////////////////
// attributen toevoegen aan een object met id = sID
function addAttribute( sID, key, value )
{
	var oTag = getObject( sID );
	if ( oTag )
		addAttributeToObject( oTag, key, value )
};

// attributen toevoegen aan object oObj
function addAttributeToObject( oObj, key, value )
{
	if ( !oObj )
		return;
		
	// create attribute and give value
	var newattribute = document.createAttribute( key );
	newattribute.nodeValue = value

	// add attrib to el
	oObj.setAttributeNode( newattribute );  
};

//////////////////////////////////////////////////////////////
// attributen uitlezen van een object met id = sID
function getAttrib( sID, sAttrib )
{
	var oTag = getObject( sID );
	if ( oTag )
		return getAttribFromObject( oTag, key, value );
	else
		return false;
}

// attributen uitlezen van een object oObj
function getAttribFromObject( oObj, sAttrib )
{
	if ( !oObj )
		return;
		
	if ( oObj.getAttribute && oObj.getAttribute( sAttrib ) )
		return oObj.getAttribute( sAttrib );
	else
		return eval( "oObj."+ sAttrib );
}

///////////////////////////////////////////////////////////////////
// controleren of een object met id = sID een bepaalde class heeft
function checkClassName( sID, sClass )
{
	var oTag = getObject( sID );
	if ( oTag )
		return checkClassNameOfObject( oTag, sClass );
	else
		return false;
}

// controleren of object oObj een bepaalde class heeft
function checkClassNameOfObject( oObj, sClass )
{
	if ( !oObj )
		return false;
		
	var s = oObj.className;
	var p = s.split(" ");
	var l = p.length;
	for (var i = 0; i < l; i++) 
	{
		if ( p[i] == sClass )
			return true;
	}
	return false;
}

//////////////////////////////////////////////////////////////
// toevoegen van een ruler aan een table
function addTableRuler()
{
	if (document.getElementById && document.createTextNode)
  	{
   		var tables=document.getElementsByTagName('table');
   		for (var i=0;i<tables.length;i++)
   		{
    		if ( checkClassNameOfObject( tables[i], 'ruler') )
    		{
     			var trs=tables[i].getElementsByTagName('tr');
     			for(var j=0;j<trs.length;j++)
     			{
      				if(trs[j].parentNode.nodeName=='TBODY' && trs[j].parentNode.nodeName!='TFOOT')
       				{
       					addEventToObject( trs[j], "mouseover", showRuler );
       					addEventToObject( trs[j], "mouseout", hideRuler );
     				}
    			}
   			}
  		}
 	}
}

function showRuler(e)
{
	var lnk = findEventTarget(e);			
	
	if ( lnk && lnk.parentNode && lnk.parentNode.nodeName && ( lnk.parentNode.nodeName =="TR" ) )
		addClassNameToObject( lnk.parentNode, "ruled" );
		
	return false;
}

function hideRuler(e)
{
	var lnk = findEventTarget(e);			
	
	if ( lnk && lnk.parentNode && lnk.parentNode.nodeName && ( lnk.parentNode.nodeName =="TR" ) )
		removeClassNameFromObject( lnk.parentNode, "ruled" );
		
	return false;	
}

//////////////////////////////////////////////////////////////
// laten zien van een object
function showObject( sID )
{
	setDisplay( sID, "block" );
}

//////////////////////////////////////////////////////////////
// verbergen van een object
function hideObject( sID )
{
	setDisplay( sID, "none" );			
}

//////////////////////////////////////////////////////////////
// set display properties
function setDisplay( sLayer, strDisplay )
{
	// Assign properties
	var oDiv = document.all ? document.all[ sLayer ] : document.getElementById ? document.getElementById( sLayer ) : document.layers ? eval( "document." + sLayer ) : 0;
	if ( oDiv )
	{
		var oCss = oDiv.style || oDiv;
		oCss.display = strDisplay;
	}	
}

//////////////////////////////////////////////////////////////
// set Visibility properties
function setVisibility( sLayer, strDisplay )
{
	// Assign properties
	var oDiv = document.all ? document.all[ sLayer ] : document.getElementById ? document.getElementById( sLayer ) : document.layers ? eval( "document." + sLayer ) : 0;
	if ( oDiv )
	{
		var oCss = oDiv.style || oDiv;
		oCss.visibility = strDisplay;
	}	
}

///////////////////////////////////////////////////////////////
// zoekt van binnen een tr, naar de omliggende tr.. stopt ook bij de body
function findRow( oLnk )
{
	if ( oLnk )
	{
		if ( oLnk.nodeName == 'TR' )
			return oLnk;
				
		if ( oLnk.nodeName == 'BODY' )
			return false;
					
		if ( oLnk.parentNode )
			return findRow( oLnk.parentNode );
	}
	return false;		
}
