
var validateForm = true;

// Verify if any form on the page has been modified
function hasAnyFormBeenModified() {
	var frms = window.document.forms;
	var isModified = false;
	if(validateForm) {
		for(var i =0; !isModified && i < frms.length; i++) {
			isModified = hasFormBeenModified(frms[i]);
		}
	}
	return isModified;
}

function submitAllModifiedForms() {
	var frms = window.document.forms;
	for(var i =0; i < frms.length; i++) {
		if(hasFormBeenModified(frms[i]))
			frms[i].submit();
	}
}

function hasFormBeenModified(theForm) {
	var checksum = getFormChecksum(theForm);
	var checksumVarName = getChecksumVarName(theForm.id);
	
	return (eval(checksumVarName) != checksum);
}

function setValidateFormActive(value) {
	validateForm = value;
}

function getFormChecksum(theForm) {
	var allElements = theForm.elements;
	var allFormValues = "";
	for(var i=0; i < allElements.length; i++) {
		var v = getSingleInputValue(allElements[i]);
		if(v == "") {v = ".";}
		allFormValues += v;
	}
	return sha1Hash(allFormValues);
}

// Execute onLoad functionality
// onSubmit will not run automatically in IE caused by the onclick handler on the buttons
function executeOnSubmitOnForm(theForm) {
	return theForm.onsubmit.call(theForm);
}

function isFormInputsLoaded(theForm) {
	var formIsLoaded = true;
	
	// GWT components loaded?
	if(top.gwtAttrsLoaded != undefined && !top.gwtAttrsLoaded) {
		formIsLoaded = false;		
	}
	
	// RTE components loaded?
	if(formIsLoaded) {
	
		var allElements = theForm.elements;
		for(var i=0; i < allElements.length; i++) {
			var obj = allElements[i]; 
			if(obj.type == "textarea" && obj.className == "rte_simple") {
				
				// If not disabled because attribute is in a non selected type
				if(!obj.disabled) {
					var rteFrame = document.getElementById(obj.id + "_ifr");
					var initValue = obj.value; // value in textarea
					if(!rteFrame || rteFrame == null || (initValue.length > 0 && rteFrame.contentWindow.document.body.innerHTML.length == 0)) {
						formIsLoaded = false;
					}
				}
			}
		}
	}
	
	return formIsLoaded;
}

// Set the checksum in a top.varName variable
// If the form contains GWT-attributes that has not been loaded yet, try again until they are loaded 
function setFormChecksum(formID) {

	var theForm = document.getElementById(formID);
	var checksumReadyToBeSet = isFormInputsLoaded(theForm);
	
	if(!checksumReadyToBeSet)
		setTimeout("setFormChecksum('"+ formID +"')", 25);
		
	// Set checksum
	if(checksumReadyToBeSet) {
		var tmpChecksum = getFormChecksum(theForm);
		eval(getChecksumVarName(formID) + " = tmpChecksum");
		var checksumVarName = getChecksumVarName(formID);
	}
}

function setFormChecksumForAllForms() {
	var frms = window.document.forms;
	for(var i =0; i < frms.length; i++) {
		setFormChecksum(frms[i].id);
	}
}

function getChecksumVarName(formID) {
	return "top.checksum_" + formID;
}

function commifyArray(obj){
	delimiter = ",";
	var s="";
	if(obj==null||obj.length<=0){return s;}
	for(var i=0;i<obj.length;i++){
		s=s+((s=="")?"":delimiter)+obj[i].toString();
	}
	return s;
}

function setFocusOnFirstInput(frmoObj) {

	var formElements = frmoObj.elements;
	for(var i=0; i < formElements.length; i++) {
		var visibleInput = false;
		switch(formElements[i].type){
			case 'text':
			case 'radio':
			case 'file':
			case 'password':
			case 'select-one':
			case 'select-multiple':
			case 'select':
			case 'textarea':
			case 'checkbox': if(!formElements[i].disabled) {visibleInput = true};
		}
		if(visibleInput) {
			try {
				formElements[i].focus();
			} catch(err) {
				//ignore
			}
			break;
		}
	}
}

function getSingleInputValue(obj) {
	switch(obj.type){
		case 'radio': case 'checkbox': return((obj.checked)?obj.value:".");
		case 'text': case 'hidden': case 'file': return(obj.value);
		case 'password': return(obj.value);
		case 'select-one':
			if (obj.options==null) { return "."; }
			if (obj.selectedIndex<0){return ".";}
			return(obj.options.length>0)?obj.options[obj.selectedIndex].value:".";
		case 'select-multiple': 
			if (obj.options==null) { return "."; }
			var values = ".";
			for (var i = 0; i < obj.options.length; i++) {
				if (obj.options[i].selected) 
					values += "1";
				else
					values += "0";
			}
			return values;
		case 'select':
		case 'textarea':
			var v = obj.value;
			
			// Check for RichTextEditor content
			try {
				var rteFrame = document.getElementById(obj.id + "_ifr");				
				if(rteFrame && rteFrame != null) {
					v = rteFrame.contentWindow.document.body.innerHTML;					
				}
			} catch(ignore) {}

			return v;
	}
	//alert("FATAL ERROR: Field type "+obj.type+" is not supported for this function");
	return ".";
}