var done=false;
var zindex=1000;

function replace_select(select) {
    zindex--;

    var parent_node=select.parentNode ;
    var container = new Element('div', {'id':'mselect_container_' + select.id, 'class':'mselect_container'});
    container.setStyle('z-index', zindex);

    var fake_select = new Element('span', {'id':'mselect_fake_select_'+select.id, 'class':'mselect_fake_select '+select.get('class')});
    fake_select.appendText('choix dans la liste');
    container.appendChild(fake_select);

    var slide_container = new Element("div", {'id':'mselect_slide_container_' + select.id, 'class':'mselect_slide_container'});
    container.appendChild(slide_container);
    slide_container.setStyle('z-index', zindex);

    var fake_select_summary = new Element('span', {'id':'mselect_fake_select_summary_'+select.id, 'class':'mselect_fake_select_summary'});
    container.appendChild(fake_select_summary);
    fake_select_summary.innerHTML='';

    var slide = new Element("div", {'id':'mselect_slide_' + select.id, 'class':'mselect_slide'});
    slide_container.appendChild(slide);
    slide_container.setStyle('z-index', zindex);

    for (var i=0; i<select.options.length;i++) {
        var checkbox = new Element('input',  {'id':'mcheckbox_' + select.id +'_'+i, 'name':select.name, 'type':'checkbox', 'value':select.options[i].value});
        checkbox.label = select.options[i].text;
        checkbox.select_id = select.id;

        slide.appendChild(checkbox);
        if (select.options[i].selected) {
            //            checkbox.set('checked', true );
            checkbox.checked=true; // bug ie : checked après apend sinon => plante
        }

        var label=new Element('label', {'id':'label_'+checkbox.id, 'for':checkbox.id});
        label.appendText(select.options[i].text);
        slide.appendChild(label);

        slide.appendChild(document.createElement('br'));

    }

    parent_node.replaceChild(container,select);
    set_slide(fake_select, slide);
    slide.setStyle('height',(select.options.length+1)*15);

    all_set_fake_select_actions(select.id, fake_select_summary); // ne pas intervertir avec parent_node.replaceChild
    all_set_fake_select_summary(select.id, fake_select_summary); // ne pas intervertir avec parent_node.replaceChild

}

function set_slide(trigger, slide) {

    slide.hide = function() {
        slide.style.display='none';
        slide.open=false;
    }

    slide.show = function() {
        slide.style.display='block';
        slide.open=true;
    }

    slide.hide();

    trigger.addEvents({
    'click': function(e){
        e.stop();
        if (slide.open) {  slide.hide(); } else { slide.show() }
        slide.closeMeTimer = slide.hide.delay(3000);
    }
    });

    slide.addEvents({
    'mouseenter': function(){
        $clear(slide.closeMeTimer);
    },
    'mouseleave': function(){
        slide.closeMeTimer = slide.hide.delay(1000);
    }
    });

}

function all_set_fake_select_actions(name, summary) {
    var checkboxes = $(document.body).getElements('input[id^=mcheckbox_'+name+'_]');
    for(var i=0; i<checkboxes.length; i++) {
        checkboxes[i].addEvents({
        'click': function(){
            if(this.get('checked')) {
                this.set_fake_select_summary();
            }
            else {
                all_set_fake_select_summary(this.select_id, summary);
            }
        }
        });

        checkboxes[i].set_fake_select_summary = function() {
            if(this.get('checked')) {
                summary.innerHTML += (summary.innerHTML==''?'':', ')+this.label;
            }
        }
    }
}

function all_set_fake_select_summary(name, summary) {
    var checkboxes = $(document.body).getElements('input[id^=mcheckbox_'+name+'_]');
    summary.innerHTML='';
    for(var i=0; i<checkboxes.length; i++) {
        checkboxes[i].set_fake_select_summary(summary);
    }
}

document.addEvent('domready', function() {
    do {
        select=document.getElement('select[multiple].select_to_checkbox');
        if (select) {
            replace_select(select);
        }
    }
    while(select);

});
