var usingStateManager = false;
var jsonPath = '/ELECTION/2008/primary/json/';
var jsonFile = jsonPath+'politicspage/politics.html';
var candidatePath = '/ELECTION/2008/primaries/results/candidates/';
var notePath = '/.element/ssi/www/sect/2.0/ELECTION/primaries/notes/';
var imgPath ='/.element/img/2.0/sect/election/primaries/results/';
var imgHost = 'http://i.cdn.turner.com/cnn';


var cnnCandidateObj = {
	demMagicNumber: '',
	repMagicNumber: '',
	candidates: {
		"1036": {
			"lname":"Biden", "fname":"Joe", "party": "D",
			"bio":"The lawyer is serving his sixth term as U.S. senator from Delaware, and once ran for president in 1988."
		},
		"1918": {

			"lname":"Obama", "fname":"Barack", "party": "D",
			"bio":"The former lawyer and state senator won a U.S. Senate seat in Illinois in 2004."
		},
		"1707": {
			"lname":"Dodd", "fname":"Chris", "party": "D",
			"bio":"Dodd has been a U.S. senator from Connecticut since 1981."
		},
		"1358": {
			"lname":"Richardson", "fname":"Bill", "party": "D",
			"bio":"The New Mexico governor has also served in the U.S. House and as U.N. ambassador and U.S. energy secretary."
		},
		"1746": {
			"lname":"Clinton", "fname":"Hillary", "party": "D",
			"bio":"The former first lady is now in her second term as the junior senator from New York."
		},
		"1803": {
			"lname":"Edwards", "fname":"John", "party": "D",
			"bio":"The former U.S. senator from North Carolina was the Democratic 2004 vice presidential candidate."
		},
		"1380": {
			"lname":"Kucinich", "fname":"Dennis", "party":"D",
			"bio":"Kucinich represents an Ohio district in the U.S. House and also ran for the '04 Democratic presidential nomination."
		},
		"57266": {
			"lname":"Gravel", "fname":"Mike", "party":"D",
			"bio":"The former U.S. senator from Alaska now heads up a non-profit firm promoting civics and education."
		},
		"1701": {
			"lname":"McCain", "fname":"John", "party":"R",
			"bio":"The U.S. senator from Arizona ran for the GOP presidential nomination in 2000, but lost to George W. Bush."
		},
		"751": {
			"lname":"Tancredo", "fname":"Tom", "party":"R", "tdelegates_all": "N/A", "tcdelegates_all": "N/A", "dpct": "N/A",
			"bio":"He has represented his Colorado district in the U.S. House since 1998."
		},
		"893": {
			"lname":"Romney", "fname":"Mitt", "party":"R",
			"bio":"The former Massachusetts governor made an unsuccessful run for the U.S. Senate in 1994."
		},
		"155": {
			"lname":"Hunter", "fname":"Duncan", "party":"R",
			"bio":"Hunter has served as a U.S. representative from California since 1981."
		},
		"57302": {
			"lname":"Thompson", "fname":"Fred", "party": "R",
			"bio":"The former U.S. senator from Tennessee also is known for acting, including his \"Law and Order\" role."
		},
		"1187": {
			"lname":"Huckabee", "fname":"Mike", "party": "R",
			"bio":"Before he was a governor of Arkansas, Huckabee served as pastor to several churches."
		},
		"32884": {
			"lname":"Giuliani", "fname":"Rudy", "party": "R",
			"bio":"The two-term mayor of New York City once ran for the U.S. Senate, but dropped out in 2000."
		},
		"302": {
			"lname":"Paul", "fname":"Ron", "party": "R",
			"bio":"The U.S. House member from Texas and medical doctor ran as a Libertarian for president in 1988."
		},
		"sbrownback": {
			"lname":"Brownback", "fname":"Sam", "party":"R", "tdelegates_all":"N/A",
			"tcdelegates_all":"N/A", "dpct":"N/A",
			"bio":"Sam Brownback is a U.S. senator from Kansas."
		},
		"tthompson": { "lname": "Thompson", "fname":"Tommy", "party":"R", "tdelegates_all":"N/A", "tcdelegates_all":"N/A", "dpct":"N/A",
			"bio":"The former Wisconsin governor was secretary of Health and Human Services from 2001 to 2005."
		},
		"jgilmore": { "lname":"Gilmore", "fname":"Jim", "party":"R", "tdelegates_all":"N/A", "tcdelegates_all":"N/A", "dpct":"N/A",
			"bio": "The former Virginia governor now chairs a homeland security program and think tank."
		}
	},
	inReps: [],
	outReps: [ { "id": "jgilmore", "outdate":"07/14/2007" }, { "id":"tthompson", "outdate":"08/12/2007" }, { "id":"sbrownback", "outdate":"10/19/2007" }, { "id":"751", "outdate":"12/20/2007" } ],
	inDems: [],
	outDems: [],
	reset: function()
	{
		this.inReps = [];
		this.outReps = [ { "id": "jgilmore", "outdate": "07/14/2007" }, { "id":"tthompson", "outdate":"08/12/2007" }, { "id":"sbrownback", "outdate":"10/19/2007" },{ "id": "751", "outdate": "12/20/2007" } ];
		this.inDems = [];
		this.outDems = [];
	}
};



function csiLoadObj( obj )
{
	var html = '';
	var nationData = obj.nationraces;
	for( var i=0; i<nationData.length; i++ )
	{
		var data = nationData[i];
		var party = data.party;
		var candidates = data.candidates;
		for( var j=0; j<candidates.length; j++ )
		{
			var candID = candidates[j].id;
			if( cnnCandidateObj.candidates[ candID ] && !cnnCandidateObj.candidates[ candID ].handled )
			{
				cnnCandidateObj.candidates[ candID ].tdelegates_all = candidates[j].tdelegates_all;
				cnnCandidateObj.candidates[ candID ].tcdelegates_all = candidates[j].tcdelegates_all;
				cnnCandidateObj.candidates[ candID ].dpct = candidates[j].dpct;
				if( party.toUpperCase() == 'DEM' ) { cnnCandidateObj.demMagicNumber = data.ctdelegatestowin; }
				else if( party.toUpperCase() == 'REP' ) { cnnCandidateObj.repMagicNumber = data.ctdelegatestowin; }

				if( candidates[j].inrace )
				{
					if( party.toUpperCase() == 'DEM' )
					{
						cnnCandidateObj.inDems.push( { "id": candID, "tdelegates_all": candidates[j].tdelegates_all } );

					}
					else if( party.toUpperCase() == 'REP' )
					{
						cnnCandidateObj.inReps.push( { "id": candID, "tdelegates_all": candidates[j].tdelegates_all } );
					}
				}
				else
				{
					if( party.toUpperCase() == 'DEM' )
					{
						cnnCandidateObj.outDems.push( { "id": candID, "outdate": candidates[j].outdate } );
					}
					else if( party.toUpperCase() == 'REP' )
					{
						cnnCandidateObj.outReps.push( { "id": candID, "outdate": candidates[j].outdate } );
					}
				}
				cnnCandidateObj.candidates[ candID ].handled = 1;
			}
		}
	}

	if( obj.lts && obj.lts > 0 )
	{
		var timeStampText = getElectionTimestamp(obj.lts,false);
		if(timeStampText.indexOf('ago') > -1)
		{
			$('primaryTimeStamp').className='cnnHtTimestamp';
		}
		$('primaryTimeStamp').innerHTML = timeStampText;
	}

	var outHtml = loadOutTable();
	$('cnnElexCandOut').innerHTML = outHtml;

	html = loadInTable();
	return html;
}

function sortByDelegates(a,b)
{
	if( cnnCandidateObj.candidates[ a.id ] )
	{
		if( cnnCandidateObj.candidates[ b.id ] )
		{
			var candA = cnnCandidateObj.candidates[ a.id ];
			var candB = cnnCandidateObj.candidates[ b.id ];

			var aDels = ( candA.tdelegates_all == 'N/A' ) ? -1 : candA.tdelegates_all;
			var bDels = ( candB.tdelegates_all == 'N/A' ) ? -1 : candB.tdelegates_all;

			if( aDels < bDels ) { return 1; }
			else if( aDels > bDels ) { return -1; }
			else
			{
				if( candA.lname > candB.lname ) { return 1; }
				else if( candA.lname < candB.lname ) { return -1; }
				else { return 0; }
			}
		}
		else { return -1; }
	}
	else if( cnnCandidateObj.candidates[ b.id ] ) { return 1; }
	else { return 0; }
}

function csiLoadCandidates()
{
	cnnCandidateObj.reset();
	CSIManager.getInstance().call( jsonFile, '', 'cnnInCandidates', csiLoadObj, true );
}

function loadInTable()
{
	var html = '';
	cnnCandidateObj.inDems.sort( sortByDelegates );
	cnnCandidateObj.inReps.sort( sortByDelegates );

	var header = '<table cellspacing="0" cellpadding="0" border="0" width="585">'
		+ '<colgroup><col width="147"><col width="146"><col width="146"><col width="146">'
		+ '</colgroup><tr>'
		+ '<td class="cnnElexCandHeadCol1_noBorder">'
		+ '<div class="cnnElexCandHeader">'
		+ 'DEMOCRATS</div></td>'
		+ '<td class="cnnElexCandHeadCol1_noBorder">'
		+ '<div class="cnnMagicNumText" style="text-align:right; font-size:10px;">'
		+ 'Needed to Win'
		+ '<span class="cnnMagicNumber" style="padding-left:10px;'
		+ '">'+cnnCandidateObj.demMagicNumber+'</span>'
		+ '</div>'
		+ '</td>'
		+ '<td class="cnnElexCandHeadCol2">'
		+ '<div class="cnnElexCandHeader">'
		+ 'REPUBLICANS</div>'
		+ '</td>'
		+ '<td class="cnnElexCandHeadCol2">'
		+ '<div class="cnnMagicNumText" style="text-align:right; font-size:10px;">'
		+ 'Needed to Win'
		+ '<span class="cnnMagicNumber">'
		+ cnnCandidateObj.repMagicNumber+'</span>'
		+ '</div>'
		+ '</td></tr>'
		+ '</table>';


	header += '<table cellspacing="0" cellpadding="0" border="0" width="585" '
		+ 'class="cnnElexCandMTable"><colgroup><col width="99"><col width="193"><col width="108">'
		+ '<col width="185"></colgroup><tr><td colspan="2" class="cnnElexCandHeadCol1">'
		+ '<div class="cnnElexCandHeader"><div class="cnnElexCandHeaderNote">* TOTAL DELEGATES</div>'
		+ '</div>'
		+ '</td><td colspan="2" class="cnnElexCandHeadCol2">'
		+ '<div class="cnnElexCandHeader"><div class="cnnElexCandHeaderNote">* TOTAL DELEGATES</div>'
		+ '</div></td></tr>';

	var footer = '</table><div class="cnnPad12Top"></div><div class="cnnElexCandFooterNote">'
		+ '<img src="/.element/img/2.0/sect/election/primaries/results/common/asterik.gif" width="8" height="7" alt="*">'
		+ 'Democratic delegate totals include pledged delegates and superdelegates. Republican delegate totals include pledged delegates and unpledged RNC member delegates. <a href="/2008/POLITICS/01/02/delegate.explainer/index.html">What are delegates?</a></div>';

	var numRows = ( cnnCandidateObj.inDems.length > cnnCandidateObj.inReps.length ) ? cnnCandidateObj.inDems.length : cnnCandidateObj.inReps.length;

	for( var i=0; i<numRows; i++ )
	{
		var dem, rep;
		if( i == numRows )
		{
			html += '<tr class="cnnElexCandLastRow">';
		}
		else { html += '<tr>'; }

		if( cnnCandidateObj.inDems[i] )
		{
			dem = new InCandidate( cnnCandidateObj.inDems[i] );
			html += dem.html();
		}
		else { html += '<td colspan="2" class="cnnElexCandCol1">&nbsp;</td>'; }

		if( cnnCandidateObj.inReps[i] )
		{
			rep = new InCandidate( cnnCandidateObj.inReps[i] );
			html += rep.html();
		}
		else { html += '<td colspan="2" class="cnnElexCandCol2">&nbsp;</td>'; }

		html += '</tr>';
	}
	html = header + html + footer;
	return html;
}

function InCandidate( obj )
{
	this.id = obj.id;
	var c = cnnCandidateObj.candidates[ obj.id ];

	this.tdelegates_all = c.tdelegates_all;
	this.tcdelegates_all = c.tcdelegates_all;
	this.dpct = c.dpct;
	this.fname = c.fname;
	this.lname = c.lname;
	this.bio = c.bio;
	this.party = c.party;
	this.link = '/ELECTION/2008/candidates/'+this.fname.toLowerCase()+'.'+this.lname.toLowerCase()+'.html';
	this.image = imgHost+imgPath+'main_page/candidates/90/'+this.lname.toLowerCase()+'.jpg';

}

InCandidate.prototype = {
	html:function()
	{
		html = [];
		if( this.party == 'D' )
		{
			html.push('<td><a href="'+this.link+'">');
			html.push('<img class="cnnElexCandPhoto" src="'+this.image+'" width="90" height="90" border="0" alt="'+this.lname+'"><\/a><br>');
			html.push('<\/td><td class="cnnElexCandCol1">');
		}
		else
		{
			html.push('<td class="cnnElexCandCol2"><a href="'+this.link+'">');
			html.push('<img class="cnnElexCandPhoto" src="'+this.image+'" width="90" height="90" alt="'+this.lname+'" border="0" ><\/a>');
			html.push('<\/td><td>');
		}
		html.push('<div class="cnnElexCMB_main">');
		//html.push('<div class="cand_perc"><b>'+this.tcdelegates_all+'<\/b> ('+this.dpct+'%)<\/div>');
		html.push('<div class="cand_perc"><b>'+this.tcdelegates_all+'<\/b><\/div>');
		html.push('<div class="cand_name"><a href="'+this.link+'"><h2>'+this.fname+' '+this.lname+'<\/h2><\/a><\/div>');
		html.push('<\/div><div class="cnnElexCMBdesc">'+this.bio+'<\/div><\/td>');
		return ( html.join('') );
	}
}

function loadOutTable()
{
	var html = '';
	cnnCandidateObj.outDems.sort( sortByDelegates );
	cnnCandidateObj.outReps.sort( sortByDelegates );

	var header = '<table cellspacing="0" cellpadding="0" border="0" width="585" class="cnnElexCandMTable">'
		+ '<colgroup><col width="99"><col width="193"><col width="108"><col width="185"></colgroup>';
	var footer = '<tr><td colspan="4"><div class="cnnElexCandSpecialNote"><b>* Special Notes</b><br>'
		+ '<div class="cnnElexCandSpecialNoteContent">'
		+ '&#8226; Delegate counts represent CNN\'s most recent total for each candidate. There are currently 4,234 total delegates to the Democratic National Convention, including 3,409 pledged delegates and 825 superdelegates. The total number of delegate votes needed to win the nomination is 2,118. There are currently 2,380 total delegates to the Republican National Convention, including 1,917 pledged delegates and 463 unpledged delegates. The total number of delegate votes needed to win the nomination is 1,191. <a href="/2008/POLITICS/01/02/delegate.explainer/index.html">More about the delegate selection process</a><br>'
		+ '&#8226; Needed to Win: This refers to the total number of delegate votes needed by a candidate to win the party\'s nomination.<br>'
		+ '</div></div></td></tr></table>';

	var numRows = ( cnnCandidateObj.outDems.length > cnnCandidateObj.outReps.length ) ? cnnCandidateObj.outDems.length : cnnCandidateObj.outReps.length;
	for( var i=0; i<numRows; i++ )
	{
		var dem;
		var rep;
		if( i == numRows )
		{
			html += '<tr class="cnnElexCandLastRow">';
		}
		else { html += '<tr>'; }

		if( cnnCandidateObj.outDems[i] )
		{
			dem = new OutCandidate( cnnCandidateObj.outDems[i] );
			html += dem.html();
		}
		else { html += '<td colspan="2" class="cnnElexCandCol1">&nbsp;</td>'; }

		if( cnnCandidateObj.outReps[i] )
		{
			rep = new OutCandidate( cnnCandidateObj.outReps[i] );
			html += rep.html();
		}
		else { html += '<td colspan="2" class="cnnElexCandCol2">&nbsp;</td>'; }

		html += '</tr>';
	}
	return header + html + footer;
}

function OutCandidate( obj )
{
	//this is already in electionCommon.js
	var months = new Array('January','February','March','April','May','June','July','August','September','October','November','December');

	this.id = obj.id;
	var date = new Date( obj.outdate );
	var year = date.getFullYear();
	var month = date.getMonth();
	var day = date.getDate();
	this.outdate = months[ month ]+' '+day+', '+year;

	var c = cnnCandidateObj.candidates[ obj.id ];
	this.tdelegates_all = c.tdelegates_all;
	this.tcdelegates_all = c.tcdelegates_all;
	this.dpct = c.dpct;
	this.fname = c.fname;
	this.lname = c.lname;
	this.bio = c.bio;
	this.party = c.party;
	this.link = '/ELECTION/2008/candidates/'+this.fname.toLowerCase()+'.'+this.lname.toLowerCase()+'.html';
	this.image = ( this.id != 'tthompson' ) ? imgHost+imgPath+'main_page/candidates/90/'+this.lname.toLowerCase()+'.out.jpg' : imgHost+imgPath+'main_page/candidates/90/t.thompson.out.jpg';
}

OutCandidate.prototype = {
	html:function()
	{
		html = [];
		if( this.party == 'D' )
		{
			html.push('<td><a href="'+this.link+'">');
			html.push('<img class="cnnElexCandPhoto" src="'+this.image+'" width="90" height="90" border="0" alt="'+this.lname+'"><\/a><br>');
			html.push('<\/td><td class="cnnElexCandCol1">');
		}
		else
		{
			html.push('<td class="cnnElexCandCol2"><a href="'+this.link+'">');
			html.push('<img class="cnnElexCandPhoto" src="'+this.image+'" width="90" height="90" alt="'+this.lname+'" border="0" ><\/a>');
			html.push('<\/td><td>');
		}
		html.push('<div class="cnnElexCMB_main">');
		html.push('<div class="cand_perc">');
		if( this.tcdelegates_all == 'N/A' ) { html.push( this.tcdelegates_all ); }
		else { html.push( '<b>'+this.tcdelegates_all+'<\/b>'); }
		html.push('<\/div>');
		html.push('<div class="cand_name"><a href="'+this.link+'"><h2>'+this.fname+' '+this.lname+'<\/h2><\/a><\/div>');
		html.push('<\/div><div class="cnnElexCMBdesc">Dropped out '+this.outdate+'.<br>'+this.bio+'<\/div><\/td>');
		return ( html.join('') );
	}
}

Event.observe(window, 'load', csiLoadCandidates);
