//Here for reference.  DON'T UNCOMMENT .Defined in "/.element/tmpl/2.0/POLITICS/primaryRaceDay/raceResults.txt" 
// ** DON'T UNCOMMENT var cnnProcessingVotes = true;
// ** DON'T UNCOMMENT var cnnFirstContest = true;
var cnnisSummaryPage = false;

var processingJSON = '/ELECTION/2008/primary/json/homepage/homepage_states_listed.html';
var scheduledJSON = '/ELECTION/2008/primary/json/homepage/homepage_states_summary.html';

function loadProcessingResults(cnnFirstContest){
	if( cnnFirstContest == true ) {
		CSIManager.getInstance().call(processingJSON,'',['cnnJSElexResults'], [loadProcessingResultsHandlerFirst], true);
	} else {
		CSIManager.getInstance().call(processingJSON,'',['cnnJSElexResults'], [loadProcessingResultsHandler], true);
	}
}

function loadScheduledResults(){
	CSIManager.getInstance().call(scheduledJSON,'',['cnnJSElexResults'], [loadScheduledResultsHandler], true);
}

function loadProcessingResultsHandlerFirst(obj){try{
	return getProcessingResultsTable(obj, true);
}catch(e){return '<div style="display:none">'+ 'Error name: "' + e.name + '" Message: '+ e.message + ' [ ' + e.number + ' ]</div>';}}

function loadProcessingResultsHandler(obj){try{
	return getProcessingResultsTable(obj, false);
}catch(e){return '<div style="display:none">'+ 'Error name: "' + e.name + '" Message: '+ e.message + ' [ ' + e.number + ' ]</div>';}}

function loadScheduledResultsHandler(obj){try{
	return getScheduledResultsTable(obj);
}catch(e){return '<div style="display:none">'+ 'Error name: "' + e.name + '" Message: '+ e.message + ' [ ' + e.number + ' ]</div>';}}

var months = new Array("January","February","March","April","May","June","July","August","September","October","November","December");

function getAbbreviatedDate(dateArg){
        var theDate=''+dateArg;
        var month = months[parseInt(theDate.substring(4,6))-1];
        var day = parseInt(theDate.substring(6));
        return month.substring(0,3)+' '+day;
}


function returnCountyLink(id) { //relies on countyLinks object, which is set via an SSI that's included in the head of the document, will make it easier to change on the fly
	if(typeof countyLinks[id] == "object") {
		return '<span><a href="'+countyLinks[id].url+'">'+countyLinks[id].text+'</a></span>';
	} else {
		return '';
	}
}


function returnOpenPolls(obj){
	var returnHTML = '';
	var stateraces = obj['stateraces'];

	for (var i=0;i<pollsToClose.length;i++) {
		var excludeState = false;
		for (var x=0;x<stateraces.length;x++) {
			if (pollsToClose[i].stateCode == stateraces[x].code) {
				excludeState = true;	
			}
		}
		if (!excludeState) {
			returnHTML += '<div class="cnnElexPrimary cnnElexE6bot"><a href="/ELECTION/2008/primaries/results/state/#'+pollsToClose[i].stateCode+'">'+pollsToClose[i].state + '</a><span>'+pollsToClose[i].closingTime+'</span></div>';
		}
	}
	return returnHTML;
}

function returnFooter(obj) {
	var returnHTML = '';
	var stateraces = obj['stateraces'];
	var included = 0;

	if (typeof pollsToClose == "object") {

	for (var i=0;i<pollsToClose.length;i++) {
		var includeState = false;
		for (var x=0;x<stateraces.length;x++) {
			if (pollsToClose[i].stateCode == stateraces[x].code) {
				includeState = true;	
				included++;
			}
		}
		if (includeState) {
			if(included>1) {
				returnHTML += ' and ' + pollsToClose[i].stateCode + ' Del ';
			} else {
				returnHTML += pollsToClose[i].stateCode + ' Del ';
			}
		}
	}
}

	if (included > 1) {
		returnHTML += 'include pledged delegates only'; 
	} else if(included == 1) {
		returnHTML += 'includes pledged delegates only'; 
	} else {
		returnHTML += stateraces[0].code + ' Del includes pledged delegates only';
	}
	return returnHTML;

}


function getProcessingResultsTable(obj, cnnFirstContest) {
var returnHTML = '';
var stateraces = obj['stateraces'];
if(typeof($(stateraces[0]))!= 'undefined'){
	returnHTML += '<div class="cnnElexResults">\
	<div class="cnnElexPHead">Election Results</div>';

	
	if (typeof pollsToClose == "object") {
		returnHTML += returnOpenPolls(obj);
	}
	
	for (var i=0;i<stateraces.length;i++) {
		var stateraceObj = stateraces[i];
		var closingTime = returnCountyLink(stateraceObj.code.toUpperCase());
		returnHTML += '<div class="cnnElexPrimary"><a href="/ELECTION/2008/primaries/results/state/#'+stateraceObj.code+'">'+stateraceObj.state+'</a> '+closingTime+'</div>\
			<div class="cnnElexRBox">';
		for (var j=0;j<stateraceObj.parties.length;j++) {
			var partyObj = stateraceObj.parties[j];
			var partyName = (partyObj.party == 'D' || partyObj.party.toUpperCase() == 'DEM') ? 'Democratic' : 'Republican';
			var partyNameHeader = (partyObj.party == 'D' || partyObj.party.toUpperCase() == 'DEM') ? 'Democrats' : 'Republicans';
			
			if(partyObj.party == 'REP' ) {
			partyObj.party = 'Republican'
			}
			
			if(partyObj.party == 'DEM' ) {
			partyObj.party = 'Democrat'
			}
			
			returnHTML += '<div class="cnnElexRHeadRow">\
					<div class="cnnElexResL">'+partyNameHeader+'</div>\
					<div class="cnnElexResC">Vote %</div>';
			if(cnnFirstContest) { returnHTML += '<div class="cnnElexResR">Del*</div>'; }
			else { returnHTML += '<div class="cnnElexResCl">'+stateraceObj.code+' Del</div>\
					<div class="cnnElexResR">Total Del*</div>';
			}
			returnHTML += '</div>'; // End cnnElexRHeadRow
			for (var k=0;k<partyObj.candidates.length;k++) {
				var candidateObj = partyObj.candidates[k];
				returnHTML += '<div class="cnnElexRRow"><div class="cnnElexResL">'+getCandidateLink(candidateObj);
				if(candidateObj.winner) {
					returnHTML += '<img src="http://i.l.cnn.net/cnn/.element/img/2.0/sect/election/primaries/results/common/check.gif" border="0" alt="">';
				}
				returnHTML += '</div>';
				returnHTML += '<div class="cnnElexResC">'+candidateObj.vpct+'%</div>';
				if(!cnnFirstContest) { returnHTML += '<div class="cnnElexResCl">'+candidateObj.edelegates+'</div>'; }
				returnHTML += '<div class="cnnElexResR">'+candidateObj.tcdelegates_all+'</div>';
				returnHTML += '</div>'; // End cnnElexRRow
				if(k== (partyObj.candidates.length - 1)) {
					var timestamp = (partyObj.lts == 0) ? '' : cnnRenderTimeStamp(partyObj.lts);
					returnHTML += '<div class="cnnElexRBotRow"><div class="cnnElexResL">'+partyObj.pctsrep+'% of precincts</div>'
						+'<div class="cnnElexResR">'+timestamp+'</div></div>';
				}
			}
		}
		if(i == (stateraces.length - 1) ) { //Last div added
			returnHTML += '<div class="cnnElexRFoot" style="height:50px;"><img src="http://i.l.cnn.net/cnn/.element/img/2.0/sect/election/primaries/results/common/winner.gif" border="0" alt=""><p style="border-bottom:1px solid #e6e6e6;padding-bottom:4px;">';
			if(	stateraces.length > 1) {
				returnHTML += '<a href="/ELECTION/2008/primaries/results/dates/index.html#'+stateraces[stateraces.length - 1].electiondate+'">Full '+getAbbreviatedDate(stateraces[stateraces.length - 1].electiondate)+' results</a>';
			} else {
				returnHTML += '<a href="/ELECTION/2008/primaries/results/state/#'+stateraces[0].code+'">Full '+stateraces[0].code+' results</a>';
			}	
			returnHTML += ' | <a href="/ELECTION/2008/">Election Center</a><span style="top:22px;left:0;">*Total Del includes pledged and superdelegates;<br>'+returnFooter(obj);'</span></p><div class="clear"></div></div>';
		}
		returnHTML += '</div>'; //cnnElexRbox
	}
	returnHTML += '</div>';
}
return returnHTML;
}

function cnnBasicTime(lts){
//	var date = new Date(lts);
	
	var myDate = new Date(); //getting an EDT date
	var utcDate = new Date(lts);
	var offsetThing = -5;
	myDate.setUTCFullYear(utcDate.getUTCFullYear());
	myDate.setUTCMonth(utcDate.getUTCMonth());	
	myDate.setUTCDate(utcDate.getUTCDate());
	myDate.setUTCHours(utcDate.getUTCHours());
	myDate.setUTCMinutes(utcDate.getUTCMinutes());
	myDate.setUTCSeconds(utcDate.getUTCSeconds());
	var now = new Date(cnnCurrTime);
	var myDateTime = myDate.getTime();
	var newTime = myDate.getTime() + (myDate.getTimezoneOffset() * 60000) + offsetThing * 3600000;
	myDate = new Date(newTime);	
	
	
	
	var hour = myDate.getHours();
	var min = myDate.getMinutes();
	var tz = 'EDT';
	var amOrPm = ( hour < 12 ) ? 'a.m.' : 'p.m.';
	if( hour == 0 ) { hour = 12; }
	else if( hour > 12 ) { hour = hour - 12; }
	if( min < 10 ) { min = '0'+min; }
	return ''+ hour +':'+ min +' '+amOrPm+' ET';
}

function getScheduledResultsTable(obj) {
var returnHTML = '';
var stateraces = obj['stateraces'];
var parties = obj['parties'];

if(typeof($(stateraces[0]))!= 'undefined' || typeof($(parties[0]))!= 'undefined'){
	returnHTML += '<div class="cnnElexResults">';
	if(typeof($(stateraces[0]))!= 'undefined' && !cnnisSummaryPage){
		returnHTML += '<div class="cnnElexPHead">Today\'s Races</div>';
		for (var i=0;i<stateraces.length;i++) {
			var stateraceObj = stateraces[i];
			var closingTimeDisplay = (typeof(closingTimes[stateraceObj.code]) != "undefined") ? closingTimes[stateraceObj.code] : ''; //we're relying on closing time object, which is static and set in the htmlHead
			returnHTML += '<div class="cnnElexPrimary cnnElexE6bot"><a href="/ELECTION/2008/primaries/results/state/#'+stateraceObj.code+'">'+stateraceObj.state+'</a><span>'+closingTimes[stateraceObj.code]+'</span></div>';
		}
	} else {
		returnHTML += '<div class="cnnElexPHead">Election Results</div>';
	}
	if(typeof($(parties[0]))!= 'undefined' ){
		returnHTML += '<div class="cnnElexPrimary">Delegate Count</div><div class="cnnElexRBox">';
		for (var j=0;j<parties.length;j++) {
			var partyObj = parties[j];
			var partyName = ( partyObj.party == 'D' || partyObj.party.toUpperCase() == 'DEM' ) ? 'Democratic' : 'Republican';
			var partyNameHeader = ( partyObj.party == 'D' || partyObj.party.toUpperCase() == 'DEM' ) ? 'Democrats' : 'Republicans';
			returnHTML += '<div class="cnnElexRHeadRow">\
					<div class="cnnElexResL">'+partyNameHeader+'</div>\
					<div class="cnnElexResCr">States Won</div>\
					<div class="cnnElexResR">Del*</div>\
				</div>';
			for (var k=0;k<partyObj.candidates.length;k++) {
				var candidateObj = partyObj.candidates[k];
				returnHTML += '<div class="cnnElexRRow">\
						<div class="cnnElexResL">'+getCandidateLink(candidateObj)+'</div>\
						<div class="cnnElexResCr">';
				var stateArr = candidateObj.allstateswon;
				if(typeof(stateArr)=='object' && stateArr.length > 0){
					for (var m=0;m<stateArr.length;m++) {
						var state = stateArr[m];
						if(m!=0) {	returnHTML += ', '; }
						returnHTML += '<a href="/ELECTION/2008/primaries/results/state/#'+state+'">'+state+'</a>'
					}
				} else { returnHTML += '---'; }
				returnHTML += '</div><div class="cnnElexResR">'+candidateObj.edelegates+'</div></div>'; // closing cnnElexRHeadRow too		
			} // end candidates
			returnHTML += '<div class="cnnElexRBotRow">\
					<div class="cnnElexResL"><a href="/ELECTION/2008/primaries/results/scorecard/#'+partyObj.party+'">'+partyName+' Scorecard &raquo;</a></div>\
					<div class="cnnElexResR"></div></div>';
		} // end parties
		returnHTML += '<div class="cnnElexRFoot"><p><a href="/ELECTION/2008/">Election Center  &raquo;</a> <span>*Includes pledged delegates and superdelegates</span></p><div class="clear"></div></div>';
		returnHTML += '</div>'; //close cnnElexRBox
	} // end if
	returnHTML += '</div>'; //close cnnElexResults
}	
return returnHTML;
}

function linkableCandidate(candidate){try{
	var badIds = [100004,100005,100006,100007,100008,100012];
	for(var i=0; i<badIds.length; i++){
		if(candidate.id == badIds[i]){
			return false;
		}
	}
	return true;}catch(e){return false;}
}

function getCandidateLink(candidate){
        if(!linkableCandidate(candidate)){
                return candidate.lname;
        }else{
                return '<a href="/ELECTION/2008/primaries/results/candidates/#'+candidate.id+'"><b>'+candidate.lname+'</b></a>';
        }
}


