var suggest_frame = null;
var suggest_div_id = null;
var suggest_input_element = null;
var current_select = null;
var current_select_id = null;


var value_pre = 'f';
var sort_value = 'record';
var sort_dir = 'DESC';
var record_limit = 40;


var n6=(document.getElementById&&!document.all)?1:0;
var ns=(document.layers)?1:0;
var ie=(document.all)?1:0; 


function init(suggest_element_id)
{
    suggest_div_id = suggest_element_id;
    suggest_frame = document.getElementById(suggest_div_id);

    if(suggest_frame != null && suggest_frame.className == "tab_frame")
    {

	if(ns || n6)
	{
	    document.captureEvents(Event.FOCUS); 
	}	
	document.onkeypress = checkFocus;
	document.onselect = checkFocus;
	document.onclick = checkFocus;
    }

    // Fuers Browse
    if(document.getElementById("suggest_submit") != null)
	document.getElementById("suggest_submit").style.visibility = "hidden";
}

function isInnerElement(element, of_element, depth){
    if (element != null && depth >= 0) {
	if(element == of_element) return true;	 
	return isInnerElement(element.parentNode, of_element, depth--);
    }else{
	return false;
    }
}

function checkFocus(event) {
    var td = getEventTarget(event);	    
    if(td != null && (suggest_input_element == td || isInnerElement(td, suggest_frame, 4)))
    {
	current_select_id = td.parentNode.getAttribute("id");
	var id = current_select_id.replace(/DISPLAY__/,'');
	if(id != null)
	{
	    var value = document.getElementById(id+"__value").childNodes[0].nodeValue;
	    suggest_input_element.value = value;
	}
	suggest_frame.style.visibility = "visible";
    }
    else
    {
	suggest_frame.style.visibility = "hidden";
    }
}


function findPos(obj) {
    var curleft = curtop = 0;
    if (obj.offsetParent) {
	curleft = obj.offsetLeft
	curtop = obj.offsetTop
	while (obj = obj.offsetParent) {
	    curleft += obj.offsetLeft
	    curtop  += obj.offsetTop
	}
    }
    return [curleft,curtop];
}




function cleanTable() {
	var list = document.getElementById("suggest_table").getElementsByTagName("tr");
	for(var i=0;i<list.length;i++) {

	    if(list.item(i).className == "suggest_select") 
	    {
		list.item(i).className = "suggest_deselect";
		current_select_id = list.item(i).getAttribute("id");
	    }
	}
    }

function aMouseOut(event)
    {	
	if(isInnerElement(getEventTarget(event), document.getElementById("suggest_table"), 3)){
	    var out_r = getEventTarget(event).parentNode;
	    if(out_r.getAttribute("id").match(/DISPLAY/))
		out_r.className = "suggest_deselect";
	}
    }
    
function aMouseOver(event)
    {	
	if(isInnerElement(getEventTarget(event),document.getElementById("suggest_table"), 3)){
	    if(getEventTarget(event).parentNode.getAttribute("id").match(/DISPLAY/)){
		cleanTable();
		current_select = getEventTarget(event).parentNode;
		current_select.className = "suggest_select";
		current_select_id = current_select.getAttribute("id");
	    }
	}
    }
    
function checkKey(event)
    {	
	if(suggest_input_element == getEventTarget(event) || 
	   isInnerElement(getEventTarget(event),document.getElementById("suggest_table"), 3)){
	    if(event.type == 'keydown')
	    {
		if(event.keyCode == 38 || event.keyCode == 40 )
		{
		    cleanTable();

		    current_select = document.getElementById(current_select_id);
		    if(current_select == null)
		    {
			current_select = document.getElementById("suggest_table").getElementsByTagName("tr").item(0);
			current_select_id = current_select.getAttribute("id");
			current_select.className = "suggest_select";
			var id = current_select.getAttribute("id").replace(/DISPLAY__/,'');
			suggest_input_element.value =  document.getElementById(id+"__value").childNodes[0].nodeValue;
		    }
		    else
		    {
			var done = false;
			if(event.keyCode == 40 && current_select.nextSibling != null) {
			    current_select_id = current_select.nextSibling.getAttribute("id");
			    current_select.nextSibling.className = "suggest_select";
			    done = true;			    
			}
			if(event.keyCode == 38 && current_select.previousSibling != null) {
			    current_select_id = current_select.previousSibling.getAttribute("id");
			    current_select.previousSibling.className = "suggest_select";
			    done = true;			    
			}			
			if(done){ 
			    current_select.className = "suggest_deselect";
			    var id = document.getElementById(current_select_id).getAttribute("id").replace(/DISPLAY__/,'');
			    var value = document.getElementById(id+"__value").childNodes[0].nodeValue;
			    suggest_input_element.value =  value;
			}
		    }		    
		}
	    }
	}
    }

function getEventTarget(e)
{
    if(e != null){
	if (e.srcElement != null) return e.srcElement;
	else if (e.target != null) return e.target;
    }
    return null;
}



function find_dynamic(event){
    find(event, true, null, 'table_dynamic','record','DESC',10,'1');
}


function find_static(event, field){
    find(event, false, field, 'table_static',sort_value, sort_dir, record_limit, value_pre);
}

    
function find(event, dynamic_position, field, layout, sv, so, li,prefix)
    {	
	var target = getEventTarget(event);
//	var ok = parseInt(target.value.length) > 0;
	if((event.keyCode != 38 && event.keyCode != 40)) 
	{
	    var field_name = null;
	    suggest_input_element = target;

	    if(field == null) {
		var regex = /\[(\d+)\]/;
		regex.exec(suggest_input_element.getAttribute("name"));				
		var field = document.getElementById("EWS["+RegExp.$1+"]");
		field_name = field.options[field.selectedIndex].value;
	    } else {
		field_name = field;
	    }

	    var current_db = document.getElementById("dbInformation").getAttribute("name");	    

	    if(field_name == "AU"  || field_name == "CO"  || field_name == "SCW" || field_name == "SRN" || field_name == "CU" || 
	       field_name == "CN"  || field_name == "PN"  || field_name == "QUE")
	    {		
		new Ajax.Updater(suggest_div_id,'control.php',
				 {parameters:
				  'DB='+current_db+'&LY='+layout+'&SV='+sv+'&PRE='+prefix+
				  '&SO='+so+'&LI='+li+'&T='+field_name+'&control=suggest&Q='+suggest_input_element.value+
				  "&c_id="+current_select_id});


		if(dynamic_position){
		    var pos = findPos(suggest_input_element);

		    suggest_frame.style.visibility = "visible";
		    suggest_frame.style.position = "absolute";
		    suggest_frame.style.left = pos[0]+"px";
		    suggest_frame.style.top  = (pos[1]+22)+"px";		

		    
		    var last_element_of_table = document.getElementById('frame_last');
		    if(last_element_of_table != null){
			var pos_ende = findPos(last_element_of_table);	    
			suggest_frame.style.height = pos_ende[1] - pos[1] - 20;
		    }
		}

	    }
	} 
    }

function refresh(field_name)
{
    var current_db = document.getElementById("dbInformation").getAttribute("name");	    
    if(field_name == "AU"  || field_name == "CO"  || field_name == "SCW" || field_name == "SRN" || 
       field_name == "CN"  || field_name == "PN"  || field_name == "QUE" || field_name == "CU" )
    {		
	new Ajax.Updater(suggest_div_id,'control.php',
			 {parameters:
			  'DB='+current_db+'&PRE='+value_pre+'&LY='+'table_static'+'&SV='+sort_value+
			  '&SO='+sort_dir+'&LI='+record_limit+'&T='+field_name+'&control=suggest&Q='+(suggest_input_element != null ?
												      suggest_input_element.value : '')
			  });
    }
}


