/**
 * Class mootools qui permet de gérer les modèles favoris Eroblog
 */

var MooCookieList = new Class({

    getOptions: function() {
        return {
            fav_btn_class:'foo_add_to_favourite',
            destination_div:'foo_my_favourites_models',
            whois_online:new Array(),
            cookie_name:'foo_cookie_name'
        }
    },
    
    initialize: function(domain, options) {
        this.setOptions(this.getOptions(), options);
        if($(this.options.destination_div)) {
            this.memory = new Array();
            this.ids_list = new Array();
            this.domain = domain;
            var list_content = this.readCookie();
            this.createContener();
            $$('.'+this.options.fav_btn_class).each(function(el,i) {
                this.addClickAddEvent(el);
            }.bind(this));
            
            for(i=0;i<list_content.length;i++){
                this.addToMemory(list_content[i]);
            }

        }
    },
    
    addClickAddEvent : function(el) {
        el.removeEvents('click');
        el.addEvent('click',function(e) {
            e.stop();
            this.write([this.rel2obj(el.rel)]);
        }.bind(this));
    },
    
    addClickRemoveEvent : function(id,el) {
        el.removeEvents('click');
        el.addEvent('click',function(e) {
            e.stop();
            this.removeFromMemory(id);
        }.bind(this));
    },
    
    
    write: function(array_obj) {
        for(i=0;i<array_obj.length;i++) {
            var obj = array_obj[i];
            
            if(this.ids_list.contains(obj.id)==false) {
                this.favContent += obj.id+':'+obj.name+'||'; 
                this.addToMemory(obj);
            }
        }
        this.writeCookie(this.favContent);
    },
    
    rel2obj: function(str) {
        var line = str.split(':');
        return {id:line[0].toInt(),name:line[1]};
    },
    
    addToMemory: function(obj) {
        this.memory.push(obj);
        this.ids_list.push(obj.id);
        var li = new Element('li');
        if(this.options.whois_online.contains(parseInt(obj.id))>0) {
            var li_classname = 'online';
        } else {
            var li_classname = 'offline';
        }
        li.adopt(new Element('a',{'href':'/fr/profil/'+obj.id+'/view.html', 'class':li_classname, 'html':obj.name.substr(0,15)}));
        var a = new Element('a',{'href':'#', 'html':'(x)', 'class':'del'});
        this.addClickRemoveEvent(obj.id,a);
        li.adopt(a);
        /*
        li.adopt(new Element('a',{'href':'#', 'html':'(x)'}).addEvent(
            'click', function(e) {e.stop(); this.removeFromMemory(obj.id);}.bind(this)
        ));
        */
        this.ul_contener.adopt(li);
        var box_id = this.options.model_box_id.replace('%ID%',obj.id);
        var box_el = $(box_id);
        if(box_el) {
            var addlink = box_el.getElement('.'+this.options.fav_btn_class);
            if(addlink) {
                //on ajoute le onclick de suppression
                this.addClickRemoveEvent(obj.id,addlink);
            }
            this.addVisualAlert(box_el);
        }
    },
    
    removeFromMemory: function(id) {
        var tmp_memory = new Array();
        var tmp_ids_list = new Array();
        this.memory.each(function(el,i) {
            if(el.id != id) {
                tmp_memory.push(el);
            }
        });
        this.createContener();
        this.favContent = '';
        this.memory = new Array();
        this.ids_list = new Array();
        this.write(tmp_memory);
        var box_id = this.options.model_box_id.replace('%ID%',id);
        var box_el = $(box_id);
        if(box_el) {
            var addlink = box_el.getElement('.'+this.options.fav_btn_class);
            if(addlink) {
                //on ajoute le onclick d'ajout
                this.addClickAddEvent(addlink);
            }
            this.removeVisualAlert(box_el);
        }
    },
    
    
    /**
     * Gestiond des cookie
     */
    readCookie: function() {
        var cookie_content = Cookie.read(this.options.cookie_name);
        var result_array = new Array();
        if(cookie_content!='' && cookie_content!=null) {
            this.favContent = cookie_content;
            var line = cookie_content.substr(0,cookie_content.length-2).split('||');
            line.each(function(el,i) {
                var item = el.split(':');
                result_array.push({id:item[0],name:item[1]});
            });
        } else {
            this.favContent = '';
        }
        return result_array;
    },
    
    writeCookie: function(content) {
        Cookie.write(this.options.cookie_name, content, {domain:this.domain, path:'/', duration:365});
    },
    
    clearCookie: function() {
        Cookie.dispose(this.options.cookie_name);
    },
    
    /**
     * gestion du visuel html
     */
    createContener: function() {
        $(this.options.destination_div).innerHTML = '';
        this.ul_contener = new Element('ul');
        $(this.options.destination_div).adopt(this.ul_contener);
    },
    
    addVisualAlert: function(el) {
        //do nothing
        //a surcharger dans les class qui hérite de celle-ci
    },
    
    removeVisualAlert: function(el) {
        //do nothing
        //a surcharger dans les class qui hérite de celle-ci
    }

});

MooCookieList.implement(new Options);
