﻿var inputId = ".inputText";
var liveSearchResult = "#livesearchresult";
var categoryHeadingId = "#categoryHeading";
var recomendedParentId = "#recomededParent";
var normalResultId = "#resultsN";
var FAQResultId = "#resultsFQA";
var timeTableResultId = "#resultsR";
var recomendedPageId = "#recomendedPage"
var liveSearchCategoriesId = "#livesearchcategories";
var linkRuterId = "linkRuter";
var linkFAQId = "linkFAQ";
var linkTiemTableId = "linkTimeTable";
var hiddenSearchPageId = "#hiddenSearchPageId";
var tableId = "";

$(document).ready(function () {
    $(inputId).keyup(function (e) {

        if (!isCorrectKey(e)) {
            return;
        }

        emptyContainers();
        hidecategoryHeadingAndRecomendedPage();

        var text = $(inputId).val();
        if (text.length < 3) {
            $(liveSearchResult).hide();
        }
        createLinks();
    });

    formatAutocomplete();

    setupAC(inputId, SearchPageIds);
});

function isCorrectKey(e) {
    var k;
    document.all ? k = e.keyCode : k = e.which;
    if (!((k > 64 && k < 91) || (k > 96 && k < 123) || k == 8)) {
        return false;
    }
    return true;
}

function hidecategoryHeadingAndRecomendedPage() {
    $(categoryHeadingId).hide();
    $(recomendedParentId).hide();
}

function emptyContainers() {
    $(normalResultId).html("");
    $(FAQResultId).html("");
    $(timeTableResultId).html("");
    $(recomendedPageId).html("");
    $(liveSearchCategoriesId).html("");
}

function createLinks() {
    CreateListLink(1, linkRuterId);
    CreateListLink(2, linkFAQId);
    CreateListLink(3, linkTiemTableId);
}

function formatAutocomplete() {
    var __response = $.ui.autocomplete.prototype._response;
    $.ui.autocomplete.prototype._response = function (content) {
        __response.apply(this, [content]);
        this.element.trigger("autocompletesearchcomplete", [content]);
    };

    $.ui.autocomplete.prototype._renderItem = function (ul, item) {
        var re = $.ui.autocomplete.escapeRegex(this.term);

        var matcher = new RegExp("(?![^&;]+;)(?!<[^<>]*)(" + re + ")(?![^<>]*>)(?![^&;]+;)", "gi");
        item.label = item.label.replace(matcher, "<span class='wordSelect'>$1</span>");
        var template = setUpResult(item.value, item.result);
        return $(template)
                    .data("item.autocomplete", item)
                    .append(item.label)
                    .appendTo(tabelId);
    };
}

function setUpResult(value, result) {
    var image;
    var recomendedPagewithImage = 0;
    var rootAndImage = value.split('|');
    var rootId = rootAndImage[0];
    if (rootAndImage.length > 1) {
        image = rootAndImage[1];
    }
    if (rootId == FAQPageRootId) {
        tabelId = FAQResultId;
    }
    else if (rootId == TimeTablesRootId) {
        tabelId = timeTableResultId;
    }
    else if (rootId == -1) {
        tabelId = recomendedPageId;
        $(recomendedParentId).show();
        if (image) {
            recomendedPagewithImage = 1;
        }
    }
    else {
        tabelId = normalResultId;
    }

    $(liveSearchResult).show();

    var categories = result.toString();
    if (categories != "") {
        $(categoryHeadingId).show();
        $(liveSearchCategoriesId).append(CreateCategoryLinks(categories));
    }
    var template;
    if (recomendedPagewithImage > 0) {
        template = "<img style='float:right;' src='" + image + "' /><div></div>";
    }
    else {
        template = "<div class='text'></div>";
    }
    return template;
}

function setupAC(input, id) {
    var webMethod = "/CustomWebService/LiveSearch.asmx/PerformSearch";
    $(input).autocomplete({
        source: function (request, response) {
            GetResponse(input, webMethod, id, response);
        },
        minLength: 3,
        delay: 150
    }).bind("autocompletesearchcomplete", function (event, contents) {
        if (!contents || contents.length == 0) {
            $(liveSearchResult).hide();
        }
    });
}

function GetResponse(input, webMethod, id, response) {
    return $.ajax({
        type: "POST",
        url: webMethod,
        data: JSON.stringify({ searchQuery: $(input).val(), rootPageId: id, searchPageId: $(hiddenSearchPageId).val() }),
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (msg) {
            response($.map(JSON.parse(msg.d), function (item) {
                return {
                    label: "<a class='bold' href='" + item.PageUrl + "'>" + item.PageName + "</a><p>" + item.PageText + "</p>",
                    value: item.SectionPageId + "|" + item.ImageUrl,
                    result: item.PageCategoryNamesAndIds
                };
            }));
        }
    });
}

function CreateLink() {
    return SearchPageUrl + "?" + QueryStringParamNameText + "=" + $(inputId).val();
}

function CreateListLink(id, linkId) {
    var link = CreateLink() + "&" + QueryStringParamNameListId + "=" + id;

    $("#" + linkId).attr("href", link);
}

function CreateCatLink(id) {
    return CreateLink() + "&" + QueryStringParamNameCategory + "=" + id;
}

function CreateCategoryLinks(categories) {
    var idAndcat = categories.split(",");
    var returnLinks = "";
    for (i = 0; i < idAndcat.length; i++) {
        if (idAndcat[i]) {
            var arr = idAndcat[i].split("|");
            var links = $(liveSearchCategoriesId + " a");            
            var add = true;
            for (var x = 0; x < links.length; x++) {
                if (links[x].innerText == arr[1]) {
                    add = false;
                    break;
                }
            }

            if (add) {
                returnLinks += "<a href='" + CreateCatLink(arr[0]) + "'>" + arr[1] + "</a>"
            }
        }
    }
    return returnLinks;
}
