function psug_hide(elt)
{

    if (elt) elt.style.display = 'none';
}

function psug_ishidden(elt)
{
    return elt.style.display == 'none';
}

function psug_show(elt)
{
    if (elt) elt.style.display = 'block';
}

function psug_emptyresults(elt)
{
    if (!elt) return;
    elt.innerHTML = '';
    elt.numResults = 0;
    elt.selectedIndex = -1;
    elt.results = [];
    psug_hide(elt);
}

function psug_addresult(elt, qElt, q, c, sel, idx)
{
    if (!elt) return;
    elt.results[idx] = q;
    elt.numResults = idx+1;

    var _res = '';
    _res += '<div class="' + (sel ? 'srs' : 'sr') + '"'
         +  ' onmouseover="psug_mouseover(\'' + elt.id + '\', \'' + qElt.id + '\', ' + idx + ')"'
         +  ' onmouseout="psug_mouseout(\'' + elt.id + '\', ' + idx + ')"'
         +  ' onclick="psug_mouseclick(\'' + elt.id + '\', \'' + qElt.id + '\', ' + idx + ')">';
    _res += '<span class="srt">' + q + '</span>';
    if (c.length > 0)
        _res += '<span class="src">' + c + '</span>';
    _res += '</div>';

    elt.innerHTML += _res;
}

function psug_mouseover(id, qId, idx)
{
    elt = document.getElementById(id);
    elt.selectedIndex = idx;
    qElt = document.getElementById(qId);
    qElt.focus();
    qElt.value = elt.results[idx];
    psug_highlightsel(elt);
}

function psug_mouseout(id, idx)
{
    elt = document.getElementById(id);
    elt.selectedIndex = -1;
    psug_highlightsel(elt);
}

function psug_mouseclick(id, qId, idx)
{
    elt = document.getElementById(id);
    qElt = document.getElementById(qId);
    qElt.value = elt.results[idx];
    qElt.form.submit();
}

function psug_handleup(elt, qElt)
{
    if (elt.numResults > 0 && psug_ishidden(elt)) {
        psug_show(elt);
        return;
    }

    if (elt.selectedIndex == 0)
        return;
    else if (elt.selectedIndex < 0)
        elt.selectedIndex = elt.numResults - 1;
    else
    	elt.selectedIndex--;

    psug_highlightsel(elt, qElt);
	if (typeof elt.results != 'undefined') {
	    qElt.value = elt.results[elt.selectedIndex]; //disable when using auto-complete
	}
	else {
		qElt.value = '';
	}
}

function psug_handledown(elt, qElt)
{
    if (elt.numResults > 0 && psug_ishidden(elt)) {
        psug_show(elt);
        return;
    }

    if (elt.selectedIndex == elt.numResults -1)
        return;
    else if (elt.selectedIndex < 0)
        elt.selectedIndex = 0;
    else
        elt.selectedIndex++;
    psug_highlightsel(elt, qElt);
	if (typeof elt.results != 'undefined') {
	    qElt.value = elt.results[elt.selectedIndex]; //disable when using auto-complete
	}
	else {
		qElt.value = '';
	}
}

function psug_highlightsel(elt, qElt)
{
    divs = elt.getElementsByTagName('div');
    for (i = 0; i < divs.length; i++) {
        if (i == elt.selectedIndex) {

            divs[i].className = 'srs';
            elt.tempQuery = elt.results[i];
			/*if (qElt) {
				if (qElt.value == z) {
					qElt.value = elt.results[i];
	                if (qElt.createTextRange) {
	                	r = qElt.createTextRange();
	                    r.moveStart('character', qElt.enteredValue.length);
	                    r.moveEnd('character', qElt.value.length);
	                    r.select();
	                } else if (qElt.setSelectionRange) {
	                	r = qElt.setSelectionRange(qElt.enteredValue.length,qElt.value.length)
	                }
				} else {
					b = false;
					q = qElt.value;
					GetAutoComplete();
				}
            }*/

        }
        else
            divs[i].className = 'sr';
    }
}


function hide() {
	var elem = document.getElementById("search-results");
	psug_hide(elem);
}



	var result;
var keyElemq = 0;
var keyElemm = 0;
var tid;
var autocomplete = new sack(ajax_delate_psug_url);
autocomplete.method = "GET";
var rc = new Array();
var b = false;
var back = false;
var q = "";
var z = "";

function GetAutoComplete() {
	var elem = document.getElementById("search-results");
		var query = q//document.getElementById("Query").value;
		var elemq = document.getElementById("Query");
	if (b) { return false;}
	if (trim(q).length == 0) return false;
	b=true;
	z = q;
	autocomplete = new sack(ajax_delate_psug_url);
    autocomplete.method = "GET";


    //choose function to call in desination file we post to
    //universal catalog parameters
    if (typeof ajax_param_universal_catalog != "undefined") {
    	 if (typeof ajax_param_brand != "undefined") {
			var query_params = "action=get_plbb&query=" + query + "&brandid=" + ajax_param_brand + "&catalog_type=universal";
		} else {
	    	var query_params = "action=get_pl&query=" + query + "&catalog_type=universal";
		}
    //unified catalog parameters
    } else {
	    if (typeof ajax_param_brand != "undefined") {
			var query_params = "action=get_plbb&query=" + query + "&brandid=" + ajax_param_brand;
		} else if (typeof ajax_param_make != "undefined" && typeof ajax_param_model != "undefined" && typeof ajax_param_year != "undefined") {
	    	var query_params = "action=get_plbmmy&query=" + query + "&makeid=" + ajax_param_make + "&modelid=" + ajax_param_model + "&year=" + ajax_param_year;
		}
    }


    autocomplete.runAJAX(query_params);
    autocomplete.onCompletion = fillAutoComplete;

}
function fillAutoComplete() {
	var result = autocomplete.response;
	var elem = document.getElementById("search-results");
	var elemq = document.getElementById("Query");
	if (trim(q).length == 0) return false;
	elemq.enteredValue = q//elemq.value;
    if (result != "") {
		fields=result.split(',');
		psug_emptyresults(elem);
		psug_show(elem);
		rc[q] = new Array();
	    for (var i=0; i<fields.length; i++) {
	    	psug_addresult(elem, elemq, fields[i], "", false,i);
	    	rc[q][i] = fields[i];
	    }
	    //REENABLE WHEN ENABLING AUTO COMPLETE
	    //if (!back)
	    //psug_handledown(elem, elemq);
	    b = false;
	    return true;
    } else {
    	psug_emptyresults(elem);
    	psug_hide(elem);
    	b = false;
    	return false;
    }
}
function fillAutoCompleteCache() {
	var elem = document.getElementById("search-results");
	var elemq = document.getElementById("Query");
	if (trim(elemq.value).length == 0) { psug_hide(elem); return false;}
	if (elemq.enteredValue != elemq.value) { //ignore initial backspace
		q = (elemq.value.toLowerCase());
		psug_emptyresults(elem);
		psug_show(elem);
		elemq.enteredValue = q;
		cl = rc[q];
		if (typeof cl == "undefined") {GetAutoComplete(); return false;}
		for (var i=0; i<cl.length; i++) {psug_addresult(elem, elemq, cl[i], "", false,i);}
	    //REENABLE WHEN ENABLING AUTO COMPLETE
		//if (!back)
	    //psug_handledown(elem, elemq);
		return true;
	} else {
		return false;
	}
}

function keyDown(e) {
	key = getkeycode(e);
	var elem = document.getElementById("search-results");
	var elemq = document.getElementById("Query");
	if (key == 8) {
		tid=setTimeout('fillAutoCompleteCache()', KEYPRESS_TIMEOUT);
		back = true;
	} else if (key != 27 && key != 38 && key !=40) {
		elemq.enteredValue = elemq.value;
		back = false;
		tid=setTimeout('fillAutoCompleteCache()', KEYPRESS_TIMEOUT);
	}


   switch (key) {
        case 27: // escape
            psug_hide(elem);
            return false;
            break;
        case 38: // up arrow
        	psug_handleup(elem, elemq);
            return false;
            break;
        case 40: // down arrow
        	psug_handledown(elem, elemq);
        	return false;
            break;
        default:
            //%3\$s.start();
    }


    return true;
}

document.onkeydown=keyDown;

