﻿var g_suggestCache = {};
var g_suggest_active = -1;
var g_suggest_mouseoverresults = false;

function suggestSetup() {
    $("#suggest").bind("mouseover", function() {
        g_suggest_mouseoverresults = true;
    }).bind("mouseout", function() {
        g_suggest_mouseoverresults = false;
    });
    
    $("#qu").bind("keyup", function(e) {
        // track last key pressed
        switch (e.keyCode) {
            case 38: // up
                e.preventDefault();
                suggestMoveSelect(-1);
                break;
            case 40: // down
                e.preventDefault();
                suggestMoveSelect(1);
                break;
            case 9:  // tab
            case 13: // return                   
                break;
            default:
                active = -1;
                suggestGet(this);
                break;
        }
    }).bind("blur", function() {
        if (!g_suggest_mouseoverresults)
            $("#suggest").hide();
    });
}

function suggestMoveSelect(step) {
    var lis = $("#suggest li");
    if (lis.length == 0)
        return;

    $("#suggest").show();

    g_suggest_active += step;

    if (g_suggest_active < 0) {
        g_suggest_active = 0;
    } else if (g_suggest_active >= lis.size()) {
        g_suggest_active = lis.size() - 1;
    }

    lis.removeClass("suggest_over");

    $(lis[g_suggest_active]).addClass("suggest_over");
    $("#qu").val($(lis[g_suggest_active]).text());
}

function suggestGet(self) {
    var q = $(self).val();
    if (q.length > 1 && q.length < 31) {
        $("#suggest").show();
        if (g_suggestCache[q]) {
            suggestShow(g_suggestCache[q]);
        }
        else {
            var url = "http://api.bing.com/qson.aspx?market=en-US&JsonType=callback&JsonCallback=?&query=" + escape(q);
            $.getJSON(url, suggestGetCallback);
        }
    }
    else if (q.length <= 1) {
        $("#suggest").hide();
    }
}

function suggestGetCallback(data, textStatus) {
    g_suggestCache[data.SearchSuggestion.Query] = data;
    suggestShow(data);
}

function suggestShow(data) {
    if (data && data.SearchSuggestion && data.SearchSuggestion.Section && data.SearchSuggestion.Section.length) {
        var s = "<ul>";
        for (var i = 0; i < data.SearchSuggestion.Section.length; i++) {
            s += "<li>" + data.SearchSuggestion.Section[i].Text + "</li>";
        }
        s += "</ul>";
        
        $("#suggest").html(s);

        $("#suggest ul li").bind("click", function() {
            $("#qu").val($(this).text());
            $("#btnGo").click();
        });
        
        $("#suggest ul li").bind("mouseover", function() {
            $("#suggest li").removeClass("suggest_over");
            $(this).addClass("suggest_over");
            g_suggest_active = $("#suggest li").index(this);
        });
    }
}