var nbaGamesSet = {
	interval : 10000,
	lastMid : 0,
	ajaxp : {
		type: 'GET',
		url: '',
		dataType: 'jsonp',
		jsonpCallback: 'gamedataLoaded',
		cache : false
	}
};

var nbaGameStates = [
	'Pre', 'Live', 'Final', 'Recap'
];

var nbaOtText = [
	'Overtime',
	'Double Overtime',
	'Triple Overtime',
	'Quadruple Overtime'
];

$(document).ready( init );

function init() {
	$('div.nbaModOuterBarBckSmPre a').click( nbaExpand );

	if ( typeof startUrl == "undefined" ) {
		var cdt = new Date(nbaCurrTime);
		cdt.setHours(cdt.getHours()-6);
		var dtpath = nbaGetPathFromDt(cdt);
		nbaGamesSet.ajaxp.url = (startTeamUrl.base+dtpath+startTeamUrl.file);
	} else {
		nbaGamesSet.ajaxp.url = startUrl;
	}
	$(document).everyTime(nbaGamesSet.interval, 'nbaGameTimer', nbaProcGame);
};

function nbaGetPathFromDt( dt ) {
	var mdy = [
		dt.getMonth()+1,
		dt.getDate(),
		dt.getFullYear()
	];

	if (mdy[0] < 10) { mdy[0] = "0"+mdy[0]; }
	if (mdy[1] < 10) { mdy[1] = "0"+mdy[1]; }
	return (String(mdy[2])+String(mdy[0])+String(mdy[1]));
};

function nbaExpand() {
	nbaExpandLower(this);
	return false;
};

function nbaExpandLower(el) {
	var pdiv = $(el).parents('div.GameLine').first();

	$(el).find('div.nbaModBarPlusBut').first().toggleClass('MinusBut');
	pdiv.find('div.nbaModOuterBarBckSmPre').first().toggleClass('BarLg');
	pdiv.find('div.nbaNoBorder').first().toggleClass('Dotted');
	pdiv.find( 'div.nbaBtmClose' ).first().toggle();

	pdiv = null;
}

function nbaProcGame(i) {
	$.ajax( nbaGamesSet.ajaxp );
};

function gamedataLoaded(data) {
	var newpi = data.pi * 1000;

	if ( newpi != nbaGamesSet.interval ) {
		$(document).stopTime('nbaGameTimer');
		if ( newpi >= 5000 ) {
			nbaGamesSet.interval = newpi;
			$(document).everyTime(newpi, 'nbaGameTimer', nbaProcGame);
		}
	}

	// check to see if we've moved forward first
	if ( nbaGamesSet.lastMid < data.mid ) {
		nbaGamesSet.lastMid = data.mid; 
		for(var i = 0, l = data.games.length; i < l; ++i) {
			setGameData(data.games[i], i);
		}
	}

	if ( data.nurl.length ) {
		nbaGamesSet.ajaxp.url = data.nurl;
	} else {
		$(document).stopTime('nbaGameTimer');
	}
};

function setGameData(gob, index) {
	var $pdiv 	= $('div#nbaGL'+gob.gid);

	if ( !$pdiv ) { return; }	

	var cclass = nbaGameStates[gob.st];
	
	if ( gob.st > 0 && gob.ot ) {
		cclass += 'OT';
	}

	if ( !$pdiv.hasClass( cclass ) ) {
		// Remove any classes that have to do with game state
		for ( var gsi = nbaGameStates.length; gsi--; ) {
			$pdiv.removeClass( nbaGameStates[gsi] );
			if ( gsi ) {
				$pdiv.removeClass( nbaGameStates[gsi]+'OT' );
			}
		}
		// Add our new class back on
		$pdiv.addClass( cclass );
	}
 
	if ( gob.st > 0 ) {
		// Set live status text
		$pdiv.find('div.nbaLiveStatTxSm').text( gob.prd.s );
		
		// Rookie games only have 2 periods instead of 4.
		// Look at the game ID to determine if it is a rookie game.
		// Rookie game IDs have the pattern ##3######2
		var gid = gob.gid;
		var rookieGamePattern = /^\d\d3\d{6}2$/;
		var numPeriods = 4;
		if (gid.match(rookieGamePattern)) {
			numPeriods = 2;
		}
		var statsClass = (gob.st == 1?'Live':'Fnl');
		var $scores = $pdiv.find('div.nbaMnQuScores td.score');
		var $scoresot = $pdiv.find('div.nbaMnQuScores td.nbaMnQuBoxOT');
		var $bars = $pdiv.find('div.nbaMnQuScores td.bar div');
		var $leaders = $pdiv.find('div.nbaMnStats tr:gt(0) td');
		var $stats = $pdiv.find('div.nba'+ statsClass +'GmStats tr:gt(0) td');
		var $tmnum = null;
		var $hlmn = null;
		var $hlimg = null;
		var $hlanc = null;
		var $hlovl = null;
		var teams = gob.teams;
		var qts = gob.qts;
		var scores = null;
		var lds = null;
		var stats = null;
		var tmnumclass = '';
		var qlen = qts.length;
		
		for (var qi = 0; qi < gob.prd.n; ++qi) {
			var qtsPct = qts[qi];
			$bars.eq(qi).css('width', qtsPct+'%');
			if (qi >= 4) {
				$bars.eq(qi).parent('td.bar').removeClass('nbaHideOTbar');
			}
		}

		// set OT length based on quarters. offset by 4
		if ( qlen >= numPeriods ) { 
			$pdiv.find('div.nbaModTopInfo div.nbaMnStatsOT').text( nbaOtText[qlen-numPeriods-1] ); 
		}

		for (var ti = teams.length; ti--;) {
			scores = teams[ti].scores;
			lds = teams[ti].lds;
			stats = teams[ti].stats;

			// set main scoreboard, total score
			tmnumclass = 'div.nbaModTopTeam'+(teams[ti].home?'Hm':'Aw')+' div.nbaModTopTeamNum';
			$tmnum = $pdiv.find( tmnumclass );
			$tmnum.text(scores[0]);
			if ( teams[ti].win ) {
				$tmnum.addClass( 'win' );
			} else {
				$tmnum.removeClass( 'win' );
			}

			$pdiv.find('div.nbaMnScrBox td').eq(ti).text(scores[0]);

			// setting each score in the scores block
			for ( var si = 1; si <= numPeriods; ++si ) {
				$scores.eq( (si-1)+(ti*numPeriods) ).text( scores[si] );		
			}

			if ( gob.ot ) {
				var soti = 0;
				for ( var si = 5; si < scores.length && si <= 8; ++si ) {
					soti = (si-5)+(ti*4);
					$scoresot.eq( soti ).text( scores[si] ).addClass('nbaShowOT');
				}
			}

			$leaders.eq( 1 + (ti*2) ).text( lds[0].name );
			$leaders.eq( 2 + (ti*2) ).text( lds[0].stat );

			$leaders.eq( 6 + (ti*2) ).text( lds[1].name );
			$leaders.eq( 7 + (ti*2) ).text( lds[1].stat );

			$leaders.eq( 11 + (ti*2) ).text( lds[2].name );
			$leaders.eq( 12 + (ti*2) ).text( lds[2].stat );

			$stats.eq( 0 + (ti*5) ).text( stats.fg );	
			$stats.eq( 1 + (ti*5) ).text( stats.a3p );	
			$stats.eq( 2 + (ti*5) ).text( stats.ft );	
			$stats.eq( 3 + (ti*5) ).text( stats.reb );	
			$stats.eq( 4 + (ti*5) ).text( stats.to );	

			$hlmn = $pdiv.find('div.nbaModTopMnHlt').first();
			if ( gob.hl ) {
				$hlmn.removeClass( 'noHighlight' );
				$hlanc = $hlmn.find('div.nbaVideoWrapper a').first();
				$hlimg = $hlanc.find('img').first();
				$hlovl = $hlmn.find('img.nbaVideoOverlay').first();

				if ( $hlanc.attr('href') != gob.hl.url ) {
					$hlanc.attr('href', gob.hl.url);
					$hlimg.attr('src', gob.hl.img);

					$hlovl.unbind().bind('click',{target:gob.hl.url},nbaGoToUrl); 	
				}
				
			} else {
				$hlmn.addClass( 'noHighlight' );
			}

		}

		$hlmn		= null;
		$hlanc	= null;
		$hlimg	= null;
		$hlovl	= null;
		$scores	= null;
		$bars		= null;
		$leaders	= null;
		$stats	= null;
		$tmnum 	= null;
	}

	pdiv 		= null;
};

function nbaGoToUrl(e) {
	window.location = e.data.target;
};

