//////////////////////////////////////////////////////////////////////////
//
// Javascript for a search bar
// Jared Donovan 2002
//
//////////////////////////////////////////////////////////////////////////

var bolIE4 = 0;

// Test whether the browser is IE4.0 or higher
if (navigator.appName == "Microsoft Internet Explorer" && navigator.appVersion >= "4.0"){
    bolIE4 = 1;
}
else{
    // HACK For now, don't output differenct code for netscape.
    bolIE4 = 1;
}

// Function to add the search bar to the dom.
function writeSearchBar(initSelectedIndex){   
	var insertPosn = document.getElementById('searchBarInsert');
	var dbOpts = new Array(
		new Array('Library', 'library.uq.edu.au/search~S7/~?searchtype='),
		new Array('Google', 'www.google.com/'),
		new Array('OED', 'dictionary.oed.com/cgi/findword?query_type=word&queryword='),
		new Array('UQ Maps', 'www.uq.edu.au/maps/mapsearch.html?q='),
		new Array('IMDB', 'www.imdb.com/Find/?select=All&for=')
	);

	// First check to see whether we should write a simple search bar for non IE4 browsers
	if (bolIE4){
		// Remove the simpler search bar and insert the more complicated one.
		insertPosn.innerHTML = '';

		var i = 0;		
		var frmSearch = document.createElement('form');		
		var selDb = document.createElement('select');
		var selExtraOpts = document.createElement('select');
		var txtQuery = document.createElement('input');
		var btnSearch = document.createElement('input');
		
		with (frmSearch){
			name = 'frmSearch';
			id = 'frmSearch';
			className = 'frmSearch';
		}
		insertPosn.appendChild(frmSearch);
		frmSearch.onsubmit = function(){return false;};
		
		// Insert the search db selection list
		with (selDb){
			name = 'selDb';
			id = 'selDb';
			className = 'selDb';
		}
		addOptions(selDb, dbOpts);
		frmSearch.appendChild(selDb);
		selDb.selectedIndex = initSelectedIndex;			
		selDb.onchange = checkExtraOpts;

		// Insert the div that will hold the extra options list
		with (selExtraOpts){
			name = 'selExtraOpts';
			id = 'selExtraOpts';
			className = 'selExtraOpts';
			style.visibility = 'hidden';
		}
		frmSearch.appendChild(selExtraOpts)
			
		// Insert the text box for the query
		with (txtQuery){
			name = 'txtQuery';
			id = 'txtQuery';
			className = 'txtQuery';
			type = 'text';
			//value = '';
		}	
		frmSearch.appendChild(txtQuery)
		txtQuery.onkeypress = function(e){
			if (! e) var e = window.event;
			if (e.keyCode == 13) processForm();
		};	
		
		// Insert the submit button
		with (btnSearch){
			name = 'btnSearch';
			id = 'btnSearch';
			className = 'btnSearch';
			type = 'button'; 	// 'submit';
			value = '>>';
		}
		frmSearch.appendChild(btnSearch);
		btnSearch.onclick = function(){processForm(); return false;};

		checkExtraOpts();
		txtQuery.focus();
    }
}

function addOptions(selectElem, optionsArray){
	for (i = 0; i < optionsArray.length; i++){	
		tmpOpt = document.createElement('option');
		with (tmpOpt){	
			text = optionsArray[i][0];
			value = optionsArray[i][1];
			id = selectElem.id + 'Opt' + i;
		}
		try {
			selectElem.add(tmpOpt, null);	// Standards compliant, doesn't work in IE
		}
		catch(ex){
			selectElem.add(tmpOpt)			// IE only.
		}
	}
}

// Check whether extra options should be displayed.
function checkExtraOpts(){
	var selExtraOpts = document.getElementById('selExtraOpts');
	
	// Check if we need to write extra options
	var selDb = document.getElementById('selDb');
	var selDbSelected = selDb.options[selDb.selectedIndex].text;
	var showExtraOpts = false;

	if (selDbSelected == 'Library'){
		showExtraOpts = true;
		var extraOpts = new Array(
			Array('Title', 't'),
	        Array('Author', 'a'),
	        Array('Subject', 'd'),
	        Array('Word', 'X')
		);
	}
	else if (selDbSelected == 'Google'){
		showExtraOpts = true;
		var extraOpts = new Array(
			Array('Web', 'search'),
			Array('Groups', 'groups'),
			Array('Images', 'images'),
			Array('News', 'news'),
			Array('Scholar', 'scholar')
		);
	}
	
	if (showExtraOpts){
		// Remove the current options and load the new ones
		while (selExtraOpts.length > 0) selExtraOpts.remove(0);
		addOptions(selExtraOpts, extraOpts);
		selExtraOpts.style.visibility = 'visible';
    }
    else {
    	selExtraOpts.style.visibility = 'hidden';
    }      
}  

// Use the information from the form to construct a URL specific to 
// the database that we want to search and go to this location
function processForm(){
    var newUrl = 'http://';                    // will hold the new URL
    var query = '';                      	// search term entered in the text box
    var dbName;                     		// Which database was selected
    var extraOpt = '';                           // The type of search to do for multioption sites    

	var selDb = document.getElementById('selDb');
	var selExtraOpts = document.getElementById('selExtraOpts');
	var txtQuery = document.getElementById('txtQuery');
	
	with (selDb){
        newUrl += options[selectedIndex].value;
        dbName = options[selectedIndex].text;
	}
	query = encodeURIComponent(txtQuery.value);

	// Check for extra options
	if (selExtraOpts.style.visibility == 'visible') {
		extraOpt = selExtraOpts.options[selExtraOpts.selectedIndex].value;
	}
	if (dbName == 'Library'){
        newUrl += extraOpt + '&searcharg=' + query + '&SORT=A'; 
    } 
	else if (dbName == 'Google'){
	    newUrl += extraOpt + '?q=' + query;
	}
    else {
        newUrl += query;
    }
    window.location.href = newUrl;
} 














