document.formValues=null;

function GsSave() {
	with ( document.forms[0] ) {
		for ( var i=0; i<elements.length; i+=1 ) {
			var MethodGsSave = elements[i].GsSave;
			if ( typeof(MethodGsSave)!='undefined' ) {
				if ( typeof(MethodGsSave)=='string' ) eval(MethodGsSave);
				if ( typeof(MethodGsSave)=='function' ) MethodGsSave();
			}
		}
	}
} // GsSave

function CheckElement(element) {
	var ReturnValue=true;
	var Attr=element.getAttribute("DisableFormDirty");
	if ( Attr ) {
		if ( Attr.toLowerCase()=="true" ) {
			ReturnValue=false;
		}
	}
	if ( !element.name ) ReturnValue=false;
	else if ( element.name.indexOf("__")==0 )  ReturnValue=false;
	
	return ReturnValue;
} // CheckElement

function formDirty() {
	if (document.formValues) {
		GsSave();
		with (document.forms[0]) {
			for (var i = 0; i < elements.length; i++) {
				if ( CheckElement(elements[i]) ) {
					if (document.formValues[elements[i].name] != escape(document.forms[0].elements[i].value)) {
						//alert(document.formValues[elements[i].name] +"\n\n" +escape(document.forms[0].elements[i].value));
						event.returnValue = 'The object has been modified after last save.';
						return false;
					}
				}
			}
		}
	}
	return true;
} // formDirty

function getValues() {
	var evalString = 'document.formValues=';
	var first = true;
	evalString += '{'
	with ( document.forms[0] ) {
		for ( var i=0; i<elements.length; i+=1 ) {
			var element=elements[i];
			if ( CheckElement(element) ) {
				//if ( element.name.indexOf("DocumentHTML")>-1 ) alert("FormDirty ("+element.name+"):\n"+element.value);
				//else alert("Tag="+element.tagName +", Name="+element.name);
				evalString += (first) ? '' : ',';
				evalString += '\'' + element.name + '\':\'' + escape(element.value) +'\'';
				first = false;
			}
		}
	}
	evalString += '}';
	eval(evalString);
} // getValues

function DirtyOnSubmit() {
	GsSave();
	detachEvent('onbeforeunload', formDirty);
	return true;
} // checkSrcElement

function DirtyOnLoad() {
	getValues();
//	document.forms[0].attachEvent('onsubmit', DirtyOnSubmit);
	CreateEvent(document.forms[0], 'submit', DirtyOnSubmit);
//	attachEvent('onbeforeunload', formDirty);
	CreateEvent(window, 'beforeunload', formDirty);
}

//attachEvent('onload', DirtyOnLoad);
if ( typeof(CreateEvent)=="function" ) CreateEvent(window, 'load', DirtyOnLoad);


