﻿var AppId = "18245791ECDB9B2F65A171913073B0E8963B83AE";
var Offset = 0;
var PageSize = 10;
var Pages = 0;
var CurrentPage = 1;

function ShowSearchWindow() {
    // Query in WLSearchBoxInput
    var queryText = document.getElementById('WLSearchBoxInput').value;
    
    if (queryText.length == 0) {
        return;
    }
        
    // Check browser version and determine correct "display" css value
    var sDisplayCSSValue = "table";
    if (navigator.appName == "Microsoft Internet Explorer") {
        sDisplayCSSValue = "block";
    }
    var LiveSearchTable = document.getElementById("LiveSearchTable");

    // unhide table
    LiveSearchTable.style.display = sDisplayCSSValue;
    // Position box so it lands in center of scrolled window
    LiveSearchTable.style.top = (document.body.scrollTop);

    $('#LiveSearchDiv1').css("margin-top", "40px");
    
    //Show semi-transparent white background
    var backgroundWhite = document.getElementById("backgroundWhite");
    backgroundWhite.style.display = "block";
    backgroundWhite.style.height = document.body.scrollHeight;
    // Show Slide Show window
    document.getElementById("LiveSearchDiv1").style.display = sDisplayCSSValue;


    Search(queryText);
}

function CloseSearchWindow() {
    //Hide semi-transparent white background
    backgroundWhite.style.display = "none";
    // Hide Slide Show Span
    LiveSearchDiv1.style.display = "none";
    // Hide slide show table
    LiveSearchTable.style.display = "none";
    LiveSearchResultsDiv.innerHTML = "";
}

function ChangeSet(changeOffset) {
    if (changeOffset > 0)
        CurrentPage += 1;
    else
        CurrentPage -= 1;

    Offset += changeOffset;
    // Query in WLSearchBoxInput
    var queryText = document.getElementById('WLSearchBoxInput').value;
    Search(queryText);
    $('#LiveSearchResultsDiv').scrollTop(0);
}

function ShowSearchNav() {
    if (CurrentPage > 1)
        $('#searchNavPrev').show();
    else
        $('#searchNavPrev').hide();

    if (CurrentPage < Pages)
        $('#searchNavNext').show();
    else
        $('#searchNavNext').hide();
}

// Live Search API 2.0 code sample demonstrating the use of the
// Web SourceType over the JSON Protocol.
function Search(query) {
    var siteQuery = query + " site:www.officelabs.com";
    var requestStr = "http://api.search.live.net/json.aspx?"

    // Common request fields (required)
            + "AppId=" + AppId
            + "&Query=" + siteQuery
            + "&Sources=Web"

    // Common request fields (optional)
            + "&Version=2.0"
            + "&Market=en-us"
            + "&Adult=Moderate"
            + "&Options=EnableHighlighting"

    // Web-specific request fields (optional)
            + "&Web.Count=" + PageSize
            + "&Web.Offset=" + Offset
            + "&Web.Options=DisableHostCollapsing+DisableQueryAlterations"

    // JSON-specific request fields (optional)
            + "&JsonType=callback"
            + "&JsonCallback=SearchCompleted";

    var requestScript = document.createElement("script");
    requestScript.type = "text/javascript";
    requestScript.src = requestStr;

    var head = document.getElementsByTagName("head");
    head[0].appendChild(requestScript);
}

function SearchCompleted(response) {
    var errors = response.SearchResponse.Errors;
    if (errors != null) {
        // There are errors in the response. Display error details.
        DisplayErrors(errors);
    }
    else {
        // There were no errors in the response. Display the
        // Web results.
        DisplayResults(response);
    }
}

function DisplayResults(response) {
    var output = document.getElementById("LiveSearchResultsDiv");
    output.innerHTML = "";
    var resultsHeader = document.createElement("span");
    var resultsList = document.createElement("ul");
    output.appendChild(resultsHeader);
    output.appendChild(resultsList);

    var results = response.SearchResponse.Web.Results;
    Pages = Math.ceil(response.SearchResponse.Web.Total / PageSize);

    // send to WT
    wt_LiveSearch(document.getElementById('WLSearchBoxInput').value, response.SearchResponse.Web.Total);

    ShowSearchNav();
    var queryText = document.getElementById('WLSearchBoxInput').value;

    var resultsHeaderInnerHtml = "";

    if (response.SearchResponse.Web.Total > 0) {
        // Display the results header.
        resultsHeaderInnerHTML = "Results for " + queryText + ".";

        // Display the Web results.
        var resultsListItem = null;
        var resultStr = "";
        for (var i = 0; i < results.length; ++i) {
            resultsListItem = document.createElement("li");
            resultsList.appendChild(resultsListItem);

            resultStr = "<a href=\""
		+ results[i].Url
                + "\">"
                + results[i].Title
		+ "</a>"
		+ "<span style='display: block;'>"
		+ results[i].Description
		+ "</span>"
		+ "<div class='searchResultUrl'>"
		+ results[i].Url
		+ "</div>";

            // Replace highlighting characters with strong tags.
            resultsListItem.innerHTML = ReplaceHighlightingCharacters(
                resultStr,
                "<strong>",
                "</strong>");
        }
    }
    else {
        resultsHeaderInnerHTML = "No results for "
            + queryText + ".";
    }
    
    resultsHeader.innerHTML = "<h1 style='font-size: 24px; color: #666; margin: 0;'>" + resultsHeaderInnerHTML + "</h1>";
}

function ReplaceHighlightingCharacters(text, beginStr, endStr) {
    // Replace all occurrences of U+E000 (begin highlighting) with
    // beginStr. Replace all occurrences of U+E001 (end highlighting)
    // with endStr.
    var regexBegin = new RegExp("\uE000", "g");
    var regexEnd = new RegExp("\uE001", "g");

    return text.replace(regexBegin, beginStr).replace(regexEnd, endStr);
}

function DisplayErrors(errors) {
    var output = document.getElementById("output");
    var errorsHeader = document.createElement("h4");
    var errorsList = document.createElement("ul");
    output.appendChild(errorsHeader);
    output.appendChild(errorsList);

    // Iterate over the list of errors and display error details.
    errorsHeader.innerHTML = "Errors:";
    var errorsListItem = null;
    for (var i = 0; i < errors.length; ++i) {
        errorsListItem = document.createElement("li");
        errorsList.appendChild(errorsListItem);
        errorsListItem.innerHTML = "";
        for (var errorDetail in errors[i]) {
            errorsListItem.innerHTML += errorDetail
                    + ": "
                    + errors[i][errorDetail]
                    + "<br />";
        }

        errorsListItem.innerHTML += "<br />";
    }
}