//version 3.6.3601: 2007-02-01
//fixed multi-select combo in firefox

var rowCount = 5;
var currentState = new Array();
//state array
/*
0 = field
1 = operator
2 = text entry
3 = selected index
4 = thes 1/0
5 = ? historical
6 = mutipleindexes
7 = text entry b
*/

var defaultState = new Array(0, 0, '', 0, 0, 0, '', '');

//start the front of the state arrays
var currentLayerHeight = new Array(0);
var currentLayer = new Array('');

// make a call to set up the middle of the arrays dependant on how many rows
resetState();

// finish of the arrays for the button and the info layers
currentLayerHeight[rowCount + 1] = 50;
currentLayerHeight[rowCount + 2] = 50;
currentLayer[rowCount + 1] = 'as_buttons';
currentLayer[rowCount + 2] = 'noresult_info';

var startingPos = 10;
var leftPos = 10;
var noresult_info_Height = 100;
var truncate_text_at = 28;
var loading = false;

function f_getcookieval(offset){
	var endstr = document.cookie.indexOf (";", offset);
	if (endstr == -1) {
		endstr = document.cookie.length;
	}
	return unescape(document.cookie.substring(offset, endstr));
}

function f_getcookie(name){
	var arg = name + "=";
	var alen = arg.length;
	var clen = document.cookie.length;
	var i = 0;
	while (i < clen) {
		var j = i + alen;
		if (document.cookie.substring(i, j) == arg) {
			return f_getcookieval (j);
		}
		i = document.cookie.indexOf(" ", i) + 1;
		if (i == 0) {
			break;
		}
	}
	return '';
}

function f_setcookie (name, value, expires){
	document.cookie = name + "=" + escape (value) + ((expires == null) ? "" : ("; expires=" + expires.toGMTString()));
}

function resetState(){
	for(var i = 1;i<=rowCount;i++){
		currentState[i] = new Array();
		for(var j = 0;j<8;j++){
			currentState[i][j] = defaultState[j];
		}
		currentLayerHeight[i] = 50;
		currentLayer[i] = 'text_row';
	}
	return true;
}

function isInArray(arrayIn,toFind) {
	for(var i = 0;i<=arrayIn.length;i++){
		if (arrayIn[i]==toFind){
			return i;
		}
	}
	return -1;
}

function setState(row, col, value){
	var lPos
	var lSel
	if(isNaN(value)){
		lPos = value.indexOf('#',1);
	}else{
		lPos = 0
	}
	if(lPos > 0){
		value = value.substr(0, lPos);
	}

	if(col == 2 || col == 7){
		if(value=='posneg'){
			value = currentState[row][col];
		}
		if(value.length >0){
			if(!isNaN(value)){
				var tVal = parseInt(value);
				var sName = "posneg_row";
				if(col == 7){
					sName = "posnegb_row";
				}
				var oPosneg = getObject2('d_'+sName + row.toString());
				if(oPosneg != null && oPosneg.style.display!="none"){
					tVal = Math.abs(tVal);
					if(oPosneg.selectedIndex == 1){
						tVal = tVal * -1 //for bc dates
					}
					value = tVal.toString();
				}
			}
		}
	}

	if(col<2){
		var cValue = currentState[row][col];
		if(cValue != value){
			currentState[row][col] = value;
			var startval = 0;
			if(col==1){
				startval = 3;
			}else{
				startval = col + 1;
			}
			for(var i=startval;i<currentState[row].length;i++){
				currentState[row][i] = defaultState[i];
			}
			Populate(row);
		}
	}else{
		currentState[row][col] = value;
	}
	return;
}

function storeMultiple(oMultiSelect, row){
	var lPos = 0;
	var lSel = 0;
	var value = "";
	multiVals = '';
	thisOptions = oMultiSelect.options;
	for(var i=0;i<thisOptions.length;i++){
		if(thisOptions[i].selected){
			value = thisOptions[i].value;
			if(isNaN(value)){
				lPos = value.indexOf('#',1);
			}else{
				lPos = 0
			}
			if(lPos > 0){
				value = value.substr(0, lPos);
			}
			if(multiVals.length > 0){
				multiVals += ';';
			}
			multiVals += value;
		}
	}
	setState(row, 6, multiVals);
	return;
}

function init(curState,reset) {
	var lastsearch=f_getcookie("lastadvsearch"+document.getElementById("frm").profile.value);
	if (lastsearch.length!=0 && reset!=1){
		openCSV(lastsearch);
	}else{
		openCSV(curState);
	}

	for(var i=1;i<=rowCount;i++){
		Populate(i);
	}
	return;
}

function Populate(row){
	var sLayers2Show = "";
	var oLayer = null;
	var aLayerList = new Array('d_combo_row','d_text_row','d_posneg_row','d_textb_row','d_posnegb_row','d_multiple_row','d_thes_row');

	if(loading){
		return false;
	}
	loading = true;
	
	//load the state into variables
	// currentState[1] = new Array(0, 0, '', 0, 0, 0, '', '');
	var selectedField = currentState[row][0];
	var selectedOperator = currentState[row][1];
	sLayers2Show = ChooseLayer(selectedField, selectedOperator)
	var aLayers=sLayers2Show.split(";");
	currentLayer[row] = 'row'+row;
	
	for(var i =0;i<aLayerList.length;i++){
		var j=isInArray(aLayers,aLayerList[i]);
		if (j>-1){
			PopulateField(selectedField,row);
			PopulateOperator(selectedField, selectedOperator, row);
			PopulateTerms(selectedField, selectedOperator, row);
			getStyleObj(aLayerList[i] + row.toString()).display='inline';
		}else{
			getStyleObj(aLayerList[i] + row.toString()).display='none';
		}
	}
	
	//for this row and all lower rows, position the layer
	for(var l = row;l<=rowCount;l++){
		var lHeight = GetHeight(sLayers2Show,l,row);
		ShowLayer(getStyleObj('row' + l.toString()), lHeight);
	}
	
	oLayer = getStyleObj('as_buttons');
	lHeight = GetHeight(sLayers2Show,rowCount + 1,row);
	ShowLayer(oLayer, lHeight);
	oLayer = getStyleObj('noresult_info');
	lHeight = GetHeight(sLayers2Show,rowCount + 2,row);
	ShowLayer(oLayer, lHeight);
	loading = false;
	return;
}

function GetHeight(sLayers2Show, row,currrow){
	var myPos = startingPos;
	
	if (row==currrow){
		if (sLayers2Show.indexOf('d_multiple_row')>-1){
			currentLayerHeight[row] = 60; //multi-select
		}else{
			currentLayerHeight[row] = 30; //normal
		}
	}
	
	//where should I be?
	for(var i=1;i<row;i++){
		myPos += currentLayerHeight[i];
	}
	return myPos;
}

function PopulateTerms(selField, selOperator,row){
	var termText = currentState[row][2];
	var termSelect = currentState[row][3];
	var checkThes = currentState[row][4];
	var multiValues = currentState[row][6];
	var termTextb = currentState[row][7];

	switch(selOperator){
		case '1':case '2':case '14':case '15':  // id, text or character fields
			if(termOptions[selField] != null){ // if a list of options exists
				var thisArray = termOptions[selField];
				var oSelect = getObject2('combo_row' + row)
				PopulateCombo(oSelect, thisArray, termSelect);
			}else{
				if (fieldToPosNeg[selField]!= ''){
					var pnItem =0;
					if(!isNaN(termText) && termText !=''){
						var tVal = parseInt(termText);
						if(tVal < 0){
							pnItem = 1;
						}
						termText = Math.abs(termText);
					}
					var sPosNeg = fieldToPosNeg[selField];
					var aPosNeg = sPosNeg.split(';');
					var oSelect = getObject2('posneg_row' + row);
					PopulateValueCombos(oSelect,aPosNeg,pnItem);
				}
				var oTextbox = getObject2('text_row' + row)
				oTextbox.value = termText;
			}
			break;
			
		case '5':case '6':case '7': case '8': case '9': case '10': case '17': case '18':
			if (fieldToPosNeg[selField]!= ''){
				var pnItem =0;
				if(!isNaN(termText) && termText != ''){
					var tVal = parseInt(termText);
					if(tVal < 0){
						pnItem = 1;
					}
					termText = Math.abs(termText);
				}
				var sPosNeg = fieldToPosNeg[selField];
				var aPosNeg = sPosNeg.split(';');
				var oSelect = getObject2('posneg_row' + row);
				PopulateValueCombos(oSelect,aPosNeg,pnItem);
			}
			var oTextbox = getObject2('text_row' + row)
			oTextbox.value = termText;
			break;
		
		case '3': case '4':

			if (fieldToPosNeg[selField]!= ''){
				var pnItem = 0;
				if(!isNaN(termText) && termText != ''){
					var tVal = parseInt(termText);
					if(tVal < 0){
						pnItem = 1;
					}
					termText = Math.abs(termText);
				}
				var sPosNeg = fieldToPosNeg[selField];
				var aPosNeg = sPosNeg.split(';');
				var oSelect = getObject2('posneg_row' + row);
				PopulateValueCombos(oSelect,aPosNeg,pnItem);
				pnItem = 0;
				if(!isNaN(termTextb) && termTextb!=''){
					var tVal = parseInt(termTextb);
					if(tVal < 0){
						pnItem = 1;
					}
					termTextb = Math.abs(termTextb);
				}
				sPosNeg = fieldToPosNeg[selField];
				aPosNeg = sPosNeg.split(';');
				oSelect = getObject2('posnegb_row' + row);
				PopulateValueCombos(oSelect,aPosNeg,pnItem);
			}
			var oTextbox = getObject2('text_row' + row)
			oTextbox.value = termText;
			oTextbox = getObject2('textb_row' + row)
			oTextbox.value = termTextb;
			break;
			
		case '12':case '13':
			if(fieldstoOperators[selField]==5){
				if(termOptions[selField] != null){ // if a list of options exists
					var thisArray = termOptions[selField];
					var oSelect = getObject2('multiple_row' + row)
					PopulateMultiCombo(oSelect, thisArray, multiValues);
				}
			}else{
				var oTextbox = getObject2('text_row' + row)
				oTextbox.value = termText;
			}
			break;
			
		default :
			var oTextbox = getObject2('text_row' + row)
			oTextbox.value = "";
			break;
		}
	return;
}

function ChooseLayer(field, oper){
	//modified - returns a ; delim list of the layers to show
	var DefaultLayer = "d_text_row";
	var sLayer = "";

	if(oper==0){
		sLayer = DefaultLayer;
	}else{
		// well the field must have been chosen so double check....
		if(field==0){
			sLayer = DefaultLayer;
		}else{
			switch(oper){
				case '1':case '2':case '14':case '15':  // id, text or character fields
					if(termOptions[field] != null){ // if a list of options exists
						sLayer = "d_combo_row";
					}else{
						if (fieldToPosNeg[field]== ''){
							sLayer = "d_text_row";
						}else{
							sLayer = "d_text_row;d_posneg_row";
						}
					}
					break;

				case '5':case '6':case '7': case '8': case '9': case '10': case '17': case '18':
					if (fieldToPosNeg[field]== ''){
						sLayer = "d_text_row";
					}else{
						sLayer = "d_text_row;d_posneg_row";;
					}
					break;

				case '3': case '4':
					if (fieldToPosNeg[field]== ''){
						sLayer = "d_text_row;d_textb_row";
					}else{
						sLayer = "d_text_row;d_posneg_row;d_textb_row;d_posnegb_row";
					}
					break;

				case '12':case '13':
					if(fieldstoOperators[field]==5){
						sLayer = "d_multiple_row";
					}else{
						sLayer = "d_text_row";
					}
					break;

				default :
					sLayer = "d_text_row";
					break;
			}

			if(fieldToThes[field] == 1){
				sLayer += ";d_thes_row";
			}
		}
	}
	return sLayer;
}

function PopulateField(selField, row){
	var oSelect = getObject2('field_row' + row)
	PopulateCombo(oSelect, listofFields, selField);
	return;
}

function PopulateOperator(selField, selOperator, row){
	var oSelect = getObject2('operator_row' + row);
	var opList = listsofOperators[fieldstoOperators[selField]];
	PopulateArrayCombos(oSelect, opList, selOperator);
	return;
}

function PopulateMultiCombo(oSelect, opts, multiValues){
	for(var j=oSelect.options.length-1;j>=0;j-=1){
		oSelect.options[j] = null;
	}
	for(var i=0;i<opts.length;i++){
		if(opts[i]!=null){
			var bMatch;
			var as;
			as = multiValues.split(';');
			for(var k = 0;k<as.length;k++){
				if(as[k]==i){
					bMatch = true;
					break;
				}else{
					bMatch = false;
				}
			}
			var newOpt = document.createElement("option");
			var currentText = opts[i].toString();
			if(currentText.length > truncate_text_at){
				currentText = currentText.substr(0,truncate_text_at-3) + '...';
			}
			newOpt.text = currentText;
			newOpt.value = i.toString() + '#' + opts[i].toString();
			if(bMatch){
				newOpt.selected = true;
			}
			oSelect.options.add(newOpt);
		}
	}
	return;
}

function PopulateCombo (oSelect, opts, selItem){
	for(var i=0;i<opts.length;i++){
		if(opts[i]!=null){
			oSelect.options[i] = new Option(opts[i].toString().replace(/&amp;/g,'&'),i.toString() + '#' + opts[i].toString(),false,false);
			if (i==selItem){
				oSelect.selectedIndex = selItem.toString();
			}
		}
	}
	return;
}

function PopulateValueCombos (oSelect, opts, selItem){
	for(var j=oSelect.options.length-1;j>=0;j-=1){
		oSelect.options[j]=null;
	}
	for(var i=0;i<opts.length;i++){
		if(opts[i]!=null){
			var newOpt = document.createElement("option");
			var currentText = opts[i].toString();
			if(currentText.length > truncate_text_at){
				currentText = currentText.substr(0,truncate_text_at-3) + '...';
			}
			newOpt.text = currentText;
			newOpt.value = i.toString() + '#' + opts[i].toString();
			if(i==selItem){
				newOpt.selected = true;
			}
			oSelect.options.add(newOpt);
		}
	}
	return;
}

function PopulateArrayCombos (oSelect, opts, selItem){
	for(var j=oSelect.options.length-1;j>=0;j-=1){
		oSelect.options[j]=null;
	}
	for(var i=0;i<opts.length;i++){
		if(opts[i]!=null){
			var optArray = opts[i];
			var newOpt = document.createElement("option");
			var currentText = optArray[1].toString();
			if(currentText.length > truncate_text_at){
				currentText = currentText.substr(0,truncate_text_at-3) + '...';
			}
			newOpt.text = currentText;
			newOpt.value = optArray[0].toString() + '#' + optArray[1].toString();
			if(optArray[0]==selItem){
				newOpt.selected = true;
			}
			oSelect.options.add(newOpt);
		}
	}
	return;
}

function ShowLayer(styleObj, lHeight){
	styleObj.top = lHeight+'px';
	styleObj.left=leftPos+'px';
	styleObj.visibility='visible';
	return;
}

function getStyleObj(obj){
	if(typeof obj == "string"){
		return document.getElementById(obj).style;
	}else{
		return obj;
	}
}

function getObject2(obj){
	if(typeof obj == "string"){
		return document.getElementById(obj);
	}else{
		return obj;
	}
}

function DoAdvSearch(){
	// go through each layer and grab the current values
	// assign them to the form with the fields and then
	// submit the form
	
	var sSearchCriteria = "";
	for(var i = 1;i<=rowCount;i++){

		var sLayer = currentLayer[i];
		var field = currentState[i][0];
		var sField = "";
		var sValue = "";
		var sValueb = "";
		var sThes = currentState[i][4];
		var sOperator = "";
		var operator = currentState[i][1];
		var oSelect = null;
		var sI = i.toString();

		sLayer += sI;

		if(sThes == "1"){
			sThes = "1";
		}else{
			sThes = "0";
		}

		sField = getSelectedText('field_row' + sI);
		sOperator = getSelectedText('operator_row' + sI);
			
		if(field!=0 && operator!=0){
			// both the field and operator are set so need to know more
			switch(operator){ //which operator
				case '1':case '2':case '12':case '13':case '14':case '15':  // id, text or character fields
					if(termOptions[field] != null){ // if a list of options exists
						if(operator == '12' || operator == '13'){
							sValue = getSelectedText("multiple_row" + sI);
						}else{
							sValue = getSelectedText("combo_row" + sI);
						}
					}else{
						sValue = getTermText("text_row" + sI);
						if (fieldToPosNeg[field]!= '' && isNaN(sValue)==false){
							var sIndexes = "";
							sIndexes = getSelectedIndex("posneg_row" + sI);
							// should always be 1 or 0
							if(sIndexes == "1"){
								lValue = parseInt(sValue);
								lValue = lValue * -1;
								sValue = lValue.toString();
							}
						}
						if(isNaN(sValue)){
							sValue = sValue.replace("'","''");
						}
					}
					break;

				case '5':case '6':case '7': case '8': case '9': case '10': case '17': case '18':
					sValue = getTermText("text_row" + sI);
					if (fieldToPosNeg[field]!= '' && isNaN(sValue)==false){
						var sIndexes = "";
						sIndexes = getSelectedIndex("posneg_row" + sI);
						// should always be 1 or 0
						if(sIndexes == "1"){
							lValue = parseInt(sValue);
							lValue = lValue * -1;
							sValue = lValue.toString();
						}
					}
					if(isNaN(sValue)){
						sValue = sValue.replace("'","''");
					}

					break;


				case '3': case '4':
					sValue = getTermText("text_row" + sI);
					sValueb = getTermText("textb_row" + sI);
					if (fieldToPosNeg[field]!= '' && isNaN(sValue)==false){
						var sIndexes = "";
						sIndexes = getSelectedIndex("posneg_row" + sI);
						// should always be 1 or 0
						if(sIndexes == "1"){
							lValue = parseInt(sValue);
							lValue = lValue * -1;
							sValue = lValue.toString();
						}
					}

					if (fieldToPosNeg[field]!= '' && isNaN(sValueb)==false){
						var sIndexes = "";
						sIndexes = getSelectedIndex("posnegb_row" + sI);
						// should always be 1 or 0
						if(sIndexes == "1"){
							lValue = parseInt(sValueb);
							lValue = lValue * -1;
							sValueb = lValue.toString();
						}
					}
					if(sValue.length>0 && sValueb.length>0){
						sValue = sValue + ";" + sValueb;
					}else{
						sValue = "";
					}
					if(isNaN(sValue)){
						sValue = sValue.replace("'","''");
					}

					break;


				default :
					sValue = "";
					break;
				}

			}

		if(sField != "" && sOperator != "" && sValue != ""){
			if(sSearchCriteria.length>0){
				sSearchCriteria += "/,/";
			}
			// escaping is now performed on entering the jscript
			//sField = sField.replace("'","''");
			sSearchCriteria +=  sField + "/,/";
			//sOperator = sOperator.replace("'","''");
			sSearchCriteria += sOperator + "/,/";
			//sValue = sValue.replace("'","''");
			sSearchCriteria += sValue.replace(/&/gi,"^^") + "/,/";
			sSearchCriteria += sThes;
			sSearchCriteria += "/,/0";
		}
	}
	// ok submit the form that holds all our stuff
	if (sSearchCriteria.length>0){
		//NOTE: Changing the form action here may cause problems if the user runs a search, then clicks the back button, then attempts to use the quick search box in the advanced search page.
		document.getElementById("frm").emu_action.value = "advsearch";
		// finally stash the criteria and the state
		var sState = getCSV();
		var profile=document.getElementById("frm").profile.value;
	
		if (window.encodeURIComponent){
			document.getElementById("frm_buttons").action = "emuseum.asp?action=advsearch&newsearch=1&profile="+profile+"&rawsearch=" + encodeURIComponent(sSearchCriteria) + "&currentstate" + profile + "=" + sState;
		}else{
			document.getElementById("frm_buttons").action = "emuseum.asp?action=advsearch&newsearch=1&profile="+profile+"&rawsearch=" + escape(sSearchCriteria) + "&currentstate" + profile + "=" + sState;
		}
		f_setcookie("lastadvsearch"+profile,sState,null); 
		document.getElementById("frm_buttons").submit();
		return false;
	}else{
		return false;
	}
}

function donot(){
	return false;
}

function getSelectedText(objName){
	var oSelect = getObject2(objName);
	var sSelected = "";
	if(oSelect != null){
		// 0 should always be "Choose..."
		for(var i=1;i<oSelect.options.length;i++){
			if(oSelect.options[i].selected){
				if(sSelected.length > 0){
					sSelected += ";";
				}		
				var currText = oSelect.options[i].value.toString()
				var hashpos = currText.indexOf('#');
				if(hashpos > -1){
					currText = currText.substr(hashpos + 1);
				}
				sSelected += currText;
			}
		}
	}
	return sSelected;
}

function getSelectedIndex(objName){
	var oSelect = getObject2(objName);
	var sSelected = "";

	if(oSelect != null){
		// 0 should always be "Choose..."
		for(var i=1;i<oSelect.options.length;i++){
			if(oSelect.options[i].selected){
				if(sSelected.length > 0){
					sSelected += ";";
				}
				sSelected += oSelect.options[i].index;
			}
		}
	}
	return sSelected;
}

function getTermText(objName){
	var oText = getObject2(objName);
	var sValue = "";

	if(oText != null){
		sValue = oText.value;
	}
	return sValue;
}


function getCSV(){
	var s="";
	for(var j = 1;j<=rowCount; j++){
		for(var i=0; i<=7;i++){
			if(s.length > 0){
				s += ",";
			}
			s += currentState[j][i].toString();
		}
	}
	return s;
}

function openCSV(s){
	var as;
	as = s.split(',');
	var count = 0;

	for(var j = 1;j<=rowCount; j++){
		for(var i=0; i<=7;i++){
			if(s==''){
				if(i==2 || i== 6 || i == 7){
					currentState[j][i] = '';
				}else{
					currentState[j][i] = 0;
				}
			}else{
				if(count < s.length -1){
					currentState[j][i] = as[count];
					count++;
				}else{
					if(i==2 || i== 6 || i == 7){
						currentState[j][i] = '';
					}else{
						currentState[j][i] = 0;
					}
					count++;
				}
			}
		}
	}
	return;
}

if(document.layers){
	origWidth=innerWidth;
	origHeight=innerHeight;
	onresize=function(){
	if(innerWidth!=origWidth||innerHeight!=origHeight){
		location.reload();
	}
}

}

