function LookupArgsClass() {
	this.items= null;
}

//	lookupField: optional field to bind values
//	lookupStyle: multi/single
//	lookupClass: Lookup objects Set Name
//	lookupobjects: list of lookup objects that will be show in drop down
//	lookupBrowse: 1/0 -- browse or search
//
function LookupObjects(lookupField, lookupStyle, lookupClass, lookupobjects, lookupBrowse, bindings, additionalParams, showNew, showProp) {	
	if (lookupStyle == "") lookupStyle= "single";
	var url;
	url= fmDataViewerPath + "Lookup/Lookup";
	url += lookupStyle;
	url += ".aspx";
	url += "?l=" + lookupClass;
	
	if (lookupobjects != null && lookupobjects != "") url+= "&os=" + lookupobjects;
	
	if (additionalParams) url+= "&" + additionalParams;
	if (showNew) url += "&ShowNewButton=" + showNew;
	if (showProp) url += "&ShowPropButton=" + showProp;
	if (bindings) url += "&_data=" + bindings;

	var args= new LookupArgsClass();
	if (lookupField != null) {		
		args.items= lookupField.getElementsByTagName("SPAN");
	}
	var features= BuildFeatures(lookupStyle);
	if (features == null)	return;
	var lookupItems= window.showModalDialog(url, args, features);
	
	if (lookupItems != null && lookupField != null) {
		BuildField(lookupField, lookupItems);
	}
	
	return lookupItems;	
}


function BuildFieldSpan(lookupField, lookupItems) {
	var html= "";
	var len= lookupItems.items.length;
	for (var i= 0; i < len; ++i) {
		var item= lookupItems.items[i];
		html+= (i > 0 ? " " : "");

		var e= parent.document.createElement("SPAN");
		e.className= "lui";
		e.oid= item.id;
		e.otype= item.type;
		e.innerHTML= item.html;
		e.onclick= "fmOpenLookup();";
		
		html += e.outerHTML;
		if (lookupField.className == "mlu") html+= "<br/>";
	}
	if (html.length == 0) {
		html= "&nbsp;";
	}
	return html;
}

function BuildField(lookupField, lookupItems) {	
	lookupField.innerHTML= BuildFieldSpan(lookupField, lookupItems);
}

function BuildFeatures(lookupStyle) {
	var height;
	var width;
	
	switch (lookupStyle) {
		case "multi":
			height= "460px";
			width= "600px";
			break;
		case "single":
			height= "488px";
			width= "500px";
			break;
		default:
			alert("unknown lookup style - your properties xml is probably not set properly - " + lookupStyle);
			return null;
	}
	
	return "dialogHeight:" + height + " ;dialogWidth:" + width + ";resizable:yes;center:yes;status:no;help:no;scroll:no;";
}

function ClearField(dataInputs) {
	for (var di= 0; di < dataInputs.length; ++di) {
		dataInputs[di].value= "";
	}
}

function BindField(lookupItems, dataInputs) {
	ClearField(dataInputs);

	var html= "";
	var len= lookupItems.items.length;

	for (var i= 0; i < len; ++i)
	{
		var item= lookupItems.items[i];
		
		//	look through the data inputs which are bound to this
		//	lookup and set the id where the type matches the input type		
		//
		for (var di= 0; di < dataInputs.length; ++di)
		{
			var input= dataInputs[di];
			
			if (input.otype == item.type)
			{
				input.value= item.id;
			}
			else
			{
				input.value= "";
			}
		}
	}
}
// LOOKUP PARAM
//
function LookupParam(_val, _type, _text) {
	this.value= _val;
	this.type= _type;
	this.text= _text;
	
	this._separator= "|";
	
	this.Parse= LookupParam_Parse;
	this.GenerateData= LookupParam_GenerateData;
}

function LookupParam_Parse(_data) {
	if (_data == null || _data == "") return;
	this.value= _data;
	if (_data.indexOf(this._separator) == -1) return;
	var subitems= _data.split(this._separator);
	if (subitems.length == 3) {
		this.value= subitems[0];
		this.type= subitems[1];
		this.text= subitems[2];
	}
}

function LookupParam_GenerateData() {
	if (this.value == null || this.value == "") return;
	return (this.value + this._separator + this.type + this._separator + this.text);
}

//	open a lookup item EDIT/PROPERTIES dialog
//
function fmOpenLookup() {
	var o= event.srcElement;
	if (o.tagName != "SPAN") return;
	var handlermode= o.parentElement.handlermode;
	if (handlermode == "off") return;
	var lSetName= o.parentElement.lookupclass;
	var lType= o.otype;
	var lID= o.oid;
	if (lSetName == undefined) return;
	var url= fmCommonPath + "../DataViewer/Lookup/LookupFormRunner.aspx?fm=link&l=" + lSetName + "&o=" + lType + "&id=" + lID;
	if (handlermode == "readonly") url+= "&readonly=1";
	var res= openStdDlg(url, null, 700, 500);
	if (res != undefined && res != null) {
		o.replaceAdjacentText("beforeEnd", res.name);
		var oLookup= o.parentElement.parentElement.nextSibling.firstChild;
		if (oLookup.tagName != "IMG") return;
		var oEvent= window.document.createEventObject();
		var lookupItems= new Object();
		lookupItems.items= new Array();
		lookupItems.items[0]= res;
		oEvent.result= lookupItems;
		oLookup.FireAfterSelectEvent(oEvent);
	}
}
function fmOnLookupDataInput() { var o= event.srcElement; if (!IsNull(o.master)) o.master.checkEnteredValue(); }
function fmOnSuggestion(o) { if (!IsNull(o.master)) o.master.setSelectedValue(); }