var loaded = new Object();

function load_vars(field_name,search){
	window[field_name + "_to"] = null;
	window[field_name + "_close_to"] = null;
	window[field_name + "_req"] = false;
	window[field_name + "_cache"] = new Array();
	window[field_name + "_searchtype"] = search;
	last_searchlist_url = "";
}

function show_all(field_name,cache,search,rsize,usenothing,usenothing_size,shownothing,shorten,auto_complete){
	sl_dosearch('%',field_name,cache,search,rsize,usenothing,usenothing_size,shownothing,shorten,auto_complete);
}
function preload(field_name,search){
	window[field_name + '_cache']["all_results"] = simpleajax('/global/searches.cfm?type=' + search + '&w='+su('%'));
}
function sl_search(w,field_name,minlen,delay,cache,search,rsize,usenothing,usenothing_size,shownothing,shorten,auto_complete,lockcolor){
	// 38=up 40=down
	if((w.keyCode == '38')||(w.keyCode == '40')) return false;
	if(window[field_name + "_to"]) clearTimeout(window[field_name + "_to"]);
	if(document.getElementById(field_name + '_searchbox').value.length >= minlen){
		window[field_name + "_to"] = setTimeout('sl_dosearch(null,\'' + field_name + '\',\'' + cache + '\',\'' + search + '\',\'' + rsize + '\',\'' + usenothing + '\',\'' + usenothing_size + '\',\'' + shownothing + '\',\'' + shorten + '\',\'' + auto_complete + '\');',delay);
	}else{
		closeif(null,field_name,lockcolor);
	}
}
function sl_dosearch(search_string,field_name,cache,search,rsize,usenothing,usenothing_size,shownothing,shorten,auto_complete){
	search_string = (search_string) ? search_string : document.getElementById(field_name + '_searchbox').value;
	window[field_name + "_req"] = true;
	fixrespos(field_name);
	document.getElementById(field_name + '_results').length = 0;
	document.getElementById(field_name + '_results').options[0] = new Option('Searching...','blah');
	document.getElementById(field_name + '_results').selectedIndex = 0;
	document.getElementById(field_name + '_results').size = 1;
	document.getElementById(field_name + '_results').style.display = '';
	temp_url = '/global/searches.cfm?type=' + search + '&w='+su(search_string);
	alterd_url = false;
	if(self[field_name + "_alter_url"]){
		temp_url = alter_url(temp_url,field_name);
		alterd_url = true;
	}
	if(cache == "true"){
		last_searchlist_url = ((!alterd_url)&&(search_string=='%')) ? 'all_results' : temp_url;
		// already have EVERYTHING
		if(typeof(window[field_name + "_cache"]["all_results"]) != "undefined"){
			// Searching for everything again... use everything cache
			if(search_string=='%'){
				sl_dosearch_resp(window[field_name + "_cache"]["all_results"],field_name,rsize,usenothing,usenothing_size,shownothing,shorten,auto_complete);
				return true;
			// Doing a search... search within the everything results
			}else{
				temp_array = window[field_name + "_cache"]["all_results"].split('^');
				results_array = new Array();
				for(i in temp_array){
					if(temp_array[i].split("|").length > 1){
						if(temp_array[i].split("|")[1].toLowerCase().match(search_string.toLowerCase())){
							results_array.push(temp_array[i]);
						}
					}
				}
				if(results_array.length == 0) results_array.push("|No Results");
				sl_dosearch_resp(results_array.join("^"),field_name,rsize,usenothing,usenothing_size,shownothing,shorten,auto_complete);
				return true;
			}
		// previously searched... used cache
		}else if(typeof(window[field_name + "_cache"][temp_url]) != "undefined"){
			sl_dosearch_resp(window[field_name + "_cache"][temp_url],field_name,rsize,usenothing,usenothing_size,shownothing,shorten,auto_complete);
			return true;
		} 
	}
	var w = simpleajax(temp_url+'&'+randomstring(25),1);
	sl_dosearch_resp(w,field_name,rsize,usenothing,usenothing_size,shownothing,shorten,auto_complete);
}
function sl_dosearch_resp(r,field_name,rsize,usenothing,usenothing_size,shownothing,shorten,auto_complete){
	window[field_name + "_cache"][last_searchlist_url] = r;
	window[field_name + "_req"] = false;
	results_to_select(r,document.getElementById(field_name + '_results'));
	real_length = document.getElementById(field_name + '_results').length + document.getElementById(field_name + '_results').childNodes.length;
	if(document.getElementById(field_name + '_results').length <= rsize){
		if(document.getElementById(field_name + '_results').length == usenothing_size){
			document.getElementById(field_name + '_results').selectedIndex = 0;
			document.getElementById(field_name + '_results').size = 1;
			if(usenothing == "true"){
				document.getElementById(field_name).value = document.getElementById(field_name + '_searchbox').value;
				document.getElementById(field_name + '_text').value = document.getElementById(field_name + '_searchbox').value;
			}
			if(shownothing != "true"){
				document.getElementById(field_name + '_results').style.display = 'none';
				return false;
			}
		}else{
			if(shorten == "true"){
				document.getElementById(field_name + '_results').size = real_length;
			}
			else{
				document.getElementById(field_name + '_results').size = rsize;
			}
		}
	}else{
		document.getElementById(field_name + '_results').size = rsize;
	}
	fixrespos(field_name);
	if(auto_complete == "true"){
		selectfirstmatch(field_name);
	}
	else{
		// IE Fix 
			$(field_name + '_results').options[0].selected = true;
			$(field_name + '_results').options[0].selected = false;
		
		// Firefox Fix 
		$(field_name + '_results').selectedIndex = -1;
		
		// Opera Fix :) <--- browser elitist
		
	}
	document.getElementById(field_name + '_results').style.display = '';
}
function selectfirstmatch(field_name){
	var res = document.getElementById(field_name + '_results');
	var sb = document.getElementById(field_name + '_searchbox');
	for(i=0;i<res.length;i++){
		if(res[i].text.toLowerCase() != sb.value.toLowerCase()){
			if(res[i].text.toLowerCase().indexOf(sb.value.toLowerCase()) == 0){
				res.selectedIndex = i;
				// only change the text and highlight it if there are no outstanding requests
				if(!window[field_name + '_req']){
					temp = sb.value.length;
					sb.value = res[i].text;
					select_range(document.getElementById(field_name + '_searchbox'),temp,sb.value.length);
				}
				return true;
			}
		}
	}
	return false;
}
function results_blur(field_name,lockcolor){
	window[field_name + '_close_to'] = setTimeout('closeif(null,\''+field_name+'\',\''+lockcolor+'\')',300);
}
function closeif(no_click,field_name,lockcolor){
	var res = document.getElementById(field_name + '_results');
	if(res.style.display != 'none'){
		// you closed the results while selecting something; use it!
		if(res.selectedIndex >= 0){
			if(res.options[res.selectedIndex].text == document.getElementById(field_name + '_searchbox').value){
				if(!no_click) results_click(field_name,lockcolor);
			}
		}
		res.style.display = 'none';
	}
}
function search_focus(field_name,instructions,length,lockcolor,search){
	if(!loaded[field_name])
	{
		loaded[field_name] = true;
		load_searchlist(field_name,length,lockcolor,search);
	}
	if(self[field_name + '_onfocus']){
		<!--- stops clear if function returns false --->
		ofresp = onfocus(field_name);
		if(ofresp != undefined && !ofresp){return false;}
	} 
	if(document.getElementById(field_name + '_searchbox').readOnly){
		document.getElementById(field_name).value = '';
		document.getElementById(field_name + '_text').value = '';
		document.getElementById(field_name + '_searchbox').style.backgroundColor = '#FFFFFF';
		document.getElementById(field_name + '_searchbox').value = '';
		document.getElementById(field_name + '_searchbox').readOnly = false;
		closeif(null,field_name,lockcolor);
	}else{
		if(instructions != ""){
			if(document.getElementById(field_name + '_searchbox').value == instructions){
				document.getElementById(field_name + '_searchbox').value = '';
			}
		}
		noclose(field_name);
	}
}
function search_click(field_name){
	//#attributes.name#_closeif();
}
function search_blur(field_name,usenothing,lockcolor,instructions){
	if(window[field_name + '_to']) clearTimeout(window[field_name + '_to']);
	window[field_name + '_close_to'] = setTimeout('closeif(null,\''+field_name+'\',\''+lockcolor+'\')',300);
	if(usenothing == "true"){
		document.getElementById(field_name).value = document.getElementById(field_name + '_searchbox').value;
		document.getElementById(field_name + '_text').value = document.getElementById(field_name + '_searchbox').value;
		if(document.getElementById(field_name + '_searchbox').value != ''){
			document.getElementById(field_name + '_searchbox').style.backgroundColor = '#' + lockcolor;
			document.getElementById(field_name + '_searchbox').readOnly = true;
		} 
	}
	if(instructions != ""){
		if(document.getElementById(field_name + '_searchbox').value == ''){
			document.getElementById(field_name + '_searchbox').value = instructions;
		}
	}
}
function noclose(field_name){
	clearTimeout(window[field_name + '_close_to']);
}
function setvalue(n,v,field_name,lockcolor){
	document.getElementById(field_name).value = v;
	document.getElementById(field_name + '_text').value = n;
	document.getElementById(field_name + '_searchbox').value = n;
	if(v != ''){
		document.getElementById(field_name + '_searchbox').readOnly = true;
		document.getElementById(field_name + '_searchbox').style.backgroundColor = '#' + lockcolor;
	}else{
		document.getElementById(field_name + '_searchbox').readOnly = false;
		document.getElementById(field_name + '_searchbox').style.backgroundColor = '#FFFFFF';
	}
	document.getElementById(field_name + '_results').style.display = 'none';
}
function results_click(field_name,lockcolor){
	var ttext = document.getElementById(field_name + '_results')[document.getElementById(field_name + '_results').selectedIndex].text;
	document.getElementById(field_name).value = document.getElementById(field_name + '_results').value;
	document.getElementById(field_name + '_text').value = ttext;
	document.getElementById(field_name + '_searchbox').value = ttext;
	document.getElementById(field_name + '_searchbox').style.backgroundColor = '#' + lockcolor;
	document.getElementById(field_name + '_searchbox').readOnly = true;
	document.getElementById(field_name + '_results').style.display = 'none';
	if(self[field_name + '_selected']) self[field_name + '_selected']();
}
function fixrespos(field_name){
	if(document.getElementById(field_name + '_results')){
		sb = document.getElementById(field_name + '_searchbox');
		sbl = get_location(sb);
		document.getElementById(field_name + '_results').style.left = sbl[0] + 2;
		document.getElementById(field_name + '_results').style.top = sbl[1] + sb.offsetHeight + 4;
		checkdark($(field_name + '_searchbox'),field_name + '_results');
	}
}
function checkdark(el,divName) {
	var dark = false;
	while((el=el.offsetParent) != null) {
		if(el.className.indexOf("dark_window") > -1)
			dark = true;
	}
	document.getElementById(divName).style.position = (dark && !navigator.userAgent.match(/MSIE (\d+\.\d+);/))?"fixed":"absolute";

}
function create_results(field_name,length,lockcolor){
	if(!$(field_name + '_results')){
		temp = document.createElement('select');
		temp.setAttribute('id',field_name + '_results');
		temp.setAttribute('multiple','true');
		temp.style.display = 'none';
		temp.style.position = 'absolute';
		temp.style.border = '1px solid black';
		temp.style.zIndex = '1000';
		if(length != -1){
			temp.style.width = length + 'px';
		}
		temp.options[0] = new Option('Perform Search First','');
		temp.onblur = Function("results_blur(\"" + field_name + "\",\"" + lockcolor + "\")");
		temp.onclick = Function("results_click(\"" + field_name + "\",\"" + lockcolor + "\")");
		temp.onfocus = Function("noclose(\"" + field_name + "\")");
		document.getElementById('thebody').appendChild(temp);
	}
}
function load_searchlist(field_name,length,lockcolor,search){
	load_vars(field_name,search);
	create_results(field_name,length,lockcolor);
}
function close_all_results(){
	var objects = document.getElementsByTagName("select");
	for(x=0;x<objects.length;x++){
		if(objects[x].id.match(/^(.*)\_results$/) && $(RegExp.$1+'_searchbox') && objects[x].style.display != 'none'){
			objects[x].style.display = 'none';
		}
	}
}
