//############################################################
//# Determines if the passed oElement has been changed by the user
//# NOTE: This is a heavily modified version of the code at: http://codestore.net/store.nsf/unid/DOMM-4UTKE6?OpenDocument
//############################################################
//# Last Updated: July 29, 2004
// A hidden text field is required on your form called changedfields
function isFormChanged(ele) {
if (confirm ("Are you sure you want to SUBMIT this UPDATED information?"))
{
	 // ele is the document.myform.elements collection
 	for ( i=0; i < ele.length; i++ ) {
  	if ( ele[i].type.length > 0 ) 
  	{
  			
	  	//test to see if the element has changed
	   	isElementChanged(ele[i]);
  	}
  	}
	return true
	}
	return false
}


function isElementChanged(oElement) {
	//Track all the changed fields by storing their name and previous values in a hidden form variable
	var changed = document.getElementById('changedfields');

	//#### Determine the .toLowerCase'd .type of the passed oElement and process accordingly
	switch (oElement.type.toLowerCase()) { 
	case 'text':
	case 'textarea':
	case 'hidden':
	case 'password':
	//#### If the oElement's .value differes from it's .defaultValue, return true
	if (oElement.value != oElement.defaultValue) {
		//Store the changed fieldname and its previous value in a hidden form element
		//Format is 'fieldname ||| oldfieldvalue ||| newvalue'
		if (changed.value=="")
			{
			changed.value = oElement.name+'|||'+oElement.defaultValue +'|||'+oElement.value;
			}
		else
			{
			changed.value = changed.value + "|X|" + oElement.name+'|||'+oElement.defaultValue +'|||'+oElement.value;
			}
		//alert("Text CHANGED: " + oElement.name + "::" + oElement.defaultValue +" -> " + oElement.value);
	return true;
	}
	break;
	
	case 'radio':
	case 'checkbox':
	//#### If the oElement's .checked value differes from it's .defaultChecked value, return true
	if (oElement.checked != oElement.defaultChecked) {
		if (oElement.checked == false){
			if (changed.value=="")
			{
			changed.value = oElement.name+'|||'+oElement.defaultValue +'|||'+oElement.value;
			}
		else
			{
			//Store the original value of the radio selection
			changed.value = changed.value + "|X|" + oElement.name+'|||'+oElement.defaultValue +'|||'+oElement.value;
			//alert(oElement.name + " WAS " + oElement.value);
			}
		}
		return true;
	}
	break;
	
	case 'select-one': 
	case 'select-multiple':
	var i;
	var bDefaultValueSpecified = false;
	
	//#### Traverse oElement's .options to determine if the developer specified any as .defaultSelected
	for (i = 0; i < oElement.options.length; i++) {
		//#### If the current .option is set as .defaultSelected, flip bDefaultValueSpecified and set i so we fall from the loop
		if (oElement.options[i].defaultSelected) {
		bDefaultValueSpecified = true;
		i = oElement.options.length;
		}
	}

	//#### Traverse oElement's .options
	for (i = 0; i < oElement.options.length; i++) {
		//#### If the developer set some .defaultSelected .options
		if (bDefaultValueSpecified) {
		//#### If the oElement's .selected value differs from it's .defaultSelected value, return true
			if (oElement.options[i].selected != oElement.options[i].defaultSelected) {
				if (changed.value=="")
				{
				changed.value = oElement.name+'|||'+ oElement.options[i].defaultSelected +'|||'+ oElement.options[i].selected;
				}
			else
				{
				changed.value = changed.value + "|X|" + oElement.name+'|||'+ oElement.options[i].defaultSelected +'|||'+ oElement.options[i].selected;
				//alert("CHANGED: " + oElement.name + ":::" + oElement.value + ":::" + oElement.options[i].selected +" -> " + oElement.options[i].defaultselected);
				}
				return true;
			}
		}
		//#### Else there are not any .defaultSelected .options set, so if the user has selected something other then the first .option, return true
		else if (oElement.options[i].selected && i != 0) {
			if (changed.value=="")
				{
				changed.value = oElement.name+'|||'+ oElement.options[i].defaultSelected +'|||'+ oElement.options[i].selected;
				}
			else
				{
				changed.value = changed.value + "|X|" + oElement.name+'|||'+ oElement.options[i].defaultSelected +'|||'+ oElement.options[i].selected;
				//alert("Select CHANGED: " + oElement.name + ":::" + oElement.value + ":::" + oElement.options[i].defaultSelected +" -> " + oElement.options[i].selected);
				}
				return true;
		}
	}
	break;
	}

	//#### If we make it here, the oElement has not changed, so return false
	return false;
}
