var AutoComplete_Timer = null;
var AutoComplete = [];
var FORMNAME = 'qEditForm';
var AutoFieldID = 'AutoField';

function AutoComplete_Init() {
}

function AutoComplete_KeyDown(FieldID, e) {
	AutoComplete_Init(FieldID);

	var KeyCode = e.keyCode ? e.keyCode : e.which;
	var FRAME = window.frames['AutoComplete_' + FieldID];
	if(!AutoComplete[FieldID]) AutoComplete[FieldID] = new Object();
	if(AutoComplete[FieldID].ActiveItem + '' == 'undefined') AutoComplete[FieldID].ActiveItem = -1;


  var ActiveItem = AutoComplete[FieldID].ActiveItem;
	switch(KeyCode) {
	case 13:
	  var ThisItem = FRAME.document.getElementById(AutoFieldID + ActiveItem)
		if(ThisItem) ThisItem.onclick();
		var IFrame = document.getElementById('AutoComplete_' + FieldID);
		return (IFrame.style.display=='block' ?  false : true);
	case 38:
	  var ThisItem = FRAME.document.getElementById(AutoFieldID + ActiveItem)
		if(ThisItem) ThisItem.style.backgroundColor='';
		ActiveItem--;
		if(ActiveItem < 0) ActiveItem = 0;
		var ThisItem = FRAME.document.getElementById(AutoFieldID + ActiveItem)
		if(ThisItem) {
		  ThisItem.style.backgroundColor='ButtonFace';
		  MyScrollIntoView(FRAME, ThisItem, ActiveItem);
		}
		AutoComplete[FieldID].ActiveItem = ActiveItem;
		return false;
	case 40:
	  var ThisItem = FRAME.document.getElementById(AutoFieldID + ActiveItem)
		if(ThisItem) ThisItem.style.backgroundColor='';
		ActiveItem++;

		var ThisItem = FRAME.document.getElementById(AutoFieldID + ActiveItem)

		if(!ThisItem) ActiveItem--;

		var ThisItem = FRAME.document.getElementById(AutoFieldID + ActiveItem)
		if(ThisItem) {
		  ThisItem.style.backgroundColor='ButtonFace';
		  MyScrollIntoView(FRAME, ThisItem, ActiveItem);
		} else {
			//alert('ActiveItem:' + ActiveItem);
		}
		AutoComplete[FieldID].ActiveItem = ActiveItem;
		return false;
	default:
		return true;
	}
}


function MyScrollIntoView(FRAME, Elem, Item) {
  var Top = Elem.offsetTop+Elem.scrollHeight;
  var cHeight = FRAME.document.body.clientHeight;
  if(Top > cHeight) {
    FRAME.scrollTo(0, Top - cHeight);
  } else {
    FRAME.scrollTo(0,0);
  }
}

function AutoComplete_Show(FieldId, e, URL) {
	var KeyCode = e.keyCode ? e.keyCode : e.which;
	var URL = (URL+'' == 'undefined' ? '' : URL);
	switch(KeyCode) {
	case 13:
	case 37:
	case 38:
  case 39:
	case 40:
	case 9:
		return false;
  }
  var FieldValue = document.forms[FORMNAME]['V_' + FieldId].value;
  if(FieldValue == '') return;
	if(AutoComplete_Timer) window.clearTimeout(AutoComplete_Timer);
	var Expr = "AutoComplete_List('" + FieldId + "','" + URL + "');"
	//document.title = Expr ;
	AutoComplete_Timer = window.setTimeout(Expr, 200);
	AutoComplete[FieldId + '_Selected'] = false;
	// create the variable to hold information, if not exists
	if(!AutoComplete[FieldId]) AutoComplete[FieldId] = new Object();
	AutoComplete[FieldId].IsActive = false;
	try {
		AutoComplete_ModifyShow(FieldId);
	} catch(Exception) {
		// nothing
	}
}

function AutoComplete_URL(FieldID, URL) {
	var FieldValue = '';
	URL = (URL+'' == 'undefined' ? '' : URL);
	var rURL = URL == ''? escape(document.location.href) : escape(URL);
	rURL = rURL.replace(/\//gi,'~');
	var Path = window.BaseURL ? window.BaseURL : '../';
	if(document.forms[FORMNAME]) FieldValue = document.forms[FORMNAME]['V_' + FieldID].value;
  var URL = Path + '_ICEDLL/AutoComplete_getList.asp' +
		'?Field=' + escape(FieldID) +
		'&search=' + escape(FieldValue) +
		'&url=' + rURL +
		'&R=' + Math.random();
	try {
		URL = AutoComplete_ModifyURL(URL, FieldID)
	} catch(e) {
		//alert(e.message);
	}
	return URL;

}

function AutoComplete_List(FieldID, URL) {
  if(AutoComplete_Timer) window.clearTimeout(AutoComplete_Timer);
  if(document.forms[FORMNAME]) document.forms[FORMNAME][FieldID].value = '';
  var FRAME = window.frames['AutoComplete_' + FieldID];
  FRAME.document.body.style.margin = '0px';
	//load items through Ajax
  var req = new XMLHttpRequest();
  if (!req) return;
  req.abort(); //abort any previous request send
  var URL = AutoComplete_URL(FieldID, URL);

  //open(URL);
  try {
    req.open('GET', URL, true);
    req.onreadystatechange=function() {
      if(req.readyState==4) AutoComplete_Content(FieldID, req, URL);
    }
    req.send(null);
	} catch(e) {
		window.alert(e.message);
	}
}

function AutoComplete_Hide(FieldID) {
	if(AutoComplete_Timer) window.clearTimeout(AutoComplete_Timer);
	AutoComplete_Timer = null;
	window.setTimeout("document.getElementById('AutoComplete_" + FieldID + "').style.display='none'",200);
}

function AutoComplete_Content(FieldID, req, URL) {
	var ReqText = req.responseText;
	if(req.status != 200) {
		alert(
		'HTTP Return error code: ' + req.status + '\n' +
		'URL: ' + URL + '\n\n' +
		req.statusText);
		return;
	}

	var IFrame = document.getElementById('AutoComplete_' + FieldID);
	var FRAME = window.frames['AutoComplete_' + FieldID];
	var FieldValue = document.forms[FORMNAME]['V_' + FieldID].value;
	FieldValue = FieldValue.replace('\\', '\\\\');
	if(document.layers) {
	  FieldValue = FieldValue.replace('a', '\\a');
	  FieldValue = FieldValue.replace('d', '\\d');
	  FieldValue = FieldValue.replace('g', '\\g');
	  FieldValue = FieldValue.replace('i', '\\i');
	  FieldValue = FieldValue.replace('m', '\\m');
	  FieldValue = FieldValue.replace('.', '\\.');
	}
	var RExp = new RegExp("(" + FieldValue + ")", "gim");
	if(ReqText == 'EOF') {
		IFrame.style.display = 'none';
		return;
	}
	var OutText = '';
	var Rows = ReqText.split('\n');

	for(var i = 0 ; i < Rows.length; i++) {
		Rows[i] = Rows[i].replace('\r', '');
		var Cols = Rows[i].split('|');
		var fID = Cols[0];
		var fName = Cols[1];
		var ShowName = fName;
		if(fName) ShowName = fName.replace(RExp, '<b>$1</b>');
		//alert(ShowName);
		OutText += '<p id="' + AutoFieldID + i + '"\n' +
		'" style="border-bottom:1px solid ButtonFace; cursor:pointer;margin:0px; padding:2px; font-family: Verdana; font-size:10px;"\n' +
		'onMouseover="this.style.backgroundColor=\'ButtonFace\'"\n'+
		'onMouseOut="this.style.backgroundColor=\'\'"\n'+
		"onClick=\"parent.AutoComplete_Click('" + escape(FieldID) + "','" +
		fID + "','" + fName + "');\"" +
		'>' + ShowName + '</P>\n'
	}

	FRAME.document.body.innerHTML = OutText;
	//alert(OutText);
	IFrame.style.display = 'block';
	AutoComplete[FieldID].IsActive = true;
	AutoComplete[FieldID].ActiveItem = -1;
}

function AutoComplete_Click(FieldID, ID,Value) {
	var IDField    = document.forms[FORMNAME][FieldID];
	var ValField = document.forms[FORMNAME]['V_' + FieldID];
	var IFrame = document.getElementById('AutoComplete_' + FieldID);
	var MField = document.forms[FORMNAME]['M_' + FieldID];

	//If multi mode is enabled, then add this item to the list
	if(MField) {
		MField.options.length = MField.options.length+1
		var Option = MField.options[MField.options.length-1];
		Option.value = ID;
		Option.text = Value;
		Option.selected = true;
		IDField.value = "";
		ValField.value = "";
		ValField.focus();
	} else {
		IDField.value = ID;
		ValField.value = Value;
	}

	AutoComplete_Hide(FieldID);
	AutoComplete[FieldID+ '_Selected'] = true;
	try{
		AutoComplete_ModifyClick(FieldID, ID,Value)
	} catch(e) {
		// no error generated
	}
}

function AutoComplete_Remove(FieldID) {
	var MField = document.forms[FORMNAME]['M_' + FieldID];
	for(var i = MField.options.length; i >= 1; i--) {
		if(MField.options[i-1].selected) MField.remove(i-1);
	}

	try{
		AutoComplete_ModifyRemove(FieldID)
	} catch(e) {
		// no error generated
	}	
}

function AutoComplete_Find(FieldID, theURL) {
	var Path = window.BaseURL ? window.BaseURL : '../';	
	var rURL = (theURL+'' == 'undefined' ? escape(document.location.href) : escape(theURL));	
	rURL = rURL.replace(/\//gi,'~');

	var URL = Path + '_ICEDLL/AutoComplete_Find.asp' +
	'?FieldID=' + FieldID  +
	'&URL=' + rURL;

	var features = "height=600,width=800,location=0,menubar=0,resizable=1,toolbar=0"
	var MyWin = window.open(URL, 'MyWin01',features);
	MyWin.focus();
}

function AutoComplete_IsMultiMode(FieldID) {
	var MField = document.forms[FORMNAME]['M_' + FieldID];
	if(MField) return true; else  return false;
}

