selStateStr = (resultsTicker.states)?resultsTicker.states:'NY,OH,IA,TX,FL';
rcLimit = (resultsTicker.limit)?resultsTicker.limit:5;
allowMyChips = (!resultsTicker.allowConfig)?false:true;
showStateNav = (!resultsTicker.nav)?false:true;
allowFlavor = (!resultsTicker.flavor)?false:true;
autoRefreshResults = (!resultsTicker.autorefresh)?false:true; refreshIntRate = (resultsTicker.rate)?resultsTicker.rate:.5;//minutes
baseResultsLoc = (resultsTicker.newfileloc)?resultsTicker.newfileloc:'http://a.abcnews.go.com/xml/elections/2008/dynamic/dynamicgeneral/prod/elections/national/AllStatesPresident.js';//

//extend above

rcPageBased = false;
resultIntRefresh = null;
selStateCookie = allowMyChips?readCookie('mychips'):null;
selStateArr = selStateCookie?selStateCookie:selStateStr;
initStateArr = selStateArr.split(',');
selStateArr = [];
rcResultStr = '';

rcTitle = "ABC NEWS VOTE TRACKER <a href='javascript:showRCNav();'>Click here to set the states you want to watch!</a>";

stateAbbrevKey['NEBRASKA'] = {code:'NE'}; stateAbbrevKey['DIST OF COLUMBIA'] = {code:'DC'}; stateObjS["dc"] = {stateName:'DIST OF COLUMBIA'};

//document.write('<div id="rcHC"></div>');

function renderResults(){
		rcResultStr = rcResultStr + '<div id="resultChips">';
		
		
		
		if(showStateNav){
			butStateStr = '<div class="rcNavContainer"><div id="butStateContainer" class="rcNavOff">';
			for(n=0;n<stateArr.length;n++){
				stateStr = stateArr[n];
				rrwUrl = 'test?state='+stateStr;
				butStateStr = butStateStr + '<div id="but_'+stateStr.toLowerCase()+'" class="stbutOff"><a href="javascript:setState(\''+stateStr+'\');">'+stateStr+'</a></div>';
			}
			butStateStr = butStateStr + '<div id="but_all" class="stbutAll"><a href="/politics/vote2008/fullpage?id=6179975">MAP</a></div>';
			butStateStr = butStateStr + '<div class="clearboth"><!--empty--></div></div>';
			butStateStr = butStateStr + '<div class="utilContainer"><div id="rcMsgDiv">'+rcTitle+'</div><div class="rcExtraBut"><div class="rcStateBut"><a href="javascript:showRCNav();" id="rcNavSt" title="Select states to watch">states</a></div><div class="rcBut"><a href="javascript:loadAllStatesResults();" title="Refresh data for all states">refresh</a></div><div class="rcBut"><a href="javascript:resetStates()" title="Reset to original order">reset</a></div></div><div class="clearboth"><!--empty--></div></div></div>';
			
			//document.write('<input type="text" value="" id="selstateval" />');//debug
			
			rcResultStr = rcResultStr + butStateStr;
		}
		
		rcResultStr = rcResultStr + '<div id="rcResultDiv"></div>';	
		
	//if(!rcPageBased){
		rcResultStr = rcResultStr + '</div>';
	//}else{
		
		return rcResultStr;
	//}
}

function removeVal(arr, valToRemove){
  var s = '!' + arr.join('!!') + '!';
  s = s.replace(new RegExp('!' + valToRemove + '!', 'g'), '');
  s = s.replace(/^!/, '');
  s = s.replace(/!$/, '');
  return s.split('!!');
}


function setState(st,noLoad){
	
	//add lock here to prevent new selections before the current one has been returned. change the but class to go to cursor as well
	
	addState = true;
	executeRemove = false;
	for(n=0;n<selStateArr.length;n++){
		executeRemove = false;
		if(selStateArr[n].toLowerCase()==st.toLowerCase()){
			addState = false;
			executeRemove = true;
			break;
		}
	}
	setProceed = true;
	if(addState){
		if(selStateArr.length<rcLimit){
			selStateArr.push(st);
		}else{
			if(!noLoad){ if(rcMsgObj){rcMsgObj.innerHTML = '<div class="rcErrMsg">You can only view '+rcLimit+' states at a time. Deselect states to make room for others.</div>'} }	
			setProceed = false;
		}
	}else if(executeRemove){
		removeFlag = selStateArr.length;
		selStateArr = removeVal(selStateArr, st);
		selStateArr = (removeFlag==1)?[]:selStateArr;
	}
	if(setProceed){
		if(showStateNav){ updateStateMenu(addState,executeRemove,st.toLowerCase()); }
		//setSelectedStates();//debug
		if(!noLoad){
			if((!autoRefreshResults)&&(addState)){ loadAllStatesResults(); }else{ allStatesPresidentJSON(currRCData); }
			if(allowMyChips){ updateCookieChips(); }
		}
	}
}

function updateCookieChips(){
	rcStr = ''
	for(n=0;n<selStateArr.length;n++){
		rcDel = (n==selStateArr.length-1)?'':','
		rcStr = rcStr + selStateArr[n] + rcDel;
	}
	createCookie('mychips',rcStr,1);
}

function updateStateMenu(addState,executeRemove,st){
	if(addState){
		stButClass = 'stbutOn';
	}else if(executeRemove){
		stButClass = 'stbutOff';
	}
	document.getElementById('but_'+st).className = stButClass;
}

function initResultChips(){
	chipLimLen = (initStateArr.length<=rcLimit)?initStateArr.length:rcLimit;
	for(n=0;n<chipLimLen;n++){
		setState(initStateArr[n],true);
	}
	loadAllStatesResults();
}

function resetStates(){
	if(showStateNav){
		for(n=0;n<selStateArr.length;n++){
			updateStateMenu(false,true,selStateArr[n].toLowerCase())
		}
	}
	createCookie('mychips','',-1);
	initStateArr = selStateStr.split(',');
	selStateArr = [];
	for(n=0;n<initStateArr.length;n++){
		setState(initStateArr[n],true);
	}
	loadAllStatesResults();
}


function loadAllStatesResults(){
	rcMsgObj = document.getElementById('rcMsgDiv');
	if(rcMsgObj){rcMsgObj.innerHTML = '<div class="loadingMsg"></div>'+rcTitle}
	clearTimeout(resultIntRefresh);
	ddStObj = document.getElementById('AllStatesPresidentJS');
	if(ddStObj){dynamicJS.unload(ddStObj.id);}
	dynamicJS.load('AllStatesPresidentJS',baseResultsLoc);
	resultIntRefresh = (autoRefreshResults)?setTimeout("loadAllStatesResults()",refreshIntRate*60000):null;
}


function setSelectedStates(){
	document.getElementById('selstateval').value = '';
	if(selStateArr.length >= 1){
		//initStates();
		for(i=0;i<selStateArr.length;i++){
			document.getElementById('selstateval').value = document.getElementById('selstateval').value + selStateArr[i].toLowerCase() + ' ';
		}
	}
}

function showRCNav(){
	rcNavObj = document.getElementById('butStateContainer');
	if(rcNavObj){
		currClass = rcNavObj.className;
		rcNavObj.className = (currClass == 'rcNavOff')?'rcNavOn':'rcNavOff';
		document.getElementById('rcNavSt').innerHTML = (currClass == 'rcNavOff')?'close':'states';
		menuHelpMsg = (selStateArr.length>=rcLimit)?'<a name=\'rc\' class=\'xrc\'>Click X on the boxes below to make room for new selections.</a>':'<a name=\'rc\' class=\'xwrc\'>Click the states above to add to the states you want to watch.</a>';
		rcTitle = (currClass == 'rcNavOn')?"ABC NEWS VOTE TRACKER <a href='javascript:showRCNav();'>Click here to set the states you want to watch!</a>":"ABC NEWS VOTE TRACKER "+menuHelpMsg;
		document.getElementById('rcMsgDiv').innerHTML = rcTitle;
	}
}

function resultsRow(candName,candParty,candVotePct,isWinner,isIncumbent){//candVotes
	isWinnerTmp = (isWinner=='Y')?'Winner':'';
	winnerNameTmp = (isWinner=='Y')?candName:false;
	candPartyTmp = (candParty=='R')?'rcreprow':(candParty=='D')?'rcdemrow':(candParty=='G')?'rcgreenrow':(candParty=='I')?'rcindrow':'rcotherrow';
	rowTemp = '<div class="rccandRow'+isWinnerTmp+'"><div class="'+candPartyTmp+'"><div class="rccandname">'+candName+'</div><div class="rccandvotepct">'+candVotePct+'%</div></div></div>';//<div class="candvotes">'+candVotes+'</div>
	return [rowTemp,winnerNameTmp];
}

function evalRace(obj){
	flavorTmp = (obj[0][0].substring(0,2)=='RY')?'_repWin':(obj[1][0].substring(0,2)=='RY')?'_repWin':(obj[0][0].substring(0,2)=='DY')?'_demWin':(obj[1][0].substring(0,2)=='DY')?'_demWin':false;
	if((!flavorTmp)&&(allowFlavor)){
		noZero = ((obj[0][1]/1)+(obj[1][1]/1) > 0)?true:false;
		if(noZero){
			difVal = [(obj[0][1]/1)-(obj[1][1]/1),(obj[1][1]/1)-(obj[0][1]/1)];
			difValInd = (difVal[0]==0)?2:(difVal[1]==0)?2:(difVal[0]>0)?0:(difVal[1]>0)?1:false;
			battle = (difValInd==2)?'_tie':(difValInd==0)?difVal[0]:(difValInd==1)?difVal[1]:false;
			battle = (battle=='_tie')?battle:(battle<=3)?'_battle':(battle>3)?'_lean'+obj[difValInd][0].charAt(0):false;
			flavorTmp = ((!flavorTmp)&&(battle))?battle:false;
		}
	}
	return flavorTmp;
}

function updateStateNavColors(){
	if(states){
		$.each(states, function(state){
			stateNameTmp = states[state].name;
			stObjTmp = document.getElementById('but_'+stateAbbrevKey[stateNameTmp].code.toLowerCase());
			evalParam = [];
			$.each(states[state].cands.cand, function(c){
				cCand = states[state].cands.cand[c];
				evalParam.push([cCand.party+cCand.isWin,cCand.votPct]);
				//raceFlavorTmp = evalRace(cCand.party,cCand.votPct,cCand.isWin);
				//raceFlavor = ((!raceFlavor)&&(raceFlavorTmp))?raceFlavorTmp:false;
			})
			raceFlavor = evalRace(evalParam);
			stClass = stObjTmp.className.split('_');
			if(raceFlavor){ stObjTmp.className = stClass[0]+raceFlavor; }
		})
	}
	/*for(i=0;i<selStateArr.length;i++){
		stAbbrevTmp = 'but_'+selStateArr[i].toLowerCase();
		$(stAbbrevTmp).fadeIn('slow',function(){
			$(stAbbrevTmp).fadeOut('slow');		 
		 });
	}*/
}

function allStatesPresidentJSON(data){
	currRCData = data;
	temp = document.getElementById('rcResultDiv');
	if(temp){temp.innerHTML = '';}
	
	//if (currentURL.search('debug=t') != -1) { alert(selStateArr.length); }
	
	states = data.presidentbystate.state;
	//$("#houseresults").append('<tr><td class="rheader" colspan="4">State</td></tr>');
	$.each(states, function(state){
		renderCurrState = false;
		for(i=0;i<selStateArr.length;i++){
			stateNameTmp = states[state].name;
			renderCurrState = (stateNameTmp == stateObjS[selStateArr[i].toLowerCase()].stateName.toUpperCase())?true:false;
			if(renderCurrState){
				cRowTmp = [];
				closeTest = '';
				stateLabel = '<div class="closeState"><a href="javascript:setState(\''+selStateArr[i]+'\');" title="click here to remove this state">x</a></div><div class="stateLabel"><a href="/politics/elections/?category='+stateObjS[selStateArr[i].toLowerCase()].stateName+'" title="click here to see results for all races in this state">'+states[state].name+'</a></div>';
				elecVotes = 'Electoral Votes '+states[state].eVts;
				allPrecRep = '<div class="rcPrecRep">Pct. Reporting '+states[state].precRepPct+'%</div>';
				closeTest = closeTest + states[state].precRepPct.toString();
				pollsCloseStr = '<div class="rcpollsCls">Polls close at<br/>'+states[state].pollsCls+'</div>';
				stateInfoTmp = stateLabel+'<div class="eVotes">'+elecVotes+'</div>';
				winnerName = '';
				$.each(states[state].cands.cand, function(c){
					cCand = states[state].cands.cand[c];
					closeTest = closeTest + cCand.tVts.toString();
					candTest = ((cCand.name=='McCain')||(cCand.name=='Obama'))?true:false;
					rowTmpArr = resultsRow(cCand.name,cCand.party,cCand.votPct,cCand.isWin);
					winnerName = rowTmpArr[1]?rowTmpArr[1]:winnerName;
					if((candTest)&&(cRowTmp.length<=2)){cRowTmp.push(rowTmpArr[0]);}//,cCand.tVts
				});
				if((closeTest=='000')||(closeTest=='0000')){
					cRowTmp = ['',''];
					allPrecRep = '';
				}else{
					pollsCloseStr = '';	
				}
				$("#rcResultDiv").append('<div class="resultChip'+winnerName+'">'+stateInfoTmp+pollsCloseStr+allPrecRep+cRowTmp[1]+cRowTmp[0]+'</div>');
			}
		}
	});
	$("#rcResultDiv").wrapInner('<div class="resultChipContainer"></div>');
	if(rcMsgObj){rcMsgObj.innerHTML = rcTitle}
	updateStateNavColors();
}

	
