﻿var searchID = 0;
var CategoryRowCount = 0;
var FilterRowCount = 0;
var SearchPageType = 0;

function PickSearchTerm(searchterm, PageType) {
    SearchPageType = PageType;
    $('#Searchfield').val(searchterm);
    GetSearchResult('', '', '', '', PageType);
}

//function ClearBAFilter() {

//    GetSearchResult(categoryFilter, '', yearFilter, sectionFilter, '');
//}
function ClearYearFilter() {

    GetSearchResult(categoryFilter, '', sectionFilter, '', SearchPageType);
}
function ClearSectionFilter() {

    GetSearchResult(categoryFilter, yearFilter, '', '', SearchPageType);
}
function Search(PageType) {
    SearchPageType = PageType;
    GetSearchResult('', '', '', '', PageType);
}

function CreateFirstCategoryElement(tot, selected) {

    var filterall = document.getElementById('filteralltext');
    var filteralltext = '';
    if (filterall != null) {
        filteralltext = filterall.value;
    }
    return CreateCategoryElement(filteralltext, filteralltext, tot, selected);
}
function GetTotal(cats) {
    var tot = 0;
    for (var i = 0; i < cats.length; i++) {
        tot += parseInt(cats[i].Value);
    }
    return tot;
}

function CreateCategoryElement(title, key, value, selected) {
    if (title != null && title != '') {
        var row = document.createElement("li");
        row.className = "SearchTabMenuLI";
        var className = 'MenuItem';
        if (selected) {
            var left = document.createElement("div");
            left.className = "SelectedVerticalLeft";
            row.appendChild(left);
            className = 'SearchSelected';
        }
        var link = document.createElement("a");
        link.innerHTML = title;
        link.className = className;
        link.setAttribute('href', "javascript:GetSearchResult('" + key + "','" + yearFilter + "','" + sectionFilter + "','','" + SearchPageType + "')");
        row.appendChild(link);
        if (selected) {
            var right = document.createElement("div");
            right.className = "SelectedVerticalRight";
            row.appendChild(right);
        }
        return row;
    }
    return null;
}
//function CreateBAElement(el) {
//    if (el.Key != null && el.Key != '') {
//        var row = document.createElement("a");
//        row.className = "FilterItem";
//        row.innerHTML = el.Key;
//        row.setAttribute('onclick', "return GetSearchResult('" + categoryFilter + "','" + el.Key + "','" + yearFilter + "','" + sectionFilter + "','')");
//        return row;
//    }
//    return null;
//}
function CreateYearElement(el) {
    if (el.Key != null && el.Key != '') {
        var row = document.createElement("a");
        row.className = "FilterItem";
        row.innerHTML = el.Key;
        row.setAttribute('href', "javascript:GetSearchResult('" + categoryFilter + "','" + el.Key + "','" + sectionFilter + "','','" + SearchPageType + "')");
        return row;
    }
    return null;
}
function CreateSectionElement(el) {
    if (el.Key != null && el.Key != '') {
        var row = document.createElement("a");
        row.className = "FilterItem";
        row.innerHTML = el.Key;
        row.setAttribute('href', "javascript:GetSearchResult('" + categoryFilter + "','" + yearFilter + "','" + el.Key + "','','" + SearchPageType + "')");
        return row;
    }
    return null;
}
function CreateSynonymElement(el) {
    if (el != null && el != '') {
        var row = document.createElement("a");
        row.className = "FilterItem";
        row.innerHTML = el;
        row.setAttribute('href', "javascript:PickSearchTerm('" + el + "')");
        return row;
    }
    return null;
}

function CreateElement(el) {
    // outmost div
    var pri = document.createElement("div");
    pri.className = "PageReferenceItem";
    var contentdiv = document.createElement("div");
    contentdiv.className = "PageReferenceItemContent";
    var heading = document.createElement("a");

    if (el.Type < 2 && el.Thumbnail != null && el.Thumbnail != '') {
        heading.className = "ImageItemHeading";
        var imgDiv = document.createElement("a");
        imgDiv.setAttribute('href', el.Url);
        imgDiv.className = "ImageArea";
        var img = document.createElement("img");
        img.className = "ItemImage";
        img.src = el.Thumbnail;
        imgDiv.appendChild(img);
        contentdiv.appendChild(imgDiv);
    } else {
        heading.className = "ItemHeading";
    }

    heading.setAttribute('href', el.Url);
    heading.innerHTML = el.Title;
    contentdiv.appendChild(heading);

    if (el.Type == 1) {
        if (el.StartDate != null && el.StartDate != '') {
            var date = document.createElement("span");
            date.className = "ItemDate";
            date.innerHTML = el.StartDate;

            if (el.EndDate != null && el.EndDate != '') {
                date.innerHTML += " - " + el.EndDate;
            }
            contentdiv.appendChild(date);
        }
    }
    else if (el.Type == 2 && el.PubDate != null && el.PubDate != '') {
        var date = document.createElement("span");
        date.className = "ItemDate";
        date.innerHTML = el.PubDate;
        contentdiv.appendChild(date);
    }
    if (el.Type > 1 && el.Text != null) {
        var intro = document.createElement("span");
        intro.className = "ItemIntro";
        intro.innerHTML = el.Text;
        contentdiv.appendChild(intro);
    }
    pri.appendChild(contentdiv);
    return pri;
}
function CreatePaging(el) {
    var current = el.CurrentPage;

    if (current == null) {
        $('#Paging').hide();
        return null;
    }
    else {
        $('#Paging').show();
        var total = el.TotalPages;
        var back;
        var next;

        var cont = document.createElement("span");
        if (current == 1) {
            back = document.createElement("span");

        }
        else {
            back = document.createElement("a");
            back.setAttribute('href', "javascript:GetPage('" + (parseInt(current) - 1) + "')");

        }
        back.innerText = "<&nbsp;";
        back.innerHTML = "<&nbsp;";
        cont.appendChild(back);

        for (var i = 1; i <= total; i++) {
            if (i != 1) {
                var divider = document.createElement("span");
                divider.innerText = "&nbsp;|&nbsp;";
                divider.innerHTML = "&nbsp;|&nbsp;";
                cont.appendChild(divider);
            }
            var a;
            if (i == current) {
                a = document.createElement("span");
            }
            else {
                a = document.createElement("a");
                a.setAttribute('href', "javascript:GetPage('" + i + "')");

            }
            a.innerText = i;
            a.innerHTML = i;
            cont.appendChild(a);
        }

        if (current == total) {
            next = document.createElement("span");

        }
        else {
            next = document.createElement("a");
            next.setAttribute('href', "javascript:GetPage('" + (parseInt(current) + 1) + "')");

        }
        next.innerText = "&nbsp;>";
        next.innerHTML = "&nbsp;>";
        cont.appendChild(next);

        return cont;
    }
}


function GetPage(index) {
    GetSearchResult(categoryFilter, yearFilter, sectionFilter, index, SearchPageType);

}
var categoryFilter = '';
var sectionFilter = '';
var yearFilter = '';
//var businessAreaFilter = '';

function GetSearchResult(Category, Year, Section, Page, PageType) {
    var pageType = '';
    if (PageType) {
        pageType = PageType;
    }
    var SearchWord = $('#Searchfield').val();
    SearchWord = SearchWord.replace(/\'/g, '');
    SearchWord = SearchWord.replace(/\\/g, '');
    SearchWord = SearchWord.replace(/\"/g, '');
    
    if ($("#SearchMessage").css("display") == "block") {
        $('#SearchMessage').hide();
    }
    // input length is less than the min required to trigger a request
    // reset input string
    // do nothing
    if (SearchWord.length < 3) {
        ClearSearch();
        return false;
    }
    if ($("#LoadingSymbol").css("display") != "block") {
        $("#LoadingSymbol").show();
    }
    var ActiveFilterArea = document.getElementById('ActiveFilterArea');
    var ActiveFilter = document.getElementById('ActiveFilter');
    categoryFilter = Category;
    if (ActiveFilterArea != null && ActiveFilter != null) {
        if ($("#ActiveFilterArea").css("display") != "block") {
            $('#ActiveFilterArea').show();
        }
        //businessAreaFilter = BusinessArea;
        yearFilter = Year;
        sectionFilter = Section;
        ActiveFilter.innerHTML = '';
        var removefilter = document.getElementById('removefiltertext');
        var removefiltertext = '';
        if (removefilter != null) {
            removefiltertext = removefilter.value;
        }
        //        if (BusinessArea != '') {

        //            ActiveFilter.innerHTML += BusinessArea +
        //                '<img onclick=\"return ClearBAFilter()\" src=\"/Templates/Public/Images/Search/RemoveFilter.png\" alt=\"' + removefiltertext + '\" />';
        //        }
        if (Year != '') {

            ActiveFilter.innerHTML += Year +
                           '<img onclick=\"return ClearYearFilter()\" src=\"/Templates/Public/Images/Search/RemoveFilter.png\" alt=\"' + removefiltertext + '\" />';

        }
        if (Section != '') {

            ActiveFilter.innerHTML += Section +
                           '<img onclick=\"return ClearSectionFilter()\" src=\"/Templates/Public/Images/Search/RemoveFilter.png\" alt=\"' + removefiltertext + '\" />';

        }
        if (ActiveFilter.innerHTML == '') {

            FilterRowCount = 0;
            if ($("#ActiveFilterArea").css("display") == "block") {
                $('#ActiveFilterArea').hide();
            }
        }
    }
    clearTimeout(getSuggestionsTimer);
    getSuggestionsTimer = setTimeout(
        function() {
        DoAjaxSearch(SearchWord, Category, Year, Section, Page, pageType);
        },
        300);



}
var getSuggestionsTimer = false;
var categoryValues = new Array();
var categoryKeys = new Array();


function DoAjaxSearch(SearchWord, Category, Year, Section, Page, PageType) {
    searchID++;
    $.ajax({
        type: "POST",
        url: "/SearchWebService.asmx/Search",
        dataType: "json",
        //data: '{"SearchWord":"' + SearchWord + '","Category":"' + Category + '","BusinessArea":"' + BusinessArea + '","Year":"' + Year + '","Section":"' + Section + '","Page":"' + Page + '", "SearchID":"' + searchID + '", "RowCount":"0"}',
        data: '{"SearchWord":"' + SearchWord + '","Category":"' + Category + '","Year":"' + Year + '","Section":"' + Section + '","Page":"' + Page + '", "SearchID":"' + searchID + '", "PageType":"' + PageType + '"}',
        async: true,
        contentType: "application/json; charset=utf-8",
        error: AjaxFailed,
        success: function (msg) {
            if (msg != null && msg.d != null) {

                if (msg.d.SearchID == searchID) {
                    var results = msg.d;

                    var cleanSearch = false;
                    if (categoryFilter == '' && sectionFilter == '' && yearFilter == '') {
                        cleanSearch = true;
                    }

                    if (results.Pages != null) {
                        if ($("#SuggestionPanel").css("display") == "block") {
                            $('#SuggestionPanel').slideUp(400);
                        }
                        if ($("#ResultPanel").css("display") != "block") {
                            $('#ResultPanel').slideDown(400);
                        }
                        $('#SearchIcon').addClass('Close');
                        var PagesContainer = document.getElementById('ResultItems');
                        if (PagesContainer != null) {
                            PagesContainer.innerHTML = '';
                            //Pages
                            if (results.Pages != null) {
                                for (var i = 0; i < results.Pages.length; i++) {
                                    var el = CreateElement(results.Pages[i]);
                                    if (el != null) {
                                        PagesContainer.appendChild(el);
                                    }
                                }
                            }
                        }
                        var CategoryContainerDiv = document.getElementById('CategoryContainer');
                        if (CategoryContainerDiv != null) {

                            CategoryContainerDiv.innerHTML = '';

                            var CategoryContainer = document.createElement("ul");
                            CategoryContainer.className = "SearchTabMenuUL";
                            CategoryContainerDiv.appendChild(CategoryContainer);

                            //First element "All"
                            var filterall = document.getElementById('filteralltext');
                            var filteralltext = '';
                            if (filterall != null) {
                                filteralltext = filterall.value;
                            }

                            //if (categoryFilter == '') { //new search, update categories
                            if (cleanSearch) {
                                //Categories
                                if (results.Categories != null) {
                                    if (cleanSearch) {
                                        categoryKeys = new Array();
                                        categoryValues = new Array();
                                    }

                                    categoryFilter = results.DefaultCategory;
                                    var selected = '' == categoryFilter || categoryFilter == filteralltext;
                                    //var tot = GetTotal(results.Categories);
                                    var tot = 0;
                                    if (cleanSearch) {
                                        categoryKeys[0] = filteralltext;
                                        categoryValues[0] = tot;
                                    }
                                    var el = CreateFirstCategoryElement(tot, selected);
                                    if (el != null) {
                                        CategoryContainer.appendChild(el);
                                    }
                                    //Rest of categories

                                    for (var i = 0; i < results.Categories.length; i++) {
                                        var selected = results.Categories[i].Key == categoryFilter;
                                        // spara key och value i listor
                                        if (cleanSearch) {
                                            categoryKeys[i + 1] = results.Categories[i].Key;
                                            categoryValues[i + 1] = results.Categories[i].Value;

                                        }
                                        var el = CreateCategoryElement(results.Categories[i].Key, results.Categories[i].Key, results.Categories[i].Value, selected);
                                        if (el != null) {
                                            CategoryContainer.appendChild(el);
                                        }
                                    }
                                }
                            }
                            else { // picked category, keep previous categories
                                var selected = '' == categoryFilter || categoryFilter == filteralltext;
                                var el = CreateCategoryElement(categoryKeys[0], filteralltext, categoryValues[0], selected);
                                if (el != null) {
                                    CategoryContainer.appendChild(el);
                                }
                                //loopa listorna
                                for (var i = 1; i < categoryKeys.length; i++) {
                                    var selected = categoryKeys[i] == categoryFilter;
                                    var el = CreateCategoryElement(categoryKeys[i], categoryKeys[i], categoryValues[i], selected);
                                    if (el != null) {
                                        CategoryContainer.appendChild(el);
                                    }
                                }
                            }
                        }
                        //                        var BusinessAreaContainer = document.getElementById('BusinessAreaContainer');
                        //                        if (BusinessAreaContainer != null) {
                        //                            BusinessAreaContainer.innerHTML = '';
                        //                            //BusinessArea
                        //                            if (results.BusinessAreas != null) {
                        //                                for (var i = 0; i < results.BusinessAreas.length; i++) {
                        //                                    var el = CreateBAElement(results.BusinessAreas[i]);
                        //                                    if (el != null) {
                        //                                        BusinessAreaContainer.appendChild(el);
                        //                                    }
                        //                                }
                        //                            }
                        //                        }
                        var YearContainer = document.getElementById('YearContainer');
                        if (YearContainer != null) {
                            YearContainer.innerHTML = '';
                            //Years
                            if (results.Years != null) {
                                for (var i = 0; i < results.Years.length; i++) {
                                    var el = CreateYearElement(results.Years[i]);
                                    if (el != null) {
                                        YearContainer.appendChild(el);
                                    }
                                }
                            }
                            if (YearContainer.innerHTML == '') {
                                if ($("#FilterYearArea").css("display") == "block")
                                    $("#FilterYearArea").hide();
                            }
                            else {
                                if ($("#FilterYearArea").css("display") != "block")
                                    $("#FilterYearArea").show();
                            }
                        }
                        var SectionContainer = document.getElementById('SectionContainer');
                        if (SectionContainer != null) {
                            SectionContainer.innerHTML = '';
                            //Section
                            if (results.Sections != null) {
                                for (var i = 0; i < results.Sections.length; i++) {
                                    var el = CreateSectionElement(results.Sections[i]);
                                    if (el != null) {
                                        SectionContainer.appendChild(el);
                                    }
                                }
                            }
                            if (SectionContainer.innerHTML == '') {
                                if ($("#FilterSectionArea").css("display") == "block")
                                    $("#FilterSectionArea").hide();
                            }
                            else {
                                if ($("#FilterSectionArea").css("display") != "block")
                                    $("#FilterSectionArea").show();
                            }
                        }

                        //SynonymContainer
                        var SynonymContainer = document.getElementById('SynonymContainer');
                        if (SynonymContainer != null) {
                            SynonymContainer.innerHTML = '';
                            //Section
                            if (results.Synonyms != null) {
                                for (var i = 0; i < results.Synonyms.length; i++) {
                                    var el = CreateSynonymElement(results.Synonyms[i]);
                                    if (el != null) {
                                        SynonymContainer.appendChild(el);
                                    }
                                }
                            }
                            if (SynonymContainer.innerHTML == '') {
                                if ($("#FilterSynonymArea").css("display") == "block")
                                    $("#FilterSynonymArea").hide();
                            }
                            else {
                                if ($("#FilterSynonymArea").css("display") != "block")
                                    $("#FilterSynonymArea").show();
                            }
                        }

                        var PagingContainer = document.getElementById('PagingContainer');
                        if (PagingContainer != null) {
                            PagingContainer.innerHTML = '';
                            var paging = CreatePaging(results);
                            if (paging != null) {
                                PagingContainer.appendChild(paging);
                            }

                        }
                    }
                    else {
                        //inget resultat
                        if (cleanSearch) {
                            NoHits();
                        }
                        else {
                            var PagesContainer = document.getElementById('ResultItems');
                            if (PagesContainer != null) {
                                var nohits = document.getElementById('nohitstext');
                                var nohitstext = '';
                                if (nohits != null) {
                                    nohitstext = "<div class=\"SearchMessage\">" + nohits.value + "</div>";
                                }
                                PagesContainer.innerHTML = nohitstext;
                            }
                            var PagingContainer = document.getElementById('PagingContainer');
                            if (PagingContainer != null) {
                                PagingContainer.innerHTML = '';
                            }
                            var SectionContainer = document.getElementById('SectionContainer');
                            if (SectionContainer != null) {
                                SectionContainer.innerHTML = '';
                                if ($("#FilterSectionArea").css("display") == "block")
                                    $("#FilterSectionArea").hide();
                            }
                            var YearContainer = document.getElementById('YearContainer');
                            if (YearContainer != null) {
                                YearContainer.innerHTML = '';
                                if ($("#FilterYearArea").css("display") == "block")
                                    $("#FilterYearArea").hide();
                            }

                            var CategoryContainer = document.getElementById('CategoryContainer');
                            if (CategoryContainer != null) {
                                CategoryContainer.innerHTML = '';
                                var selected = '' == categoryFilter;
                                var el = CreateCategoryElement(categoryKeys[0], '', categoryValues[0], selected);
                                if (el != null) {
                                    CategoryContainer.appendChild(el);
                                }
                                //loopa listorna
                                for (var i = 1; i < categoryKeys.length; i++) {
                                    var selected = categoryKeys[i] == categoryFilter;
                                    var el = CreateCategoryElement(categoryKeys[i], categoryKeys[i], categoryValues[i], selected);
                                    if (el != null) {
                                        CategoryContainer.appendChild(el);
                                    }
                                }
                            }
                        }
                    }
                }
            }
            else {
                //inget resultat
                NoHits();
            }
            // console.timeEnd('tid');
            if ($("#LoadingSymbol").css("display") == "block") {
                $("#LoadingSymbol").hide();
            }


            try {
                var pageTracker = _gat._getTracker("UA-15325590-1"); // Saab
                var trackSearchString = "/search?query=" + SearchWord;
                pageTracker._trackPageview(trackSearchString);
            } catch (err) { }


        }


    });

}


function NoHits() {
    if ($("#SearchMessage").css("display") != "block") {
        $('#SearchMessage').show();
    }
    if ($("#ResultPanel").css("display") == "block") {
        $('#ResultPanel').slideUp(400);
    }
    if ($("#SuggestionPanel").css("display") != "block") {
        $('#SuggestionPanel').slideDown(400);
    }
    var SearchMessage = document.getElementById('SearchMessage');
    var nohits = document.getElementById('nohitstext');
    var nohitstext = '';
    if (nohits != null) {
        nohitstext = "<div class=\"SearchMessage\">" + nohits.value + "</div>";
    }
    SearchMessage.innerHTML = nohitstext;


}

function AjaxFailed(result) {
    if ($("#LoadingSymbol").css("display") == "block") {
        $("#LoadingSymbol").hide();
    }
    if ($("#SearchMessage").css("display") != "block") {
        $('#SearchMessage').show();
    }
    if ($("#ResultPanel").css("display") == "block") {
        $('#ResultPanel').slideUp(400);
    }
    if ($("#SuggestionPanel").css("display") == "block") {
        $('#SuggestionPanel').slideUp(400);
    }
    var SearchMessage = document.getElementById('SearchMessage');
    var error = document.getElementById('errortext');
    var errortext = '';
    if (error != null) {
        errortext = error.value;
    }
    SearchMessage.innerHTML = "<div class=\"SearchMessage\">" + errortext + "<br />" +
                             result.status + ' ' + result.statusText + "</div>";


}


function ClearSearch() {
    $("#LoadingSymbol").hide();
    //Pages
    var ResultItems = document.getElementById('ResultItems');
    ResultItems.innerHTML = '';
    //PagingContainer
    var PagingContainer = document.getElementById('PagingContainer');
    PagingContainer.innerHTML = '';
    //ActiveFilterArea
    var ActiveFilter = document.getElementById('ActiveFilter');
    ActiveFilter.innerHTML = '';
    //BusinessAreaContainer
    //    var BusinessAreaContainer = document.getElementById('BusinessAreaContainer');
    //    BusinessAreaContainer.innerHTML = '';
    //YearContainer
    var YearContainer = document.getElementById('YearContainer');
    YearContainer.innerHTML = '';
    //SectionContainer
    var SectionContainer = document.getElementById('SectionContainer');
    SectionContainer.innerHTML = '';
    //SynonymContainer
    var SynonymContainer = document.getElementById('SynonymContainer');
    SynonymContainer.innerHTML = '';
    //CategoryContainer
    var CategoryContainer = document.getElementById('CategoryContainer');
    CategoryContainer.innerHTML = '';
    $('#SuggestionPanel').slideDown(400);
    $('#ResultPanel').slideUp(400);
}


