var Page = {
    init: function() {
        Page.addNavDropdown();
        Page.addExternalLinks();
        Page.addTableSorters();
        Page.addEventSearchHelp();
        Page.embedAudioSetup();
        Page.embedAudio();
    },
    addNavDropdown: function() {
        $("#navlist li").hover(
            function() {$(this).addClass("hover")},
            function() {$(this).removeClass("hover")}
        );
    },
    addExternalLinks: function() {
        // Set links with rel="external" to open in new window.
        $('a').filter(function(){var rel = $(this).attr('rel');return rel && rel.search(/\bexternal\b/) != -1}).attr('target', '_blank');
    },
    addTableSorters: function() {
        var calendarTable = $('table.calendar_table');
        if (calendarTable) {
            $.tablesorter.addParser({
	            id: 'AssociatedPressDate',
	            is: function(s) {
	                // e.g. Today, Tomorrow, Wednesday, or July 4
                      var rgxp1 = /^(\w{3}\.|\w{3,5}) (\d{1,2})$/i;
                      var rgxp2 = /^Today$|^Tomorrow$|^Monday$|^Tuesday$|^Wednesday$|^Thursday$|^Friday$|^Saturday$|^Sunday$/;
	              return rgxp1.test(s) || rgxp2.test(s);
	            },
	            format: function(s,table) {
                        var today = new Date();
                        var rgxp1 = /(\w{3}\.|\w{3,5}) (\d{1,2})/i;
                	if (rgxp1.test(s)) {
                            var months = {'jan': '00', 'feb': '01', 'mar': '02', 'apr': '03', 'may': '04', 'jun': '05', 'jul': '06', 'aug': '07', 'sep': '08', 'oct': '09', 'nov': '10', 'dec': '11'};
	                    var parts = s.match(/(\w{3}\.|\w{3,5}) (\d{1,2})/i);
	                    var month = parts[1].substr(0,3).toLowerCase();
                            var monthNumber = months[month];
	                    var day = parts[2];
                        } else {
                            var weekdays = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];
                            var targDay = today; 
                            if (s == "Today") {
                            } else if (s == "Tomorrow") {
                               targDay.setDate(targDay.getDate()+1);
                            } else {
                               targDay.setDate(targDay.getDate()+2);
                               while (weekdays[targDay.getDay()] != s) {
                                  targDay.setDate(targDay.getDate()+1);
                               }
                            }
                            var monthNumber = String(targDay.getMonth());
                            var day = String(targDay.getDate());
                            if (monthNumber.length == 1) {
                                monthNumber = '0'+monthNumber;
                            }
                        }
                        if (day.length == 1) {
                            day = '0'+day;
                        }
                        if (Number(monthNumber) < today.getMonth()) {
                            monthNumber = 'y' + monthNumber;
                        }
                        var targ = monthNumber + day;
                        return targ;
	            },
	            type: 'text'
            });
            $.tablesorter.addParser({
	            id: 'AssociatedPressTime',
	            is: function(s) {
	                // e.g. noon, midnight, various, 1 p.m., 7-9 p.m., 10:30 a.m.-4 p.m.
                        var rgxp = /^various$|^((?:\d{1,2})|(?:noon)|(?:midnight))(?::(\d{2}))?(?: ([ap]\.m\.))?(?:-((?:\d{1,2})|(?:noon)|(?:midnight))(?::(\d{2}))?(?: ([ap]\.m\.))?)?$/;
		        return rgxp.test(s);
	            },
	            format: function(s,table) {
                        var rgxp = /^various$|^((?:\d{1,2})|(?:noon)|(?:midnight))(?::(\d{2}))?(?: ([ap]\.m\.))?(?:-((?:\d{1,2})|(?:noon)|(?:midnight))(?::(\d{2}))?(?: ([ap]\.m\.))?)?$/;
                        var myGroups = rgxp.exec(s);
                        var targ = 0;
                        if (myGroups[0]=='various') {
                        } else if (myGroups[1]=='midnight') {
                        } else if (myGroups[1]=='noon') {
                            targ = 1200;
                        } else {
                            targ = Number(myGroups[1])*100;
                            if (myGroups[2]) {
                                targ += Number(myGroups[2]);
                            }
                            if ((myGroups[3]=='p.m.') && (myGroups[1] < 12)) {
                                targ += 1200;
                            } else if (!(myGroups[3]) && (myGroups[6]=='p.m.')) {
                                targ += 1200; 
                            }
                	}
                        return targ;
	            },
	            type: 'numeric'
            });
            $.tablesorter.addParser({
	            id: 'Price',
	            is: function(s) {
                        var rgxp = /^$|^Free$|(?:\$(\d{0,5}(?:\.\d{2})?))$/;
		        return rgxp.test(s);
	            },
	            format: function(s,table) {
                        var rgxp = /^$|^Free$|^(?:\$(\d{0,5}(?:\.\d{2})?))$/;
                        var myGroups = rgxp.exec(s);
                        var targ = 0;
                        if (!myGroups[0]) {
                        } else if (myGroups[0]=='Free') {
                            targ = .0001;
                        } else {
                            targ = Number(myGroups[1]);
                        }
                        return targ;
	            },
	            type: 'numeric'
            });
            calendarTable.tablesorter({sortList: [[0,0],[1,0]], cancelSelection: true, cssAsc: 'ascending', cssDesc: 'descending'});
        }
    },
    addEventSearchHelp: function() {
        var keywords = $('#id_event_keywords');
        keywords.focus(function() {
            if ($(this).hasClass('back_text')) {
                $(this).removeClass('back_text');
                this.value = '';
            }
        });
        keywords.blur(function() {
            var help_text = 'enter keywords here';
            if (this.value == '' || this.value == help_text) {
                this.value = help_text;
                $(this).addClass('back_text');
            }
        });
        keywords.blur();
    },
    embedAudioSetup: function() {
        AudioPlayer.setup("http://staging.northcoastjournal.com/media/js/audio-player/player.swf", {  
            width: 280  
        });  
    },
    embedAudio: function() {
        $('#audio_player').each(function() {
            var url = $(this).find('a')[0]['href'];
            AudioPlayer.embed(this.id, {soundFile: url});
        });
    },
};

$(document).ready(Page.init);
