﻿var KEYDOWN = 40, KEYUP = 38, KEYENTER = 13;
var currTerm = '', isActiveSearch = true, seqNum = 0, highestSoFar = 0;
function initTypeAhead() {
    $('#txtSearch').keyup(txtSearch_KeyUp).keydown(txtSearch_KeyDown).focus();
}
function txtSearch_Blur(e) {
    $('.dropdown').css("visibility", "hidden");
}
function txtSearch_KeyDown(e) {
    switch (e.keyCode) {
        case KEYDOWN:
            $('.dropdown').css("visibility", "visible");
            $('.dropdown select').focus();
            // user has seen something that s/he likes, stop displaying any further results
            highestSoFar = seqNum;
            $('#txtSearch').removeClass("loading");
            break;
        case KEYUP:
            break;
        case KEYENTER:
            chooseItem();
            return false;
            break;
        default:
            isActiveSearch = true;
            break;
    }
}
function chooseItem() {
    $('.dropdown').css("visibility", "hidden");
    var rawsearch = $('#txtSearch').val();
    doSearch(rawsearch);
}
function txtSearch_KeyUp(e) {
    if (!isActiveSearch) return;
    var term = $(this).val();
    if (term.length < 2) return;
    if (term != currTerm) {
        currTerm = term;
        var json = ob_post.post(null, 'DoTypeAhead', txtSearch_AJAXReturn, { term: term, sequenceNumber: ++seqNum });
        if ($('#txtSearch.loading').size() == 0) $('#txtSearch').addClass("loading");
        //$('#dDebug').append("<div>Just sent out sequence number" + seqNum + "</div>");
    }
}

function select_Change() {
    $('.dropdown').css('visibility', 'visible');
    $('#txtSearch').val($('.dropdown select :selected').val());
}
function select_Click() {
    chooseItem();
}
function select_KeyPress(e) {
    if (e.keyCode == KEYENTER) {
        chooseItem();
        return false;
    } else return true;
}
function txtSearch_AJAXReturn(json) {
    var bracketIndex = json.indexOf('[');
    var resultNum = json.substring(0, bracketIndex) * 1;
    //$('#dDebug').append("<div>Just got back " + resultNum + " and sequence number is " + seqNum + "</div>");
    if (resultNum <= highestSoFar) return;
    if (resultNum == seqNum) {
        // this is the last result that we want
        $('#txtSearch').removeClass("loading");
    }
    highestSoFar = resultNum;
    var arr, html = '<select size="10" style="width:100%" onchange="select_Change()" onclick="select_Click()" onkeypress="return select_KeyPress(event);">';
    eval('arr = ' + json.substring(bracketIndex));
    for (var i = 0, len = arr.length; i < len; i++) {
        html += '<option>' + arr[i] + '</option>';
    }
    html += '</size>';
    $('.dropdown').html(html).css({ visibility: 'visible' });
}