

//
//  nothing()
//  This function does absolutely nothing.
//

function nothing() {}

//
//  getElementsByClass()
//  Return elements with the given class
//

function getElementsByClass( searchClass, domNode, tagName) 
{
	if (domNode == null) domNode = document;
	if (tagName == null) tagName = '*';
	var el = new Array();
	var tags = domNode.getElementsByTagName(tagName);
	var tcl = " "+searchClass+" ";
	for(i=0,j=0; i<tags.length; i++) {
		var test = " " + tags[i].className + " ";
		if (test.indexOf(tcl) != -1)
			el[j++] = tags[i];
	}
	return el;
}

//
//  getElement()
//  Cross-browser equivalent of getElementById, accepts both name and object reference
//
	
function getElement(name)
{
	if (typeof name != 'object')
	{
		if (typeof name == 'string')
		{
			if (document.layers) return document.layers[name];  
			else if (document.all) return document.all[name];
			else if (document.getElementById) return document.getElementById(name);
			else return null;
		} else return null;		
	} else return name;
}


//
//  getRadioValue()
//  Returns the currently selected value of a radio button set
//

function getRadioValue(radioObj) 
{
	if(!radioObj)
		return "";
	var radioLength = radioObj.length;
	if(radioLength == undefined)
		if(radioObj.checked)
			return radioObj.value;
		else
			return "";
	for(var i = 0; i < radioLength; i++) {
		if(radioObj[i].checked) {
			return radioObj[i].value;
		}
	}
	return "";
}


//
//  fwk_getFormContents()
//  Returns the form contents as a POST string
//

function fwk_getFormContents(fobj)
{ 
	var str='';
	var els='';
	var fn='';
	var fv='';
	var els='';
	for(var i=0;i<fobj.elements.length;i++)
	{ 
		els = fobj.elements[i]; 
		ft = els.title; 
		fv = els.value; 
		fn = els.name; 
		switch (els.type)
		{
			case 'text':
			case 'hidden':
			case 'textarea':
				str += fn + "=" + encodeURI(fv) + "&";  
				break;   
			case 'checkbox':  
			case 'radio':  
		  	if(els.checked)
				{
					str += fn + "=" + encodeURI(fv) + "&";
				}
			  break;
			case 'select-one':
				if (els.options.length>0)
				{
					if (els.selectedIndex==null || els.selectedIndex<0) els.selectedIndex=0;
					str += fn + "=" +  els.options[els.selectedIndex].value + "&";  
				}
				break;  
		}
	}
	str=str.substr(0,(str.length-1));  
	return str;
}


//
//  fwk_getFormContents()
//  Returns the form contents as a JS object/struct
//

function fwk_getFormContentsAsObject(fobj)
{ 
	var returnobject = new Object();
	var els='';
	var fn='';
	var fv='';
	var els='';
	for(var i=0;i<fobj.elements.length;i++)
	{ 
		els = fobj.elements[i]; 
		ft = els.title; 
		fv = els.value; 
		fn = els.name; 
		switch (els.type)
		{
			case 'text':
			case 'hidden':
			case 'textarea':
				returnobject[fn]=fv;
				break;   
			case 'checkbox':  
			case 'radio':  
		  	if(els.checked)
				{
					returnobject[fn]=fv;
				}
			  break;
			case 'select-one':
				if (els.options.length>0)
				{
					returnobject[fn]=els.options[els.selectedIndex].value;
				}
				break;  
		}
	}
	return returnobject;
}


//
//  addEvent()
//  Adds an event to the browser object model.
//
//  Args:
//    elementObj    --	reference to the object model element
//    eventName			--  event name (without the 'on' prefix)
//    eventHandler  --  reference to the handler function
//
//  Returns:
//    (none)
//

function addEvent(elementObj, eventName, eventHandler)
{
	eventName = eventName.toLowerCase();
	if (eventName.indexOf("on") == 0)
	{
		eventName = eventName.substr(2, eventName.length);
	}
	if (elementObj.addEventListener)
	{
	  elementObj.addEventListener(eventName, eventHandler, false);
	}
	else if (elementObj.attachEvent)
	{
	  elementObj.attachEvent('on' + eventName, eventHandler);
	}
}

//
//  extractMouse()
//  Extracts mouse coordinates from an event.
//
//  Args:
//    e		--	event object reference
//
//  Returns:
//    An array, 0th index is X coordinate and 1st is Y.
//
function extractMouse(e)
{
	if (e.pageX || e.pageY)
	{
		posx = e.pageX;
		posy = e.pageY;
	}
	else if (e.clientX || e.clientY)
	{
		posx = e.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;
		posy = e.clientY + document.body.scrollTop + document.documentElement.scrollTop;
	}
	else
	{
		posx = document.body.scrollLeft + document.documentElement.scrollLeft;
		posy = document.body.scrollTop + document.documentElement.scrollTop;
	}
	return [posx, posy];
}


//
//  setElemCoords()
//  Sets element coordinates for a DOM element.
//
//  Args:
//    element		--	reference to the object model element
//    x					--  X coordinate value
//    y  				--  Y coordinate value
//
//  Returns:
//    (none)
//

function setElemCoords(element, x, y)
{
	element = getElement(element);
	element.style.left = x + 'px';
	element.style.top = y + 'px';
}

//
// Container object for the global hint focus.
// 
var activeHintElement;


//
//  hintsInitialize()
//  Initializes the hints feature.
//
//  Args:
//    (none)
//
//  Returns:
//    (none)
//

function hintsInitialize()
{
  var bnode = getElement('document_body');
	addEvent(bnode, 'mousemove', hintMouseHandler);
}


//
//  hintMouseHandler()
//  Handler for the hints mouse event.
//
//  Args:
//    e		--	reference to the event object
//
//  Returns:
//    (none)
//

function hintMouseHandler(e)
{
	if (typeof(e) == 'undefined') var e = window.event;
	var pos = extractMouse(e);
	var posx = pos[0];
	var posy = pos[1];
	if ((activeHintElement !== null) && (activeHintElement !== undefined))
	{
	  setElemCoords(activeHintElement, posx+32, posy);
	}
}


//
//  hintFocus()
//  Shows the relevant hint object.
//
//  Args:
//    element		--	reference to the hint object
//
//  Returns:
//    (none)
//

function hintFocus(element)
{
	element.style.display = 'block';
	activeHintElement = element;
}


//
//  hintBlur()
//  Hides the relevant hint object.
//
//  Args:
//    element		--	reference to the hint object
//
//  Returns:
//    (none)
//

function hintBlur(element)
{
	element.style.display = 'none';
	activeHintElement = null;
}


//
//  toggle()
//  Hides or shows the relevant DOM object.
//
//  Args:
//    element	-- reference to the DOM object
//
//  Returns:
//    (none)
//

function toggle(element)
{
	element = getElement(element);
	element.style.display = (element.style.display == '' ? 'none' : '');
}



