/* (c) 2000-2009 Fibonacci Ltd */

var fvInitialized=false;
var faeReady = false;
var faeErrorMessage;
var faeHelpPopupCurrent;
var faeControlXML;
var faeControlLoaded=false;
var faeReturnXML;
var faeReturnLoaded=false;
var faeXML;
var faeNavigation=new Array();
var faeImageStatus=new Array();
var faeCalendarLoad=0;
var faeColoursLoad=0;
var faeAlreadySubmitted=false;
var faeFormObj;
var faeSetDelete='';
var faeText=new Array();
var faeGridSortDir='';
var faeForceChanged=false;
var faeFormObject=function() 
{
	if (faeFormObj==null || typeof faeFormObj=='undefined') {
		if (faeControlVar('faeForm')=='') {
			faeFormObj=document.forms['faeForm'];
		}
		else {
			if (faeControlVar('faeFormById')=='true') {
				faeFormObj=document.getElementById(faeControlVar('faeForm'));
			}
			else {
				faeFormObj=document.forms[faeControlVar('faeForm')];
			}
		}
	}
	return faeFormObj;
}
var faeScriptName=function()
{
	if (faeText['faeScriptName']==null) {
		return 'FAE.aspx';
	}
	else {
		return faeText['faeScriptName'];
	}
}
var faeLoadName=function()
{
	if (faeText['faeLoadName']==null) {
		return 'faeLoadFrame.aspx';
	}
	else {
		return faeText['faeLoadName'];
	}
}

/* Utilities */
function faeGetPId()
{
	//sets PId to latest of its own and the top FAE frame/window, then returns it
	if (typeof faeControlVar=='undefined') {
		return '';
	}
	try {
		if (window.opener!=null || typeof window.opener!='undefined') var test=window.opener.faeControlVar;
	}
	catch(e) {
		return '';
	}
	if (parent==window && (window.opener==null || typeof window.opener=='undefined' || typeof window.opener.faeControlVar=='undefined' || typeof window.opener.faeControlVar=='unknown')) {
		return faeControlVar('PId');	
	}
	var objTop=window;
	while (objTop.parent!=objTop) {
		try {
			if (typeof objTop.parent.faeControlVar=='undefined') break; 
		}
		catch (e) {
			break;
		}
		objTop=objTop.parent;
	}
	try {
		var test=objTop.opener.faeControlVar;
	}
	catch(e) {
		return '';
	}
	while (objTop.opener!=null && typeof objTop.opener!='undefined' && typeof objTop.opener.faeControlVar!='undefined' && typeof objTop.opener.faeControlVar!='unknown') {
		objTop=objTop.opener;
		try {
			var test=objTop.opener.faeControlVar;
		}
		catch(e) {
			return '';
		}
		while (objTop.parent!=objTop) {
			if (typeof objTop.parent.faeControlVar=='undefined') break; 
			objTop=objTop.parent;
		}
	}
	try {
		if (objTop!=window) {
			if (faeControlVar('Expire')>objTop.faeControlVar('Expire')) {
				objTop.faeSetControlVar('Expire',faeControlVar('Expire'));
				objTop.faeSetControlVar('PId',faeControlVar('PId'));
			}
			else {
				faeSetControlVar('Expire',objTop.faeControlVar('Expire'));
				faeSetControlVar('PId',objTop.faeControlVar('PId'));
			}
		}
	}
	catch (e) {
	}
	return faeControlVar('PId');
	
}

function faeDivPop(element,type,underObj,container)
{
	var el,xOffset,yOffset;
	if (!type || type=='') type='div'
	
	if (typeof element=='string') {
		if (element!='') el=document.getElementById(element);
	}
	else {
		el=element;
	}
	if (el) var pos=faeObjPos(el)
	
	xOffset=0;
	yOffset=0;
	if (container) {
		var obj=document.getElementById(container);
		if (obj) {
			xOffset=obj.scrollLeft;
			yOffset=obj.scrollTop;
		}
	}

	if (underObj) {
		underObj.style.position='absolute';
		if (el) {
			underObj.style.posTop=pos.bottom-yOffset;
			underObj.style.posLeft=pos.left-xOffset;
		}
		else {
			underObj.style.posTop=-1;
			underObj.style.posLeft=-1;
		}
		underObj.setAttribute('width','1');
		underObj.setAttribute('height','1');
		underObj.setAttribute('frameBorder','0');
		underObj.setAttribute('scrolling','no');
		underObj.setAttribute('src','javascript:\'\'');
		document.getElementsByTagName('body')[0].appendChild(underObj);
	}
	
	var divPop=document.createElement(type);
	
	if (el) {
		if (document.all) {
			divPop.style.position='absolute';
			divPop.style.posTop=pos.bottom-yOffset;
			divPop.style.posLeft=pos.left-xOffset;
		}
		else {
			divPop.style.position = 'absolute';
			divPop.style.top = (pos.bottom-yOffset) + "px";
			divPop.style.left = (pos.left-xOffset) + "px";
		}
	}
	document.getElementsByTagName('body')[0].appendChild(divPop);
	return divPop;
}

function faeDisplayItem(id,mode)
{
	var obj=document.getElementById('item_'+id);
	if (obj!=null) obj.style.display=(mode==true) ? '' : 'none';
}

function faeIFrameOpen(name,border,scrolling,width,height,action,qs,posObj,hide)
{
	var x, y;
	if (width=='') width=500;
	if (height=='') height=500;
	if (scrolling=='') scrolling='auto';
	if (action=='' || action==null) action=faeScriptName();
	faeSetReturn();
	var obj=document.getElementById(name);
	if (obj) obj.parentNode.removeChild(obj);
	obj=document.createElement('iframe');
	obj.setAttribute('id',name);
	obj.setAttribute('frameBorder',(border==true)?'1':'0');
	obj.setAttribute('scrolling',scrolling);
	obj.setAttribute('width',width);
	obj.setAttribute('height',height);
	obj.className='openFrame';
	obj.src=faeLoadName()+'?faeFrameAction='+action+'&faeFrameId='+name+qs;
	if (posObj) {
		var pos=faeObjPos(posObj);
		x=pos.left;
		y=pos.bottom;
	}
	else {
		x=document.body.scrollLeft+(document.body.clientWidth-width)/2
		y=document.body.scrollTop+(document.body.clientHeight-height)/3;
	}
	if (document.all) {
		obj.style.position='absolute';
		obj.style.posLeft=x;
		obj.style.posTop=y;
	}
	else {
		obj.style.position='absolute';
		obj.style.left=x+"px";
		obj.style.top=y+"px";
	}
	document.getElementsByTagName('body')[0].appendChild(obj)
	if (hide==true) {
		obj.style.display='none';
	}
}

function faeWindowOpen(name,parameters,action,qs)
{
	if (action=='' || action==null) action=faeScriptName();
	if (name=='') name='faeWindow'
	try {
		eval(name+'.close()');
	}
	catch(e) {
	}
	var ev='';
	if (parameters!=null && parameters!='') {
		if (parameters.substring(0,1)!='\'' && parameters.substring(0,1)!='"') parameters='\''+parameters+'\'';
		ev=','+parameters;
	}
	eval(name+"=window.open(faeLoadName()+'?faeFrameAction="+action+'&faeFrameId='+name+qs+"',''"+ev+")")
	eval(name+'.focus()');
}

function faeFocusFirst()
{
	if (typeof faeNoFocus=='undefined' && typeof faeFormObject()!='undefined' && typeof faeFormObject().elements!='undefined') {
		for (i=0; i<faeFormObject().elements.length; i++) {
			try {
				if (faeFormObject().elements[i].type!='select-one' && faeFormObject().elements[i].type!='hidden' && faeFormObject().elements[i].type!='button') {
					faeFormObject().elements[i].focus();
					return;
				}
			}
			catch (e) {
			}
		}
	}
}

function faeObjectType(obj)
{
	if (obj==null) {
		return '';
	}
	else if(obj.length>0) {
		if (typeof obj[0]!='object') {
			return 'var-array';
		}
		else if (typeof obj[0].type!='undefined') {
			return obj[0].type;
		}
	}
	else if (typeof obj!='object') {
		return 'var';
	}	
	return obj.type;
}

function faeObjectValue(obj) {
	var val='';
	if (obj) {
		var objType=faeObjectType(obj)
		if (objType=='select-one') {
			if (obj.length>0 && obj.selectedIndex>=0) val=obj[obj.selectedIndex].value;
		}
		else if (objType=='checkbox' || objType=='select-multiple') {
			val='';
			if (obj.length>0) {
				for (var j=0; j<obj.length; j++) {
					if ((objType=='checkbox' && obj[j].checked) || (objType=='select-multiple' && obj[j].selected)) {
						if (val!='') val+=',';
						val+=obj[j].value;
					}
				}
			}
			else {
				if ((objType=='checkbox' && obj.checked) || (objType=='select-multiple' && obj.selected)) val=obj.value
			}
		}
		else if (objType=='radio') {
			if (obj.length>0) {
				for (var j=0; j<obj.length; j++) {
					if (obj[j].checked) {
						val=obj[j].value;
						break;
					}
				}
			}
			else {
				if (obj.checked) val=obj.value
			}
		}
		else {
			val=obj.value;
		}
	}
	return val;
}

function faeObjectText(obj) {
	var val='';
	if (obj) {
		var objType=faeObjectType(obj)
		if (objType=='select-one') {
			if (obj.length>0) val=obj[obj.selectedIndex].text;
		}
		else if (objType=='select-multiple') {
			val='';
			if (obj.length>0) {
				for (var j=0; j<obj.length; j++) {
					if (obj[j].selected) {
						if (val!='') val+=',';
						val+=obj[j].text;
					}
				}
			}
			else {
				if (obj.selected) val=obj.text
			}
		}
		else {
			val=faeObjectValue(obj);
		}
	}
	return val;
}

function faeSetObjectValue(obj,value)
{
	if (obj) 
	{
		var objType=faeObjectType(obj)
		if (objType=='select-one' || objType=='select-multiple') {
			for (var i=0; i<obj.length; i++) {
				if (obj[i].value==value) {
					obj[i].selected=true;
					break;
				}
			}
		}
		else if (objType=='checkbox' || objType=='radio') {
			for (var i=0; i<obj.length; i++) {
				if (obj[i].value==value) {
					obj[i].checked=true;
					if (objType=='radio') break;
				}
				else if (objType=='checkbox') {
					obj[i].checked=false;
				}
			}
		}
		else {
			obj.value=value;
		}
	}
}

function faeSwitchBlock(id,action,displayProperty)
{
	var obj = document.getElementById(id);
	if (obj!=null) {
		if((action==0 && obj.style.display == 'none') || action==1) {
			
		    try {
		      	obj.style.display=displayProperty;
		    }
		    catch(e) {
		     	obj.style.display='block';
		    }
		}
		else if((action==0 && (obj.style.display == displayProperty || obj.style.display == 'block')) || action==-1){
			obj.style.display = 'none';
		}
	}
}

function faePassFail(id,pass,fail)
{
	if (fvPassFailClasses[id]==null) {
		fvPassFailClasses[id]=new Array(fail,pass);
	}
}

function faeOptionClick(id)
{
	if (id!='') {
		var ii=id.substr(0,id.lastIndexOf('_text'));
		var obj=document.getElementById(ii);
		if (obj) {
			var objType=faeObjectType(obj);
			if (objType=='checkbox') {
				obj.click();
			}
			else if (objType=='radio') {
				obj.click();
			}
		}
		else {
			var objName=ii.substr(0,ii.lastIndexOf('_'));
			var objIndex=ii.substr(ii.lastIndexOf('_')+1);
			obj=faeFormObject().elements[objName];
			var objType=faeObjectType(obj);
			if (objType=='checkbox') {
				obj[objIndex].click();
			}
			else if (objType=='radio') {
				obj[objIndex].click();
			}
		}
	}
}

function faeHasChanged()
{
	if (faeForceChanged) return true;
	if (typeof faeFormObject()=='undefined' || typeof faeFormObject().elements=='undefined') return false;
	var test;
	for (var i=0; i<faeFormObject().elements.length; i++) {
		if (faeFormObject().elements[i].type=='text' || faeFormObject().elements[i].type=='textarea' || faeFormObject().elements[i].type=='password' || faeFormObject().elements[i].type=='file') {
			if (faeFormObject().elements[i].value!=faeFormObject().elements[i].defaultValue) return true;
		}
		else if (faeFormObject().elements[i].type=='select-one') {
			var def=null;
			var sel=null;
			for (var j=0; j<faeFormObject().elements[i].options.length; j++) {
				if (def==null && faeFormObject().elements[i].options[j].defaultSelected) {
					def=faeFormObject().elements[i].options[j].value;
				}
				if (sel==null && faeFormObject().elements[i].options[j].selected) {
					sel=faeFormObject().elements[i].options[j].value;
				}
				if (def!=null && sel!=null) break;
			}
			if (sel!=def) return true;
		}
		else if (faeFormObject().elements[i].type=='select-multiple') {
			var def='';
			var sel='';
			for (var j=0; j<faeFormObject().elements[i].options.length; j++) {
				if (faeFormObject().elements[i].options[j].defaultSelected) {
					if (def!='') def+=',';
					def+=faeFormObject().elements[i].options[j].value;
				}
				if (faeFormObject().elements[i].options[j].selected) {
					if (sel!='') sel+=',';
					sel+=faeFormObject().elements[i].options[j].value;
				}
			}
			if (sel!=def) return true;
		}
		else if (faeFormObject().elements[i].type=='radio') {
			if (faeFormObject().elements[i].checked!=faeFormObject().elements[i].defaultChecked) return true;
		}
		else if (faeFormObject().elements[i].type=='checkbox') {
			if (faeFormObject().elements[i].checked!=faeFormObject().elements[i].defaultChecked) return true;
		}
	}
	return false;
}

function faeSetAllDefaultValues()
{
	var obj;
	if (typeof faeFormObject()=='undefined' || typeof faeFormObject().elements=='undefined') return false;
	for (var i=0; i<faeFormObject().elements.length; i++) {
		obj=faeFormObject().elements[i];
		if (obj.type=='text' || obj.type=='textarea' || obj.type=='password' || obj.type=='file') {
			obj.defaultValue=obj.value;
		}
		else if (obj.type=='select-one' || obj.type=='select-multiple') {
			for (var j=0; j<obj.options.length; j++) {
				obj.options[j].defaultSelected=obj.options[j].selected;
			}
		}
		else if (obj.type=='radio' || obj.type=='checkbox') {
			obj.defaultChecked=obj.checked;
		}
	}
}

function faeSetDefaultValue(obj)
{
		if (obj.type=='text' || obj.type=='textarea' || obj.type=='password' || obj.type=='file') {
			obj.defaultValue=obj.value;
		}
		else if (obj.type=='select-one' || obj.type=='select-multiple') {
			for (var j=0; j<obj.options.length; j++) {
				obj.options[j].defaultSelected=obj.options[j].selected;
			}
		}
		else if (obj.type=='radio' || obj.type=='checkbox') {
			for (var j=0; j<obj.length; j++) {
				obj[j].defaultChecked=obj[j].checked;
			}
		}
}

function faeClearScript()
{
	//clears input object that appear to be script attack
	var test;
	for (var i=0; i<faeFormObject().elements.length; i++) {
		if (faeFormObject().elements[i].type=='text' || faeFormObject().elements[i].type=='textarea' || faeFormObject().elements[i].type=='password' || faeFormObject().elements[i].type=='file') {
			if (faeFormObject().elements[i].value.match(/<[^>]/)!=null) {
				faeFormObject().elements[i].value=faeFormObject().elements[i].value.replace(/</g,'~');
			}
		}
	}
}

/*
function faeOKToQuit(action)
{
	if (!faeHasChanged() || faeConfirm(faeText['faeQuitConfirm'],'',faeText['faeDialogYes'])) eval(action.replace(/\\/g,'\\\\'));
}
*/
function faeOKToQuit()
{
	return (!faeHasChanged() || faeConfirm(faeText['faeQuitConfirm'],'',faeText['faeDialogYes']))
}

function faeObjPos(obj) 
{
	var pos = new Object;
	pos.left = 0;
	pos.top = 0;
	if (!obj) {
		pos.width = 0;
		pos.height = 0;
		pos.bottom = 0;
		pos.right = 0;
		return pos;
	}
	if (obj.offsetHeight) {
		pos.height = obj.offsetHeight;
	} 
	else {
		pos.height = obj.clientHeight;
	}
	if (obj.offsetWidth) {
		pos.width = obj.offsetWidth;
	} 
	else {
		pos.width = obj.clientWidth;
	}
	if (obj.offsetParent)	{
		while (obj.offsetParent) {
			pos.left += obj.offsetLeft;
			pos.top  += obj.offsetTop;
			obj = obj.offsetParent;
		}
	}
	else if (obj.x) {
		pos.left = obj.x;
		pos.top = obj.y;
	};
	pos.bottom=pos.top+pos.height;
	pos.right=pos.left+pos.width;
	return pos;
}

function faeSwitchImage(obj,image,imageOn,status)
{
	if (typeof faeImageStatus[obj.id]=='undefined') faeImageStatus[obj.id]=0;
	if (status==true) faeImageStatus[obj.id]=1-faeImageStatus[obj.id];
	if (faeImageStatus[obj.id]==0) {
		obj.src=image;
	}
	else {
		obj.src=imageOn;
	}
}

function faeReturnLookup(obj)
{
	var pi=obj.id.substring(0,obj.id.indexOf('_lkp'));
	var val;
	var objType=faeObjectType(obj)
	if (objType=='select-one') {
		val=obj[obj.selectedIndex].value;
	}
	else {
		val=obj.value;
	}
	var target=document.getElementById(pi);
	if (target.type=='select-one') {
		for (var i=0; i<target.length; i++) {
			if (target[i].value==val) {
				target[i].selected=true;
				break;
			}
		}
	}
	else {
		target.value=val;
	}
}

function faeGridSort(id)
{
	if (id=='') return;
	if (!faeOKToQuit()) return;
	if (id!=faeControlVar('GridSort')) {
		faeSetControlVar('GridSortDirection','asc','true')
	}
	else if (faeControlVar('GridSortDirection')=='desc') {
		faeSetControlVar('GridSortDirection','asc','true')
	}
	else {
		faeSetControlVar('GridSortDirection','desc','true')
	}
	faeSetControlVar('GridSort',id,'true');
	faeResetNavigation();
	faeSetControlVar('Layout','')
	faeSetControlVar('AbsolutePage','');
	faeSetControlVar('NextPage','');
	faeSetControlVar('NextPageTarget','');
	faeSetControlVar('Action','')
	faeSetControlVar('Action','')
	faeSetControlVar('Page',faeControlVar('This'));
	faeFormObject().target='';
	faeSetControl();
	faeSetReturn();
	faeFormObject().submit();
}

/* faeControl */
function faeSetControlVar(key,value,state,passing)
{
	if (!faeControlLoaded) faeLoadControl();
	if (!faeControlXML) return;
	var node;
	for (var i=0; i<faeControlXML.documentElement.childNodes.length; i++) {
		if (faeControlXML.documentElement.childNodes[i].nodeType!=3 && faeControlXML.documentElement.childNodes[i].nodeType!=4) {
			if (faeControlXML.documentElement.childNodes[i].getAttribute('key')==key) {
				node = faeControlXML.documentElement.childNodes[i];
				break;
			}
		}
	}
	if (node) {
		node.setAttribute('value',value);		
		if (state!=null) node.setAttribute('state',state);		
	}
	else {
		node = faeControlXML.documentElement.appendChild(faeControlXML.createElement('var'));
		node.setAttribute('key',key);		
		node.setAttribute('value',value);				
		if (state!=null) node.setAttribute('state',state);
	}
	if (state=='true' && (passing==null || passing==false)) faePassUpState(faeControlVar("faeState"),key,value,true);
}

function faePassUpState(id,key,value,set)
{
		if (id!=faeControlVar("faeState")) return;
		try {
			opener.faePassUpState(faeControlVar("faeState"),key,value,false);
			if (!set) faeSetControlVar(key,value,'true',true);
			faePassDownState(faeControlVar("faeState"),key,value);
		}
		catch(e) {
			try {
				if (parent.document==document) {
					if (!set) faeSetControlVar(key,value,'true',true);
					faePassDownState(faeControlVar("faeState"),key,value);
				}
				else {
					try {
						parent.faePassUpState(faeControlVar("faeState"),key,value,false);
					}
					catch(e) {
					}
				}
			}
			catch(e) {
			}
		}
}

function faePassDownState(id,key,value)
{
	if (id!=faeControlVar("faeState")) return;
	for (var i=0; i<window.frames.length; i++) {
		try {
			window.frames[i].faeSetControlVar(key,value,'true',true);
			window.frames[i].faePassDownState(faeControlVar("faeState"),key,value);
		}
		catch(e) {
		}
	}
}

function faeControlVar(key)
{
	if (!faeControlLoaded) faeLoadControl();
	if (!faeControlXML) return;
	var node;
	for (var i=0; i<faeControlXML.documentElement.childNodes.length; i++) {
		if (faeControlXML.documentElement.childNodes[i].nodeType!=3 && faeControlXML.documentElement.childNodes[i].nodeType!=4) {
			if (faeControlXML.documentElement.childNodes[i].getAttribute('key')==key) {
				node = faeControlXML.documentElement.childNodes[i];
				break;
			}
		}
	}
	if (node) 
		return node.getAttribute('value');
	else
		return '';
}

function faeLoadControl()
{
	faeControlLoaded=true;
	var node=document.getElementById('faeControl');
	if (!node) return;
	if (node.value.substring(0,2)=='<>') node.value=node.value.replace(/<>/g,'<');
	if (document.implementation && document.implementation.createDocument) {	//indicates type of DOM to use
		faeControlXML = (new DOMParser()).parseFromString(node.value, 'text/xml');
		faeXML='moz';
	}
	else if (window.ActiveXObject) {
		faeControlXML = new ActiveXObject('Microsoft.XMLDOM');
		faeControlXML.loadXML(node.value);
		faeXML='ie';
	}
	else {
		return;
	}
	//save original navigation values
	if (typeof faeControlVar('NavSaved')!='true') {
		faeSetControlVar('NavLayout',faeControlVar('Layout'));
		faeSetControlVar('NavAction',faeControlVar('Action'));
		faeSetControlVar('NavAbsolutePage',faeControlVar('AbsolutePage'));
		faeSetControlVar('NavPage',faeControlVar('Page'));
		faeSetControlVar('NavNextPage',faeControlVar('NextPage'));
//		faeSetControlVar('NavNextPageTarget',faeControlVar('NextPageTarget'));
		faeSetControlVar('NavNextPageTarget',faeFormObject().target);
		faeSetControlVar('NavAddNew',faeControlVar('AddNew'));
		faeSetControlVar('NavStyleSheet',faeControlVar('StyleSheet'));
		faeSetControlVar('NavSaved','true');
	}
}

function faeSetControl()
{
	if (!faeControlLoaded) faeLoadControl();
	var node=document.getElementById('faeControl')
	if (faeControlXML!=null && node!=null) {
		if (faeXML=='ie')
			node.setAttribute('value',faeControlXML.documentElement.xml.replace(/</g,'<>'));
		else if (faeXML=='moz')
			node.setAttribute('value',(new XMLSerializer).serializeToString(faeControlXML.documentElement).replace(/</g,'<>'));
	}
	faeGetPId();
}

function faeControlState()
{
	var x;
	if (!faeControlLoaded) faeLoadControl();
	if (!faeControlXML) return '';
	var xState;
	if (document.implementation && document.implementation.createDocument) {	//indicates type of DOM to use
		xState = (new DOMParser()).parseFromString('<?xml version="1.0"?><control id="faeControlVars"/>', 'text/xml');
	}
	else if (window.ActiveXObject) {
		xState = new ActiveXObject('Microsoft.XMLDOM');
		xState.loadXML('<?xml version="1.0"?><control id="faeControlVars"/>');
	}
	for (var i=0; i<faeControlXML.documentElement.childNodes.length; i++) {
		if (faeControlXML.documentElement.childNodes[i].nodeType!=3 && faeControlXML.documentElement.childNodes[i].nodeType!=4) {
			xState.documentElement.appendChild(faeControlXML.documentElement.childNodes[i].cloneNode(true));
		}
	}
	try {
		if (faeXML=='ie')
			x=xState.documentElement.xml;
		else if (faeXML=='moz')
			x=(new XMLSerializer).serializeToString(xState.documentElement);
		}
	catch(e) {
		x='';
	}
	return x;
}

function faeUpdateState(state)
{
	if (!faeControlLoaded) faeLoadControl();
	if (!faeControlXML) return;
	var updState;
	if (document.implementation && document.implementation.createDocument) {	//indicates type of DOM to use
		updState = (new DOMParser()).parseFromString(state, 'text/xml');
	}
	else if (window.ActiveXObject) {
		updState = new ActiveXObject('Microsoft.XMLDOM');
		updState.loadXML(state);
	}
	else {
		return;
	}
	for (var i=0; i<updState.documentElement.childNodes.length; i++) {
		if (updState.documentElement.childNodes[i].nodeType!=3 && updState.documentElement.childNodes[i].nodeType!=4) {
			if (updState.documentElement.childNodes[i].getAttribute('state')=='true') {
				faeSetControlVar(updState.documentElement.childNodes[i].getAttribute('key'),updState.documentElement.childNodes[i].getAttribute('value'),"true");
			}
		}
	}
	faeSetControl();	
}

function faeResetNavigation()
{
	if (faeControlVar('NavSaved')=='true') {
		faeSetControlVar('Layout',faeControlVar('NavLayout'));
		faeSetControlVar('Action',faeControlVar('NavAction'));
		faeSetControlVar('AbsolutePage',faeControlVar('NavAbsolutePage'));
		faeSetControlVar('Page',faeControlVar('NavPage'));
		faeSetControlVar('NextPage',faeControlVar('NavNextPage'));
//		faeSetControlVar('NextPageTarget',faeControlVar('NavNextPageTarget'));
		faeFormObject().target=faeControlVar('NavNextPageTarget');
		faeSetControlVar('AddNew',faeControlVar('NavAddNew'));
		faeSetControlVar('StyleSheet',faeControlVar('NavStyleSheet'));
	}
}

/* faeReturn */
function faeSetReturn()
{
	var i, j, k, suffix, row, obj, x;
	if (!faeReturnLoaded) {
		faeLoadReturn();
	}
	else {
		try {
		if (faeXML=='ie')
			x=faeReturnXML.documentElement.xml;
		else if (faeXML=='moz')
			x=(new XMLSerializer).serializeToString(faeReturnXML.documentElement);
		}
		catch(e) {
		}
		if (x=='') faeLoadReturn();
	}
	var node=document.getElementById('faeReturn')
	if (faeReturnXML!=null && node!=null) {
		//recurse tree setting values for each attribute from page objects
		for (i=0; i<faeReturnXML.documentElement.childNodes.length; i++) {
			for (j=0; j<faeReturnXML.documentElement.childNodes[i].childNodes.length; j++) {	
				row=faeReturnXML.documentElement.childNodes[i].childNodes[j]
				suffix=row.getAttribute('faeSuffix');
				for (k=0; k<row.attributes.length; k++) {
					if (row.attributes[k].name!='faeSuffix' && row.attributes[k].name!='faeRowId') {
						obj=faeFormObject().elements[row.attributes[k].name+suffix];
						if (obj) row.setAttribute(row.attributes[k].name,faeObjectValue(obj));
					}
				}
			}
		}
		if (faeXML=='ie')
			node.setAttribute('value',faeReturnXML.documentElement.xml.replace(/</g,'<>'));
		else if (faeXML=='moz')
			node.setAttribute('value',(new XMLSerializer).serializeToString(faeReturnXML.documentElement).replace(/</g,'<>'));			
	}
	
}

function faeAddReturnRow(dataGroup,rowId,suffix,addNew,attbs)
{
	if (!faeReturnLoaded) faeLoadReturn();
	var dg, copyRow, i;
	var node=document.getElementById('faeReturn')
	if (faeReturnXML!=null && node!=null) {
		//recurse tree to find value, and set it (cannot expect XMLDOM functions to be available)
		for (i=0; i<faeReturnXML.documentElement.childNodes.length; i++) {
			if (faeReturnXML.documentElement.childNodes[i].getAttribute('id')==dataGroup) {
				dg=faeReturnXML.documentElement.childNodes[i];
				break;
			}
		}
		if (dg==null) {	//dg needs to be made
			dg=faeReturnXML.documentElement.appendChild(faeReturnXML.createElement('dataGroup'));
			dg.setAttribute('id',dataGroup);
		}
		for (i=0; i<dg.childNodes.length; i++) {
			if (dg.childNodes[i].getAttribute('rowId')==rowId) {
				return;	//row exists
			}
			copyRow=dg.childNodes[i];
		}
		//make new row
		var newRow=dg.appendChild(faeReturnXML.createElement('row'));
		if (attbs==null) {	//copy from first row
			for (var i=0; i<copyRow.attributes.length; i++) {
				newRow.setAttribute(copyRow.attributes[i].name,'');
			}
		}
		else {	//make from array of attb names
			for (i=0; i<attbs.length; i++) {
				newRow.setAttribute(attbs[i],'');
			}
		}
		newRow.setAttribute('faeRowId',rowId);
		newRow.setAttribute('faeSuffix',suffix);
		newRow.setAttribute('faeAddNew',(addNew==true)?'true':'false');
	}
}

function faeIgnoreReturnRow(dataGroup,rowId,setting)
{
	if (setting==null) setting='true'
	var i, j, k, suffix, row, obj;
	if (!faeReturnLoaded) faeLoadReturn();
	var node=document.getElementById('faeReturn')
	if (faeReturnXML!=null && node!=null) {
		//recurse tree to find value, and set it (cannot expect XMLDOM functions to be available)
		for (i=0; i<faeReturnXML.documentElement.childNodes.length; i++) {
			if (faeReturnXML.documentElement.childNodes[i].getAttribute('id')==dataGroup) {
				for (j=0; j<faeReturnXML.documentElement.childNodes[i].childNodes.length; j++) {	
					row=faeReturnXML.documentElement.childNodes[i].childNodes[j]
					if (row.getAttribute('faeRowId')==rowId) {
						row.setAttribute('faeIgnore',setting);
						break;
					}
				}
				break;
			}
		}
	}
}

function faeSetReturnValue(dataGroup,rowId,id,value)
{
	var i, j, k, suffix, row, obj;
	var changed=false;
	if (!faeReturnLoaded) faeLoadReturn();
	var node=document.getElementById('faeReturn')
	if (faeReturnXML!=null && node!=null) {
		//recurse tree to find value, and set it (cannot expect XMLDOM functions to be available)
		for (i=0; i<faeReturnXML.documentElement.childNodes.length; i++) {
			if (faeReturnXML.documentElement.childNodes[i].getAttribute('id')==dataGroup) {
				for (j=0; j<faeReturnXML.documentElement.childNodes[i].childNodes.length; j++) {	
					row=faeReturnXML.documentElement.childNodes[i].childNodes[j]
					if (rowId=='' || row.getAttribute('faeRowId')==rowId) {
						row.setAttribute(id,value);
						changed=true;
						break;
					}
				}
				break;
			}
		}
		if (changed) {
			if (faeXML=='ie')
				node.setAttribute('value',faeReturnXML.documentElement.xml);	//.replace(/</g,'<>'));
			else if (faeXML=='moz')
				node.setAttribute('value',(new XMLSerializer).serializeToString(faeReturnXML.documentElement));	//.replace(/</g,'<>'));
		}
	}
}

function faeSetReturnKey(dataGroup,rowId,dict,id,value)
{
	var i, j, k, suffix, row, obj;
	var changed=false;
	if (!faeReturnLoaded) faeLoadReturn();
	var node=document.getElementById('faeReturn')
	if (faeReturnXML!=null && node!=null) {
		//recurse tree to find value, and set it (cannot expect XMLDOM functions to be available)
		for (i=0; i<faeReturnXML.documentElement.childNodes.length; i++) {
			if (faeReturnXML.documentElement.childNodes[i].getAttribute('id')==dataGroup) {
				for (j=0; j<faeReturnXML.documentElement.childNodes[i].childNodes.length; j++) {	
					row=faeReturnXML.documentElement.childNodes[i].childNodes[j]
					if (rowId=='' || row.getAttribute('faeRowId')==rowId) {
						var keys=row.getElementsByTagName('faeKeys');
						if (keys.length>0) {
							for (k=0; k<keys[0].childNodes.length; k++) {
								if (keys[0].childNodes[k].getAttribute('id')==id && keys[0].childNodes[k].getAttribute('dictionary')==dict) {
									keys[0].childNodes[k].setAttribute('value',value);
									changed=true;
									break;
								}
							}	
						}
						break;
					}
				}
				break;
			}
		}
		if (changed) {
			if (faeXML=='ie')
				node.setAttribute('value',faeReturnXML.documentElement.xml);	//.replace(/</g,'<>'));
			else if (faeXML=='moz')
				node.setAttribute('value',(new XMLSerializer).serializeToString(faeReturnXML.documentElement));	//.replace(/</g,'<>'));
		}
	}
}

function faeLoadReturn()
{
	faeReturnLoaded=true;
	var node=document.getElementById('faeReturn');
	if (!node) return;
	if (node.value.substring(0,2)=='<>') node.value=node.value.replace(/<>/g,'<');
	if (document.implementation && document.implementation.createDocument) {	//indicates type of DOM to use
		faeReturnXML = (new DOMParser()).parseFromString(node.value, 'text/xml');
		faeXML='moz';
	}
	else if (window.ActiveXObject) {
		faeReturnXML = new ActiveXObject('Microsoft.XMLDOM');
		faeReturnXML.loadXML(node.value);
		faeXML='ie';
	}
	else {
		return;
	}
}

/* Help */
function faeHelp(element,text,type,helpPage,page,item,windowName,windowParms,container)
{
	if (!element) element=faeHelpPopupCurrent;
	if (type=='page') {
		faeHelpPage(helpPage,page,item,windowName,windowParms);
		return;
	}
	var divPop=document.getElementById('faeHelpPopupTag');
	if (divPop) {
		window.clearTimeout(faeHelpPopupTimer);
		divPop.parentNode.removeChild(divPop);
		var underTag=document.getElementById('faeHelpUnderTag');
		if (underTag) underTag.parentNode.removeChild(underTag);
	}
	if (element==faeHelpPopupCurrent) {
		faeHelpPopupCurrent='';
	}
	else {
		faeHelpPopupCurrent=element;
		var underTag = (document.all) ? document.createElement('iframe') : null;
		divPop=faeDivPop(element,'',underTag,container);
		divPop.setAttribute('id','faeHelpPopupTag');
		var helpTag=document.createElement('table');
		divPop.appendChild(helpTag);
		if (document.all)
			helpTag.className='faeHelpPopup';
		else
			helpTag.setAttribute('class','faeHelpPopup');
		tbTag=helpTag.appendChild(document.createElement('tbody'));
		inTag=tbTag.appendChild(document.createElement('tr'));
		inTag=inTag.appendChild(document.createElement('td'));
		if (document.all)
			inTag.setAttribute('onclick',faeHelp);
		else
			inTag.setAttribute('onclick','javascript:faeHelp(\''+element+'\')');
		inTag.innerHTML=text;
		if (type=='more') {
			inTag=tbTag.appendChild(document.createElement('tr'));
			inTag=inTag.appendChild(document.createElement('td'));
			inTag.setAttribute('align','right');
			inTag=inTag.appendChild(document.createElement('a'));
			inTag.setAttribute('href','javascript:faeHelpPage(\''+helpPage+'\',\''+page+'\',\''+item+'\',\''+windowName+'\',\''+escape(windowParms)+'\')');
			inTag.setAttribute('class','faeHelpPopupLink');
			inTag.innerHTML=faeText['faeMoreHelp'];
		}
		if (underTag) {
			var pos=faeObjPos(faeHelpPopupTag);
			underTag.setAttribute('id','faeHelpUnderTag');
			underTag.setAttribute('width',pos.width);
			underTag.setAttribute('height',pos.height);
		}
		divPop.style.display='block';
		faeHelpPopupTimer=window.setTimeout("ht=document.getElementById('faeHelpPopupTag'); if (ht) ht.parentNode.removeChild(ht);ut=document.getElementById('faeHelpUnderTag'); if (ut) ut.parentNode.removeChild(ut);faeHelpPopupCurrent='';",10000);
	}
}

function faeHelpPage(helpPage,page,item,windowName,windowParms)
{
	if (windowName=='') windowName=page+'_'+item;
	faeWindowOpen(windowName,windowParms,faeScriptName(),'&faePage='+helpPage+'&Page='+page+'&Item='+item)
}

/* Colours */
function faeColoursSwitch(id,locn,func)
{
	var js=document.getElementById('faeColoursJS');
	if (js && faeColoursLoad==0) {
		var col=document.getElementById('faeColoursTag'+id);
		if (col) {
			faeColoursClose(id);
		}
		else {
			faeColours(id,locn,func)
		}
	}
	else if (faeColoursLoad==0) {
		faeColoursLoad=1;
		var htmNode=document.createElement('script');
		htmNode.setAttribute('language','JavaScript');
		htmNode.setAttribute('id','faeColoursJS');
		htmNode.setAttribute('src','FAE/faeColours.js');
		document.getElementsByTagName('head')[0].appendChild(htmNode);
		if (!locn) locn='';
		window.setTimeout("faeColoursSwitch(\'"+id+"\',\'"+locn+"\',\'"+func+"\')",20);
	}
	else if (faeColoursLoad==1) {
		if (!locn) locn='';
		window.setTimeout("faeColoursSwitch(\'"+id+"\',\'"+locn+"\',\'"+func+"\')",20);
	}
}

/* Calendar */
function faeCalendarSwitch(id,locn,startDate,today,daysOnly,fromDate,toDate,validate,container)
{
	var js=document.getElementById('faeCalendarJS');
	if (js && faeCalendarLoad==0) {
		var cal=document.getElementById('faeCalendarTag'+id);
		if (cal) {
			faeCalendarClose(id);
		}
		else {
			faeCalendar(id,locn,startDate,today,daysOnly,fromDate,toDate,validate,container)
		}
	}
	else if (faeCalendarLoad==0) {
		faeCalendarLoad=1;
		var htmNode=document.createElement('script');
		htmNode.setAttribute('language','JavaScript');
		htmNode.setAttribute('id','faeCalendarJS');
		htmNode.setAttribute('src','FAE/faeCalendar.js');
		document.getElementsByTagName('head')[0].appendChild(htmNode);
		if (!locn) locn='';
		if (!startDate) startDate='';
		if (!today) today=false;
		if (!daysOnly) daysOnly=false;
		if (!fromDate) fromDate='';
		if (!toDate) toDate='';
		if (!validate) validate='';
		window.setTimeout("faeCalendarSwitch(\'"+id+"\',\'"+locn+"\',\'"+startDate+"\',"+today+","+daysOnly+",\'"+fromDate+"\',\'"+toDate+"\',\'"+validate+"\')",20);
	}
	else if (faeCalendarLoad==1) {
		if (!locn) locn='';
		if (!startDate) startDate='';
		if (!today) today=false;
		if (!daysOnly) daysOnly=false;
		if (!fromDate) fromDate='';
		if (!toDate) toDate='';
		if (!validate) validate='';
		window.setTimeout("faeCalendarSwitch(\'"+id+"\',\'"+locn+"\',\'"+startDate+"\',"+today+","+daysOnly+",\'"+fromDate+"\',\'"+toDate+"\',\'"+validate+"\')",20);
	}
}

function faeDate(dateString) 
{
	var fd = new Object;
	
	fd.originalString = dateString;
	var df=faeControlVar("DateFormat");
	var dl=df.substring(2,3);
	if (dateString.indexOf(dl)>=0) {
		var dy=df.indexOf('99');
		var dm=df.indexOf('12');
		var dd=df.indexOf('31');
		var pos1=dateString.indexOf(dl);
		var pos2=dateString.indexOf(dl,pos1+1);
		var posend=dateString.indexOf(' ',pos2+1);
		if (posend<0) posend=dateString.length;
		if (dd==0) var ddd=dateString.substring(0,pos1);
		if (dm==0) var ddm=dateString.substring(0,pos1);
		if (dy==0) var ddy=dateString.substring(0,pos1);
		if (dd==3) var ddd=dateString.substring(pos1+1,pos2);
		if (dm==3) var ddm=dateString.substring(pos1+1,pos2);
		if (dy==3) var ddy=dateString.substring(pos1+1,pos2);
		if (dd==6) var ddd=dateString.substring(pos2+1,posend);
		if (dm==6) var ddm=dateString.substring(pos2+1,posend);
		if (dy==6) var ddy=dateString.substring(pos2+1,posend);
		if (ddy-100<0) ddy=parseInt('2000'.substring(0,4-ddy.length)+ddy);
		fd.dateObject=new Date(ddy,ddm-1,ddd);
		fd.day=ddd;
		fd.month=ddm;
		fd.year=ddy;
		if (ddd.length<2) ddd='0'+ddd;
		if (ddm.length<2) ddm='0'+ddm;
		ddy='0000'+ddy;
		ddy=ddy.substring(ddy.length-4);
		fd.dateReversed=ddy+ddm+ddd;
	}
	return fd;
}

/* Navigation */
function faeMenuLink(action,calledFrom,type,target)
{
	faeResetNavigation();
	if (!type) type='page';
	if (type=='page' || type=='menu') {
		faeSetControlVar('Page',action);
		faeSetControlVar('StyleSheet','');
	}
	else if (type=='fml') {
		faeSetControlVar('Page','');
		faeSetControlVar('StyleSheet',action);
	}
	else if (type=='url') {
		var t=faeFormObject().target;
		var a=faeFormObject().action;
		faeFormObject().action=action;
		if (target && target!='') faeFormObject().target=target;
		if (faeSubmit()) faeFormObject().submit();
		if (target && target!='') {
			faeAlreadySubmitted=false;
			faeFormObject().action=a;
			faeFormObject().target=t;
		}
		return;
	}
	else if (type=='javascript') {
		eval(action);
		return;
	}
	if (target && target!='') {
		faeSetControlVar('NextPageTarget',target)
		faeFormObject().target=target;
	}
	if (faeFormObject().encoding=='multipart/form-data') faeFormObject().encoding='application/x-www-form-urlencoded';
	faeSetControlVar('AddNew','');
	faeSetControlVar('Delete','');	
	faeSetControlVar('CalledFrom',calledFrom,'true')
	faeSetControl();
	faeSetReturn();
	faeClearScript();
	faeFormObject().submit();
}

/* AddNew Button */
function faeButtonAddNew(addNewPage,addNewTarget,indirect)
{
	faeResetNavigation();
	if (indirect!=true) {
		faeSetControlVar('Layout','record')
		faeSetControlVar('Action','new')
		faeSetControlVar('AddNew','true')
	}
	faeSetControlVar('AbsolutePage','');
	faeSetControlVar('Page',addNewPage);
	faeSetControlVar('NextPage','');
	faeSetControlVar('NextPageTarget','');
	if (faeFormObject().encoding=='multipart/form-data') faeFormObject().encoding='application/x-www-form-urlencoded';
	faeFormObject().target=addNewTarget;
	faeSetControl();
	faeSetReturn();
	faeClearScript();
	faeFormObject().submit();
}

/* Back Button */
function faeButtonBack()
{
	window.history.back();
}

/* Delete Button */
function faeOKToDelete(deletePage,deleteTarget,dataGroup)
{
	if (faeAlreadySubmitted) {
		return false;
	}
	if (faeConfirm(faeText['faeDeleteConfirm'],'',faeText['faeDialogYes'])) faeDelete(deletePage,deleteTarget,dataGroup)
}

function faeDelete(deletePage,deleteTarget,dataGroup)
{
	faeResetNavigation();
	faeSetControlVar('Delete','true');
	faeSetControlVar('AbsolutePage','');
	if (deletePage!='') faeSetControlVar('Page',deletePage); 
	if (deleteTarget!='') faeFormObject().target=deleteTarget;
	if (faeControlVar('BeforeDelete')!='') eval(faeControlVar('BeforeDelete'));
	faeSetControl();
	faeAlreadySubmitted=true;
	if (faeControlVar('Update')=='true') {
		faeSetReturnValue(dataGroup,'','faeDelete','true')
		faeSetDelete=dataGroup;
		faeUpdate();
		return false;
	}
	if (faeFormObject().encoding=='multipart/form-data') faeFormObject().encoding='application/x-www-form-urlencoded';
	faeSetControlVar('AddNew','');
	faeSetControlVar('Delete','');
	faeFormObject().submit();
}

/* Exit Button */
function faeButtonExit(exitPage,exitTarget)
{
	faeResetNavigation();
	var UEP=exitPage.toUpperCase()
	var colonPos;
	if (UEP=='[CLOSE]') {
		window.close()
	}
	else if (UEP.substring(0,3)=='JS:' || UEP.substring(0,11)=='JAVASCRIPT:') {
		var JSPos;
		JSPos=exitPage.indexOf(':');
		JSPos++;
		eval(exitPage.substring(JSPos));
	}
	else {
		if (UEP.substring(0,4)=='URL:') {
			faeFormObject().action=exitPage.substring(4);
		}
		else  {
			faeFormObject().action=faeScriptName();
			faeSetControlVar('StyleSheet','')
			faeSetControlVar('Layout','')
			faeSetControlVar('NextPage','')
			faeSetControlVar('AddNew','');
			faeSetControlVar('Delete','');
			faeSetControlVar('Page',exitPage);
		}
		if (faeFormObject().encoding=='multipart/form-data') faeFormObject().encoding='application/x-www-form-urlencoded';
		faeFormObject().target=exitTarget;
		faeSetControl();
		faeSetReturn();
		faeClearScript();
		faeFormObject().submit();
	}
}

/* List Button */
function faeButtonList(listPage,listTarget)
{
	faeResetNavigation();
	faeSetControlVar('Layout','')
	faeSetControlVar('AbsolutePage','');
	faeSetControlVar('NextPage','');
	faeSetControlVar('NextPageTarget','');
	faeSetControlVar('Action','')
	faeSetControlVar('AddNew','');
	faeSetControlVar('Delete','');
	faeSetControlVar('Page',listPage);
	if (faeFormObject().encoding=='multipart/form-data') faeFormObject().encoding='application/x-www-form-urlencoded';
	faeFormObject().target=listTarget;
	faeSetControl();
	faeSetReturn();
	faeClearScript();
	faeFormObject().submit();
}

/* Selection Button */
function faeButtonSelection(selectionPage,selectionTarget)
{
	faeResetNavigation();
//	faeSetControlVar('Layout','selection')
//	faeSetControlVar('Action','modify')
	faeSetControlVar('AbsolutePage','');
	faeSetControlVar('NextPage','');
	faeSetControlVar('NextPageTarget','');
	faeSetControlVar('AddNew','');
	faeSetControlVar('Delete','');
	faeSetControlVar('Page',selectionPage);
	if (faeFormObject().encoding=='multipart/form-data') faeFormObject().encoding='application/x-www-form-urlencoded';
	faeFormObject().target=selectionTarget;
	faeSetControl();
	faeSetReturn();
	faeClearScript();
	faeFormObject().submit();
}

/* Submit Button */
function faeButtonSubmit()
{
	//faeResetNavigation();
	faeSetControl();
	if (faeSubmit()) {
		faeFormObject().submit();
//		faeControlLoaded=false;
	}
}

/* Check Submit */
function faeSubmitForm()
{
	if (faeAlreadySubmitted || !faeReady) {
		return false;
	}
	if (faeControlVar('PreSpellCheck')!='') {
		 var rtn=eval(faeControlVar('PreSpellCheck'));
		 if (rtn==false) return false;
	}
	if (faeControlVar('DisableSpellCheck')!='true' && faeControlVar('ieSpell')=='true' && faeSpellCheck2 && !faeSpellCheck2()) {
		return false;
	}
	if (!fvInitialized && typeof fvPassFailInitialize!='undefined') fvPassFailInitialize();
	fvInitialized=true;
	if (typeof fvResetPassFail!='undefined') fvResetPassFail();
	var i, fv;
	faeErrorMessage='';
	fv='';
	if (faeControlVar('PreValidation')!='') {
		fv=eval(faeControlVar('PreValidation'));
	}
	if (fv==0 || fv=='' || typeof fv=='undefined') {
		faeErrorMessage+=fvValidate();
	}
	if (faeErrorMessage=='') {
		fvSetClasses();
		if (faeControlVar('ToUpdate')=='1') {
			faeResetNavigation();
			top.window.close();
			return false;
		}
		else {
			if (faeControlVar('PostValidation')!='') eval(faeControlVar('PostValidation'));
			return true;
		}
	}
	else {
		if (faeErrorMessage!='*') {
			fvSetClasses();
			faeAlert(faeErrorMessage);
		}
		faeResetNavigation();
		return false;
	}
}

/* Grid Link */
function faeLink(keyValues)
{
	faeResetNavigation();
	var regExp=/ /g;
	var keyVals = new Array();
	var keyList = new Array();
	if (keyValues!='') {
		keyList=faeControlVar("KeyList").split(',');  
		keyVals=keyValues.split(',');  
		for (var i=0; i<keyVals.length; i++) {
			faeSetControlVar("Key_"+keyList[i].replace(regExp,"_"),keyVals[i].replace(/&#44;/g,','));
		}
	}
	faeSetControlVar('ClearSQL','true')
	faeButtonSubmit();
}

/* Page Navigation Buttons */
function faeButtonGoToPage(p,page,styleSheet,nextPage)
{
	faeResetNavigation();
	var i;
	var regExp=/ /g;
	var keyList = new Array();
	faeSetControlVar('Page',page);
	faeSetControlVar('StyleSheet',styleSheet);
	if (faeControlVar("KeyList")!='') {
		keyList=faeControlVar("KeyList").split(',');  
		for (i=0; i<keyList.length; i++) {
			faeSetControlVar("Key_"+keyList[i].replace(regExp,"_"),'');
		}
	}
	faeSetControlVar('NextPage',nextPage);
	faeSetControlVar('ToUpdate','0');
	faeFormObject().target='';
	faeSetControlVar('AbsolutePage',p);
	faeButtonSubmit();
	}

/* Submit Form */
function faeSubmit()	
{
	if (!faeSubmitForm()) return false;
	faeSetControl();
	faeAlreadySubmitted=true;

	if (faeControlVar('Update')=='true') {
		if (faeSetDelete!='') faeSetReturnValue(faeSetDelete,'','faeDelete','false');
		faeUpdate();
		faeClearScript();
		return false;
	}
	faeClearScript();
	faeControlLoaded=false;
	return true;
}

/* Update */
function faeUpdate()
{
	faeUpdated=true;
	faeSetReturn();
	if (typeof faeFormObject().faeReplace!='undefined' && faeFormObject().faeReplace.value=='true') {
		faeFormObject().faeUpdating.value="true";
//		faeResetNavigation();
		faeSetControlVar('Layout','')
		faeSetControlVar('AbsolutePage','');
		faeSetControlVar('NextPage',faeControlVar('Page'));
		faeSetControlVar('NextPageTarget',faeFormObject().target);
		faeSetControlVar('Action','')
		faeSetControlVar('Page',faeControlVar('This'));
		faeFormObject().target='';
		faeSetControl();
		faeClearScript();
		faeFormObject().submit();
		return;
	}
	var w=120; h=30;
	var obj=document.getElementById('faeUpdateFrame');
	if (obj) obj.parentNode.removeChild(obj);
	obj = document.createElement('iframe')
	obj.setAttribute('id','faeUpdateFrame');
	obj.setAttribute('frameBorder','0');
	obj.setAttribute('scrolling','no');
	obj.setAttribute('width',w);
	obj.setAttribute('height',h);
	obj.className='updateFrame';
	if (document.all) {
		obj.style.position='absolute';
		obj.style.posTop=document.body.scrollTop+(document.body.clientHeight-h)/3;
		obj.style.posLeft=document.body.scrollLeft+(document.body.clientWidth-w)/2;
	}
	else {
		obj.style.position = 'absolute';
		obj.style.top = document.body.scrollTop+(document.body.clientHeight-h)/3+"px";
		obj.style.left = document.body.scrollLeft+(document.body.clientWidth-w)/2+"px";
	}
	document.getElementsByTagName('body')[0].appendChild(obj)
	obj.src='faeUpdate.htm';
}

/* Lookups */
function faeExplore(id,startFolder,pattern,prefix,urlSeparator,root,display,change,foldersOnly,newFolders,newFileNames,orderBy,direction,folders,names,windowName,windowParameters)
{
	var hiddenNames=new Array('id','startFolder','pattern','prefix','urlSeparator','root','display','change','foldersOnly','newFolders','newFileNames','orderBy','direction','folders','names','current');
	var hiddenValues=new Array(id,startFolder,pattern,prefix,urlSeparator,root,display,change,foldersOnly,newFolders,newFileNames,orderBy,direction,folders,names,faeFormObject().elements[id].value);
	var qs='&faePage=_explore\\\\_explore';
	for (var i=0; i<hiddenNames.length; i++) {
		qs=qs+'&'+hiddenNames[i]+'='+escape(hiddenValues[i]);
	}
	faeWindowOpen(windowName,windowParameters,faeScriptName(),qs)
}

function faeSearch(id,page,styleSheet,distinct,returnId,ids,values,targets,sources,recordsPerPage)
{
	var i, j, tmp, obj, val;
	obj=document.getElementById('faeSearchFrame_'+id);
	if (obj) {
		obj.parentNode.removeChild(obj);
		return;
	}
	var locObj=document.getElementById(id);
	if (!locObj) return;
	if (styleSheet=='') styleSheet='_search';
	var hiddenNames=new Array('faeId','faePage','faeStyleSheet','faeAction','faeDistinct','faeReturnId','faeRecordsperPage','faeClearSQL');
	var hiddenValues=new Array(id,page,styleSheet,'search',distinct,returnId,recordsPerPage,'true');
	tmp=''; 
	for (i=0; i<targets.length; i++) {
		if (i>0) tmp+=',';
		tmp+=targets[i]+'=';
		if (i<sources.length) tmp+=sources[i];
	}
	if (tmp!='') {
		hiddenNames[hiddenNames.length]='faeReturnItems';
		hiddenValues[hiddenValues.length]=tmp;
	}
	tmp=''; 
	for (i=0; i<ids.length; i++) {
		if (i>values.length) break;
		if (i>0) tmp+=',';
		if (ids[i]!='') {
			val='';
			if (values[i].substring(0,1)=='"' && values[i].substring(values[i].length-1)=='"') {
				val=values[i].substring(1,values[i].length-1);
			}
			else {
				obj=document.getElementById(values[i]);
				val=faeObjectValue(obj);
			}
			hiddenNames[hiddenNames.length]=ids[i];
			hiddenValues[hiddenValues.length]=val;
		}
	}
	var qs='';
	for (var i=0; i<hiddenNames.length; i++) {
		qs=qs+'&'+hiddenNames[i]+'='+escape(hiddenValues[i]);
	}
	faeIFrameOpen('faeSearchFrame_'+id,false,'no',50,10,faeScriptName(),qs,locObj)
}

function faeSearchReturn(id,value,returnList)
{
	var rId,rVal;
	var obj=parent.document.getElementById(id);
	faeSetObjectValue(obj,value);
	if (returnList!=null && returnList!='') {
		var rtn=returnList.split(','); 
		for (var i=0; i<rtn.length; i++) {
			if (rtn[i].indexOf('=')>0) {
				rId=rtn[i].substring(0,rtn[i].indexOf('='));
				rVal=rtn[i].substring(rtn[i].indexOf('=')+1);
				obj=parent.document.getElementById(rId);
				faeSetObjectValue(obj,rVal);
			}
		}
	}
	obj=parent.document.getElementById(faeFormObject().faeFrameId.value);
	if (obj) obj.parentNode.removeChild(obj);
}

function faeScript(id,func)
{
	var obj=document.getElementById(id);
	if (id=='' || obj==null) {
		eval(func);
	}
	else {
		var val=eval(func);
		faeSetObjectValue(obj,val);
	}
}

function faeSelectNodes(node,path)
{
	if (!node) return new Array();	//empty array
	if (path=='') return node.childNodes;	//all children
	
	var i, j, xmlNodeList, xmlTempList, tagName, searchText, attbName, attbValue, xmlRtnList;
	if (typeof path=='string') {
		var pathList = path.split('/');
	}
	else {
		var pathList = path;
	}
	var xmlNode = node;
	for (i=0; i<pathList.length; i++) {
		if (pathList[i].indexOf('[')<0) {
			tagName = pathList[i];
			searchText = '';
		}
		else {
			tagName = pathList[i].substring(0,pathList[i].indexOf('['));
			searchText = pathList[i].substring(pathList[i].indexOf('['))
		}
		xmlTempList = xmlNode.getElementsByTagName(tagName);
		xmlNodeList = new Array();
		for (j=0; j<xmlTempList.length; j++) {
			if (xmlTempList[j].parentNode==xmlNode) xmlNodeList[xmlNodeList.length] = xmlTempList[j];
		}
		if (xmlNodeList.length==0) break;
		if (searchText=='') {
			xmlNode = xmlNodeList[0];
		}
		else {
			if (searchText.substring(searchText.length-1)!=']') {
				return new Array();
			}
			searchText = searchText.substring(1,searchText.length-1);
			if (parseInt(searchText)==searchText) {
				if (parseInt(searchText)>=0 && parseInt(searchText)<xmlNodeList.length) {
					xmlNode = xmlNodeList[parseInt(searchText)];
					xmlNodeList = new Array(xmlNode);
				}
				else {
					return new Array();
				}
			}
			else {
				xmlRtnList = new Array();
				attbName = searchText.substring(1,searchText.indexOf('='));
				attbValue = searchText.substring(searchText.indexOf('=')+1);
				try {
					attbValue=eval(attbValue);
				}
				catch (e) {
				}
				for (var j=0; j<xmlNodeList.length; j++) {
					if (xmlNodeList[j].nodeType!=3 && xmlNodeList[j].getAttribute(attbName)==attbValue) {
						xmlRtnList[xmlRtnList.length]=xmlNodeList[j];
					}
				}
				if (xmlRtnList.length==0) {
					return new Array();
				}
				else {
					xmlNodeList=xmlRtnList;
					xmlNode=xmlNodeList[0];
				}
			}
		}
	}
	return xmlNodeList;
}

