function fmRefreshWindow() { 
	window.location.href= window.location.href; 
}

function fmGetFormControl(elem) {
	if (elem == null) elem= event.srcElement;
  while (elem != null) {
		if (elem.className == "FormContainer") return elem;
		if (elem.tagName.toUpperCase() == "BODY") return null;
		if (elem.tagName.toUpperCase() == "FORM") return null;
	  elem= elem.parentElement;
  }
}
function fmQuickDesignForm(table, form) {
	var url= fmCommonPath + "../FormBuilder/BuilderForm.aspx?t=" + table + "&f=" + form;
	openStdWin(url, "FormBuilder", 820, 550);	
}

function ListItem(val, txt) {
	this.value= val;
	this.text= txt;
}

function Util_GetFieldValue(o, onlyIDForLookup) {
	if (o == null) return "";
	switch (o.crmType) {
		case "lu" : { 
			if (o.value == "") return ""; 
			if (onlyIDForLookup) return o.value.substring(0, o.value.indexOf("|")); 
			break;
		}
		case "chbox" : return (o.checked) ? "1" : "0";
	}
	if (o.returnValue) return o.returnValue;
	return Trim(o.value);
}
function Util_SetFieldValue(o, value) {
	if (o == null) return;
	var ctype= o.crmType;
	try {
		if (o.className == "num") ctype= "num";
		switch (ctype) {
			case "chbox": o.checked= (value == "1"); break;
			case "sel":
				o= o.parentElement.parentElement.parentElement.parentElement.parentElement;
				o.setValue(value);
				break;
			case "num": o.setValue(value); break;
			case "dateTemplate": o.setValue(value); break;
			default:
				if (typeof(o.returnValue) != "undefined") o.returnValue= value;
				if (typeof(o.value) != "undefined") o.value= value;
				break;
		}
	} catch (e) {
		alert(name + "\n\n" + e.description);
	}
}

// FORM UTILS 

function BuildRawXmlField(context, oXml, xnData, o, allowEmpty) {
	var e= o.name;
	var s= Util_GetFieldValue(o, false);
	// allowEmpty:
	// true  - for form context 
	// false - for editable context on required field
	if (s == "" && !allowEmpty) return null;
	var a= "";

	var xn= null;
	var type= "text";
	
	if (o.crmType == "lu") {
		xn= XML_GetOrCreate(oXml, xnData, e);
		if (s != "") {
			var xnItem= oXml.createElement("item");
			var lp= new LookupParam();
			lp.Parse(s);
			xnItem.setAttribute("type", lp.type);
			xnItem.setAttribute("name", lp.text);
			xnItem.text= lp.value;
			xn.appendChild(xnItem);
		}
	}	else {
		if (o.crmType == "chbox") s= (s == "1") ? "true" : "false";
		xn= oXml.createElement(e);
		if (o.crmType == "sel") xn.setAttribute("name", o.value);
		if (s != "") xn.text= s;
		xnData.appendChild(xn);
	}

	return xn;
}

function GetContainerDataElements(context, isform) {
	if (isform == null) isform= true;
	var elements= new Array();
	var i, o;
	var mas= context.getElementsByTagName("INPUT");
	for (i= 0; i < mas.length; i++) {
		o= mas[i];
		if (o.name == "" || o.className == "unsafe" || o.className == "rad" || o.className == "image" || (isform && o.context == "grid")) continue;
		elements.push(o);
	}
	var mas= context.getElementsByTagName("TEXTAREA");
	for (i= 0; i < mas.length; i++) {
		o= mas[i];
		if (o.name == "" || (isform && o.context == "grid")) continue;
		elements.push(o);
	}
	return elements;	
}

function GetControlDataContext(o) {
	while (o.className != "FormContainer" && o.tagName != "BODY") {
		o= o.parentElement;
	}
	return (o.className == "FormContainer") ? o : null;
}

function XML_GetOrCreate(xd, xnParent, name) {
	var xn= xnParent.selectSingleNode(name);
	if (xn == null) {
		xn= xd.createElement(name);
		xnParent.appendChild(xn);
	}
	return xn;
}

function ExtractBindingFormData(_form, bindings) {
	if (bindings == null || bindings == "") return "";
	if (_form == null) {alert("The data context not found.");return "";}
	var params= "";
	var l= ConvertBindingToArray(bindings);
	for (var i= 0; i < l.length; i++) {
		val= _form.getFieldValueByName(l[i].From, null, true);
		if (val != "") {
			if (params != "") params+= ",";
			params+= l[i].To + ":" + val;
		}
	}
	// [[to]:[val]],[...]
	return params;
}
function ConvertBindingToArray(bindings) {
	var bmas= bindings.split(",");
	var mas, bi;
	var l= new Array();
	for (var i= 0; i < bmas.length; i++) {
		mas= bmas[i].split(":");	
		bi= new Object(); bi.From= mas[0]; bi.To= mas[1];
		l[i]= bi;
	}
	return l;
}

// new 2006-01
function GetCachedSetting(settingName, defaultValue) {
	if (window.top.oSettingsCache != null) {
		var stateValue= window.top.oSettingsCache[settingName];
		if (stateValue != null) return stateValue;
	}
	return defaultValue;
}

function SetCachedSetting(settingName, stateValue) {
	if (window.top.oSettingsCache == null) window.top.oSettingsCache= new Object();
	window.top.oSettingsCache[settingName]= stateValue;
}
//