// (c) 2006 insign gmbh - http://www.insign.ch/
var pause = false;
var query = "";
var active_row = null;

function setSelectionRange(input, selectionStart, selectionEnd) {
    if (input.setSelectionRange) {
        input.focus();
        var prevalue = input.value;
        input.value += ' ';
        input.setSelectionRange(selectionStart, selectionEnd);
        input.value = prevalue;
    }
    else if (input.createTextRange) {
        var range = input.createTextRange();
        range.collapse(true);
        range.moveEnd('character', selectionEnd);
        range.moveStart('character', selectionStart);
        range.select();
    }
}

function setCaretToEnd (input) {
  setSelectionRange(input, input.value.length, input.value.length);
}

var completion_counter=0;
var typingTimer=null;
var myLanguage = 'de';

function autoComplete(dontSetTimer)
{
	// intelligent timing routine, marko 20070327. reduces the amount of ajax requests considerably. only if one types slower than 500ms per char, more than one request get fired.
	if(typingTimer) {
		clearTimeout(typingTimer);
		typingTimer=null;
	}
	
	if(!dontSetTimer) {
		if(!typingTimer) {
			typingTimer=setTimeout("autoComplete(true);", 500);
			return;
		}
	}
    var temp = $('firma_search');
    query = temp.value;
	if(query.length==0) 
	{ // don't fire ajax if the string is empty, marko 20070327
		$('search_auto_complete').style.display="none";
		return;
	}
	
	
	active_row = null;
	++completion_counter;
	// completion counter is needed so that if more requests are fired (which is unprobable enough), only the latest gets evaluated. marko 20070312
	var old_completion_counter=completion_counter; // seems senseless maybe (because of the if(completion_counter==old_completion_counter) below, but do not change that. one var is local, the other not, thats the difference.
	new Ajax.Request("firma_auto_complete.html", {
		method: "get",
		parameters: "search=" + escape(query),
		onSuccess: function(ajaxRequest) {
					if(completion_counter==old_completion_counter) { 
						autoComplete_handleSuccess(ajaxRequest); }
					},
		onFailure: autoComplete_handleFailure, 
		asynchronous: true
		} 
	);
}

function autoComplete_handleSuccess(ajaxRequest)
{
   
   var hit = '';
   var about = '';
   if (myLanguage != 'fr') {
		hit = "Treffer";
		about = "ca.";
   } 
   else {
   		about = "env.";
		hit = "r&eacute;sultats";
   }
   	try {
        var completions = ajaxRequest.responseXML.getElementsByTagName('completion');
        var layer = $('search_auto_complete');		
        if (completions.length) {
            layer.style.display = "block";
            layer.innerHTML = "";
            for (var i = 0; i < completions.length; i++) 
			{       
				var entry = completions[i].getElementsByTagName('entry')[0].childNodes[0].nodeValue;
				var anbieter_id = completions[i].getElementsByTagName('id_anbieter')[0].childNodes[0].nodeValue;
                layer.innerHTML += '<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr id="row' + i + '" onclick="autoComplete_select(' + i + ', true, $(\'firma_search\'), ' + anbieter_id +'); return false;" onmouseover="autoComplete_highlight(' + i + ', ' + anbieter_id +');"><td id="entry' + i + '" class="autocompleteLeft">' + entry + '</td><td id="count' + i + '" class="autocompleteRight"></td></tr></table>';
			}
        }
        else {
            layer.style.display = "none";
        }
    }
    catch (ajaxException) {
        //alert('Ajax exception: ' + ajaxException.message);
    }
}

function autoComplete_handleFailure(ajaxRequest)
{
}

function autoComplete_select(row, close, field, id_anbieter)
{
	field.previousvalue = $('entry' + row).innerHTML;
	field.value = field.previousvalue;

    if (close) 
	{
	   $('kontakt_id_anbieter').value = id_anbieter;
	   $('search_auto_complete').style.display = 'none';
        field.focus();
		// $('ad_search').submit(); // don't fire if klicked on an autocomplete item
    }
}

function autoComplete_highlight(row, anbieter_id)
{
	if(!$('entry' + row)) return;
	
    if($('search_auto_complete').style.display != 'none') 
	{
        if(active_row != null) 
		{
            $("entry" + active_row).className = 'autocompleteLeft';
            $("count" + active_row).className = 'autocompleteRight';
        }
		
        $("entry" + row).className = 'autocompleteLeftHover';
        $("count" + row).className = 'autocompleteRightHover';
		
        var field = $('firma_search');
        	field.value = field.previousvalue = $("entry" + row).innerHTML;
       		$('kontakt_id_anbieter').value = anbieter_id;
			active_row = row;
		 
       setCaretToEnd(field);
    }
}

function autoComplete_scroll(field, key)
{
	field.ffspecialhack = "yes";
    var active = active_row;

    if (!(key == 38 || key == 40)) {
        return;
    }

    if (38 == key) { // up
        if (active == 0 || active == null) {
            active = 9;
        } else {
            active -= 1;
        }
        autoComplete_highlight(active);
    }
    else if (40 == key) { // down
        if(active == 9 || active == null) {
            active = 0;
        } else {
            active += 1;
        }
        autoComplete_highlight(active);
    }
    
    setCaretToEnd($('firma_search'));
    setTimeout('setCaretToEnd($("firma_search"))', 20);
}
