﻿//dolocimo evente elementom in napolnimo spremenljivke
$(document).ready(function() {


    //SLOVAR -----------------start--    

    //za vse brskalnike razen FF izkljuimo "autocomplete"
    if (/Firefox[\/\s](\d+\.\d+)/.test(navigator.userAgent)) {
        //FF -> ne dodamo atributa (ker se če ne vpisana vrednost v textBox-u ne napolni ob kliku na gumb "back")        
    }
    else {
        //ostali
        $(Slovar.g_iskanjeFieldID).attr("autocomplete", "off");
    }


    //dodamo [Enter] event
    $(Slovar.g_iskanjeFieldID).keypress(function(e) {
        if (e.keyCode == 13) {
            //prikazemo izbran slovar
            Slovar.LoadSlovar('', Toolbar.g_selectedButton);
        }
    });

    //dodamo [x] event
    $("#lnkPopupSlovarClose").click(function() {
        Toolbar.HideAndResetAllPopups();
    });

    //dodamo [Esc] event (na keydown, ker ESC v Chrome ne sproži keypress event-a)        
    $(document).keydown(function(e) {
    if (e.keyCode == 27) {
            //skrijemo vse popup-e toolbar-a
            Toolbar.HideAndResetAllPopups();
        }
    });

    //SLOVAR -----------------end--

});
    
/*TOOLBAR*/
var Toolbar = Toolbar ? Toolbar : {

    g_selectedButton: "",
    g_StatusLabelID: "#lblLoading",

    GetIskanjeFieldText: function() {
        //pobrišemo znake '<' in '>' in izvedemo trim()
        //return $(Slovar.g_iskanjeFieldID).val().replace(new RegExp("[^aA-žŽ ]", "g"), '').replace(/^\s\s*/, '').replace(/\s\s*$/, '');
        return $(Slovar.g_iskanjeFieldID).val().replace(new RegExp("[<>]", "g"), '').replace(/^\s\s*/, '').replace(/\s\s*$/, '');
    },

    /*skrijemo vse popup-e toolbar-a*/
    HideAllPopups: function() {      
        //slovar
        Slovar.CloseSlovar();
        //highlighter
        Highlighter.HideHitNavigation();
    },
    
    HideAndResetAllPopups: function() {
        //skrijemo vse popup-e toolbar-a        
        Toolbar.HideAllPopups();
        Toolbar.g_selectedButton = "";
    },

    /*Nastavimo sliko gumba*/
    SetPicture: function(source, imageURL) {
        source.src = imageURL;
    },

    ShowStatus: function(statusText) {

        //prikažemo loader
        $(Toolbar.g_StatusLabelID).html(statusText);
        $(Toolbar.g_StatusLabelID).css("visibility", "visible");
    },

    HideStatus: function() {

        //skrijemo loader
        $(Toolbar.g_StatusLabelID).css("visibility", "hidden");
    },

    SetButtons: function(selectedButton) {

        //resetiramo slikce gumbom, razen podanemu (če je podan)
        switch (selectedButton) {
            case "slovar_t":
                $(Slovar.g_imgToolbarSlovarTID).attr("src", "../images/toolbar/slovar_t_selected.gif");
                $(Slovar.g_imgToolbarSlovarAngSloAngID).attr("src", "../images/toolbar/slovar_angsloang_unselected.gif");
                $(Highlighter.g_imgToolbarHighlighterID).attr("src", "../images/toolbar/highlight_unsel.gif");

                Slovar.g_popupSlovarSelectedLinkID = "lnkToolbarSlovarT";
                break;

            case "slovar_angsloang":
                $(Slovar.g_imgToolbarSlovarTID).attr("src", "../images/toolbar/slovar_t_unselected.gif");
                $(Slovar.g_imgToolbarSlovarAngSloAngID).attr("src", "../images/toolbar/slovar_angsloang_selected.gif");
                $(Highlighter.g_imgToolbarHighlighterID).attr("src", "../images/toolbar/highlight_unsel.gif");

                Slovar.g_popupSlovarSelectedLinkID = "lnkToolbarSlovarAngsloang";
                break;

            case "highlight":
                $(Slovar.g_imgToolbarSlovarTID).attr("src", "../images/toolbar/slovar_t_unselected.gif");
                $(Slovar.g_imgToolbarSlovarAngSloAngID).attr("src", "../images/toolbar/slovar_angsloang_unselected.gif");
                $(Highlighter.g_imgToolbarHighlighterID).attr("src", "../images/toolbar/highlight_selected.gif");

                Slovar.g_popupSlovarSelectedLinkID = "";
                break;

            default:
                //resetiramo vse gumbe
                $(Slovar.g_imgToolbarSlovarTID).attr("src", "../images/toolbar/slovar_t_unselected.gif");
                $(Slovar.g_imgToolbarSlovarAngSloAngID).attr("src", "../images/toolbar/slovar_angsloang_unselected.gif");
                $(Highlighter.g_imgToolbarHighlighterID).attr("src", "../images/toolbar/highlight_unsel.gif");

                Slovar.g_popupSlovarSelectedLinkID = "";
                break;
        }

        //Toolbar.g_selectedButton = selectedButton;
    },

    SetHoverButtons: function(hoverButtonID, hoverButton) {

        if (hoverButton != Toolbar.g_selectedButton) {
            switch (hoverButton) {
                case "slovar_t":                    
                    $("#" + hoverButtonID).attr("src", "../images/toolbar/slovar_t_hover.gif");
                    break;

                case "slovar_angsloang":
                    $("#" + hoverButtonID).attr("src", "../images/toolbar/slovar_angsloang_hover.gif");
                    break;

                case "highlight":
                    $("#" + hoverButtonID).attr("src", "../images/toolbar/highlight.gif");
                    break;

                default:
                    break;
            }
        }
    }
};

/*SLOVAR*/
var Highlighter = Highlighter ? Highlighter : {

    g_Enabled: 0,
    g_highlighterBesediloDivID: "#divBesedilo",

    g_SelectedHitIndex: 0,
    g_imgToolbarHighlighterID: "#imgHighlight",
    g_popupHighlighterID: "#divOznacevanjePopup",

    DoHighlight: function(searchText) {

        if (Highlighter.g_Enabled == 0) {
            //če je besedilo na strani -> sprožimo highlight
            if ($(Highlighter.g_highlighterBesediloDivID)[0] != undefined) {

                //prikažemo loader
                Highlighter.HighlightStarted();

                //po defaultu določimo iskanje eksaktnih zadetkov 
                var exactMatch = 1;

                //če je podan parameter prazen -> gre za glavni gumb v toolbaru
                if (searchText == "") {
                    //preberemo vpisano besedo in določimo iskanje zadetkov po korenu
                    searchText = Toolbar.GetIskanjeFieldText();
                    //todo: replace ukaznih znakov pri regex
                    searchText = searchText.replace(')', '\\)');
                    searchText = searchText.replace('(', '\\(');
                    exactMatch = 0;
                }

                //označimo besede
                setTimeout(function() { Highlighter.Highlight(searchText, exactMatch); }, 1);
            }
        }
        else {
            //highlighter je že prikazan -> ga skrijemo
            Highlighter.HideHitNavigation();
            Toolbar.g_selectedButton = "";
        }
    },

    HighlightStarted: function() {
        Toolbar.ShowStatus("&nbsp;&nbsp;Označujem ...&nbsp;&nbsp;"); //&nbsp; da izenačimo dolžino besedila (zaradi IE7 in float bug)
    },

    HighlightCompleted: function() {
        Toolbar.HideStatus();
    },

    HighlightCompletedNoMatch: function() {
        //brez zadetkov
        Toolbar.ShowStatus("&nbsp;Brez zadetkov&nbsp;"); //&nbsp; da izenačimo dolžino besedila (zaradi IE7 in float bug)
        setTimeout(function() { Highlighter.HighlightCompleted(); }, 2000);
    },

    ScrollHitIntoView: function() {

        //če highlight element obstaja..
        if ($('#regexHighlight').length > 0) {

            //scrolamo do prvega zadetka
            $('#regexHighlight')[0].scrollIntoView();

            Highlighter.HighlightCompleted();

            if ($('.highlighted').size() > 1) {
                //skrijemo vse popup-e toolbar-a
                Toolbar.HideAllPopups();
                //prikažemo navigacijo po zadetkih 
                Highlighter.ShowHitNavigation();
            }
        }
        else {
            Highlighter.HighlightCompletedNoMatch();
        }
    },

    ShowHitNavigation: function() {
        Highlighter.g_Enabled = 1;
        Highlighter.g_SelectedHitIndex = 0;
        //smo na prvem zadetku
        $('#spnPrevious').css("visibility", "hidden");
        $('#spnNext').css("visibility", "visible");

        $(Highlighter.g_popupHighlighterID).css("display", "block");
        Toolbar.g_selectedButton = "highlight";
        Toolbar.SetButtons('highlight');
    },

    HideHitNavigation: function() {
        Highlighter.g_Enabled = 0;
        Highlighter.g_SelectedHitIndex = 0;

        $(Highlighter.g_popupHighlighterID).css("display", "none");        
        Toolbar.SetButtons('');
    },

    SelectPreviousHit: function() {
        Highlighter.g_SelectedHitIndex--;
        Highlighter.Select();
    },

    SelectNextHit: function() {
        Highlighter.g_SelectedHitIndex++;
        Highlighter.Select();
    },

    Select: function() {

        if (Highlighter.g_SelectedHitIndex >= 0 && $('.highlighted').size() > Highlighter.g_SelectedHitIndex) {
            $('.highlighted')[Highlighter.g_SelectedHitIndex].scrollIntoView();
        }

        if (Highlighter.g_SelectedHitIndex <= 0) {
            //smo na prvem zadetku
            $('#spnPrevious').css("visibility", "hidden");
            $('#spnNext').css("visibility", "visible");
            Highlighter.g_SelectedHitIndex = 0;
        }
        else if (Highlighter.g_SelectedHitIndex >= $('.highlighted').size() - 1) {
            //smo na zadnjem zadetku
            $('#spnPrevious').css("visibility", "visible");
            $('#spnNext').css("visibility", "hidden");
            Highlighter.g_SelectedHitIndex = $('.highlighted').size() - 1;
        }
        else {

            $('#spnNext').css("visibility", "visible");
            $('#spnPrevious').css("visibility", "visible");
        }
    },

    Highlight: function(searchText, exactMatch) {

        /*//timing
        var start = new Date().getTime();*/

        var regexSelect = "";
        var regexUnSelect = "";

        //določimo regex za SELECT
        /*ni več aktualno zaradi omejitve na ASCII znake znotraj \b \b paterna regex-ja v JavaScript
        if (exactMatch == 1) {
        //iščemo "beseda", kateri sledi "<":
        regexSelect = "\\b(" + searchText + ")\\b(?=[^>]{0,}<)"; 
        }
        else {
        //iščemo "beseda*", kateri sledi "<":
        regexSelect = "\\b(" + searchText + "[\\wščžćđ]*?)\\b(?=[^>]{0,}<)";
        }*/

        regexSelect = "(" + searchText + ")(?=[^>]{0,}<)";

        //določimo regex za UNSELECT glede na browser
        //piščemo MSIE x.x del
        if (/MSIE (\d+\.\d+);/.test(navigator.userAgent)) {
            // preberemo x.x del in shranimo kot število
            var ieversion = new Number(RegExp.$1);
            if (ieversion >= 8) {
                //regex IE 8+ išččemo: <span id=regexHighlight class=highlighted>beseda*</span>
                regexUnSelect = "<span id=(\"){0,1}regexHighlight(\"){0,1} class=(\"){0,1}highlighted(\"){0,1}>([^<]*?)</span>";
            }
            else if (ieversion <= 7) {
                //regex IE 7,6, ... iščeno: <span class=highlighted id=regexHighlight>beseda*</span>     
                regexUnSelect = "<span class=(\"){0,1}highlighted(\"){0,1} id=(\"){0,1}regexHighlight(\"){0,1}>([^<]*?)</span>";
            }
        }
        else {
            //regex ostali iščemo: <span id="regexHighlight" class="highlighted">beseda*</span> 
            regexUnSelect = "<span id=(\"){0,1}regexHighlight(\"){0,1} class=(\"){0,1}highlighted(\"){0,1}>([^<]*?)</span>";
        }

        //če je beseda podana -> označimo, 
        //če ni -> odznačimo
        if (searchText.length > 0) {

            //poiščemo besedilo
            var divBesedilo = $(Highlighter.g_highlighterBesediloDivID)[0];

            if ($('.highlighted').size() == 0) {

                //označimo besede
                var reSelect = new RegExp(regexSelect, "gi");
                divBesedilo.innerHTML = divBesedilo.innerHTML.replace(reSelect, "<span id=\"regexHighlight\" class=\"highlighted\">$1</span>");

                //scrolamo do prvega zadetka
                Highlighter.ScrollHitIntoView();
            }
            else {

                //najprej odznačimo, nato označimo
                var reUnSelect = new RegExp(regexUnSelect, "gi");
                var reSelect = new RegExp(regexSelect, "gi");
                divBesedilo.innerHTML = divBesedilo.innerHTML.replace(reUnSelect, "$5").replace(reSelect, "<span id=\"regexHighlight\" class=\"highlighted\">$1</span>");

                //scrolamo do prvega zadetka
                Highlighter.ScrollHitIntoView();
            }

            Highlighter.g_Enabled = 1;
        }
        else {

            if (Highlighter.g_Enabled == 1) {

                //poiščemo besedilo
                var divBesedilo = $(Highlighter.g_highlighterBesediloDivID)[0];

                //odznačimo besede
                var reUnSelect = new RegExp(regexUnSelect, "gi");
                divBesedilo.innerHTML = divBesedilo.innerHTML.replace(reUnSelect, "$5");

                Highlighter.g_Enabled = 0;
            }

            Highlighter.HighlightCompleted();
        }

        /*//timing
        var end = new Date().getTime();
        var time = end - start;
        alert('Execution time: ' + time);*/
    }
};

/*SLOVAR*/
var Slovar = Slovar ? Slovar : {

    g_iskanjeFieldID: "#txtToolbarInput",
    g_divPopupSlovarID: "#divPopupSlovar",
    g_resultDivID: "#divPopupSlovarResult",
    g_uporabnikSpnID: "#spnUporabnik",

    g_rdbPopupSlovarRootID: "#rdbPopupSlovarRoot",

    g_imgPopupSlovarIcon: "#imgPopupSlovarIcon",
    g_lblPopupNaslovID: "#lblPopupSlovarNaslov",
    g_imgPopupLoadingID: "#imgPopupSlovarLoading",

    //0 disabled; 1 enabled;
    g_popupVisible: 0,
    g_popupSlovarSelectedLinkID: "",

    g_imgToolbarSlovarTID: "#imgToolbarSlovarT",
    g_imgToolbarSlovarAngSloAngID: "#imgToolbarSlovarAngSloAng",

    GetIskanjeFieldText: function() {
        //return $(Slovar.g_iskanjeFieldID).val().replace(new RegExp("[^aA-žŽ ]", "g"), '');
        //pobrišemo vse nepravilne znake in izvedemo trim()
        return $(Slovar.g_iskanjeFieldID).val().replace(new RegExp("[^aA-žŽ ]", "g"), '').replace(/^\s\s*/, '').replace(/\s\s*$/, '');
    },

    GetUporabnik: function() {
        //pobrišemo vse nepravilne znake in izvedemo trim()
        return $(Slovar.g_uporabnikSpnID).html().replace(new RegExp("[<>]", "g"), '').replace(/^\s\s*/, '').replace(/\s\s*$/, '');
    },

    CallSlovarjiService: function(slovarType, isciPoKorenu) {

        $.ajax({
            type: "POST",
            timeout: 10000,
            url: location.protocol + "//" + location.host + "/Slovar/Slovar.asmx/GetSlovarResults",
            data: "{slovarType:'" + slovarType + "',searchString:'" + Slovar.GetIskanjeFieldText() + "',isciPoKorenu:'" + isciPoKorenu + "', pagePath:'" + location.pathname + location.search + "', userName:'" + Slovar.GetUporabnik() + "'}",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function(msg) {
                $(Slovar.g_resultDivID).attr('scrollTop', 0);
                $(Slovar.g_resultDivID).html(msg.d);
                $(Slovar.g_imgPopupLoadingID).css("display", "none");
            },
            error: function(e) {
                $(Slovar.g_resultDivID).html("Slovar trenutno ni na voljo!");
                $(Slovar.g_imgPopupLoadingID).css("display", "none");
            }
        });
    },

    SelectButton: function(slovarType) {

        //nastavimo slikco podanemu gumbu
        switch (slovarType) {
            case "slovar_t":
                $(Slovar.g_imgToolbarSlovarTID).attr("src", "../images/toolbar/slovar_t_selected.gif");
                break;

            case "slovar_angsloang":
                $(Slovar.g_imgToolbarSlovarAngSloAngID).attr("src", "../images/toolbar/slovar_angsloang_selected.gif");
                break;

            default:
                break;
        }
    },

    ShowPopup: function(slovarType) {

        //ce je bil izbran drug slovar -> dolicimo slikco in naslov popup-a
        if (Toolbar.g_selectedButton != slovarType) {
            switch (slovarType) {
                case "slovar_t":
                    $(Slovar.g_imgPopupSlovarIcon).attr("src", "../images/toolbar/slovar_t.gif");
                    $(Slovar.g_lblPopupNaslovID).html('Terminološki slovar');
                    break;

                case "slovar_angsloang":
                    $(Slovar.g_imgPopupSlovarIcon).attr("src", "../images/toolbar/slovar_angsloang.gif");
                    $(Slovar.g_lblPopupNaslovID).html('Angleško-slovensko-angleški slovar');
                    break;

                default:
                    //pustimo zadnje nastavitve
                    break;
            }

            //shranimo izbran slovar
            Toolbar.g_selectedButton = slovarType;
        }

        //prikazemo animacijjo z nalaganjem
        $(Slovar.g_imgPopupLoadingID).css("display", "inline");

        //ce slovar se ni prikazan ga prikazemo
        if (Slovar.g_popupVisible == 0) {

            //skrijemo vse popup-e toolbar-a
            Toolbar.HideAllPopups();
            
            //nastavimo pozicijo popup-a        
            $(Slovar.g_divPopupSlovarID).css({
                "display": "block"
            });

            Slovar.g_popupVisible = 1;
        }

        Toolbar.SetButtons(slovarType);

    },

    HidePopup: function() {

        //ce je slovar prikazan ga skrijemo
        if (Slovar.g_popupVisible == 1) {

            $(Slovar.g_divPopupSlovarID).css({
                "display": "none"
            });

            Slovar.g_popupVisible = 0;
        }
    },

    CheckAndReloadSlovar: function(checkControlID, uncheckControlID) {
        //oznacimo izbranega in odznacimo neizbran radio button
        $('#' + checkControlID).attr('checked', true);
        $('#' + uncheckControlID).attr('checked', false);

        //ponovno poiscemo in prikazemo zadetke
        Slovar.LoadSlovar(Toolbar.g_selectedButton, Toolbar.g_selectedButton);
    },

    LoadSlovar_Link: function(clickedLinkID, slovarType) {

        //glede na trenutno in predhodno kliknjen link se prikaže nov oz. skrije trenuten slovar
        if (Slovar.g_popupSlovarSelectedLinkID != clickedLinkID) {

            if ($(Slovar.g_iskanjeFieldID).val() != "") {

                if (Slovar.GetIskanjeFieldText().length >= 3) {
                    Slovar.g_popupSlovarSelectedLinkID = clickedLinkID;
                    
                    Slovar.LoadSlovar(clickedLinkID, slovarType);
                    //Toolbar.SetButtons(Toolbar.g_selectedButton);
                }
                else {
                    Slovar.PremaloZnakov();
                }
            }
        }
        else {
            Slovar.g_popupSlovarSelectedLinkID = "";
            Toolbar.g_selectedButton = "";
            //Slovar.HidePopup();
            Slovar.CloseSlovar();
            Toolbar.SetButtons('');
        }
    },

    LoadSlovar: function(clickedLinkID, slovarType) {

        //ce je niz vpisan in daljsi od 3 znakov
        if ($(Slovar.g_iskanjeFieldID).val() != "") {

            if (Slovar.GetIskanjeFieldText().length >= 3) {
                
                //ce slovar se ni izbran -> izberemo terminoloskega (default)  
                switch (slovarType) {
                case "slovar_t":
                    slovarType = "slovar_t";
                    Slovar.g_popupSlovarSelectedLinkID = "lnkToolbarSlovarT";
                    break;

                case "slovar_angsloang":
                    slovarType = "slovar_angsloang";
                    Slovar.g_popupSlovarSelectedLinkID = "imgToolbarSlovarAngSloAng";
                    break;

                default:
                    slovarType = "slovar_t";
                    Slovar.g_popupSlovarSelectedLinkID = "lnkToolbarSlovarT";
                    break;
            }
                
                Toolbar.SetButtons(slovarType);

                //prikazemo popup
                Slovar.ShowPopup(slovarType);

                //poiscemo in prikazemo zadetke
                Slovar.CallSlovarjiService(slovarType, $(Slovar.g_rdbPopupSlovarRootID).attr('checked'));
            }
            else {
                Slovar.PremaloZnakov();
            }
        }
    },

    CloseSlovar: function() {
        Slovar.g_popupSlovarSelectedLinkID = "";
        
        //Toolbar.g_selectedButton = "";
        Slovar.HidePopup();
        Toolbar.SetButtons('');
        //Toolbar.g_selectedButton = '';
    },

    PremaloZnakov: function() {

        //brez zadetkov
        $(Toolbar.g_StatusLabelID).css("visibility", "visible");
        //$(Toolbar.g_highlighterLoadingID).html("Najmanj 3 znaki");
        $(Toolbar.g_StatusLabelID).html("Najmanj 3 črke!");
        setTimeout(function() { Toolbar.HideStatus(); }, 2000);
    }
};