
/* Kudos to Nenad Jovanovic aka ZEN */

ComboDragon = function () {
		
	var	mC=null;
	var	iFId=null;
	var	lId=null;
	this.mainConId=mC;
	this.inputFieldId=iFId;
	this.listId=lId;
	this.selectedString=null;
	//private definition
	var timePeriods=20;
	var listCount = 10;
	var setOfAll=new Array();
	var elMainConId=null;
	var elInputFieldId=null;
	var elListId = null;
	var tempSet=new Array();
	var timeDelayPeriod=0;
	var selectedIndex=-1;
	var startIndex=0;
	var listStatus=false;
	var beforeString="";
	var mouseOver = true;
	//
	var multiRecord = true;
	this.setArray = function (a) {
		setOfAll=a;
	}
	this.allowMultiRecord = function (a) {
		
		multiRecord = a;
		
	}
	this.Assign = function (m,i,l) {
		if (elMainConId) this.detachCombo();
		mC=m;
		iFId=i;
		lId=l;
		this.mainConId=m;
		this.inputFieldId=i;
		this.listId=l;
		elMainConId=document.getElementById(m);
		elInputFieldId=document.getElementById(i);
		elListId=document.getElementById(l);
		comboDefaultEvents();
		setListStyle();
		
	}
	;
	this.detachCombo = function () {
		comboRemoveEvents();
		elListId.style.display = 'none';
		elListId = null;
		elInputFieldId = null;
		elMainConId = null;
		
	}
	/////////////////////////////////////////////////////
	replace = function (string,text,by) {
		var strLength = string.length, txtLength = text.length;
		if ((strLength == 0) || (txtLength == 0)) return string;
		var i = string.indexOf(text);
		if ((!i) && (text != string.substring(0,txtLength))) return string;
		if (i == -1) return string;
		var newstr = string.substring(0,i) + by;
		if (i+txtLength < strLength)
		newstr += replace(string.substring(i+txtLength,strLength),text,by);
		return newstr;
	}
	
	createTempSetAndShowIt = function  () {
		
		if (multiRecord) {
		var tmpst = elInputFieldId.value;
		beforeString = tmpst.substring(0,tmpst.lastIndexOf(";")+1)+' ';
		st = tmpst.substring(tmpst.lastIndexOf(";")+1,tmpst.length);
		} else {
			st = elInputFieldId.value;
		}
		st = st.replace(/^(\s)*/, '');
		tempSet = Array();
		for (var i=0;i<setOfAll.length;i++) {
			if ((setOfAll[i].toUpperCase()).indexOf(st.toUpperCase())>=0) {
				t = setOfAll[i].toUpperCase();
				//t.replace('/('+st.toUpperCase()+')/', '<b>'+st.toUpperCase()+'</b>')
				t=replace(t, st.toUpperCase(), '<b>'+st.toUpperCase()+'</b>');
				tempSet.push(t);
			}
		}
		
		scrollList();
	}
	;
	scrollList = function () {
		var std = "";
		for (var i=startIndex;(i<tempSet.length)&&(i<startIndex+listCount);i++) {
		std += 	'<div onclick=listDivClick(this) onmouseover=listDivOmMouseOver(this) '+
				'onmouseout=listDivOmMouseOut(this) '+
				'id=sel'+lId+i.toString()+'>'+tempSet[i]+'</div>';
		}
		
		elListId.innerHTML=std;
	}
	;
	markSel = function(s) {
		
		if (selectedIndex >= 0) {
			var el=document.getElementById("sel"+lId+selectedIndex.toString());
			el.style.backgroundColor='#eeeeee';
		}
		selectedIndex += s;
		if (selectedIndex<0) selectedIndex=0;
		if (selectedIndex>tempSet.length-1) {selectedIndex -= s};
		if (selectedIndex<startIndex) {
			startIndex--;
			scrollList();
		}
		if (selectedIndex>startIndex+(listCount-1)) {
			startIndex++;
			scrollList();
		}
		var el=document.getElementById("sel"+lId+selectedIndex.toString());
		el.style.backgroundColor='#F3F4E6';
	}
	;
	choseSel = function () {
		sbold = replace(tempSet[selectedIndex], '<b>','');
		sbold2 = replace(sbold, '</b>','');
		elInputFieldId.value = beforeString+sbold2;
	}
	;
	closeList = function () {
			 
		elListId.style.display = "none";
		selectedIndex = -1;
		startIndex = 0;
		listStatus = false;
		
	}
	;
	showList = function () {
		
		elListId.style.display = "block";
		selectedIndex = -1;
		startIndex = 0;
		createTempSetAndShowIt();
		listStatus = true;
		
	}
	;
	showTimeOut = function () {
		
		timeDelayPeriod--;	 
		if (timeDelayPeriod==0) {
			createTempSetAndShowIt();
		}
		  else 
		    setTimeout("showTimeOut()", 10);	
		    
	}
	;
	comboInputKeyUp = function (event){
		
		if (!listStatus) showList();
		switch (event.keyCode) {
			case 40:
					break;
			case 38:
					break;
			case 13:closeList();
					break;
			default:
					if (!listStatus) showList();
					selectedIndex = -1;
					startIndex = 0;
					if (timeDelayPeriod == 0) {
						timeDelayPeriod=timePeriods;
						showTimeOut();
					} else
						timeDelayPeriod = timePeriods;
		}
		
	}
	;
	comboInputKeyPress = function(event) {
		
		switch (event.keyCode) {
			case 40:markSel(1);
					choseSel();
					break;
			case 38:markSel(-1);
					choseSel();
					break;
		}
		
		
	}
	;
	comboMainFocus = function () {
		
		//showList();
		
	}
	;
	comboMainBlur = function () {

		//closeList();	
		if (!mouseOver)
		  closeList()
		  else elInputFieldId.focus();
		  
	}
	;
	comboMainMouseOver = function () {
		mouseOver = true;
		
	}
	;
	comboMainMouseOut = function () {
		mouseOver = false;
		
	}
	;
	listDivClick = function (el) {
		tmp = el.innerHTML;
		sbold = replace(tmp, '<b>','');
		sbold2 = replace(sbold, '</b>','');
		elInputFieldId.value = beforeString+sbold2;
		closeList();
	}
	;
	documentClick = function () {
		if (!mouseOver)
		  closeList();
	}
	;
	/////////////////////////////////////////////////////
	comboDefaultEvents = function () {
		
		ComboDragon.addEvent(elInputFieldId,'focus',comboMainFocus);
		ComboDragon.addEvent(elInputFieldId,'blur',comboMainBlur);
		ComboDragon.addEvent(elInputFieldId,'keyup',comboInputKeyUp);
		ComboDragon.addEvent(elInputFieldId,'keydown',comboInputKeyPress);
		ComboDragon.addEvent(elMainConId,'mouseover',comboMainMouseOver);
		ComboDragon.addEvent(elMainConId,'mouseout',comboMainMouseOut);
		ComboDragon.addEvent(document,'click',documentClick);
		 
	}
	;
	comboRemoveEvents = function () {
		
		ComboDragon.removeEvent(elInputFieldId,'focus',comboMainFocus);
		ComboDragon.removeEvent(elInputFieldId,'blur',comboMainBlur);
		ComboDragon.removeEvent(elInputFieldId,'keyup',comboInputKeyUp);
		ComboDragon.removeEvent(elInputFieldId,'keydown',comboInputKeyPress);
		ComboDragon.removeEvent(elMainConId,'mouseover',comboMainMouseOver);
		ComboDragon.removeEvent(elMainConId,'mouseout',comboMainMouseOut);
		ComboDragon.removeEvent(document,'click',documentClick);
		
	}
	;
	setListStyle = function () {
		with (elListId.style) {
			display="none";
			borderStyle="ridge";
			borderColor="#c0c0c0";
			paddingLeft="2px";
			borderWidth="1px";
			margin="0";
			position = "absolute";
			color = "#000000";
			backgroundColor="#EEEEEE";
			zIndex=1;
			fontSize = '11px';
		}
		elInputFieldId.autocomplete = "off"
	}
	;
	listDivOmMouseOver = function(el) {
		el.style.backgroundColor = '#F3F4E6';
	}
	;
	listDivOmMouseOut = function (el) {
		el.style.backgroundColor = '#EEEEEE';
	}
	;
	
}
;
ComboDragon.addEvent = function(el, evname, func) {
	if (el.attachEvent) { // IE
		el.attachEvent("on" + evname, func);
	} else if (el.addEventListener) { // Gecko / W3C
		el.addEventListener(evname, func, true);
	} else {
		el["on" + evname] = func;
	}
}
;
ComboDragon.removeEvent = function(el, evname, func) {
	if (el.detachEvent) { // IE
		el.detachEvent("on" + evname, func);
	} else if (el.removeEventListener) { // Gecko / W3C
		el.removeEventListener(evname, func, true);
	} else {
		el["on" + evname] = null;
	}
};

function ec() {
	var ct = document.getElementById(ec.arguments[0]);
	if (ct.className=="tact") {
		return false;
	}
	var ce = document.getElementById(ec.arguments[1]);
	ce.style.display = "block";
	ct.className = "tact";
	ce.focus();
	
	for (var i=2; i<ec.arguments.length; i++) {
		var elementTabId = ec.arguments[i]+'t';
		//alert(elementTabId);
		var element = document.getElementById(ec.arguments[i]);
		var elementTab = document.getElementById(elementTabId);
		var element = document.getElementById(ec.arguments[i]);
		element.style.display = "none";
		elementTab.className = "tnact";
	}
	return false;
}