var activeRecord;
pageUpActiveRecord = 0
function searchRecord(mySearchBox,dso,maxRows,fieldDisplay,setDefaultSource,setDefaultDestination){
	searchBy = mySearchBox.id.substring(6,7);
	fieldName = mySearchBox.id.substring(8,mySearchBox.id.length);
	limit2List = document.getElementById("searcha_" + fieldName).inlist;
	switch (event.keyCode){
		case 38:// UP
			if (mySearchBox.value != "" & limit2List == "0"){
				activeRecord = upActiveRecord; //--;
				searchStr(mySearchBox,fieldName,maxRows,searchBy,dso,fieldDisplay);
			}
			break;
		case 40:// DOWN
			if (mySearchBox.value != "" & limit2List == "0"){
				activeRecord ++;
				searchStr(mySearchBox,fieldName,maxRows,searchBy,dso,fieldDisplay);
			}
			break;
		case 33:// PAGE UP
			if (mySearchBox.value != "" & limit2List == "0"){
				if(activeRecord <= pageUpActiveRecord){activeRecord = 0;}
				else{activeRecord = pageUpActiveRecord;}
				searchStr(mySearchBox,fieldName,maxRows,searchBy,dso,fieldDisplay);
			}
			break;
		case 34:// PAGE DOWN
			if (mySearchBox.value != "" & limit2List == "0"){
				pageUpActiveRecord = activeRecord;
				activeRecord = pageDownActiveRecord;
				searchStr(mySearchBox,fieldName,maxRows,searchBy,dso,fieldDisplay);
			}
			break;
		case 35:// END
			if (mySearchBox.value != "" & limit2List == "0"){
				activeRecord = pageDownActiverecord;
				searchStr(mySearchBox,fieldName,maxRows,searchBy,dso,fieldDisplay);
			}
			break;
		case 36:// HOME
			if (mySearchBox.value != "" & limit2List == "0"){
				activeRecord = 0;
				searchStr(mySearchBox,fieldName,maxRows,searchBy,dso,fieldDisplay);
			}
			break;
		case 45:// INSERT
			setRecord(activeRecord,fieldName,dso,fieldDisplay);
			clearResult(fieldName);
			setDefault(setDefaultSource,setDefaultDestination);
			break;
		case 17:// CTRL = INSERT
			setRecord(activeRecord,fieldName,dso,fieldDisplay);
			clearResult(fieldName);
			setDefault(setDefaultSource,setDefaultDestination);
			break;
		case 46: //DELETE
			clearSearch(fieldName);
			clearResult(fieldName);
			document.getElementById("searcha_" + fieldName).inlist = "0";
			setDefaultToNull(setDefaultDestination);
			break;
		case 9://get focus
			break;
		case 16://get focus
			break;
		case 27: //ESC
			break;
		default:
			activeRecord = 0;
			tmp = mySearchBox.value;
			clearSearch(fieldName);
			mySearchBox.value = tmp;
			searchStr(mySearchBox,fieldName,maxRows,searchBy,dso,fieldDisplay);
	}
}

function setDefault(sourceId,destinationName){
	if (sourceId == ''){return;}
	tmp = eval('dsp_form.' + destinationName);
	tmp.value = document.getElementById(sourceId).value;
}

function setDefaultToNull(destinationName){
	if (destinationName == ''){return;}
	tmp = eval('dsp_form.' + destinationName);
	tmp.value = '';
}	

function clearSearch(groupName){
	var searchZone = document.getElementsByTagName('input');
	for (i = 0; i<searchZone.length; i++){
		if (searchZone[i].group == groupName){
			searchZone[i].value = "";
		}
	}
}

function clearResult(groupName){
var searchZone = document.getElementsByTagName('span');
	for (i = 0; i<searchZone.length; i++){
		if (searchZone[i].group == groupName){
			searchZone[i].innerHTML = "";
		}
	}
}

function setRecord(row,fieldName,dso,fieldDisplay){
	convertNum = "abcdefghijklmnopqrstuvwxyz";
	dso.recordset.moveFirst();
	i = 0;
		while (!dso.recordset.EOF){
			i++;
			if (i == row){
				for (i = 0; i<fieldDisplay.length; i++){
					//if(fieldDisplay.charAt(i)=="y"){//Show result
						document.getElementById("search" + convertNum.charAt(i) + "_" + fieldName).value = dso.recordset(convertNum.charAt(i));
					//}
				}
				document.getElementById("searcha_" + fieldName).inlist = "1";
				break;
			}
			dso.recordset.movenext();
		}
	return"";
}

function searchStr(mySearchBox,fieldName,maxRows,searchBy,dso,fieldDisplay){
	searchString = mySearchBox.value.toUpperCase();
	validRecord = 0;
	convertNum = "abcdefghijklmnopqstuvwxyz";
	document.getElementById("searcha_" + fieldName).inlist = "0";
	for (i = 0; i<fieldDisplay.length; i++){
		if(fieldDisplay.charAt(i)=="y"){//Set result to ""
			tmp = eval("result" + convertNum.charAt(i) + "_" + fieldName);
			tmp.innerHTML = "";
		}
	}
	if (searchString == ""){return;}
	dso.recordset.moveFirst();
	i = 0;
	while (!dso.recordset.EOF){
		i++;
		if (validRecord >= maxRows){
			break;
		}
		recordString = dso.recordset(searchBy).value.toUpperCase();
		if (recordString == searchString){document.getElementById("searcha_" + fieldName).inlist = "1";}
		if (searchString.charAt(0) == "*"){
			condition = (recordString.indexOf(searchString.substring(1,searchString.length))>=0);
		}
		else{
			condition = (recordString.substring(0,searchString.length) == searchString)
		}
		if (condition){
			if (i >= activeRecord){
				validRecord ++;
				if (validRecord == 1){// the first valid record is the active record
					activeRecord = i;	
					for (j = 0; j<fieldDisplay.length; j++){
						if(fieldDisplay.charAt(j)=="y"){//Show result
							tmp = eval("result" + convertNum.charAt(j) + "_" + fieldName);
							tmp.innerHTML = "<b>" + dso.recordset(convertNum.charAt(j)) + "</b><br>";
						}
					}
				}
				else{
					pageDownActiveRecord = i;
					for (j = 0; j<fieldDisplay.length; j++){
						if(fieldDisplay.charAt(j)=="y"){//Show result
							tmp = eval("result" + convertNum.charAt(j) + "_" + fieldName);
							tmp.innerHTML += dso.recordset(convertNum.charAt(j)) + "<br>";
						}
					}
				}
			}
			else{
			// Because search result is not always a block of adjacent records,
			// when I go up, new activeRecord is not activeRecord - 1 
			// BUT new activeRecord = the last activeRecord from prevuous search
				upActiveRecord = i;
			}
			
		}
		dso.recordset.movenext();
	}
}
