﻿/// <reference path="jquery-1.3.2.js" />
/// <reference path="BrandonFunctions.js" />

var autoCompleteTimeout;

var SearchersInfo = []; // N.B this is populated server side

function setAutoComplete(SearcherID) {
    clearTimeout(autoCompleteTimeout);
    autoCompleteTimeout = setTimeout("getAutoComplete('" + SearcherID + "');", 500);
}

function getAutoComplete(SearcherID) {
    var textBox = SearchersInfo[SearcherID].TextBox;
    if (textBox.value != textBox.autoCompleteValue) {
        ShowAjaxLoading(SearcherID);
        CallWebMethod(SearcherID, textBox.value, SeacherCallbackHandler, SeacherFailedCallbackHandler);
    }
}

function CallWebMethod(SearcherID, TextBoxValue, SeacherCallbackHandler, SeacherFailedCallbackHandler) {
    var webMethodCall = SearchersInfo[SearcherID].WebMethod;
    webMethodCall = String_Format(webMethodCall, [SearcherID, TextBoxValue, 'SeacherCallbackHandler', 'SeacherFailedCallbackHandler', [TextBoxValue, SearcherID]]);
    eval(webMethodCall);
}

function SeacherCallbackHandler(result) {
    var textBox = SearchersInfo[result.SearcherID].TextBox;
    if (textBox.value == result.SearchTerm) {
        textBox.autoCompleteValue = result.SearchTerm;
        ClearTableRows(result.SearcherID);

        var buf = new StringBuffer();
        buf.append(String_Format("<table class='{0}'", [SearchersInfo[result.SearcherID].ResultsTableClassName]));
        buf.append(" style='width:95%;'>");
        buf.append(SearchersInfo[result.SearcherID].TableHeader);
        for (var i = 0; i < result.Entities.length; i++) {
            AddRow(buf, result.SearcherID, result.Entities[i])
        }
        buf.append("</table>");
        SearchersInfo[result.SearcherID].ResultsPanel.innerHTML = buf.toString();

        if (result.Entities.length > 0) {
            ShowResults(result.SearcherID);
        }
        else {

            DisplayFailure(result.SearcherID);
        }
    }
}

function SeacherFailedCallbackHandler(Exception, Values) {
    var searchString = Values[0] || "";
    var searcherID = Values[1] || "";
    if (SearchersInfo[searcherID].TextBox.value == searchString) {
        DisplayFailure(searcherID);
    }
}

function ShowResults(SearcherID) {
    $(SearchersInfo[SearcherID].ErrorPanel).hide();
    $(SearchersInfo[SearcherID].ResultsPanel).show();
    $(SearchersInfo[SearcherID].LoadingPanel).hide();
}

function DisplayFailure(SearcherID) {
    $(SearchersInfo[SearcherID].ErrorPanel).show();
    $(SearchersInfo[SearcherID].ResultsPanel).hide();
    $(SearchersInfo[SearcherID].LoadingPanel).hide();
}

function ClearTableRows(SearcherID) {
    $(SearchersInfo[SearcherID].ResultsPanel).innerHTML = '';
}

function ShowAjaxLoading(SearcherID) {
    $(SearchersInfo[SearcherID].ErrorPanel).hide();
    $(SearchersInfo[SearcherID].ResultsPanel).hide();
    $(SearchersInfo[SearcherID].LoadingPanel).show();
}

function AddRow(Buffer, SearcherID, EntityDetails) {

    var row = SearchersInfo[SearcherID].RowTemplate;
    var entityProps = SearchersInfo[SearcherID].PropertiesArray;
    var formatValues = [];
    for (var i = 0; i <= entityProps.length; i++) {
        formatValues[i] = EntityDetails.Properties[entityProps[i]];
    }
    row = String_Format(row, formatValues);
    Buffer.append(row);
}

if (typeof (Sys) !== 'undefined')
    Sys.Application.notifyScriptLoaded();