﻿var SearchEngineStartText = '';
var SearchEngineUrl = 'recherche';
var SearchEngineText = '';
var SearchEngineTextHome = '';

var hideAutoComplete = true;
var searchLoading = false;
var precSearchEngineText = '';
var searchFirst = true;

function SearchEngineKeyDown(code) {
    if (code == 40) {
        // Vers le bas
        var e = $(".LooSearch2 .BAuto2C .clavier.hover")

        if (e.length == 0) {
            $(".LooSearch2 .BAuto2C .clavier:first").addClass("hover");
        } else {
            e.removeClass("hover").nextAll(".LooSearch2 .BAuto2C .clavier").slice(0, 1).addClass("hover");
        }
    } else if (code == 38) {
        // Vers le haut
        var e = $(".LooSearch2 .BAuto2C .clavier.hover")

        if (e.length == 0) {
            $(".LooSearch2 .BAuto2C .clavier:last").addClass("hover");
        } else {
            e.removeClass("hover").prevAll(".LooSearch2 .BAuto2C .clavier").slice(0, 1).addClass("hover");
        }
    } else if (code == 39) {
        // Vers la droite
    } else if (code == 37) {
        // Vers la gauche
    } else if (code == 13) {
        // Touche entré
        var e = $(".LooSearch2 .BAuto2C .BLine.hover")
        var a = e.find("a:first");
        if (a.size() == 0) {
            SearchEngineGoSearch();
        } else {
            document.location.href = a.attr("href");
        }

        return false;
    }

    return true;
}

function SearchEngineGoSearch() {

    var page = SearchEngineGoSearchUrl();
    document.location.href = page;
}
function SearchEngineGoSearchUrl() {
    var query = $(".LooSearch2 input[type=text]").attr("value");
    if (query == '' || query == SearchEngineTextHome) {
        return '/' + SearchEngineUrl + '/';
    } else {
        var show = '';

        $(".LooSearch2 .sortByC input[type=checkbox]").each(function() {
            if (this.checked) {
                show = show + ',' + $(this).attr("eval");
            }
        });

        if (show != '') show = show.substring(1);

        return '/' + SearchEngineUrl + '/?q=' + urlencode(query) + '&show=' + show;
    }
}
function SetAutocompleteOriginalHeight() {
    $('.autocomplete').css('height', hOriginal + 'px');
}

var  text = '';
function SearchEngineStart(element) {
    CheckNoFilter();
    var val = $('.input-text').val();
    //alert(val + ' ; ' + precSearchEngineText + ' ; ' + SearchEngineText);
    if (val.length < 3 
            || val == SearchEngineTextHome
            || (val != '' && val == precSearchEngineText)
            || (SearchEngineText != '' && SearchEngineText == val && SearchEngineText == precSearchEngineText)
            ) 
                return false;
    precSearchEngineText = (SearchEngineText != '') ? SearchEngineText : val;
    SearchEngineText = val;
    CleanFilter();
    CheckNoFilter();
    var page = SearchEngineGoSearchUrl();
    
    SearchEngineStartText = page;

    if (SearchEngineText != '' && SearchEngineText.length > 2) {
        searchLoading = true;
        $('.autoc-content .noresults').hide();
        $('.autoc-content .clavier').hide();
        $(".input_wait").show();
        $(".input_reset").hide();
        $('.BAuto2B .Link').hide();
        return true;
    } else {
        $('.autoc-content .clavier').hide();
        return false;
    }
}

// Fonction appelée lorsque la recherche se lance.
function SearchEngineLoad(element) {
    $('.nofilter').hide();
    $('.input_wait').hide();
    $('.input_reset').show();

    //filter
    FormatAutocFilter();

    //résultats ?
    var cpt = 0;
    $('.li_check .check:checked').each(function() {
        cpt++;
    });

    var val = $(".BAuto2C > div").length * 30;
    val = val + $(".BAuto2C > p").length * 20;
    if (cpt == 0) {
        $('.noresults').html("<div class='LooCont' style='padding:20px;padding-top:50px;padding-bottom:50px;text-align:center;color:#369;'>Il n'y a à ce jour pas de résultat pour <i>&quot" + text + "&quot</i><br/>Nous vous invitons à modifier votre recherche ou à en effectuer une nouvelle.</div>");
        $('.noresults').show();
        $('.results').hide();
        $('.BAuto2B .Link').hide();
    }
    else {
        FormatResult();
        $('.noresults').hide();
        $('.results').show();

        //link seulement si plus de 1 résultats
        if (cpt > 1)
            $('.BAuto2B .Link').show();
    }

    $(".BLineIn").hover(function() {
        $(this).addClass("SearchOver");
    },
    function() {
        $(this).removeClass("SearchOver");
    });

    ResizeAutocomplete();

    searchLoading = false;
    SearchEngineFocus($(".topSearch input[type=text]").get(0));
    $('.topSearch .input-text').addClass('input-focusOn');
    $('.topSearch .input-text').val(SearchEngineText);
    
    searchFirst = false;
}

function FormatResult() {
    //initialisation : résumés invisibles
    $('.autoc-infos').hide();
    $('.clavier').hide();
    $('.results').hide();

    if (SearchEngineText == '') return false;
    
    var cpt = 4;
    //pour chaque rubrique, on regarde si elle est checked et sinon on cache les résultats ; sinon on les fait apparaitres seulement si des résultats (4 max).
    $('.check').each(function(index) {
        var checked = $(this).attr('checked');
        var disabled = $(this).attr('disabled');
        var context = $(this).attr('eval');
        var visible = false;

        if (!disabled) {
            visible = (checked && cpt > 0);
            //data
            $('.clavier').each(function(index) {
                if ($(this).attr('template-type').toLowerCase() == context) {
                    if (visible)
                        $(this).show();
                    else
                        $(this).hide();
                }
                
            });

            //résumés
            $('.autoc-infos').each(function(index) {
                if ($(this).children('.autoc-context').html().toLowerCase() == context) {
                    if (checked) {
                        if (cpt > 0 && $(this).attr('template-type') == 'Separateur')
                            $(this).show();
                        else if (cpt == 0 && $(this).attr('template-type') == 'Separateur2')
                            $(this).show();
                    }
                }
            });

            if (visible)
                cpt--;


        }

    });
   
}

var hOriginal = 0;
function SearchOpenResult() {

    if (searchFirst) return true;
    
    
    $('.results').hide();
    var h = $('.autoc-content').height() > 0 ? parseInt($('.autoc-content').height()) + 28 : $('.autocomplete').height();
    if (hOriginal == 0) hOriginal = h;
    if ($('.autocomplete').css('display') == 'none') {
        $('.autocomplete').css('height', '0px');
        $('.autocomplete').show();
        //$('.autocomplete').animate({ height: h });
    }
}

// Fonction appelée quand on clique dans la textbox de recherche.
function SearchEngineFocus(element) {
    if (searchLoading) {
        $('.topSearch .input-text').blur();
        return true;
    }
    InitializeInputText();
    var val = $('.topSearch .input-text').val();
    if (val == SearchEngineTextHome)
        val = '';
    else
        val = SearchEngineText;
    $('.topSearch .input-text').val(val);
    $(".LooSearch2").css({ zIndex: '10' });
    $(".fold-btn").addClass("fold-btnOn");
    $('.topSearch .input-text').addClass('input-focusOn');
    SearchOpenResult();
}

// Fonction appelée quand on perd le focus (l'utilisateur clique hors de la textbox)
function SearchEngineBlur(element) {
    InitializeInputText();
}

//format des checkbox résultat : on récupère les count de chaque "bloc" et on le compare avec la liste des filtres ==> changement du style en fonction
function FormatAutocFilter() {

    var autoc = $('.search-hidden-autoc').val();
    var show = $('.search-hidden-show').val();
    //pas de résultat : grisé et indisponible ; sinon cochable
    $('.li_check').each(function(index) {
        var context = $(this).find('.check').attr('eval').toLowerCase();
        var ok = false;

        var checked = $(this).find('.check').attr('checked');
        
        $('.autoc-infos').each(function(index) {
            var isshow = $(this).find('.autoc-isshow').html();
            var count_item = parseInt($(this).find('.autoc-count-item').html());
            if (count_item == 0 || isshow == '' || isshow == 'false') {
                $(this).css('display', 'none');
            }

            if (count_item > 0) {
                if ($(this).find('.autoc-context').html() == context) {
                    ok = true;
                    return false;
                }
            }
        });

        if (!ok) {
            $(this).find('.check').attr('disabled', 'true');
            $(this).find('.check').attr('checked', false);
            $(this).addClass('li_uncheck');
        }

        //première fois : on ne sélectionne que les rubriques présentes dans l'url (si page de recherche) ou présente dans la variable "autoc " de l'url
        if (searchFirst && show != '' && show.indexOf(context) < 0 && autoc != '' && autoc.indexOf(context) < 0) {
            $(this).find('.check').attr('checked', false);
        }
    });
}

function CleanFilter() {
    $('.li_check').each(function() {
        if ($(this).find('.check').attr('disabled')) {
            $(this).removeClass('li_uncheck');
            $(this).find('.check').attr('checked', true);
            $(this).find('.check').attr('disabled', false);
        }
    });
}
function InitializeInputText() {
    if (searchLoading) return true;
    
    var val = SearchEngineText != '' ? SearchEngineText : $('.LooSearch2 .input-text').val();
    if (val != SearchEngineTextHome) {
        val = (SearchEngineText != '' && SearchEngineText.length > 2) ? SearchEngineText : SearchEngineTextHome;
        $('.LooSearch2 .input-text').val(val);
    }
    if (val == SearchEngineTextHome) {
        $('.LooSearch2 .input-text').removeClass('input-focusOn');
        $('.input_wait').hide();
        $('.input_reset').hide();
    }
    else if (val != '') {
        $('.LooSearch2 .input-text').addClass('input-focusOn');
        $('.input_reset').show ();
    }
}

function ResizeAutocomplete() {
    var h = $('.autoc-content').height() + 28;
    if (h == 0) h = hOriginal;
    $('.autocomplete').css('height', h + 'px');
}

function CheckNoFilter() {
    //si plus de filtre alors on affiche la div nofiltre
    var cptfilter = 0;
    $('.check').each(function(index) {
        if ($(this).attr('checked')) {
            cptfilter++;
        }
    });
    if (cptfilter == 0) {
        $('.nofilter').show();
    }
    else {
        $('.nofilter').hide();
    }
}


//AFFICHAGE DE LA PAGE
$(document).ready(function() {

    var hideSearchEngine = true;

    $("body").click(function() {
        if (hideSearchEngine) {
            InitializeInputText();
            $(".autocomplete").hide();


            $(".fold-btn").removeClass("fold-btnOn");
        }
        hideSearchEngine = true;
    });
    $(".LooSearch2").click(function() {
        hideSearchEngine = false;
    });

    $(".sortByC input[type=checkbox]").click(function() {
        lightAjaxUpdate($(".LooSearch2").get(0));
    });

    $(".fold-btn").click(function() {
        //ouvert -> fermé
        if ($(this).hasClass("fold-btnOn")) {
            $(this).removeClass("fold-btnOn");
            $(".LooSearch2").css({ zIndex: '' });
            $(".autocomplete").hide();
            //fermé -> ouvert
        } else {
            $(this).addClass("fold-btnOn");
            $(".LooSearch2").css({ zIndex: '10' });
            $(".autocomplete").show();
        }
    });


    $(".LooSearch2 .BtnSearch").click(function() {
        SearchEngineGoSearch();
        return false;
    });
    $('.closeSearch').click(function() {
        $('.fold-btnOn').removeClass("fold-btnOn");
        $(".LooSearch2").css({ zIndex: '' });
        $(".autocomplete").hide();
    });

    InitializeInputText();

    //RESET RECHERCHE
    $('.input_reset').click(function() {
        $('.clavier').each(function(index) {
            $(this).hide();
        });
        $('.autoc-content .noresults').hide();
        $('.BAuto2B .Link').hide();
        SearchEngineText = '';
        precSearchEngineText = '';
        $('.topSearch .input-text').val('');
        $('.li_check').each(function() {
            var checkbox = $(this).find('.check');
            checkbox.attr('checked', true);
            checkbox.attr('disabled', false);
            $(this).removeClass('li_uncheck');
        });
        $('.autocomplete').css('height', hOriginal + 'px');
        $(this).hide();

        $('.autoc-count-item').html('0');
        $('.topSearch .input-text').val('');
        $('.topSearch .input-text').focus();

    });

    //CLICK SUR FILTRES
    $('.li_check').click(function() {
        var h = 0;
        var checkbox = $(this).find('.check');
        var context = checkbox.attr('eval');


        FormatResult();
        
        CheckNoFilter();


    });

    //lancement de la recherche au chargement de la page si on est sur une page de recherche
    lightAjaxUpdateInst();

    //searchFirst : seulement si page de recherche
    searchFirst = $('.search-hidden-show').val() != '';
    
});




function urlencode(str) {

    var hexStr = function(dec) {
        return '%' + (dec < 16 ? '0' : '') + dec.toString(16).toUpperCase();
    };

    var ret = '',
            unreserved = /[\w.-]/; // A-Za-z0-9_.- // Tilde is not here for historical reasons; to preserve it, use rawurlencode instead
    str = (str + '').toString();

    for (var i = 0, dl = str.length; i < dl; i++) {
        var ch = str.charAt(i);
        if (unreserved.test(ch)) {
            ret += ch;
        }
        else {
            var code = str.charCodeAt(i);
            if (0xD800 <= code && code <= 0xDBFF) { // High surrogate (could change last hex to 0xDB7F to treat high private surrogates as single characters); https://developer.mozilla.org/index.php?title=en/Core_JavaScript_1.5_Reference/Global_Objects/String/charCodeAt
                ret += ((code - 0xD800) * 0x400) + (str.charCodeAt(i + 1) - 0xDC00) + 0x10000;
                i++; // skip the next one as we just retrieved it as a low surrogate
            }
            // We never come across a low surrogate because we skip them, unless invalid
            // Reserved assumed to be in UTF-8, as in PHP
            else if (code === 32) {
                ret += '+'; // %20 in rawurlencode
            }
            else if (code < 128) { // 1 byte
                ret += hexStr(code);
            }
            else if (code >= 128 && code < 2048) { // 2 bytes
                ret += hexStr((code >> 6) | 0xC0);
                ret += hexStr((code & 0x3F) | 0x80);
            }
            else if (code >= 2048) { // 3 bytes (code < 65536)
                ret += hexStr((code >> 12) | 0xE0);
                ret += hexStr(((code >> 6) & 0x3F) | 0x80);
                ret += hexStr((code & 0x3F) | 0x80);
            }
        }
    }
    return ret;
}





