var mbNav = function(){
    return {

        tabsMetadata : {

            'song-charts-tab' : {
                requestURL                          : '/site/api/Mediabase/getNav',
                requestParams                       : 'tab=songCharts',
                callback                            : function(content){
                    mbNav.initSongChartsNav(content);
                }
            },

//            'callout-tab' : {
//                requestURL                          : '/site/api/Mediabase/getNav',
//                requestParams                       : 'tab=callout',
//                callback                            : function(content){
//                    mbNav.initCalloutNav(content);
//                }
//            },

            'adds-tab' : {
                requestURL                          : '/site/api/Mediabase/getNav',
                requestParams                       : 'tab=adds',
                callback                            : function(content){
                    mbNav.initAddsNav(content);
                }
            },

            'stations-by-format-subtab' : {
                requestURL                          : '/site/api/Mediabase/getOptions',
                requestParams                       : 'by=format',
                callback                            : function(content){
                    mbNav.bindEvents(content,'format');
                }
            },

            'stations-by-call-letters-subtab' : {
                requestURL                          : '/site/api/Mediabase/getOptions',
                requestParams                       : 'by=callLetters',
                callback                            : function(content){
                    mbNav.bindEvents(content,'call-letters');
                }
            },

            'stations-by-market-subtab' : {
                requestURL                          : '/site/api/Mediabase/getOptions',
                requestParams                       : 'by=market',
                callback                            : function(content){
                    mbNav.bindEvents(content,'market');
                }
            }
        },

        /**
         * Initializes Mediabase navigation
         */
        init : function(){

            Tabs.loadingMsg                     = '<img src="/site/common/img/loadingBar.gif"> Loading options ...';
            Tabs.setModuleLib(mbNav);
            mbNav.initAddsNav();
            mbNav.initSongChartsNav();
        },

        /**
         * Initializes Adds form, building url on submit based on selected options
         */
        initAddsNav : function(content){

            if (content !== undefined){
                Tabs.displayContent(content);
            }

            $('#adds-form').submit(function(){

                var url             = '/mediabase/q/report/formatAdds';
                url                += '/reporters/'+$('#adds-reporters :selected').val();
                url                += '/format/'+$('#adds-format :selected').val();
                top.location.href   = url;
                return false;
            });
        },

        /**
         * Initializes Callout form, building url on submit based on selected options
         */
        initCalloutNav : function(content){

            if (content !== undefined){
                Tabs.displayContent(content);
            }

            $('#callout-form').submit(function(){

                var url             = '/mediabase/q/report/callout';
                url                += '/format/'+$('#callout-format :selected').val();
                url                += '/sex/'+$('#callout-sex :selected').val();
                url                += '/age/'+$('#callout-age :selected').val();
                url                += '/grc/'+$('#callout-grc :selected').val();
                top.location.href   = url;
                return false;
            });
        },

        /**
         * Initializes Song Charts form, building url on submit based on selected options
         */
        initSongChartsNav : function(content){

            if (content !== undefined){
                Tabs.displayContent(content);
            }

            $('#song-charts-form').submit(function(){

                var url             = '/mediabase/q';
                url                += '/report/'+$('#song-charts-report').val();
                url                += '/format/'+$('#song-charts-format').val();
                url                += '/panel/'+$('#song-charts-panel').val();

                /* Only submit C/R detail and report type for 7-Day Report */
                if ($('#song-charts-report').val() == 'sevenDay') {
                    url += '/detail/' + $('#song-charts-cr').val();
                    url += '/reportType/' + $('#song-charts-form input[name="reportType"]:checked').val();
                }

                top.location.href   = url;

                return false;
            });

            /* Bind onChange events to select menus  */
            $('#song-charts-panel').change(function(){

                mbNav.buildSongChartsFormatOptions();
                mbNav.checkSelectedSongChartsFormat();
                mbNav.toggleReportTypeOptions();
            });

            $('#song-charts-format').change(function(){
                mbNav.checkSelectedSongChartsFormat();
            });

            $('#song-charts-report').change(function(){
                mbNav.toggleSongChartsOnlyOptions();
            });

            mbNav.checkSelectedSongChartsFormat();
            mbNav.toggleSongChartsOnlyOptions();
            mbNav.toggleReportTypeOptions();
        },

        /**
         * Highlights format menu and disables submit button when no Format is
         * selected for Song Charts nav
         */
        checkSelectedSongChartsFormat : function(){

            var submitButton        = $('#song-charts-form input[type="submit"]');
            var formatOptions       = $('#song-charts-format');

            if (formatOptions.val() === 'none'){
                submitButton.attr('disabled',true);
                formatOptions.addClass('highlight');
            }
            else {
                submitButton.attr('disabled',false);
                formatOptions.removeClass('highlight');
            }
        },

        /**
         * Shows/hides report type options based on whether a published panel
         * has been selected
         */
        toggleReportTypeOptions : function(){

            var selectedReport      = $('#song-charts-report :selected').val();
            var selectedPanel       = $('#song-charts-panel :selected').val();
            var reportTypeOptions   = $('#song-charts-form div.reportType');

            if (selectedReport == 'sevenDay' && (selectedPanel == 'R' || selectedPanel == 'K' || selectedPanel == 'N')){
                reportTypeOptions.show();
            }
            else {
                reportTypeOptions.hide();
                $('#song-charts-published').attr('checked',false);
                $('#song-charts-rolling').attr('checked',true);
            }
        },

        /**
         * Shows Report Type and Currents/Recurrents when 7-Day Report is the selected
         * report. Hides them when any other report is selected.
         */
        toggleSongChartsOnlyOptions : function(){

            var reportTypeOptions   = $('#song-charts-form div.reportType');
            var crOptions           = $('#song-charts-form div.cr');

            if ($('#song-charts-report').val() === 'sevenDay'){
                reportTypeOptions.show();
                crOptions.show();
            }
            else {
                reportTypeOptions.hide();
                crOptions.hide();
            }
        },

        /**
         * Builds Format select menu for Song Charts nav based on selected Panel option
         *
         * @param string selectedPanel The panel code for the selected panel
         */
        buildSongChartsFormatOptions : function(){

            var formatOptions           = $('#song-charts-format');
            var selectedPanel           = $('#song-charts-panel').val();

            /* Remember the selected format, then empty the options */
            var selectedFormat          = formatOptions.val();
            formatOptions.empty();

            /* Get panel codes and names for this panel. These arrays are created
             * in PHP as cached js files which are included in the page separately
             * from this file. */
            var formatCodes             = panelFormatCodes[selectedPanel];
            var formatNames             = panelFormatNames[selectedPanel];

            /* If there's more than one format option, add instuctional option */
            if (formatCodes.length > 1) {
                formatOptions.append('<option value="none">Select a format ...</option>');
                formatOptions.append('<option value="none">-------------------------------</option>');
            }

            /* Build format select options */
            for (num in formatCodes){

                var formatCode          = formatCodes[num];
                var selected            = (formatCodes[num] == selectedFormat) ? "selected='selected'" : '';

                formatOptions.append('<option value="'+panelFormatCodes[selectedPanel][num]+'" '+selected+'>'+panelFormatNames[selectedPanel][num]+'</option>');
            }
        },

        /**
         * Binds events to tab options interface elements
         *
         * @param string by The criteria to get stations by (format, callLetters, or market)
         */
        bindEvents : function(content,by){

            Tabs.displayContent(content);

            if (by == 'market' || by == 'call-letters'){
                mbNav.bindOnSubmitEvent(by);
            }
            else if (by == 'format'){
                mbNav.bindOnChangeEvent(by);
            }
        },

        /**
         * Binds an onSubmit event to a form submission
         *
         * @param string by The criteria to get stations by (format, callLetters, or market)
         */
        bindOnSubmitEvent : function(by){

            var inputID                 = 'stations-by-'+by+'-input';
            var formID                  = 'stations-by-'+by+'-form';

            $('#'+formID).submit(function(){

                var value               = $('#'+inputID).attr('value');

                if (value == ''){

                    var notice          = Notice_inline;
                    notice.id           = 'stations-options-error';
                    notice.title        = 'Error searching Mediabase stations';
                    notice.subtitle     = 'Please enter a search term';
                    notice.error();
                }

                else {

                    if (by == 'market'){
                        top.location.href   = '/mediabase/q/report/stations/by/market/for/'+value;
                    }
                    else if (by == 'call-letters'){
                        top.location.href   = '/mediabase/q/report/stations/by/name/for/'+value;
                    }
                }
                return false;
            });
        },

        /**
         * Binds an onChange event to a dropdown menu
         *
         * @param string by The criteria to get stations by (format, callLetters, or market)
         */
        bindOnChangeEvent : function(by){

            $('#stations-by-'+by+'-options').change(function(){

                var value               = $(this).attr('value');

                if (value == ''){

                    var notice          = Notice_inline;
                    notice.id           = 'browse-options-error';
                    notice.title        = 'Invalid selection';
                    notice.subtitle     = 'Please select a valid option from the menu';
                    notice.error();
                }

                else {
                    top.location.href   = '/mediabase/q/report/stations/by/format/for/'+value;
                }
            });
        }
    }
}();
mbNav.init();

var panelFormatCodes = [];
var panelFormatNames = [];
panelFormatCodes['M'] = ['A1','A2','A4','C1','G1','H1','R1','R2','R3','R5','U1','U2','U4','Y0'];
panelFormatNames['M'] = ['AC','Hot AC','Adult Hits','Country','Gospel','Top 40','Triple A','Active Rock','Alternative','Mainstream Rock','Urban','Urban AC','Rhythmic AC','Rhythmic'];
panelFormatCodes['R'] = ['A1','A2','C1','H1','R1','R2','R3','R5','U1','U2','Y0'];
panelFormatNames['R'] = ['AC','Hot AC','Country','Top 40','Triple A','Active Rock','Alternative','Mainstream Rock','Urban','Urban AC','Rhythmic'];
panelFormatCodes['J'] = ['J1'];
panelFormatNames['J'] = ['Smooth Jazz'];
panelFormatCodes['L'] = ['L1','L2','L3','L5'];
panelFormatNames['L'] = ['Spanish Contemporary','Regional Mexican','Tropical Latin','Latin Urban'];
panelFormatCodes['N'] = ['L1','L2','L3','L5'];
panelFormatNames['N'] = ['Spanish Contemporary','Regional Mexican','Tropical Latin','Latin Urban'];
panelFormatCodes['X'] = ['X2'];
panelFormatNames['X'] = ['Christian AC'];
panelFormatCodes['C'] = ['Z1','Z2','Z3','Z4','Z5'];
panelFormatNames['C'] = ['Canada-Top 40','Canada-Hot AC','Canada-Rock','Canada-Main AC','Canada Country'];
panelFormatCodes['K'] = ['Z1','Z2','Z3','Z4','Z5'];
panelFormatNames['K'] = ['Canada-Top 40','Canada-Hot AC','Canada-Rock','Canada-Main AC','Canada Country'];

