

function MtTextField(textFieldId, dataCallbackFunction, title, selectMode, nullValue) {
	var t = this;
	
	this.textFieldId = textFieldId;
	this.dataCallbackFunction = dataCallbackFunction;
	this.buttonWidth = 28;
	this.title = title;
	this.selectMode = selectMode;
	this.nullValue = nullValue;
	
	var IE = document.all?true:false;
	
	
	
	function getY( oElement )
	{
		var iReturnValue = 0;
		while( oElement != null ) {
			iReturnValue += oElement.offsetTop;
			oElement = oElement.offsetParent;
		}
		return iReturnValue;
	}

	function getX( oElement )
	{
		var iReturnValue = 0;
		while( oElement != null ) {
			iReturnValue += oElement.offsetLeft;
			oElement = oElement.offsetParent;
		}
		return iReturnValue;
	}

	function clearTitle() {
		var v = t.getValue();
		if (((v==t.nullValue)||(v==null))&&(!t.selectMode)) {
			setValue([t.nullValue,""]);
		}
	}

	function setTitle() {
		var v = t.getValue();
		loadAndSetValue(v);
			if (((v==t.nullValue) || (v==null))&& (t.listElement==null)) {
				setValue([t.nullValue,t.title]);			
			}
		
	}
	
	function hideList() {
		if (t.listElement!=null) {
			var parent = t.listElement.parentNode;
			parent.removeChild(t.listElement);
			t.listElement = null;
			setTitle();
		}		
		
	}
	
	function linkOnClickHelper(v) {
		return function() {
			setValue(v);
			hideList();
		}
	}

	function setValue(v) {		
		if (t.hiddenField!=null) {
			t.hiddenField.value = v[0];
		}
		if (t.visibleField!=null) {
			t.visibleField.value = v[1];
		}
	}
	
	this.getValue = function () {
		if (t.hiddenField!=null) {
			return t.hiddenField.value;
		}
		return "";
	}
	
	function showList(ox, oy, ow, oh) {
		if (t.listElement!=null) {
			return;
		}
			
		var l = document.createElement("ul");
		l.style.top = (oy + oh + 1)+'px';
		l.style.left = ox+'px';
		l.style.width = ow+'px';		
		l.style.position = 'absolute';
		l.setAttribute('class', 'mttextfieldlist');
		l.setAttribute('className', 'mttextfieldlist');
		
		document.body.appendChild(l);
		var arr = t.dataCallbackFunction(t);
		for(var i=0; i<arr.length; i++) {
			var lnk = document.createElement('li');
			var txt = document.createTextNode(arr[i][1]);
			lnk.appendChild(txt);
			l.appendChild(lnk);
			lnk.onclick = linkOnClickHelper(arr[i]);
		}
		
		t.listElement = l;
	}
	
	function loadAndSetValue(v0) {
		var arr = t.dataCallbackFunction(t);		
		
		for(var i=0; i<arr.length; i++) {

			if(arr[i][0].toString()==v0.toString()) {				
				setValue(arr[i]);			
				return true;

			}
		}

		return false;
	}
	
	function setReadonlyState(obj, state) {
	     if (state) {
		 obj.setAttribute('readonly', state);
	     } else {
		 obj.removeAttribute('readonly');
	     }
	}
	
	function getScrollXY() {
	  var scrOfX = 0, scrOfY = 0;
	  if( typeof( window.pageYOffset ) == 'number' ) {
	    //Netscape compliant
	    scrOfY = window.pageYOffset;
	    scrOfX = window.pageXOffset;
	  } else if( document.body && ( document.body.scrollLeft || document.body.scrollTop ) ) {
	    //DOM compliant
	    scrOfY = document.body.scrollTop;
	    scrOfX = document.body.scrollLeft;
	  } else if( document.documentElement && ( document.documentElement.scrollLeft || document.documentElement.scrollTop ) ) {
	    //IE6 standards compliant mode
	    scrOfY = document.documentElement.scrollTop;
	    scrOfX = document.documentElement.scrollLeft;
	  }
	  return [ scrOfX, scrOfY ];
	}	
	
	var o = document.getElementById(textFieldId);
	if (o==null)
		return;
	

	o.setAttribute('name', '');//textFieldId+'_mttextfield');
	o.setAttribute('class', 'mttextfield'); 
	o.setAttribute('className', 'mttextfield'); 
	
	if ((selectMode!=undefined)&&(selectMode!=null))
		setReadonlyState(o, selectMode);
	

	var hd = document.createElement('input');
	hd.setAttribute('type', 'hidden');
	hd.setAttribute('name', textFieldId);
	o.parentNode.appendChild(hd);
	
	this.hiddenField = hd;
	this.visibleField = o;

	o.onfocus = clearTitle;
	
	o.onblur = setTitle;
	
	if (!selectMode) {
		o.onkeyup = function() {
			t.hiddenField.value = t.visibleField.value;
		}
	}

	function HandleClick(e) {		
		var x;
		var y;
		
		if (IE) {
			x = event.clientX;
			y = event.clientY;
			
		} else {
			x = e.clientX;
			y = e.clientY;
		}
		
		scr =  getScrollXY();
		x = x + scr[0];
		y = y + scr[1];

						
		var ox = getX(o);
		var oy = getY(o);
		var ow = o.offsetWidth;
		var oh = o.offsetHeight;
		var olx = ox + ow;
		var obx = olx - t.buttonWidth;
		var oly = oy + oh;
		
		if ((x>=obx)&&(x<olx)&&(y>=oy)&&(y<oly)) {
			if (t.listElement==null)
				showList(ox, oy, ow, oh);
			else
				hideList();
		} else {
			hideList();
		}		
	}
	

	var old = (document.onclick) ? document.onclick : function (e) {};
	document.onclick = function (e) {old(e); HandleClick(e)};	
	
	if (selectMode) {
		loadAndSetValue(o.value);
	}
	else {	
		setValue([o.value, o.value]);
	}

	setTitle();
}







