//****************************************//
//****************************************//
// Auto-complete script for the search box//
//****************************************//
//****************************************//

var ac_firstresultfound = false;

// minimum time to pass between two key presses (in milliseconds)
// prevents fast typers to trigger search on every keystroke.
var ac_mintimebetweentwokeypresses = 150; 

// Timeout variable
var keyPressed; 

// minimum number of characters before we trigger the search.
var ac_mincharcount = 2;

// somehow we need this globally defined because of how settimeout works.
var inputValue; 

// if not changed Show default Text
$(document).ready(function() {

    var searchfield = $("#searchfield");
    // on focus delete content, on lost-focus (blur) recover default value.
    searchfield.focus(function() {
	    if( this.value == this.defaultValue ) {
		    this.value = "";
	    }
    }).blur(function() {
	    if( !this.value.length ) {
		    this.value = this.defaultValue;
	    }
    });

    searchfield.keyup(
      function(e){
        
        window.clearTimeout(keyPressed);
        
        
        // Key constants
        var KEYCODE_SHIFT = 16;
        var KEYCODE_CTRL = 17;
        var KEYCODE_ALT = 18;
        var KEYCODE_PAUSE = 19;
        var KEYCODE_ARROWLEFT = 37;
        var KEYCODE_ARROWUP = 38;
        var KEYCODE_ARROWRIGHT = 39;
        var KEYCODE_ARROWDOWN = 40;
        var KEYCODE_BACKSPACE = 8;
        
        var keyId = e.charCode || e.keyCode || 0;

        //var inputValue = this.value;
        inputValue = this.value;
        var keyCount = inputValue.length;
        
        if (keyCount < ac_mincharcount)
        {  
            $("#autocomplete").css("display", "none");
            return;
        }
        
        
        if (   keyId == KEYCODE_SHIFT 
            || keyId == KEYCODE_CTRL
            || keyId == KEYCODE_ALT
            || keyId == KEYCODE_PAUSE
            || keyId == KEYCODE_ARROWLEFT
            || keyId == KEYCODE_ARROWRIGHT
            || keyId == KEYCODE_ARROWDOWN
            || keyId == KEYCODE_ARROWUP
        )
        return;
        
        keyPressed = window.setTimeout("autocomplete()", ac_mintimebetweentwokeypresses);

        //autocomplete(inputValue);
        
      }
    );
});

function autocomplete()
{
    //var searchkey = $("#searchfield").value;
    //alert(searchkey);
    searchkey = inputValue;
    //alert (_pool +  _language);
    var url = "AutoComplete.aspx?pool=" + _pool + "&language=" + _language + "&searchkey=" + cleanSearchKey(searchkey);
    //alert(url);
    $("#autocomplete").load(url + " ul li", "", ac_ajaxdone);
}



// fires after the Autocomplete AJAX call is complete.
function ac_ajaxdone()
{
    // if "no result" li returned, then do not hide last results
    noresult = $("li.noresult")[0];
    if (!noresult) {
        // save this result
        if (!ac_firstresultfound) 
            ac_firstresultfound = true;
        $("#savedresults").html($("#autocomplete").html());
        if ($("#savedresults").css("display") == "block") 
            $("#savedresults").hide();
    }
    else {
        // no results.
        // make saved results layer visible.
        if (ac_firstresultfound) {
            if ($("#savedresults").css("display") == "none") 
                $("#savedresults").show();
            lastresultwassuccess = false;
        }
    }
    
    // make results visible
    $("#autocomplete").css("display", "block");
}

function cleanSearchKey(str)
{
    var retVal;
    // retVal = str.replace(/\s/g, '%20');
    // retVal = escape(str);
    retVal = encodeURI(str);
    //alert(retVal);
    return retVal;
}