﻿/// <reference path="~/js/jquery-1.3.2.min.js" />

// Rensar sökning
function ClearSearch() {
    // Dölj lista
    $('#searchResult').hide();
    // Hämta textboxen
    var searchBox = $('#searchCriteria');
    // Nolla textboxen
    searchBox.val("");
    // Dölj knapp för rensning
    $('#searchClear').hide();
    // Aktivera textbox
    searchBox.focus();
}
// Utför sökning mot WCF-service
function PerformSearch() {
    // Sök bara om det inte var ENTER som trycktes
    if (window.event == null || window.event.keyCode != 13) {
        // Hämta textboxen
        var searchBox = $('#searchCriteria');
        // Hämta upp sökt ord
        var searchCriteria = $.trim(searchBox.val());
        // Om sökordet är tomt - dölj resultatlistan och fråga ej servern
        if (searchCriteria.length == 0) {
            // Rensa
            ClearSearch();
        }
        else if (searchCriteria.length >= 2) {
            // Dölj knapp för rensning
            $('#searchClear').hide();
            // Inaktivera textrutan och vänta på servern
            //searchBox.attr("readonly", true);
            // Visa indikator för rensning
            $('#searchProgress').show();
            // Kontakta servern och vänta
            GeneralService.Search(searchCriteria, true, PerformSearchCallback);
        }
        else {
            // Sökordet var för kort - dölj resultat
            $('#searchResult').hide();
            // Visa knapp för rensning
            $('#searchClear').show();
        }
    }
}
// Anropas när servern svarat med sökresultaten
function PerformSearchCallback(SearchResult) {
    // Hämta sökrutan
    var searchBox = $('#searchCriteria');
    // Aktuell söksträng
    var searchCriteria = $.trim(searchBox.val());
    // Det totala antalet träffar
    var totalResultCount = 0;
    // Hämta upp DIV för resultatlista
    var resultDiv = $('#searchResult');
    // Under-DIV för clear av mobiler och tillverkare
    var mobManDiv = resultDiv.children('#searchResultMaingroup1');
    // Hämta listan över mobiler
    totalResultCount += RenderSearchSubList(searchCriteria, mobManDiv.children('.mobiles'), SearchResult.Mobiles, 'icon_search_mobile', 'Mobiler', SearchResult.MobilesCount, false);
    // Hämta listan över tillverkare
    totalResultCount += RenderSearchSubList(searchCriteria, mobManDiv.children('.manufacturers'), SearchResult.Manufacturers, 'icon_search_manufacturer', 'Tillverkare', SearchResult.ManufacturersCount, false);
    // Hämta ord i lexicon
    totalResultCount += RenderSearchSubList(searchCriteria, mobManDiv.children('.lexicon'), SearchResult.Lexicon, 'icon_search_lexicon', 'Ord i lexikon', SearchResult.LexiconCount, true);
    // Lista över forumtrådar
    var threadCount = 0;
    if (SearchResult.ThreadsIsMore) threadCount = -1
    totalResultCount += RenderSearchSubList(searchCriteria, resultDiv.children('.threads'), SearchResult.Threads, 'icon_search_thread', 'Forumtrådar på Mobilforum.se', threadCount, false);
    // Om vi fick några resultat - visa listan
    if (totalResultCount > 0) {
        // Aktivera FanzyZoom för sådana länkar
        $('a.zoom', resultDiv).fancyZoom({ width: 300 });
        // Visa resultatlista
        resultDiv.show();
    }
    else {
        // Dölj resultatlista
        resultDiv.hide();
    }
    // Dölj indikator för sökning
    $('#searchProgress').hide();
    // Aktivera sökrutan
    //searchBox.attr("readonly", false);
    // Visa knapp för rensning
    $('#searchClear').show();
}
// Renderar ut lista över sökresultat
function RenderSearchSubList(searchCriteria, subList, collection, icon, title, totalCount, extraInfoInPopup) {
    // Töm resultatlistan från föregående sökning
    subList.children().remove().length;
    // Se om vi har några objekt
    if (collection.length > 0) {
        // Rubrikrad för objekt
        var trHeader = $('<tr/>');
        var tdHeader = $('<td/>').addClass('header');
        // Rubrik för objekt
        tdHeader.append($('<h2/>').text(title));
        // Lägg in rubrikrad
        trHeader.append(tdHeader);
        subList.append(trHeader);
        // Se till att kolumnen har colspan satt
        trHeader.children('td').each(function() { this.colSpan = 2; });
        // Om raden är udda eller jämn
        var isOdd = 1;
        // Gå igenom resultatlista
        for (var i = 0; i < collection.length; i++) {
            // Aktuell tabellrad
            var trLine = $('<tr/>');
            // Highlighta sökordet i länken
            var linkText = collection[i].Title;
            var pattern = new RegExp('([^<.]*)(' + searchCriteria + ')([^<.]*)', 'ig');
            var replaceWith = '$1<span class="searchHighlight">$2</span>$3';
            linkText = linkText.replace(pattern, replaceWith);
            // Nu kolumn för titel och länk
            var tdTitle = $('<td/>').addClass('cellindent');
            // Om raden är udda - sätt klass
            if (isOdd) { tdTitle.addClass('odd'); }
            // DIV för titel och klippning av för långa saker
            var divTruncate = $('<div/>').addClass('truncate');
            // Ny länk till objektet
            var aLine = $('<a/>').attr('title', collection[i].Title);
            // Om man skall kunna gå till länken eller om det är en popup
            if (extraInfoInPopup == false) {
                // Vanlig länk
                aLine.attr('href', collection[i].URL);
            }
            else {
                // Popup
                aLine.attr('href', "#lexicon_" + collection[i].URL);
                // Lägg på klass för zoom
                aLine.addClass('zoom');
                // Innehåll i popup
                var divPopup = $('<div/>').attr('id', 'lexicon_' + collection[i].URL);
                // Rubrik
                divPopup.append($('<h2/>').text(collection[i].Title));
                divPopup.append(collection[i].ExtraInfo);
                // Lägg in innehåll
                tdTitle.append(divPopup);
            }
            // Lägg in en ikon i länken
            aLine.append($('<img/>').attr('src', '/images/' + icon +'.png'));
            // Lägg in själva texten i länken
            aLine.append(linkText);
            // Lägg in i DIV
            divTruncate.append(aLine);
            // Lägg in DIV i kolumn
            tdTitle.append(divTruncate);
            // Lägg in titelkolumnen i raden
            trLine.append(tdTitle);
            // Kolumn för extrainfo
            var tdExtraInfo = $('<td/>').addClass('extraInfo');
            // Om raden är udda - sätt klass
            if (isOdd) { tdExtraInfo.addClass('odd'); }
            // Se om vi har extrainfo
            if (collection[i].ExtraInfo != null && extraInfoInPopup == false) {
                tdExtraInfo.text(collection[i].ExtraInfo);
            }
            // Lägg in extrainfo
            trLine.append(tdExtraInfo);
            // Lägg på hanterare för mus in/mus ut på alla kolumner
            trLine.children('td').each(function() {
                $(this).mouseover(function() {
                    ToggleMouseOverResult(this);
                }).mouseout(function() {
                    ToggleMouseOverResult(this);
                });
            });
            // Lägg in raden
            subList.append(trLine);
            // Fixa till jämn/udda indikering
            if (isOdd) { isOdd = 0; }
            else { isOdd = 1; }
        }
        // Om vi har fler resultat, visa det
        if (totalCount == -1 || totalCount > collection.length) {
            // Rad och kolumn för mer info
            var trMoreResults = $('<tr/>');
            var tdMoreResults = $('<td/>').addClass('moreResults');
            // DIV för info
            var divMoreResults = $('<div/>');
            // Text att visa
            var moreResultsText;
            // Kontrollera typ av extra resultat
            if (totalCount == -1) {
                moreResultsText = 'Fler trådar än dessa hittades. Fortsätt skriva för att söka vidare.';
            }
            else if (totalCount > collection.length) {
                moreResultsText = 'Ytterligare ' + (totalCount - collection.length) + ' ' + title.toLowerCase() + ' hittades! Begränsa sökningen!';
            }
            // Lägg in mer resultatinfo
            divMoreResults.html(moreResultsText);
            tdMoreResults.append(divMoreResults);
            trMoreResults.append(tdMoreResults);
            subList.append(trMoreResults);
            // Se till att kolumnen har colspan satt
            trMoreResults.children('td').each(function() { this.colSpan = 2; });
        }
        // Se till så listan syns
        subList.show();
    }
    else {
        // Inga resultat
        subList.hide();
    }
    // Returnera antalet resultat
    return collection.length;
}
// Highlightar en rad i ett sökresultat/döljer highlight beroende på musposition
function ToggleMouseOverResult(col) {
    var obj = $(col);
    obj.parent('tr').children('td').each(function() { $(this).toggleClass('over'); ; });
}


// Aktuella objekt för mobilsökning
var mobileSearchBox;
var mobileSearchResult;
var mobileSearchList;
// Utför mobilsökning mot WCF-service
function PerformMobileSearch(textbox, searchresult, list) {
    // Sök bara om det inte var ENTER som trycktes
    if (window.event == null || window.event.keyCode != 13) {
        // Hämta textboxen
        mobileSearchBox = $(textbox);
        // Hämta upp sökt ord
        var searchCriteria = $.trim(mobileSearchBox.val());
        // Sökresultatsrutan
        mobileSearchResult = $('#' + searchresult);
        // Aktuell lista
        mobileSearchList = $('#' + list);
        // Om sökordet är tomt - dölj resultatlistan och fråga ej servern
        if (searchCriteria.length == 0) {
            // Dölj resultat
            mobileSearchResult.hide();
            // Sätt fokus
            mobileSearchBox.focus();
        }
        else if (searchCriteria.length >= 2) {
            // Kontakta servern och vänta
            GeneralService.Search(searchCriteria, false, PerformMobileSearchCallback);
        }
        else {
            // Sökordet var för kort - dölj resultat
            mobileSearchResult.hide();
        }
    }
}
// Anropas när servern svarat med mobilsökresultaten
function PerformMobileSearchCallback(SearchResult) {
    // Hämta sökrutan
    var searchBox = $(mobileSearchBox);
    // Aktuell söksträng
    var searchCriteria = $.trim(searchBox.val());
    // Det totala antalet träffar
    var totalResultCount = 0;
    // Hämta upp DIV för resultatlista
    var resultDiv = $(mobileSearchResult);
    // Töm resultatlistan från föregående sökning
    resultDiv.children().remove().length;
    // Se om vi har några objekt
    if (SearchResult.Mobiles.length > 0) {
        // Gå igenom resultatlista
        for (var i = 0; i < SearchResult.Mobiles.length; i++) {
            // Ny rad innan för första
            if (i != 0) {
                resultDiv.append('<br/>');
            }
            // Ny länk till objektet
            var aLine = $('<a/>').attr('title', SearchResult.Mobiles[i].Title).attr('href', 'javascript:void(null)');
            aLine.addClass(SearchResult.Mobiles[i].URL);
            aLine.append(SearchResult.Mobiles[i].Title);
            // För klick på länk
            aLine.click(function() {
                // Aktuell lista
                var list = $(mobileSearchList);
                // Välj ID i lista
                list.val($(this).attr('class'));
                // Posta om till ASP
                __doPostBack(list.attr('id'), '');
            })
           // aLine.attr('onclick', 'alert("aaa"); ')
            // Lägg in länken
            resultDiv.append(aLine);
        }
        // Visa resultatlista
        resultDiv.show();
    }
    else {
        // Dölj resultatlista
        resultDiv.hide();
    }
}

// Visar eller döljer information och aktionsikoner för en mobil i listning
function ShowMobileInfo(obj) {
    $(obj).addClass('over');
    $(obj).find('.mobileAction').show();
}
function HideMobileInfo(obj) {
    $(obj).removeClass('over');
    $(obj).find('.mobileAction').hide();
}

// Körs för att markera att en ny mobil att jämföra har lagts till
function NewCompareMobileAdded() {
    $('#infolinkCompare').effect("highlight", {}, 3000);
}

// Körs för att markera att en ny favoritmobil jämföra har lagts till
function NewFavoriteMobileAdded() {
    $('#infolinkFavorites').effect("highlight", {}, 3000);
}

// Döljer en mobil i listan
function HideMobileFromList(id) {
    $('#mobile_' + id).hide();
}

// Körs för att visa att en mobil har lagts till
function HighlightMobile(id) {
    $('#mobile_' + id).effect("pulsate", { times: 1 }, 500);
}

// Öppnar länk för epostskickning till kodad adress
function sendEmail(encodedEmail) {
    location.href = "mailto:" + decodeEmail(encodedEmail);
}

// Avkodar en epostadress
function decodeEmail(encodedEmail) {
    var email = "";
    // go through and decode the email address
    for (i = 0; i < encodedEmail.length; ) {
        // holds each letter (2 digits)
        var letter = "";
        letter = encodedEmail.charAt(i) + encodedEmail.charAt(i + 1)

        // build the real email address
        email += String.fromCharCode(parseInt(letter, 16));
        i += 2;
    }
    return email;
}

// Visar en avkodad epostadress i statusfältet
function displayEmailStatus(encodedEmail) {
    window.status = "mailto:" + decodeEmail(encodedEmail);
}

// Rensar statusfältet
function clearStatus() {
    window.status = "";
}

// Mobilbläddraren: Byt till listläget
function MobileChooserToList(baseID) {
    $("#" + baseID + '_tabFind').removeClass('selected');
    $("#" + baseID + '_tabList').addClass('selected').blur();
    $("#" + baseID + '_tabContentFind').hide();
    $("#" + baseID + '_tabContentList').show();
}
// Mobilbläddraren: Byt till sökläget
function MobileChooserToFind(baseID) {
    $("#" + baseID + '_tabList').removeClass('selected');
    $("#" + baseID + '_tabFind').addClass('selected').blur();
    $("#" + baseID + '_tabContentList').hide();
    $("#" + baseID + '_tabContentFind').show();
}