/* 
 * This file contains utility functions
 * for use with forms
 *
 */

/*
 * Returns true if the supplied object is an array
 */
function isArray(obj)
{	
	return( typeof(obj.length) != "undefined" && obj.nodeName != 'SELECT' );
}

/*
 * Returns true if the object is a select form element
 */
function isSelect(obj)
{	
	return( obj.nodeName == 'SELECT' );
}

/*
 * Returns the named element from the supplied form
 */
function getElementByName(form, name)
{
	for(var i = 0 ; i < form.elements.length ; i++)
	{
		if(form.elements[i].name == name)
		{
			return form.elements[i];
		}
	}
}

/*
 * Returns the name of the supplied element;
 */
function getElementName(element)
{
	// see if there is an alternate name	
	var name = (isArray(element) ? element[0].name : element.name);
	
	var alternateName = getElement(name + '_alternate_name');
	return alternateName ? alternateName.value : name;
}

/*
 * Returns a String array of unique element names
 * found in the supplied form
 */
function getElementNames(form)
{
	var elementArray = new Array();
	if(form != null)
	{
		
		//loop thru all elements
		for(var i = 0; i < form.elements.length; i++)
		{
			elementArray[i] = form.elements[i].name;
		}
	}
	// dump all repeated elements and return
	return getUniqueArray(elementArray);
}

/*
 * Returns an array of values found in the supplied element
 */
function getValues(element) 
{
	var returnVal = new Array();
	if(isArray(element))
	{
		for(var i = 0, count = 0 ; i < element.length ; i++)
		{
			if(!isEmptyElement(element[i]))
			{
				returnVal[returnVal.length] = GetElementValue(element[i]);
			}
		}
	}
	else if(isSelect(element))
	{
	    for (var i = 0, count = 0; i < element.length; i++) 
	    {
	    	if (element[i].selected) 
	    	{
	    		returnVal[returnVal.length] = element[i].value;
	        }
        }
	}
	else
	{
		returnVal[returnVal.length] = element.value;
	}
	return returnVal;
}

/*
 * Returns the value of the supplied element
 */
function GetElementValue(element)
{
	if (isSelect(element))
	{
		return element.options[element.selectedIndex].value;
	}
	else
	{
		return element.value;
	}
}

/*
 * Returns true if the supplied 
 * element value is empty, unchecked etc.
 */
function isEmptyElement(element)
{
	if(element.type == "radio" || element.type == "checkbox")
	{
		return !element.checked;
	}
	else if(isSelect(element))
	{
		var val = element.options[element.selectedIndex].value;
		return (val == '' || val == '-1');
	}
	else
	{
		return element.value == '';
	}
}

/*
 * Returns true if all elements in the 
 * collection are empty, unchecked etc.
 */
function isEmptyCollection(element)
{
	var returnVal = true;
	if (isArray(element)) 
	{
		for (var i = 0 ; i < element.length; i++) 
		{
			returnVal = isEmptyElement(element[i]) ? returnVal : false;
		}
	}
	else
	{
		returnVal = isEmptyElement(element);
	}
	return returnVal;
}