
var Catalogue = {
    defaultOrder: 'DESC',

    params: {
        page: 1,
        sort: '',
        see_all: 1,
        order: ''
    },

    loadDelay: 500,
    loadTimer: null
};

Catalogue.changeSort = function(name, node) {
    if (name == this.params.sort) {
        this.params.order = (this.params.order == 'DESC' ? 'ASC' : 'DESC');
    } else {
        this.params.order = this.defaultOrder;
        this.params.sort = name;
    }
    this.delayLoad();

    $('.list-head .sort-crit').removeClass('sort-asc').removeClass('sort-desc');

    var $node = $(node);
    $node.addClass('sort-' + (this.params.order == 'DESC' ? 'desc' : 'asc'));
};

Catalogue.delayLoad = function() {
    if (this.loadTimer) {
        clearTimeout(this.loadTimer);
    }

    this.loadTimer = setTimeout(function() {
        Catalogue.loadList();
    }, this.loadDelay);
};

Catalogue.updateCheckboxList = function(paramName, $node) {
    this.params[paramName] = [];
    var p = this.params[paramName];

    $node.find('input:checked').each(function() {
        p.push($(this).val());
    });

    if (p.length == 0) {
        p.push(0);
    }
};

Catalogue.loadList = function(page) {
    var params = jQuery.extend({}, this.params, {
        page: page || this.params.page
    });
    var current_bizy_cat_id = $('#div_current_bizy_cat_id').html();

    if (params['cate_ids'] == undefined) {
        params['cate_ids'] = [];
    }
    if (current_bizy_cat_id && params['cate_ids'].length == 0) {
        params['cate_ids'].push(current_bizy_cat_id);
    }

    $('#loader_list_top').show();
    $('#loader_list_bottom').show();

    $.get(
        BASE_URL + 'ajax/eu/catalogue.php',
        params,
        function(data, status) {
            $('#produit-listing').html(data);
            $('#loader_list_top').hide();
            $('#loader_list_bottom').hide();
            $('html, body').animate({scrollTop:150}, 'normal');
        }
    );
};

function loadPlan(bizy_prod_id) {
    // Chargement de l'onglet "Plan" en Ajax pour éviter le référencement
    jQuery.ajax({
        type: "GET",
        url: BASE_URL+'ajax/eu/catalogue.php',
        data: 'load_plan_pays_bizy_prod_id='+bizy_prod_id,
        success: function(msg) {
            try {
                var data = eval('('+msg+')');

                if ($('#popup_pays').length == 0) {
                    $(document.body).append('<div style="display:none"><div id="popup_pays" title="Plan de l\'étude" style="overflow:auto; height:400px; width: 500px"></div></div>');
                }

                // Ouverture de la pop-up avec le contenu msg
                jQuery('#popup_pays').html(data.colorboxData);

                //jQuery(this).attr('title', jQuery('#popup_pays').attr('title'));
                jQuery(this).colorbox({
                    transition: 'elastic',
                    inline: true,
                    href: '#popup_pays',
                    innerWidth: 500,
                    open: true,
                    preloading: false,
                    opacity: 0.5
                });

                if ($('#print_plan_pays').length == 0) {
                    $('<div id="print_plan_pays"></div>').appendTo($(document.body));
                }
            $('#print_plan_pays').html(data.printData);
            } catch (e) {}
        }
    });
    return false;
}


/**
 * PAGE GROUPES FRANCAIS ET INTERNATIONAUX
 */
var Groupes = {
    filters: {
        text: '',
        letter: '',
        cate_id: 0
    },
    textTimer: null,
    textDelay: 250
};

Groupes.init = function() {
    $('#filter-titre-input').unbind('keyup').keyup(function() {
        var str = $(this).val();
        if (str.length > 2 || str.length == 0) {
            Groupes.onTextType(this);
        }
    });
    $('#filter-cancel').unbind('click').click(function(){
        Groupes.resetFilters();
    });
    $('#filter-cat').unbind('change').change(function(){
        Groupes.onCatChange(this);
    });

    // Creation des filtres lettre
    var letters =   "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    var lettersCount = {};

    for (var i = 0; i < 26; i++) {
        lettersCount[letters.charAt(i)] = 0;
    }

    for (var i = 0; i < data.length; i++) {
        var etude = data[i];
        var capitale = etude.titre.charAt(0).toUpperCase();
        lettersCount[capitale]++;
    }

    var $nodeLetters = $('#filter-letter');
    $nodeLetters.empty();

    for (var i = 0; i < 26; i++) {
        var letter = letters.charAt(i);

        if (i != 0) {
            $nodeLetters.append($('<span class="sep">|</span>'));
        }

        var $append = $('<span class="letter">'+letter+'</span>');

        if (lettersCount[letter] == 0) {
            $append.addClass('letter-inactive');
        } else {
            $append.click(function(){
                Groupes.onLetterClick(this);
            });
        }

        $nodeLetters.append($append);
    }

    this.updateList();
};

Groupes.onCatChange = function(el) {
    var value = $(el).val();

    this.filters.cate_id = value;

    if (this.filters.cate_id) {
        $('#filter-cancel').show();
    } else {
        $('#filter-cancel').hide();
    }

    this.updateList();
}

Groupes.onLetterClick = function(el) {
    var $el = $(el);
    var letter = $el.html();
    $('#filter-letter .letter-current').removeClass('letter-current');
    $el.addClass('letter-current');
    $('#filter-cancel').show();

    if (this.filters.letter != letter) {
        this.filters.letter = letter;
        this.updateList();
    }
};

Groupes.onTextType = function(el) {
    clearTimeout(this.textTime);

    var value = $(el).val();
    Groupes.filters.text = $.trim(value.replace(/ +/g, ' '));

    if (Groupes.filters.text != '' || Groupes.filters.letter != '') {
        $('#filter-cancel').show();
    } else {
        $('#filter-cancel').hide();
    }

    this.textTime = setTimeout(function(){
        Groupes.updateList();
    }, this.textDelay);
};

Groupes.resetFilters = function() {
    Groupes.filters.text = '';
    Groupes.filters.letter = '';
    Groupes.filters.cate_id = '';

    $('#filter-cancel').hide();
    $('#filter-cat').get(0).selectedIndex = 0;
    $('#filter-letter .letter-current').removeClass('letter-current');
    $('#filter-titre-input').val('');
    Groupes.updateList();
};

Groupes.updateList = function() {
    $('#columns .column').empty().css('height', 'auto');

    var text = this.filters.text.replace(/ +/g, ' ');
    var words = text.toLowerCase().split(' ');
    var filterWords = (words.length > 0 && text.length != 0);
    var list = [];

    for (var i = 0; i < data.length; i++) {
        var etude = data[i];

        // Check des filtres
        if (this.filters.letter && this.filters.letter != etude.titre.charAt(0).toUpperCase()) {
            continue;
        }

        if (this.filters.cate_id != '' && etude.hash_categories.indexOf('|'+this.filters.cate_id+'|') == -1) {
            continue;
        }

        if (filterWords) {
            var titre = etude.titre.toLowerCase();

            var abort = false;
            for (var n = 0; n < words.length; n++) {
                if (titre.indexOf(words[n]) == -1) {
                    abort = true;
                    break;
                }
            }

            if (abort) {
                continue;
            }
        }

        list.push(etude);
    }

    if (list.length) {
        var cols = $('#columns .column').length;
        var $col = $('#columns .col1');
        var maxFill = Math.ceil(list.length / 3);
        var mod = list.length % cols;
        var currentFill = 0;
        var colIndex = 1;

        $('#no-list-item').hide();

        if (mod != 0)
            maxFill--;

        for (var i = 0; i < list.length; i++) {
            if (currentFill >= (maxFill + (colIndex <= mod ? 1 : 0))) {
                currentFill = 0;
                colIndex++;
                $col = $('#columns .col'+colIndex);
            }

            $col.append(list[i].html);
            currentFill++;
        }
        // S'il y a 1 ou 2 résultats seulement, on masque les pointillés de droite
        $('#columns .column').removeClass('no-border');

        if (list.length < 3) {
            $('#columns .col2').addClass('no-border');
            if (list.length < 2) {
                $('#columns .col1').addClass('no-border');
            }
        }

        var maxHeight = 0;
        $('#columns .column').each(function(){
            var h = $(this).height();

            if (h > maxHeight)
                maxHeight = h;
        }).height(maxHeight);
    } else {
        $('#no-list-item').show();
    }
};


$(function(){
;
/**
 * Generalisation des checkbox
 */

$('.checkbox-div').click(function(){
    var $this = $(this);
    var $input = $this.find('input');
    var $checkbox = $this.find('.checkbox');

    if ($input.get(0).checked) {
        $this.removeClass('checked');
        $checkbox.removeClass('checkbox-checked');
        $input.get(0).checked = false;
    } else {
        $this.addClass('catchecked');
        $checkbox.addClass('checkbox-checked');
        $input.get(0).checked = true;
    }
}).each(function(){
    var $this = $(this);

    if ($this.find('input:checked').length != 0) {
        $this.addClass('checked');
        $this.find('.checkbox').addClass('checkbox-checked');
    } else {
        $this.removeClass('checked');
        $this.find('.checkbox').removeClass('checkbox-checked');
    }
});

$('.list-head .sort-crit').click(function(){
    var data = eval('('+$(this).attr('data')+')');

    Catalogue.changeSort(data.name, this);
});

/**
 * PAGES SECTORIELLES
 */
if ($('div.sous-secteurs').length) {
    $('div.sous-secteurs .cat').click(function(){
        Catalogue.updateCheckboxList('cate_ids', $(this).parents('#liste-sous-secteurs'));
        Catalogue.delayLoad();
    });
    // Extranet
    function seeAllRadiosClick(e) {
        /**
         * Unbind click event to prevent recursive event calling
         */
        if ($(this).attr('id') == 'see_all0') {
            $('#see_all1')
                .unbind('click', seeAllRadiosClick)
                .trigger('click')
                .bind('click', seeAllRadiosClick);
        } else {
            $('#see_all0')
                .unbind('click', seeAllRadiosClick)
                .trigger('click')
                .bind('click', seeAllRadiosClick);
        }

        Catalogue.params['see_all'] = $('#see_all_chk1').attr('checked') ? 1 : 0;
        Catalogue.delayLoad();
    }

    $('#see_all0, #see_all1').click(seeAllRadiosClick);

    $('div.sous-secteurs .uncheck').click(function(){
        var $checked = $('#liste-sous-secteurs').find('.cat').has('input:checked');

        if ($checked.length) {
            $checked.click();
        } else {
            $('#liste-sous-secteurs').find('.cat').has('input[type=checkbox]').click();
        }
    });

    $('div.sous-secteurs').unselectable();

    Catalogue.updateCheckboxList('cate_ids', $('#liste-sous-secteurs'));
}

/**
 * PAGES INTERNATIONALES
 */
if ($('#regions-pays').length) {
    function updateCurrentPager($cont) {
        var $cont = $cont || $('#regions-pays .container-regi:visible');
        var $current = $cont.find('.page:visible');

        if ($current.prev().length == 0) {
            $cont.find('.pager-prev').css('visibility', 'hidden');
        } else {
            $cont.find('.pager-prev').css('visibility', 'visible');
        }

        if ($current.next().length == 0) {
            $cont.find('.pager-next').css('visibility', 'hidden');
        } else {
            $cont.find('.pager-next').css('visibility', 'visible');
        }
    }

    /**
     * Changement de région
     */
    $('#tab-continents .continent').click(function(){
        var regi_id = this.id.replace('tab-regi-', '');
        var $this = $(this);

        if (!$this.hasClass('selected')) {
            var current_regi_id = $this.parent().find('.selected').removeClass('selected').attr('id').replace('tab-regi-', '');
            $('#container-regi-'+current_regi_id).hide();

            $this.addClass('selected');
            $('#container-regi-'+regi_id).show();

            // Declencher le chargement du nouveau continent
            updateCurrentPager($('#container-regi-'+regi_id));
            Catalogue.updateCheckboxList('regi_ids', $('#container-regi-'+regi_id));
            Catalogue.delayLoad();
    //        console.log(Catalogue.params.regi_id.join('.'));
        }
    });

    /**
     * Clic sur une checkbox
     */
    $('#regions-pays .checkbox-div').click(function(){
        var $this = $(this);
        var $cont = $this.parents('.container-regi');

        Catalogue.updateCheckboxList('regi_ids', $cont);
        Catalogue.delayLoad();
    //    console.log(Catalogue.params.regi_id.join('.'));
    });

    $('#regions-pays .pager-next').click(function(){
        var $this = $(this);
        var $cont = $this.parents('.container-regi');
        var $current = $cont.find('.page:visible');

        if ($current.next().length) {
            $current.next().show();
            $current.hide();
            updateCurrentPager($cont);
        }
    });

    $('#regions-pays .pager-prev').click(function(){
        var $this = $(this);
        var $cont = $this.parents('.container-regi');
        var $current = $cont.find('.page:visible');

        if ($current.prev().length) {
            $current.prev().show();
            $current.hide();
            updateCurrentPager($cont);
        }
    });

    $('#regions-pays .uncheck').click(function(){
        var $checked = $(this).parents('.container-regi').find('.checkbox-div').has('input:checked');

        if ($checked.length)
            $checked.click();
        else
            $(this).parents('.container-regi').find('.checkbox-div').click();
    });

    $('#regions-pays').unselectable();

    $('#filter-cat').change(function(){
        var $this = $(this);
        var val = parseInt($this.val());
        Catalogue.params.bizy_cat_pere_id = val;

        Catalogue.delayLoad();
    });

    // Initialisation de la page
    var $cont = $('#regions-pays .container-regi:visible');

    updateCurrentPager($cont);
    Catalogue.updateCheckboxList('regi_ids', $cont);
}

/**
 * PAGE GROUPES FRANCAIS ET INTERNATIONAUX
 */
if ($('#page-groupe').length) {
    Groupes.init();
}

//------
});

