var working_input;
var working_suggest_box;
var working_hide_frame;
var working_search_val_id;
var change_array = new Array();
var suggest_box_array = new Array();
var last_run_val;
var last_ac_set_call = -1;
var json_data_object_return;
var ac_selected = -1;
var cur_higlighted_suggest_item = -1;
var ac_setup_array = [{"input_item":"search_input","suggest":"search_suggest","hide_frame":"search_val_hide_frame","search_val_input":"search_val_id"}];

function find_search_vals(ac_set,e,work_id)
{
	var thisval = document.getElementById(work_id).value;
	if(thisval.length < 1)
	{
		if(last_ac_set_call > -1) suggest_vis('hide');
		return true;
	}
	if(ac_set != last_ac_set_call)
	{
		working_input = document.getElementById(ac_setup_array[ac_set].input_item);
		working_suggest_box = document.getElementById(ac_setup_array[ac_set].suggest);
		working_hide_frame = document.getElementById(ac_setup_array[ac_set].hide_frame);
		working_search_val_input = document.getElementById(ac_setup_array[ac_set].search_val_input);
		last_ac_set_call = ac_set;
	}
	
	var key_code = (e.keyCode) ? e.keyCode : e.which;
	var move_pointer = (working_suggest_box.style.visibility == 'visible') ? true : false;
	switch (key_code) 
	{
		case 38: // up
		case 40: // down
			if(move_pointer)
			{
				if(suggest_event(e) === true) return false;
			}
		break;
		case 13: // enter
		case 9: // tab
			if(ac_selected > -1 || move_pointer === false) return true;
			if(suggest_event(e) === true)
			{
				return false;
			}
		break;
	}
	
	unset_ac_vals();
	//if(ac_setup_array[ac_set].placed === false) multi_xy_coords(working_input, working_suggest_box, working_hide_frame, ac_set);
	multi_xy_coords(working_input, working_suggest_box, working_hide_frame, ac_set);
	setTimeout("re_check()", "1000");
	return true;
}

function populate_search_val_list(json_data_object)
{
	var $out = '';
	var $lines = '';
	var array_pointer = ac_setup_array[last_ac_set_call].input_item;
	var cateegory = '';
	if(json_data_object.items)
	{
		json_data_object_return = json_data_object;
		suggest_box_array = new Array();
		for(i in json_data_object.items)
		{
			category = (json_data_object.items[i].category && json_data_object.items[i].category.length > 0) ? json_data_object.items[i].category : '&nbsp;';
			suggest_box_array[i] = array_pointer+"_"+i;
			$lines += "<tr onclick=\"search_val_ac_select("+i+");\" onmouseover=\"if(this.className != 'suggest_nav_active') this.className='suggest_nav_over';\" onmouseout=\"if(this.className != 'suggest_nav_active') this.className='suggest_nav';\" id=\""+array_pointer+"_"+i+"\"><td valign=\"top\" align=\"left\" style=\"border-bottom:1px dotted #CCC;\">"+json_data_object.items[i].search_val_name+"</td><td valign=\"top\" style=\"border-bottom:1px dotted #CCC;\">"+json_data_object.items[i].city+"</td><td valign=\"top\" align=\"left\" style=\"border-bottom:1px dotted #CCC;\">"+category+"</td></tr>";
		}
		$out = "<table cellpadding=\"3\" cellspacing=\"0\" style=\"font-size:11px;color:#000;\" width=\"100%\" border=\"0\" id=\"search_results_div_output\">"+$lines+"</table>";
		working_suggest_box.innerHTML = $out;
		suggest_vis('show');
	}
	else
	{
		ac_selected = 0;
		json_data_object_return = new Array();
		suggest_box_array = new Array();
		suggest_vis('hide');
	}
}

function re_check()
{
	if(ac_selected > -1) return true;
	var $new_val = working_input.value;
	if(last_run_val != $new_val)
	{
		unset_ac_vals();
		change_array[change_array.length] = $new_val;
		setTimeout("re_check()", "1500");
		update_items();
		last_run_val = $new_val;
	}
}

function update_items()
{
	if(change_array.length > 0 && ac_selected == -1)
	{
		$work_array = change_array;
		for(i in $work_array)
		{
			if($work_array[i] && $work_array[i].length > 1) search_val_creation_object.update('search_val='+$work_array[i]+'&mode=site_lookup');
			delete change_array[i];
		}
	}
	if(change_array.length == 0) change_array = new Array();
}

function populate_search_val_ac(response, response_status) 
{
	if(response_status == 200) 
	{
		if(response.length > 0)
		{
			var returned_string = 'populate_search_val_list('+response+')';
			eval(returned_string);
		}
	} 
}

function suggest_vis(mode)
{
	if(!working_hide_frame || !working_suggest_box) return true;
	switch(mode)
	{
		case 'hide':
			working_hide_frame.style.visibility = 'hidden';
			working_suggest_box.style.visibility = 'hidden';
			working_suggest_box.innerHTML = '';
			/*
			working_input.focus();
			working_input.selectionEnd = working_input.textLength;
			*/
		break;
		case 'show':
			working_hide_frame.style.visibility = 'visible';
			working_suggest_box.style.visibility = 'visible';
		break;
		default:
			setTimeout("suggest_vis('hide')", "250");
		break;
	}
}



function suggest_event(e)
{
	// find an active if there is one
	if(suggest_box_array.length == 0) return true;
	var last_active_position = -1;
	var new_position = -1;
	for(i in suggest_box_array)
	{
		var el = document.getElementById(suggest_box_array[i]);
		if(el.className == 'suggest_nav_active')
		{
			last_active_position = parseInt(i);
			el.className = 'suggest_nav';
			break;
		}
	}

	var key_code = (e.keyCode) ? e.keyCode : e.which;
	switch (key_code) 
	{
		case 38: // up
			if(last_active_position == 0)
			{
				return false;
			}
			else
			{
				var new_position = last_active_position - 1;
			}
		break;
		case 40: // down
			if(last_active_position == -1)
			{
				var new_position = 0;
			}
			else
			{
				if((last_active_position + 1) >= suggest_box_array.length)
				{
					document.getElementById(suggest_box_array[last_active_position]).className = 'suggest_nav_active';
					suggest_scroll_div(document.getElementById(suggest_box_array[last_active_position]));
					return false;
				}
				else
				{
					var new_position = last_active_position + 1;
				}
			}
			
		break;
		case 13: // enter
		case 9: // tab
			if(last_active_position > -1) search_val_ac_select(last_active_position);
			return true;
		break;
	}
	if(new_position > -1)
	{
		document.getElementById(suggest_box_array[new_position]).className = 'suggest_nav_active';
		//suggest_scroll_div(document.getElementById(suggest_box_array[new_position]));
		suggest_scroll_div(document.getElementById(suggest_box_array[new_position]));
		return false;
	}
}

function suggest_scroll_div(selected_el)
{
	var move_to = ((selected_el.offsetTop - selected_el.clientHeight) + selected_el.offsetHeight - 2);
	working_suggest_box.scrollTop = move_to;
}

function unset_ac_vals()
{
	if(ac_selected == -1) return true;
	working_search_val_input.value = '';
	ac_selected = -1;
	last_run_val = '';
}

function search_val_ac_select(p)
{
	if(json_data_object_return.items)
	{
		working_input.value = json_data_object_return.items[p].search_val_name;
		ac_setup_array[last_ac_set_call].input_set_by_ac = true;
		working_search_val_input.value = json_data_object_return.items[p].id;
		ac_selected = p;
		suggest_vis('hide');
		
	}
}
function multi_xy_coords($id, $suggest, $hide_frame, ac_set)
{
	var obj=$id;
	
	if (obj)
	{
		var _x = getAbsX(obj);
		var _y = getAbsY(obj);
	}
	
	if(document.all)
	{
		var $ie_y = -1;
		var $ie_x = -1;
	}
	else
	{
		var $ie_x = -1;
		var $ie_y = 0;
	}
	
	if ($id)
	{
		$suggest.style.left = _x+$ie_x+1+'px';
		$suggest.style.top = _y+$ie_y+20+'px';
	}
	if ($hide_frame)
	{
		$hide_frame.style.left = _x+$ie_x+'px';
		$hide_frame.style.top = _y+$ie_y+20+'px';
	}
	// don't place it again
	ac_setup_array[ac_set].placed = true;
}

function getAbsX(obj)
{
     var leftOffset = 0;
     if (obj.offsetParent)
     {
          while (obj.offsetParent)
          {
               leftOffset += obj.offsetLeft;
               obj = obj.offsetParent;
          }
     }
     else if (obj.x) //for NN4
     {
          leftOffset = obj.x;
     }
     return leftOffset;
}

function getAbsY(obj)
{
     var topOffset = 0;
     if (obj.offsetParent)
     {
          while (obj.offsetParent)
          {
               topOffset += obj.offsetTop;
               obj = obj.offsetParent;
          }
     }
     else if (obj.y) // for NN4
     {
          topOffset = obj.y;
     }
     return topOffset;
}