var $nbaNav = {
	
    /******* private fields *********/

    _target: 'nbaGlobalNav',
    _onBodyDoneTimerId: null,


    /******* private methods ********/

	_onBodyDone: function() {
		$nbaNav._init();
	},
    _init: function(){
        var nav;
        if (document.getElementById(this._target)) {
            nav = document.getElementById(this._target);
        }
        else {
            nav = document.createElement('div');
            nav.id = this._target;
            var body = document.getElementsByTagName('body')[0];
            body.insertBefore(nav, body.childNodes[0]);
        }
        nav.innerHTML = this._getHTML();
        this._hookHovers();
        if (document.removeEventListener) {
            document.removeEventListener('DOMContentLoaded', this._onBodyDone, false);
        }
        if (this._onBodyDoneTimerId) {
            clearInterval(this._onBodyDoneTimerId);
        }
        if (this._onCssTimerId) {
            clearInterval(this._onCssTimerId);
        }
    },
    _hookHovers: function(){
        var sfEls = document.getElementById("nav").getElementsByTagName("LI");
        for (var i = 0; i < sfEls.length; i++) {
            sfEls[i].onmouseover = function(){
                this.className = (this.className ? this.className + " " : "") + "sfhover";
            }
            sfEls[i].onmouseout = function(){
                this.className = this.className.replace(/\s*?\bsfhover\b/, "");
            }
        }
    },
    _getHTML: function(){
        var out = '';
        out += '<div id="nbaHeaderNav"><div id="nbaHeaderNavContain"><ul id="nav">';
        for (var t = 0; t < this._nav.length; t++) {
            var tab = this._nav[t];
			var url = (tab.url.indexOf("http") == 0 ? "" : "http://www.nba.com") + tab.url;
            out += '<li><a id="' + tab.id + '" href="' + url + '">'+ tab.id + '</a>';
            if (tab.items && tab.items.length > 0) {
                out += '<ul' + (tab.style ? ' style="' + tab.style + '"' : '') + '>';
                for (var li = 0; li < tab.items.length; li++) {
                    if (tab.items[li].label) {
                        var url = (tab.items[li].url.indexOf("http") == 0 ? "" : "http://www.nba.com") + tab.items[li].url;
                        out += '<li><div class="nbaMiddleSubLi"><a href="' + url + '"' + (tab.items[li].style ? ' style="' + tab.items[li].style + '"' : '') + '>' + tab.items[li].label + '</a></div></li>';
                    }
                    else 
                        if (tab.items[li].items) {
                            var item = tab.items[li];
                            out += '<li><div class="' + (item.clazz || '') + '">';
                            for (var i = 0; i < item.items.length; i++) {
                                var url = (item.items[i].url.indexOf("http") == 0 ? "" : "http://www.nba.com") + item.items[i].url;
                                out += '<a href="' + url + '" class="' + (item.items[i].clazz || '') + '">' + item.items[i].label + '</a>';
                            }
                            out += (item.post || '') + '</div></li>';
                        }
                }
                out += '</ul></li>';
            }
        }
        out += '</ul>'+'</div>'+'</div>'
        return out;
    },
	

    /******** public fields *********/

    getCDN: function(){
        var server = window.location.hostname;
        var secure = window.location.protocol.match(/https/i);
        if (server.match(/webdev|payp1|sasd/i)) {
            return 'http://nba-webdev-preview.nba.com';
        }
        else 
            if (server.match(/ref/i) && !secure) {
                return 'http://nba-ref-preview.nba.com';
            }
            else 
                if (secure) {
                    return 'https://s.cdn.turner.com/nba/nba';
                }
                else {
                    return 'http://i.cdn.turner.com/nba/nba';
                }
    },
    img: function(src, alt, attributes){
        alt = typeof(alt) != 'undefined' ? alt : '';
        attributes = typeof(attributes) != 'undefined' ? attributes : '';
        return '<img src="' + this.getCDN() + src + '" alt="' + alt + '" ' + attributes + '/>';
    },

    
    init: function(){
        for (i = 0; i < document.styleSheets.length; i++) {
            var css = document.styleSheets[i];
        }
        if (!this._cssDone && document.createStyleSheet) {
            document.createStyleSheet(this.getCDN() + (window.location.protocol == 'https:'?'/.element/css/2.0/global/secure.nbaGlobalNav.css':'/.element/css/2.0/global/nbaGlobalNav.css'));
        }
        else 
            if (!this._cssDone) {
                var ss = document.createElement('link');
                ss.rel = 'stylesheet';
                ss.href = this.getCDN() + (window.location.protocol == 'https:'?'/.element/css/2.0/global/secure.nbaGlobalNav.css':'/.element/css/2.0/global/nbaGlobalNav.css');
                var head = document.getElementsByTagName('head')[0];
                head.insertBefore(ss, head.childNodes[0]);
            }
        if (document.addEventListener) {
            document.addEventListener('DOMContentLoaded', this._onBodyDone, false);
        }
        this._onBodyDoneTimerId = setInterval(function(){
            if (/loaded|complete/.test(document.readyState)) {
                $nbaNav._onBodyDone();
            }
        }, 50);
    },
    
    
    /******** navigation *********/
    
    _nav: [{
        id: "NEWS",
        url: "/news/index.html",
        items: [{
            label: "News Archives",
            url: "/news/news_archive.html"
        }, {
            label: "Transactions",
            url: "/transactions/"
        }, {
            label: "NBA.com Writers",
            url: "/personalities/"
        }, {					
            label: "Referee Assignments",
            url: "/news/referee.html"
        }, {					
            label: "History",
            url: "/history"
        },{		
            label: "2012 Draft",
            url: "/draft/"
        }, {	
            label: "2012 All-Star",
            url: "/allstar/2012/"
        }, {		
            label: "2011 Playoffs",
            url: "/playoffs/2011/finals/"
        }, {
            label: "Newsletters",
            url: "/allaccess/newsletters.html"
        }, {		
            label: "RSS",
            url: "/rss/"			
        }]
    }, {	
        id: "SCORES &amp; SCHEDULES",
        url: "/gameline/"
    }, {
       id: "VIDEO",
        url: "/video/index.html",
        items: [{	
            label: "Top Plays",
            url: "/video/topplays"
        },{
            label: "Highlights",
            url: "/video/highlights"
        },{		
            label: "NBA TV",
            url: "/video/nbatv"
        },{			
            label: "Editor's Picks",
            url: "/video/editorspicks"		
        },{
            label: "TNT",
            url: "/video/tntot"
        },{
			label: "2012 All-Star",
            url: "/allstar/2012/video/"
        }, {
			label: "2011 Playoffs",
            url: "/video/playoffs/2011"
        }, {
			label: "2011 Draft",
            url: "/video/draft"
        }, {
            label: "Video Rulebook",
            url: "/videorulebook"		
        }]
    }, {	
        id: "PLAYERS",
        url: "/players/index.html",
        items: [{
            label: "Players",
            url: "/players/index.html"
        }, {
            label: "Rookie Ladder",
            url: "/rookieladder/"			
        }, {
			label: "Coaches",
            url: "/coaches/"
        }, {				
            label: "Team Rosters",
            url: "/teams/teamIndividualLinks.html?title=Team%20Roster&file=roster"
        }, {			
            label: "Officiating",
            url: "/officiating/"
        }, {
            label: "Historical Player Search",
            url: "/historical/search/index.jsp"
        }]
    }, {	
        id: "STANDINGS",
        url: "/standings/team_record_comparison/conferenceNew_Std_Div.html",
        items: [{
            label: "By Division",
            url: "/standings/team_record_comparison/conferenceNew_Std_Div.html"
        }, {
            label: "By Conference",
            url: "/standings/team_record_comparison/conferenceNew_Std_Cnf.html"
        }, {
            label: "Playoff Picture",
            url: "/statistics/playoff_picture.html"
        },{
            label: "Team Record Comparison",
            url: "/standings/team_record_comparison/conferenceNew_Stk_Cnf.html"
        }, {
            label: "Streaks and Last 10",
            url: "/standings/team_record_comparison/conferenceNew_Stk_Div.html"
        }, {
            label: "Ahead and Behind",
            url: "/standings/team_record_comparison/conferenceNew_Ahd_Div.html"
        }, {
            label: "Margin and Statistics",
            url: "/standings/team_record_comparison/conferenceNew_Mrg_Div.html"
		}, {	
            label: "2010-11 Standings",
            url: "/standings/2010/team_record_comparison/conferenceNew_Std_Div.html"
        }]
    }, {
        id: "STATS",
        url: "/statistics/",
        items: [{
            label: "Daily Leaders",
            url: "/statistics/"
        }, {
            label: "Individual Stats",
            url: "/statistics/index.html"
        }, {
            label: "Team Stats",
            url: "/statistics/sortable_team_statistics/sortable1.html"
        }, {
            label: "Advanced Stats",
            url: "/advancedstats/"
        }, {
            label: "+/- Stats",
            url: "/statistics/plusminus/plusminus.jsp"
        }, {		
            label: "Team-by-Team",
            url: "/teams/teamStatisticsLinks.html"
        }, {
            label: "Sortable Player Stats",
            url: "http://www.nba.com/statistics/player/Scoring.jsp"
        }, {
            label: "Sortable Team Stats",
            url: "/statistics/sortable_team_statistics/sortable1.html"
        }, {
            label: "Team-by-Team Splits",
            url: "/teams/teamSplitsLinks.html"
        }, {		
            label: "International",
            url: "/statistics/international/interPlayersStatsAVG.html"
        }, {
            label: "Milestones",
            url: "/teams/milestones.html"
        }]
    }, {
       id: "BLOGS",
        url: "http://hangtime.blogs.nba.com",
        items: [{	
            label: "Hang Time Blog",
            url: "http://hangtime.blogs.nba.com"
        },{
            label: "All Ball Blog",
            url: "http://allball.blogs.nba.com"
        },{		
            label: "Ten Before Tip",
            url: "http://tbt.blogs.nba.com"
        },{			
            label: "CharlesBarkley.com",
            url: "http://www.charlesbarkley.com"		
        },{
            label: "MikeFratello.com",
            url: "http://www.mikefratello.com"
        }]
    }, {
        id: "FANTASY",
        url: "/fantasy/",
        items: [{
			label: "ESPN NBA.com Fantasy Basketball",
			url: "http://games.espn.go.com/fba/welcome?ex_cid=2009_fbaxx_xxx_nba_fan"
		}]		
    }, {
        id: "FAN STUFF",
        url: "/allaccess/",
        items: [{			
            label: "Fan Voice",
            url: "http://my.nba.com"
        }, {
            label: "All Access",
            url: "/allaccess/"
        }, {	
            label: "NBA Twitter",
            url: "http://twitter.com/nba"
        },{	
            label: "NBA on Facebook",
            url: "http://www.facebook.com/nba"
        }, {
            label: "For Kids",
            url: "http://www.nbahooptroop.com"		
        }, {
            label: "NBA Travel",
            url: "/travel/"		
        }]
    }, {	
        id: "PHOTOS",
        url: "/photos/index.html",
        items: [{
            label: "Photo Galleries",
            url: "/photos/index.html"
        }, {
            label: "Shop Photo Store",
            url: "http://photostore.nba.com/home.aspx?sourceid=TopNav_Photos"
        }]
    }, {
        id: "MOBILE",
        url: "/mobile/",
        items: [{
            label: "Mobile Homepage",
            url: "/mobile/index.html"
        }, {
        	label: "NBA Game Time",
            url: "/mobile/gametime/index.html"
        }, {		
        	label: "NBA Game Time Connected",
            url: "/connected/index.html"
        }, {		
        	label: "NBA Courtside for Tablets",
            url: "/mobile/gametime/courtside/index.html"
        }, {	
            label: "LEAGUE PASS Mobile",
            url: "/leaguepass/mobile/index.html"
        }, {		
            label: "Cell Tattoos",
            url: "http://www.coveroo.com/nba"
        }, {		
            label: "SMS Alerts",
            url: "/mobile/alerts.html"
        }, {
            label: "NBA.com WAP",
            url: "/mobile/nbacom.html"
		}]
    }, {
		id: "TV",
        url: "/nbatv/index.html",
        items: [{
            label: "National TV Schedule",
            url: "/schedules/national_tv_schedule/index.html"
        }, {
            label: "NBA TV",
            url: "/nbatv/index.html"
        }, {		
            label: "NBA TV Schedule",
            url: "/nbatv/schedule/"
        }, {		
            label: "NBA Fan Night",
            url: "/fannight/"
        }, {
            label: "NBA on TNT",
            url: "/nbaontnt/"
        },{		
            label: "Inside the NBA",
            url: "/insidethenba/"
        }, {
            label: "The Association",
            url: "/the-association"
        }, {
            label: "TV Companion",
            url: "/tvc/info.html"
        }, {
            label: "International TV",
            url: "/schedules/international_nba_tv_schedule.html"
        },{
            label: "Canadian TV Schedule",
            url: "/schedules/national_tv_schedule/canada/"
        }, {
            label: "Connected TVs",
            url: "/connected/index.html"			
        }]
    }, {
        id: "LEAGUE PASS",
        url: "/leaguepass/index.html",
        items: [{
            label: "LEAGUE PASS for TV",
            url: "/leaguepass/3pp/index.html"
        }, {
            label: "LEAGUE PASS Broadband",
            url: "https://account.nba.com/leaguepass/broadband/?cid=nba_12_LPBB_LPBBNav"
        }, {
            label: "Launch LEAGUE PASS Broadband",
            url: "/leaguepass/schedule/index.html"
        }, {
            label: "LEAGUE PASS Mobile",
            url: "/leaguepass/mobile/index.html"
        }, {
            label: "Activate LEAGUE PASS",
            url: "/leaguepass/activate/index.html"
        }, {	
            label: "International LEAGUE PASS Broadband",
            url: "http://ilp.nba.com"
        }, {
            label: "LEAGUE PASS Audio",
            url: "/allaccess/watchListen.html"			
        }]
    }, {
        id: "STORE",
        url: "http://store.nba.com/entry.point?target=z&source=NBA_HOME",
		items: [{
            label: "Jerseys",
            url: "http://www.nbastore.com/entry.point?entry=2482948&source=NBA_Jerseys"
        }, {
            label: "Mens",
            url: "http://www.nbastore.com/entry.point?entry=1400498&source=NBA_Mens"
        }, {			
            label: "Kids",
            url: "http://store.nba.com/entry.point?entry=1400501&source=NBA_KIDS"
        }, {
            label: "NBA4HER",
            url: "http://www.nbastore.com/entry.point?entry=1400499&source=NBA_NBA4Her"
        }, {	
            label: "Custom Shop",
            url: "http://www.nbastore.com/entry.point?entry=3358354&source=NBA_CustomShop"
        }, {
            label: "Headwear",
            url: "http://www.nbastore.com/entry.point?entry=2132627&source=NBA_Headwear"
        }, {
            label: "Basketballs",
            url: "http://www.nbastore.com/entry.point?entry=2030151&source=NBA_basketballs"
        }, {
            label: "Footwear",
            url: "http://store.nba.com/category/index.jsp?categoryId=2710536"
        }, {	
            label: "What's Hot",
            url: "http://www.nbastore.com/entry.point?entry=11407769&source=NBA_WhatsHot"
        }, {		
            label: "Auctions",
            url: "http://auctions.nba.com"			
        }, {		
            label: "NBAGameworn.com",
            url: "http://NBAGameworn.com"			
        }, {			
            label: "Shop Photo Store",
            url: "http://photostore.nba.com/home.aspx?sourceid=TopNav_Photos"					
        },{			
            label: "NYC Store",
            url: "/nycstore/"					
        }]
	}]	
}

$nbaNav.init();

