<!--

/*
//
//	File: 		validate/changed.js
//	Purpose:	Implement checking of user changes on forms
//  Usage:    This file contains the functions for checking whether
//            or not a form has changed.  In its default mode only
//            one form can be checked.  The underlying functions can
//            be used if it is necessary to check multiple forms.
//

// ------ PUBLIC FUNCTION INDEX
// default functions - only one form may be monitored
// VAL_InitializeFormMonitor( form )
// VAL_FormFieldChanged( fieldName )
// VAL_FormChanged()
// AddFieldToIgnore(field)
//	Create a function to add all your ignored fields and add that function to onload
//
// underlying functions
// VAL_FormInitialValues( form )
// VAL_FormChangedFromValues( form, oldValues )
// VAL_FormFieldChangedFromValues( fieldName, form, oldValues )

// EXAMPLE JAVASCRIPT

// this part done in javascript that runs after the form is displayed
VAL_InitializeFormMonitor( document.forms[0] );

function CheckFormChanged()
{
	if (VAL_FormChanged()) {
		alert( "The values have been changed!" );
	}
}
*/

// ------ GLOBAL VARIABLES

var VAL_formMonitored;
var VAL_formValues;
var VAL_formValueSelectionTexts = new Array();
var VAL_formIgnoreElements = new Array();

function AddFieldToIgnore( fieldToIgnore )
{
		VAL_formIgnoreElements[VAL_formIgnoreElements.length] = fieldToIgnore;
}

function IgnoreField(fieldToPossiblyIgnore)
{
	var i = 0;
	var retVal = false;
	
	for(i = 0; i < VAL_formIgnoreElements.length; i++)
	{
		var fieldRef = eval(VAL_formIgnoreElements[i]);
		if(fieldToPossiblyIgnore.name == fieldRef.name)
		{
			retVal = true;
		}
	}
	return retVal;
}

function VAL_FormFieldTypeSelect ( field )
{
	if ( field.type == "select-one" )
		return true;
	else
		return false;
}

function VAL_FormFieldTypeMultiSelect ( field )
{
	if (field.type == "select-multiple" )
		return true;
	else
		return false;
}

// ------------------------------------------------------------------------ //
// Sets up the values for form monitoring in the global variables

function VAL_InitializeFormMonitor( form )
{
	VAL_formMonitored = form;
	VAL_formValues = VAL_FormInitialValues( form );
}

// ------------------------------------------------------------------------ //
// Checks whether a field in the form currently being monitored has changed

function VAL_FormFieldChanged( fieldName )
{
	return VAL_FormFieldChangedFromValues( fieldName, VAL_formMonitored, VAL_formValues );
}

// ------------------------------------------------------------------------ //
// Checks whether the form currently being monitored has changed

function VAL_FormChanged()
{
	return VAL_FormChangedFromValues( VAL_formMonitored, VAL_formValues );
}

// ------------------------------------------------------------------------ //
// Checks whether a field in a form has changed based on old values

function VAL_FormFieldChangedFromValues( fieldName, form, oldValues )
{
	var changed = false;
	var nextVal;
	for (var i = 0; i < form.elements.length && !changed; i++) {
		if (form.elements[i].name == fieldName) {
			nextVal = VAL_GetFormValue( form.elements[i] );
			if (oldValues[i] != nextVal) {
				changed = true;
				return true;
			}
			return changed;
		}
	}
	return changed;
}

// ------------------------------------------------------------------------ //
// Returns an array of initial values for a form
// also builds the list of form values that takes the selection option text instead of value

function VAL_FormInitialValues( form )
{
	var oldValues = new Array( form.elements.length );
	for (var i = 0; i < form.elements.length; i++) {
		oldValues[i] = VAL_GetFormValue( form.elements[i] );
		
		// this is needed in Manufacturer Maintenance Audit, if this is a select box, 
		// the array contains the option text instead of the actual value
		VAL_formValueSelectionTexts[i] = oldValues[i];
		if ( VAL_FormFieldTypeSelect ( form.elements[i] ) == true
		&& form.elements[i].options.selectedIndex >= 0 )
			VAL_formValueSelectionTexts[i] = form.elements[i].options[form.elements[i].options.selectedIndex].text;
	}
	return oldValues;
}

// ------------------------------------------------------------------------ //
// Checks whether the values in a form have changed from an initial set
// of values

function VAL_FormChangedFromValues( form, oldValues )
{
	var changed = false;
	var nextVal;
	for (var i = 0; i < form.elements.length; i++) {
		if(!IgnoreField(form.elements[i])){
			nextVal = VAL_GetFormValue( form.elements[i] );
			if (oldValues[i] != nextVal) {
				changed = true;
			}
		}
	}
	return changed;
}

// ------------------------------------------------------------------------ //
// Returns a string representing the value of the form based on the
// property(s) of the object that can change via user changes.

function VAL_GetFormValue( obj )
{
	if(obj.type == "hidden") {
		// this stuff was added due to using the INPUTSHADOW stuff for date locale changes
		// for auditing we need to check if the SHADOW value has changed instead of the hidden
		if (VALLOC != null && VALLOC.VAL_GetDateFirstField != null) {
			dateRefName = VALLOC.VAL_GetDateFirstField( obj.form, obj.name, "INPUTSHADOW" );
			dateRefCheck = obj.form.elements[dateRefName];
			if ( dateRefCheck != null) {
				return dateRefCheck.value;
			}
		}
		return "";
	}
	if ((obj.type == "checkbox") || (obj.type == "radio")) {
		return obj.checked;
	}
	if (obj.type == "select-one") {
		return obj.selectedIndex;
	}
	if (obj.type == "select-multiple") {
		var retVal = "";
		for (var i = 0; i < obj.options.length; i++) {
			if(obj.options[i].selected && obj.options[i].value.length > 0) {
				if(retVal == "") {
				       retVal = obj.options[i].value;
				} else {
					retVal = retVal + ":" + obj.options[i].value;
				}
			}
		}
		return retVal;
	}
	return obj.value;
}

-->

