var DM_Widget_JukeboxFactory = 
{
    rules : {
        'div.dm_add_list' : function(element)
        {
            element.onclick = function()
            {
                if($$('div.dm_add_list').length < 3)
                {
                    new Insertion.After(this.parentNode, '<div>' + this.parentNode.innerHTML + '</div>');
                    EventSelectors.start(DM_Widget_JukeboxFactory.rules);
                }
            };
        },
        '#dm_jukebox_code' : function(element)
        {
            element.onclick = function()
            {
                this.select();
            };
        },
        '.dm_list' : function(element)
        {
            element.onclick = function()
            {
                if(this.type == 'checkbox')
                {
                    var options = this.nextSibling.nextSibling;
                    if(options && options.className == 'upload_options')
                    {
                        if(this.checked)
                        {
                            options.style.display = 'block';
                        }
                        else
                        {
                            options.style.display = 'none';
                        }
                    }
                }
            };
        },
        '.auto_load' : function(element)
        {
            DM_Widget_JukeboxFactory.getJukebox();
            if(element.nextSibling)
            {
                var options = element.nextSibling.nextSibling;
            }
            
            if(options && options.className == 'upload_options')
            {
                if(element.checked)
                {
                    options.style.display = 'block';
                }
                else
                {
                    options.style.display = 'none';
                }
            }
        },
        '.web_upload'  : function(element)
        {
            element.onclick = function()
            {
                var cb = element.parentNode.parentNode.parentNode.childNodes[0];
                cb.web = element.checked ? 1 : 0;
            };
        },
        '.webcam_upload'  : function(element)
        {
            element.onclick = function()
            {
                var cb = element.parentNode.parentNode.parentNode.childNodes[0];
                cb.webcam = element.checked ? 1 : 0;
            };
        },
        '.dm_get_jukebox' : function(element)
        {
            element.onclick = DM_Widget_JukeboxFactory.getJukebox;
        }
    },
    getJukebox : function()
    {
        DM_Widget_JukeboxFactory.buildListArray();
        var lists = DM_Widget_JukeboxFactory.lists;
        var nbLists = lists.length;
        
        if(nbLists > 5)
        {
            new Effect.Appear('error_too_many_lists');
        }
        else if(nbLists == 0)
        {
            new Effect.Appear('error_no_list');
        }
        else
        {
            var newSrc = '/widget/jukebox?';
            DM_Widget_JukeboxFactory.lists.each(function(data) {
                var url = data.url; 
                if(data.web == 1 || data.webcam == 1)
                {
                    url += '?upload:web=' + data.web + '&upload:webcam=' + data.webcam;
                }
                newSrc += 'list[]=' + encodeURIComponentWrapped(url);
                newSrc += '&';
            });
            new Effect.Fade('error_too_many_lists');
            new Effect.Fade('error_no_list');
            newSrc += 'skin=' + $('skin').value;
            newSrc = DM_Widget_JukeboxFactory.urlbase + newSrc;
            if(DM_Widget_JukeboxFactory.lastSrc != newSrc)
            {
                $('dm_jukebox_iframe').src = newSrc;
                $('dm_jukebox_code').innerHTML = $('dm_jukebox_iframe').parentNode.innerHTML.escapeHTML();
                $('dm_jukebox_link').value = newSrc;
                DM_Widget_JukeboxFactory.lastSrc = newSrc;
                if(!$('iframe_container').style.display || $('iframe_container').style.display == 'none')
                {
                    toggleElement('iframe_container');
                }
            }
        }
    },
    initialize : function ()
    {
        Event.onDOMReady(
            function() {
                EventSelectors.start(DM_Widget_JukeboxFactory.rules);
                
                DM_Widget_JukeboxFactory.getJukebox();
            }
        );
    },
    buildListArray : function()
    {
        DM_Widget_JukeboxFactory.lists = [];
        var nbLists = 0;
        var lists = $$('.dm_list');
        
        lists.each(function(item, index) {
            if(item.type == 'checkbox')
            {
                if(item.checked)
                {
                    var url = hex2str(findParamInClass('url', item));
                    var web = item.web ? item.web : 0;
                    var webcam = item.webcam ? item.webcam : 0;
                    DM_Widget_JukeboxFactory.lists.push({url: url, web: web, webcam: webcam});
                    nbLists ++;
                }
            }
            else
            {
                var url = hex2str(findParamInClass('url', item));
                var web = 0;
                var webcam = 0;
                DM_Widget_JukeboxFactory.lists.push({url: url, web: web, webcam: webcam});
                nbLists ++;
            }
        });
    },
    lastSrc : null,
    lists : null
};
DM_Widget_JukeboxFactory.initialize();
