//CLASSES
//class handles carrying out actions on element CSS classes
ClassUtil =
{
	
	//method adds a class to a document element
	//expects a legal document element (pmElement) and a class name string (pmClass)
	//returns a boolean
	addClass : function( pmElement, pmClass )
	{
		var myClass = pmClass;
		var myElement = pmElement;
		//check if class already in place, exit if so
		if( ClassUtil.findClass( myElement, myClass ) ) { return(false); };
		//append new class to existing classes if they exist
		myElement.className = (myElement.className == "") ? myClass : myElement.className + " " + myClass;
		return(true);
	}//end function
	,
	//method removes a class
	//expects a legal document element (pmElement) and a class name string (pmClass)
	//returns a boolean
	deleteClass : function( pmElement, pmClass )
	{
		var myClass = pmClass;
		var myElement = pmElement;
		//check if class exists, exit if not so
		if( !ClassUtil.findClass( myElement, myClass ) ) { return(false); };
		//check if class is not first and remove space as well
		var rep = myElement.className.match( ' ' + myClass ) ? ' '+myClass : myClass;
		myElement.className = myElement.className.replace(rep,'');
		return(true);
	}//end function
	,
	//method tests whether a supplied class is applied to a supplied element
	//expects a legal document element (pmElement) and a class name string (pmClass)
	//returns a boolean
	findClass : function( pmElement, pmClass )
	{
		var myClass = pmClass;
		var myElement = pmElement;
		var myClassFound = false;
		var myTempArray = myElement.className.split(' ');
		for( var i=0; i<myTempArray.length; i++ )
		{
			if( myTempArray[i] == myClass ) { myClassFound=true; }
		};//end for
		return(myClassFound);
	}//end function
	,
	//method handles swapping one class with another
	swapClass : function( pmElement, pmClass, pmClass2 )
	{
		var myClass = pmClass;
		var myClass2 = pmClass2;
		var myElement = pmElement;
		//check if class exists, swap if not so
		myElement.className = (!ClassUtil.findClass(myElement,myClass)) ? myElement.className.replace(myClass2,myClass) : myElement.className.replace(myClass,myClass2);
	}//end function
	
};//end object literal


//DOM
DomUtil =
{
};//end 


//EVENTS
//properties
//methods
//events
EventUtil =
{
	//method handles setting a listener function for a system event
	addEvent : function(pmElement, pmEvent, pmFunction, pmUseCapture)
	{
		if(pmElement.addEventListener) //DOM2 compatible
		{
			pmElement.addEventListener(pmEvent, pmFunction, pmUseCapture);
			return(true);
		}
		else if(pmElement.attachEvent) //IE6
		{
			var myReturn = pmElement.attachEvent('on' + pmEvent, pmFunction);
			return(myReturn);
		}else //other
		{
			pmElement['on' + pmEvent] = pmFunction;
		};//end if
		
	}//end function
	,
	//method handles both stopping propogation and preventing default action across browsers
	cancelClick: function(eventObj)
	{
		if (window.event){ window.event.cancelBubble = true; window.event.returnValue = false; };
		if (eventObj && eventObj.stopPropagation && eventObj.preventDefault){ eventObj.stopPropagation(); eventObj.preventDefault(); };
	}//end function
	,
	//method handles returning correct target for different browser interpretations
	getTarget : function(eventObj)
	{
		var target = window.event ? window.event.srcElement : eventObj ? eventObj.target : null;
		if (!target){ return(false); };
		//safari fix, text node sent rather than link
		while(target.nodeType!=1 && target.nodeName.toLowerCase()!='body'){ target=target.parentNode; };
		return(target);
	}//end function
	,
	//method handles Safari bug of not enacting the preventDefault() method
	safariClickFix : function()
	{
      return(false);
    }//end function
	
};//end EventUtil object literal

//initialise DomUtil class
//EventUtil.addEvent(window, 'load', DomUtil.init, false);
