function getQLItems()
{
    var tmp;
    var ql = new Hash();
    try {
        qlString = Cookies.read('ql');
        if (qlString && qlString.length > 0) {
            qlString.split('|').without(0, '').compact().each(function(s){
                if(/.+:.+/.test(s)) {
                    tmp = /(.+)\:(\d+)/.exec(s);
                    ql.set(tmp[1], tmp[2]);
                }
            });
        }

    }
    catch(e) {
    }
    return ql;
}

var quicklist = {
    items : [],

    add : function(content_id, orginator) {
        var ql, ql_index, in_ql, q_param = document.location.href.toQueryParams(), tmp = [], in_qbox;
        ql = getQLItems();

        if (ql.size() >= 30){
            alert('Puteti adauga in Quicklist maxim 30 de materiale!');
            return;
        }
        if(/.+:[\d]+/.test('' + content_id)) {
            tmp = /(.+)\:(\d+)/.exec("" + content_id);
            content_id = tmp[1];
            var ctype = tmp[2];
        }
        if(content_id.indexOf(':') != -1 || content_id.indexOf('|') != -1) return;
        ql_index = ql.keys().indexOf(content_id);
        in_ql = (ql_index != -1);
        in_qbox = (quicklist.items.indexOf(content_id) != -1);

        if (!in_ql){
            ql.set(content_id, ctype);
            Cookies.erase('ql');
            tmp = [];
            ql.each(function(s){tmp.push(s[0] + ':' + s[1]);});
            Cookies.create('ql', tmp.join('|'));

            if (orginator && window.smallNotif) {
                new smallNotif('Adaugat in Quicklist', orginator);
            }

            if (window.NQL && window.NQL.type == 'ql') {
                window.NQL.addOneItem(content_id);
            }
        }
        if (!in_qbox) {
            quicklist.items.push(content_id);
            if ($('rez_quicklist') != null || $('rez_quicklist_2') != null) {
                var fetch_one = 1; //($('quick_container') != null);
                this.statConn = 1;
                params = {
                    content_id: content_id,
                    action: 0,
                    play_from: q_param['play_from'],
                    played_now: q_param['id'],
                    fetch_one: fetch_one};
                    sn_getAjax('adauga_quicklist', params, 'rez_quicklist', {content_id: content_id, fetch_one: fetch_one});
            }
            this.upd_menu(ql.size());
            this.showPromoNotification();
        }
    },

    clearplaylist : function() {
        Cookies.erase('ql');
        this.upd_menu(0);
        //this.items = [];
    },

    del : function(content_id) {

        var ql, ql_index, in_ql, q_param = document.location.href.toQueryParams(), tmp = [];
        ql = getQLItems();
        if(/.+:.+/.test('' + content_id)) {
            var tmp = /(.+)\:(\d+)/.exec("" + content_id);
            content_id = tmp[1];
            var ctype = tmp[2];
        }

        if (window.NQL && window.NQL.type == 'ql') {
            window.NQL.deleteOneItem(content_id);
        }

        ql_index = ql.keys().indexOf(content_id);
        in_ql = (ql_index != -1);

        if (in_ql) {//del
            ql.unset(content_id);
            Cookies.erase('ql');
            ql.each(function(s){tmp[tmp.length] = s[0] + ':' + s[1];})
            Cookies.create('ql', tmp.join('|'));

            this.upd_menu(ql.size());
            this.upd_at_del(content_id);
        }
    },

    upd_menu : function(count) {
        if ($('lgnql')) $('lgnql').update('Quicklist (' + count +')');
    },
    upd_at_del: function(content_id) {

        this.items[this.items.indexOf(content_id)] = null;
        this.items = this.items.compact().without('');
        if($('bql' + content_id) != null) $('bql' + content_id).remove();
        if(!this.items || this.items.length == 0) {
            if($('rez_quicklist')) $('rez_quicklist').hide();
            if($('rez_quicklist_2')) $('rez_quicklist_2').hide();
        }

        var j = 0, cls, q_param = document.location.href.toQueryParams();
        $$('.quick_container > DIV[id]').each(function(dv){
            if (q_param.play_from == 'ql' && ('bql' + q_param.id == dv.id)) { cls = 'quick_list_sel';}
            else if (j % 2 == 0) {cls = 'quick_grey';}
            else {cls = 'quick_white';}
            dv.removeClassName('quick_list_sel').removeClassName('quick_white').removeClassName('quick_grey').addClassName(cls);
        });
    },

    sync: function(){

        if(typeof this.sync.started == 'undefined') {
            this.sync.started = true;
            setInterval('quicklist.sync()', 1000);
        }
        if (this.statConn == 1) return;

        var tmp = getQLItems(), to_add;
        var ql = tmp.keys(), ql_ctype = tmp.values(), items_list = [];
        if (ql.size() >= 30) return;
        if (this.items != null){
            this.items.each(function(o){
                if(ql.indexOf(o) == -1) quicklist.upd_at_del(o);
                else items_list.push(o);
            });
        }

        ql.each(function(id,k){
            to_add = (items_list.indexOf(id) == -1);
            if(to_add) {
                quicklist.add(id + ':' + ql_ctype[k]);
            }
        });

    },

    shuffle: function() {
        var tmp = getQLItems();
        var ql_tmp = tmp.keys(), ctype_tmp = tmp.values(), items_list = [];
        while (ql_tmp.length > 0) {
            i = Math.floor(Math.random() * 1000000) % ql_tmp.length;
            items_list.push(ql_tmp[i] + ':' + ctype_tmp[i]);
            ql_tmp.splice(i, 1);
            ctype_tmp.splice(i, 1);
        }
        quicklist.clearplaylist();
        items_list.each(function(i){
            quicklist.add(i);
        });
    },

    statConn: 0,

    init: function(){
        this.items = getQLItems().keys() ;
        //quicklist.sync();
    },
    getNumItems: function() {
        return getQLItems().size();
    },
    showPromoNotification: function() {
        if (!$('ql_tt_add')) {
            var str =
            '<div class="ql_tt_wrapper">' +
            '<div><a href="javascript:void(0)" onclick="$(\'ql_tt_add\').toggle()" class="ql_tt_inchide" title="Inchide">inchide</a></div>'+
            '<span class="ql_tt_img">&nbsp;</span>' +
            '<span class="ql_tt_continut">' +
            '<span class="ql_tt_titlu">Ai reusit!</span>' +
            'Ai <b id="ql_promo_not_count"></b>&nbsp;filmulete in Quicklist-ul tau! Uita-te la ele oricand vrei!' +
            '<a href="' + SITE_BASE + 'quicklist" title="Vezi quicklist" class="ql_tt_link">vezi quicklist</a>' +
            '</span>' +
            '<div class="clearAll"></div>' +
            '</div>' +
            '<div class="ql_tt_bottom">&nbsp;</div>';
            $('header').insert({after: new Element('div', {id: 'ql_tt_add', 'class': 'ql_added'}).update(str)});
        }
        $('ql_promo_not_count').update(quicklist.getNumItems());
        clearTimeout(this.timeOutNotif);
        this.timeOutNotif = setTimeout(function() {Effect.Fade('ql_tt_add', {duration: 0.5})}, 2200);
        $('ql_tt_add').show();
    }
}
quicklist.init();

function sn_adaugaQuicklistHandler(result, resultElementName, userData) {
    if (result.code == 1) {
        quicklist.del(userData['content_id']);
        return;
    }
    var result = result.text.evalJSON();
    if ($('rez_quicklist') != null || $('rez_quicklist_2') != null) {
        if(quicklist.items.indexOf(userData['content_id']) == -1) {
            if(userData['fetch_one']) {
                if (quicklist.items == null || quicklist.items.length % 2 == 0) {cls = 'quick_grey';}
                else {cls = 'quick_white';}
                $('quick_container').insert({bottom :new Element('div', {'class': 'quick_det ' + cls, 'id': 'bql' + userData['content_id']}).update(result.txt)});
            } else {
                $('rez_quicklist').update(result.txt);
                $('rez_quicklist_2').update(result.txt);
            }
            quicklist.items.push(userData['content_id']);
            quicklist.statConn = 0;
            $('rez_quicklist').show();
        }
    }
    if ($('rez_quicklist_2') != null) {
        $('ql' + result.c_id).remove();
        $('rez_quicklist_2').show();
    }
    if($('add_to_playlist_form1') != undefined) Event.observe('add_to_playlist_form1', 'submit', add_to_playlist)
}


// [+] Music Payer -----------------------------------------------------------------------------------------
function MPlayer(inp)
{
    this.urlPlayer = (typeof (inp.urlPlayer) != 'undefined') ? inp.urlPlayer : SITE_BASE + 'index.php?popup=true&play=ql&module=quicklist';
    this.idWin = (typeof (inp.idWin) != 'undefined') ? inp.idWin : 'musicPlayerWin';
    this.opt_del = (typeof (inp.opt_del) != 'undefined') ? inp.opt_del : 1;
    this.playerId = inp.playerId;
    this.qlSynced = false;
    if (window.mpQlSyncQueue == undefined) window.mpQlSyncQueue = [];
    window.mpQlSyncQueue[this.playerId] = [];
    this.popup_mode = (typeof (inp.popup_mode) != 'undefined' && inp.popup_mode == true) ? true : false;
    this.items = null;
    this.ajax_req = inp.ajax_req;
    this.add = function(id) {
        if (this.has_child_pp() && this.popup_mode) {
            this[this.idWin].pp_PLMusic.add(id);
        }
        else {
            params = {content_id: id, action: 1};
            sn_getAjax(this.ajax_req, params, null, {instance:this, op: 'add', content_id: id});
        }
    };
    this.del = function(id) {
        if (this.opt_del) {
            var to_del = null;
            quicklist.del(id);
            if (this.popup_mode) {
                this[this.idWin].pp_PLMusic.items.each(function(s,k){if (s['id'] == id) {to_del = k;}});
                this[this.idWin].pp_PLMusic.items[to_del] = null;
                this[this.idWin].pp_PLMusic.items = this[this.idWin].pp_PLMusic.items.without(0, '').compact();
                this[this.idWin].document[this[this.idWin].pp_PLMusic.playerId].del(id);
            }
            else {
                this.items.each(function(s,k){if (s['id'] == id) {to_del = k;}});
                this.items[to_del] = null;
                this.items =  this.items.without(0, '').compact();
                document[this.playerId].del(id);
            }
        }
    };
    this.getList = function() {
        if(typeof (inp.getListParams) != 'undefined') {
            params = new Hash({action: 2});
            params = params.merge(inp.getListParams)
        }
        else {
            params = {action: 2};
        }
        sn_getAjax(this.ajax_req, params, null, {instance:this, op: 'get_list'});
    };
    this.save = function(list_name) {
        params = {list_name: list_name, action: 3};
        sn_getAjax(this.ajax_req, params, null, {instance:this});
    };
    this.init = function() {
        this.getList();
    };
    this.openPlayerWin = function() {
        if (!this.has_child_pp()) {
            this[this.idWin] = window.open(this.urlPlayer, this.idWin, 'height=500, width=500, resizable=0, scrollbars=1', 1);
        }
        if (this[this.idWin]) this[this.idWin].focus();
        else delete this[this.idWin];
    };
    this.reloadPL = function(self) {
        if (typeof(self) == 'undefined') self = this;
        if (self.popup_mode) {
            self[self.idWin].document[self[self.idWin].pp_PLMusic.playerId].reloadIt(self[self.idWin].pp_PLMusic.items);
            self[self.idWin].focus();
        }
        else {
            document[self.playerId].reloadIt(self.items);
        }
    };
    this.show = function() {
        if (typeof(this.targetContainer) == 'undefined') return;
        var ret = '';
    };
    this.has_child_pp = function() {
        return (typeof this[this.idWin] != 'undefined' && !this[this.idWin].closed);
    };
    this.getItems = function() {
        var ql_pp;
        try {
            ql_pp = Cookies.read('ql_pp').split('|');
        }
        catch(e) {
            ql_pp = new Array();
        }
        ql_pp = ql_pp.without(0, '').compact();
        return ql_pp;
    };
    this.setId = function() {
        if (typeof(this.id) == 'undefined' || !this.id) {
            this.id = ((new Date()).getTime() + '' + Math.floor(Math.random() *1000000));
        }
    };
    this.flashLoaded = function(){
        var t;
        if (this.popup_mode) {
            t = typeof(this[this.idWin].document[this[this.idWin].pp_PLMusic.playerId].reloadIt);
        }
        else {
            t = typeof(document[this.playerId].reloadIt);
        }
        return (t == 'function');
    };
    this.sync2QL = function(self){
        var tmp = getQLItems();
        var ql = tmp.keys(), ql_ctype = tmp.values(), items_list = [];
        if (self.items != null){
            self.items.each(function(o){
                if(o && ql.indexOf(o['id']) == -1) self.del(o['id']);
                else items_list.push(o['id']);
            });
        }
        ql.each(function(id,k){
            if(ql_ctype[k] == 2) {
                var to_add = (items_list.indexOf(id) == -1 && window.mpQlSyncQueue[self.playerId][id] !== 1);
                if(to_add) {
                    window.mpQlSyncQueue[self.playerId][id] = 1;
                    self.add(id);
                }
            }
        });
    };

    this.setSync2QL = function(mlsec, add_handler){
        this.qlSynced = true;
        var self = this;
        if (typeof (add_handler) != 'function') add_handler = function(){};
        setInterval(function(){
            self.sync2QL(self);
            add_handler(self);
        }, mlsec);
    }

    window['sn_' + this.ajax_req.dasherize().camelize()+ 'Handler'] = function (result, resultElementName, userData)
    {
        var inst = userData.instance;
        if (inst.qlSynced && result.code == 1 && userData.op == 'add') {
            quicklist.del(userData.content_id);
        }
        if (result.code == 0) {
            switch(userData.op) {
                case 'add':
                itm = result.text.evalJSON();
                var itm_added = false;
                if (inst.popup_mode) {
                    if(inst[inst.idWin].pp_PLMusic.items != null)  inst[inst.idWin].pp_PLMusic.items.each(function(one_item){if(one_item['id'] == itm['id']) itm_added = true;});
                    delete window.mpQlSyncQueue[inst.playerId][itm['id']];
                    if (itm_added) return;
                    inst[inst.idWin].pp_PLMusic.items.push(itm);
                    inst[inst.idWin].document[inst[inst.idWin].pp_PLMusic.playerId].reloadIt([itm], 'add');
                }
                else {

                    if(inst.items != null) inst.items.each(function(one_item){if(one_item['id'] == itm['id']) itm_added = true;});
                    delete window.mpQlSyncQueue[inst.playerId][itm['id']];
                    if (itm_added) return;
                    if (inst.items == null) {
                        inst.items = [itm];
                    }
                    else {
                        inst.items.push(itm);
                    }
                    document[inst.playerId].reloadIt([itm], 'add');
                }
                break;
                case 'get_list':
                result = result.text.evalJSON().length > 0 ? result.text.evalJSON() : null;
                if (inst.popup_mode) {
                    inst[inst.idWin].pp_PLMusic.items = result;
                }
                else {
                    inst.items = result;
                }
                inst.reloadPL();
                break;
                case 'del':
                break;
            }
        }
    }
};
// [-] Music Payer -----------------------------------------------------------------------------------------

document.observe('dom:loaded', function(event) {
    $$('.quicklist1, .quicklist_dm').each(function(element) {
        Event.observe(element, 'click', function(event) {
            id = element.id.substr(2, element.id.length);
            quicklist.add(id, event);
            try {element.parentNode.removeChild(element)}catch(e) {}
        });
    });
});

