/**
 * catalog - handle catalog related functionality 
 * 
 * @author: Chanel Munezero <chanel.munezero@escapemg.com>
 */
(function(){
    if(!window.gs) {
        return;
    }
    
    var catalog = window.gs.catalog = {
        // default options/settings
        numChecked: 0,
        selectedSongs: {},
        licenseBox: false,
        
        empty: null
    };
    
    catalog.init = function() {
        // initialize default actions
    };

    catalog.resolvePending = function(songId, command) {
        var params = {id: songId, command: command};

        $.getJSON('/catalogue/edit.json', params, function(json) {
            debug('return from resolve pending', json);
        });
    }

    catalog.updateAction = function(select) {
        var albumHash = $(select).parent().siblings('.songs').attr('value');
        debug('action changed', select, select.value, catalog.selectedSongs[albumHash], albumHash);
        if(!catalog.selectedSongs[albumHash] || !catalog.selectedSongs[albumHash].length) {
            select.value = '';
            return false;
        }
        if(select.value=='') {
            return false;
        }
        debug('select val:'+select.value, albumHash);
        if(select.value == 'edit') {
            // open edit box
            gs.edit.initSong(catalog.selectedSongs[albumHash].join('-'), albumHash);
        } else if(select.value == 'promote') {
            location.href = '/promotion/newAutoplay?addSongID='+catalog.selectedSongs[albumHash].join('-');
        } else if(select.value == 'license') {
            catalog.initLicenseSong(catalog.selectedSongs[albumHash].join('-'));
        } else if(select.value == 'remove') {
            catalog.initDeleteSong(catalog.selectedSongs[albumHash].join('-'));
        } else if(select.value == 'unremove') {
            catalog.initUndeleteSong(catalog.selectedSongs[albumHash].join('-'));
        } else if(select.value == 'share') {
            debug('share items');
            location.href = '/catalogue/shareSongs?songs=' + catalog.selectedSongs[albumHash].join('-');
        }
        select.value = '';
    }

    catalog.initDeleteSong = function(songID) {
        debug('init delete song', songID);
        if(!songID) { return false; }
        var options = {
            ajax: '/lightboxes/deleteSong?songID='+songID,
            onHide: function(hash) {
                gs.modal_hide(hash);
            },
            onLoad: function(hash) {
                gs.modal_show(hash);
            }
        };
        var divinfo = {
            newid: 'deleteSong',
            newclass: 'song'
        };
        gs.lbFactory.newModalBox(options, divinfo, true);
        return false;
    }
    catalog.deleteSong = function(songID) {
        debug('delete song', songID);
        if(!songID) { return false; }
        var params = {songID: songID, command: 'remove'};
        $.postJSON('/catalogue/removeSong.json', params, function(json) {
            debug('return from resolve pending', json);
            //gs.lbFactory.disposeModalBox($("#deleteSong"));
            location.hash = "";
            location.href = location.href + ' ';
        });

        return false;
    }

    catalog.initUndeleteSong = function(songID) {
        debug('init UN delete song', songID);
        if(!songID) { return false; }
        var options = {
            ajax: '/lightboxes/undeleteSong?songID='+songID,
            onHide: function(hash) {
                gs.modal_hide(hash);
            },
            onLoad: function(hash) {
                gs.modal_show(hash);
            }
        };
        var divinfo = {
            newid: 'undeleteSong',
            newclass: 'song'
        };
        gs.lbFactory.newModalBox(options, divinfo, true);
        return false;
    }
    catalog.undeleteSong = function(songID) {
        debug('delete song', songID);
        if(!songID) { return false; }
        var params = {songID: songID, command: 'remove'};
        $.postJSON('/catalogue/undeleteSong.json', params, function(json) {
            debug('return from resolve pending', json);
            //gs.lbFactory.disposeModalBox($("#deleteSong"));
            location.hash = "";
            location.href = location.href + ' ';
        });

        return false;
    }

    catalog.initLicenseSong = function(songID) {
        debug('init license song', songID);
        if(!songID) { return false; }
        var options = {
            ajax: '/lightboxes/ccLicense?songID='+songID,
            onHide: function(hash) {
                gs.modal_hide(hash);
            },
            onShow: function(hash) {
                debug('onshow');
                gs.modal_show(hash);
                //cc_js_init_tip();
                setTimeout(function() {
                    debug('widget container', $('#cc_js_widget_container').get(0));
                    cc_js_g_off_x = -600;
                    if($.browser.msie) {
                        cc_js_g_off_y = -120;
                    } else {
                        cc_js_g_off_y = -50;
                    }
                    cc_js_pageInit();
                }, 1000);
            }
        };
        /*
        if(!catalog.licenseBox) {
            // absolutely positioned by page, not element
            $(document.body).append($('#cc_js_tip_cloak').remove());
            debug('cloak c',$('#cc_js_tip_cloak'));
            catalog.licenseBox = $('#licenseLightbox').remove();
        }
        //var newBox = $(catalog.licenseBox).children().clone(true);
        var newBox = $('#licenseLightbox').children().clone(true);
        debug('new div contents', newBox.get());
        $('button.submit', newBox).attr('onclick',"gs.catalog.licenseSongs('"+songID+"');");
        //*/
        var divinfo = {
            //contents: newBox, 
            newid: 'licenseSong',
            newclass: 'song'
        };
        gs.lbFactory.newModalBox(options, divinfo, true);
        return false;
    }
    catalog.licenseSongs = function(songID, artistID) {
        debug('license song', songID);
        if(!songID) { return false; }
        var url = $('#cc_js_result_uri').val();
        var img = $('#cc_js_result_img').val();
        var name = $('#cc_js_result_name').val();
        var params = {songID: songID, artistID: artistID, command: 'license', url:url, image:img, name:name};
        $.postJSON('/catalogue/ccLicense.json', params, function(json) {
            debug('return from resolve pending', json);
            //gs.lbFactory.disposeModalBox($("#licenseSong"));
            location.hash = "";
            location.href = location.href + ' ';
        });

        return false;
    }

    catalog.itemChecked = function(obj) {
        // depending of whether checked, set counter and update arr
        var container = $(obj).parent().parent().parent().parent();
        var albumHash = container.attr('value');
        catalog.selectedSongs[albumHash] = catalog.selectedSongs[albumHash] || [];
        //debug('item is checked: ',obj, obj.checked, catalog.selectedSongs[albumHash], albumHash);
        numChecked = catalog.getSelectedCount(container.parent());
        //debug('curr num:', numChecked);
        if(obj.checked) {
            catalog.selectedSongs[albumHash].push(obj.value);
            numChecked++;
        } else {
            catalog.selectedSongs[albumHash].remove(catalog.selectedSongs[albumHash].indexOf(obj.value));
            numChecked--;
        }
        catalog.setSelectedCount(numChecked, container.parent());
        //debug('after item checked', catalog.selectedSongs[albumHash]);
    }

    catalog.toggleCheckAll = function(obj, isChecked) {
        if(!obj) { return false; }
        // get all checkboxes and check them
        //debug('toggle all', obj, isChecked);
        var container = $(obj).parent().siblings('.songs'), numChecked = 0;
        var albumHash = $(container).attr('value');
        catalog.selectedSongs[albumHash] = catalog.selectedSongs[albumHash] || [];
        $('li .checkbox input',container).each(function() {
            //this.checked = isChecked;
            if(!this.checked) {
                this.checked = isChecked;
                catalog.selectedSongs[albumHash].push(this.value); 
            } else {
                this.checked = isChecked;
            }
            numChecked++;
        });
        if(isChecked) {
            // set select box number to numchecked
            catalog.setSelectedCount(numChecked, container.parent());
        } else {
            // set select box number to zero
            catalog.selectedSongs[albumHash] = [];
            catalog.setSelectedCount(0, container.parent());
        }
        debug('after toggleselect checked', catalog.selectedSongs[albumHash]);

        return false;
    }

    catalog.setSelectedCount = function(count, container) {
        container = container || null;
        count = count || 0;
        count = parseInt(count);
        catalog.numChecked = count;
        $('#selectedCountTop,#selectedCountBottom', container).html('With Selected Songs ('+count+'):');
    }
    catalog.getSelectedCount = function(container) {
        container = container || null;
        var text = $('#selectedCountTop',container).html() || $('#selectedCountBottom', container).html();
        var rep = text.replace('With Selected Songs (','');
        var rep2 = rep.replace('):','');
        var num  = parseInt(rep2);
        //debug('text, rep, num', text, rep, rep2, num);
        return num;
    }

    catalog.pendingCheckboxToggle = function(obj) {
        debug('pending checkbox toggle', obj);
        var val = (obj.checked) ? '1' : '0';
        var param = 'showPending='+val;
        var url = location.href;
        url = (url.match('\\?')) ? url : url+'?';
        var newUrl = url.replace(/showPending=[0-9]/, param);
        if(url===newUrl) {
            newUrl += '&'+param;
        }
        debug('final url', newUrl, param);
        window.location = newUrl;
    }

    catalog.showDemoAddMusicLightbox = function() {
         var options = {};
        var divinfo = {
            newid: 'demoAddMusic',
            contents: $('#demoAddMusicLightbox').html() 
        };
        gs.lbFactory.newModalBox(options, divinfo, true);
       
    }

    catalog.toggleAddMusicRightsCheckbox = function() {
        debug('toggle add music rights checkbox');
        $('div.applet').show();
        $('div.applet').css('height','auto').css('visibility','visible');
        $('div.mastersAgreement_wrapper').hide();
        $('div.mastersRights').hide();
    }
    
    // NOTE: The following are special admin-specific js functions. They are basically duplicates of the original method but with an additional argument to allow admin rights.
    
    catalog.initAdminDeleteSong = function(songID, maraID) 
    {
        debug('init delete song', songID);
        if(!songID) { return false; }
        var options = {
            ajax: '/lightboxes/deleteSong?songID='+songID+"&maraID="+maraID,
            onHide: function(hash) {
                gs.modal_hide(hash);
            },
            onLoad: function(hash) {
                gs.modal_show(hash);
            }
        };
        var divinfo = {
            newid: 'deleteAdminSong',
            newclass: 'song'
        };
        gs.lbFactory.newModalBox(options, divinfo, true);
        return false;
    }
    
    catalog.deleteAdminSong = function(songID, maraID) {
        debug('delete song', songID);
        if(!songID) { return false; }
        var params = {songID: songID, command: 'remove', maraID: maraID};
        $.postJSON('/catalogue/removeSongFromAlbum.json', params, function(json) {
            debug('return from resolve pending', json);
            //gs.lbFactory.disposeModalBox($("#deleteSong"));
            location.hash = "";
            location.href = location.href + ' ';
        });

        return false;
    }

    catalog.updateAdminAction = function(select, maraID) {
        var albumHash = $(select).parent().siblings('.songs').attr('value');
        debug('action changed', select, select.value, catalog.selectedSongs[albumHash], albumHash);
        if(!catalog.selectedSongs[albumHash] || !catalog.selectedSongs[albumHash].length) {
            select.value = '';
            return false;
        }
        if(select.value=='') {
            return false;
        }
        debug('select val:'+select.value, albumHash);
        if(select.value == 'edit') {
            gs.edit.initAdminSong(catalog.selectedSongs[albumHash].join('-'), albumHash, maraID);
        } else if(select.value == 'remove') {
            catalog.initAdminDeleteSong(catalog.selectedSongs[albumHash].join('-'), maraID);
        }
        select.value = '';
    }

    catalog.showAlbumSongs = function(albumID, obj, e) {
        albumID = albumID || false;
        obj = obj || false;
        e= e|| window.event;
        var target = e.target || e.srcElement;
        debug(target.tagName);
        if(target.tagName=="A") { return true; }
        if(!albumID) { return false; }
        if(!$(obj).length) { return false; }
        if($(obj).siblings('.results').children().length) { 
            $(obj).siblings('.results').children().toggle();
            $(obj).siblings('.footer').toggle();
            return false;
        }
        
        $.getJSON('/catalogue/albumSongs.json?isCatalog=1&albumID='+albumID, function(json) {
            debug('album-songs json', json, obj);
            $(obj).siblings('.results').append(json.html); 
            $(obj).siblings('.footer').show();
        });
    }

    catalog.markAlbumAsPrimary = function(songID,albumID,obj) {
        debug('mark album as primary. songid, albumid, obj',songID, albumID, obj);
        var param = {songID:songID, albumID:albumID};
        $.getJSON('/catalogue/markSongPrimaryAlbum.json', param, function(json) {
            debug('json', json);
            gs.refreshPage();
        });
    }
    catalog.removeSongFromAlbum = function(songID,albumID,obj) {
        debug('remove song from album. songid, albumid, obj',songID, albumID, obj);
        var param = {songID:songID, albumID:albumID};
        $.getJSON('/catalogue/removeSongFromAlbum.json', param, function(json) {
            debug('json', json);
            gs.refreshPage();
        });
    }

    catalog.toggleToCampaignForm = function(obj) {
        debug('toggle add song to campaign');
        obj = obj || false;
        if(!$(obj).length) { return false; }
        if($(obj).siblings('button').length) {
            $(obj).parent().parent().parent().toggle();
        } else {
            $(obj).parent().sibling('.addToCampaign').toggle();
        }
    }
})();
