var $nbaFooter = {

    /******* private fields *********/
    
    _target: 'nbaGlobalFooter',
    _cssDone: false,
    _onBodyDoneTimerId: null,
	_filters: {},
    
    
    /******* private methods ********/
    
	_onBodyDone: function() {
		$nbaFooter._init();
	},
    _init: function(){
        var ftr;
        if (document.getElementById(this._target)) {
            ftr = document.getElementById(this._target);
        }
        else {
            ftr = document.createElement('div');
            ftr.id = this._target;
            var body = document.getElementsByTagName('body')[0];
            body.appendChild(ftr);
        }
        ftr.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(){
    },
    _filter: function(str){
        while (str && str.match(/\${.+?}/)) {
            var token = str.match(/\${(.+?)}/)[1];
            str = str.replace(/\${.+?}/, eval(token));
        }
        return str;
    },
    _getHTML: function(){
    
        var out = new Array();
        out.push('<table class="Blocks" cellspacing="0"><tr>');
        for (var t = 0; t < this._nav.length; t++) {
            this._filters.menu = this._nav[t];
            this._filters.clazz = t == 0 ? ' class="First"' : (t == (this._nav.length - 1) ? ' class="Last"' : '');
            out.push(this._filter('<th${this._filters.clazz}>'));
            out.push(this._filter('<div>${this._filters.menu.label}</div>'));
            out.push('</th>');
        }
        out.push('</tr><tr>');
        for (var t = 0; t < this._nav.length; t++) {
			var menu = this._nav[t];
            this._filters.clazz = t == 0 ? ' class="First"' : (t == (this._nav.length - 1) ? ' class="Last"' : '');
            out.push(this._filter('<td${this._filters.clazz}><ul>'));
            for (var link = 0; link < menu.items.length; link++) {
                out.push('<li>');
                if (menu.items[link].items) {
                    for (var i = 0; i < menu.items[link].items.length; i++) {
                        var url = (menu.items[link].items[i].url.indexOf("http") == 0 ? "" : "http://www.nba.com") + menu.items[link].items[i].url;
                        out.push('<a href="' + url + '">' + this._filter(menu.items[link].items[i].label) + '</a>');
                        if (i < menu.items[link].items.length - 1 && menu.items[link].separator) {
                            out.push(menu.items[link].separator);
                        }
                    }
                }
                else {
                    var url = (menu.items[link].url.indexOf("http") == 0 ? "" : "http://www.nba.com") + menu.items[link].url;
                    out.push('<a href="' + url + '">' + this._filter(menu.items[link].label) + '</a>');
                }
                out.push('</li>');
            }
            out.push('</ul></td>');
        }
        out.push('</tr></table>');
        
        out.push(this._filter('\
			<div class="Copyright">\
			    <p>Copyright &copy; 2009 NBA Media Ventures, LLC. All rights reserved. No portion of NBA.com\
				may be duplicated, redistributed or manipulated in any form.  By accessing any information \
				beyond this page, you agree to abide by the NBA.com\
				<a class="privacy" href="http://www.nba.com/news/privacy_policy.html">Privacy Policy</a> /\
				<a class="privacyCal" href="http://www.nba.com/news/privacy_policy.html#ten">Your California Privacy Rights</a>\
			    and \
				<a class="termsofuse" href="/news/termsofuse.html">Terms of Use</a>.</p>\
				<p><a href="http://www.nba.com/adspecs/">Advertise on NBA.com</a> |\
				<a href="http://www.nba.com/help/site_faq.html">NBA.com Help</a> |\
				<a href="http://www.nba.com/help/fan_relations_faq.html">Fan Relations FAQ</a> |\
				<a href="http://www.nba.com/careers/">Career Opportunities</a></p>\
			    <p><img src="${this.getCDN()}/.element/img/2.0/global/turner.tictac.gif">&nbsp;&nbsp;\
				NBA.COM is part of the Turner Sports and Entertainment Digital Network</p>\
			</div>\
			<br clear="all"/>\
		'));
        return out.join('');
    },
    
    
    /******** 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.cnn.net/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 (css.href && css.href.match(/global\.css/)) {
                this._cssDone = true;
                break;
            }
        }
        if (!this._cssDone && document.createStyleSheet) {
            document.createStyleSheet(this.getCDN() + '/.element/css/2.0/global/nbaGlobalNav.css');
        }
        else 
            if (!this._cssDone) {
                var ss = document.createElement('link');
                ss.rel = 'stylesheet';
                ss.href = this.getCDN() + '/.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)) {
                $nbaFooter._onBodyDone();
            }
        }, 50);
    },
    
    
    /******** navigation *********/
    
    _nav: [{
        label: "Other Features",
        items: [{
            label: "T-Mobile Rookie Correspondent",
            url: "/correspondent"
        }, {	
            label: "Kia Performance Awards",
            url: "/awards"
        }, {	
            label: "T-Mobile Rookie Report",
            url: "/rookies"	
        }]
    }, {
        label: "NBA",
        items: [{
            label: "Advertise on NBA.com",
            url: "http://tsed.turner.com/nba"
        }, {
            label: "Career Opportunities",
            url: "/careers"
        }, {
            label: "Contact Us",
            url: "/email_us"
        }, {
            label: "NBA Cares",
            url: "/nba_cares"
        }, {
            label: "NBA Cares Auctions",
            url: "http://auctions.nba.com/cgi-bin/ncommerce3/User?id=nba_cares&wl=51136034"
		}, {
			label: "NBA Fit",
            url: "/nbafit"
        }, {
            label: "iHoops",
            url: "http://www.ihoops.com/"
        }, {
            label: "NBA City Restaurant",
            url: "/nbacity"
        }, {
            label: "NBA Video Games",
            url: "/videogames"
        },{
            label: "NYC Store",
            url: "/nycstore"
        }]
    }, {
        label: "Events",
        items: [{
            label: "2009 Playoffs",
            url: "/finals2009/"
        }, {
            label: "2009 Draft and Lottery",
            url: "/draft2009"
        }, {
            label: "2009 Hall of Fame Induction",
            url: "/halloffame/2009"
        }, {
            label: "NBA Summer League",
            url: "/summerleague2009"
        }, {
        	label: "NBA Nation",
            url: "/nbanation"
        }, {
            label: "NBA Jamvan",
            url: "/jamvan"
        }, {	
            label: "2010 All-Star",
            url: "/allstar2010"
        }, {		
            label: "2009 All-Star",
            url: "/allstar2009"
        }, {
            label: "Jam Session",
            url: "/jamsession"
        }, {
			label: "Basketball without Borders",
            url: "/bwb"
        }, {		
            label: "Calendar",
            url: "/calendar"
        }]
    }, {
        label: "NBA 101",
        items: [{
            label: "NBA Official",
            url: "/official"
        }, {
            label: "About The NBA",
            url: "/about/game.html"
        }, {
            label: "History",
            url: "/history"
        }, {
            label: "Rules Of The Game",
            url: "/nba101"
        }, {
            label: "Video Rulebook",
            url: "#"
        }, {		
            label: "Hoopedia: Basketball Wiki",
            url: "http://hoopedia.nba.com/index.php/Main_Page"
        }, {
            label: "Red on Roundball",
            url: "/roundball"
        },{
            label: "NBA Guide",
            url: "/2010/news/transactions/01/05/nba.guide/index.html"
        },{
            label: "NBA Register",
            url: "/2010/news/transactions/01/05/nba.register/index.html"
        }]
    }, {
        label: "All-Access",
        items: [{
            label: "Member Center",
            url: "/allaccess"
        }, {
            label: "NBA LEAGUE PASS",
            url: "/allaccess/watchListen.html"
        }, {		
            label: "Audio LEAGUE PASS",
            url: "/allaccess/watchListen.html"
        }, {
            label: "Fantasy Games",
            url: "/fantasy"
        }, {
            label: "Online Games",
            url: "/games"
        }, {
            label: "Fan Voice",
            url: "http://my.nba.com"
        }, {
            label: "NBA Deals and Discounts",
            url: "/allaccess/shop.html"
        }, {
            label: "Newsletters",
            url: "/allaccess/newsletters.html"
        }]
    }, {
        label: "24/7",
        items: [{
            label: "NBA TV",
            url: "/nba_tv"
        }, {
            label: "Widgets",
            url: "/widgets"
        }, {
            label: "RSS Feeds",
            url: "/rss"
        }]
    }]
}

$nbaFooter.init();
