/*
 *
 *  top10 javascript
 *
 *  REQUIRES:
 *
 *   JQuery
 *   Template library
 *   
 */
 
 
var TopRankPage = {};
TopRankPage = {
	districtType: 'NATIONAL_LOWER',		//default should be the 'congressional' tab, 

	scoresByType: {},		//holds a local cache of the scores
	divDistrictScores: '#scoreCanvas',

	lastSelectedControl: '',
	SearchPageName: "search.aspx",
	
	ToolTipFile: "/gerrysite/js/tooltipData.js",
	cachedTooltips: '',
	
	
	
	ScoreTemplateFile: "/gerrysite/templates/topscores.jst",
	endKey: ''
};
 
 
$(document).ready(function(){

	//wire up our district types
	$('#dtypeC').click( function() { selectDistrictType("NATIONAL_LOWER"); });
	$('#dtypeSU').click( function() { selectDistrictType("STATE_UPPER"); });
	$('#dtypeSL').click( function() { selectDistrictType("STATE_LOWER"); });
	$('#dtypeL').click( function() { selectDistrictType("LOCAL"); });

	selectDistrictType(TopRankPage.districtType);
	//refreshScores();
});

	function activateTooltips()
	{
		if (TopRankPage.cachedTooltips != '') { processTooltips(TopRankPage.cachedTooltips); return; }
		else { $.getJSON(TopRankPage.ToolTipFile, function(data) { TopRankPage.cachedTooltips = data; processTooltips(data); }); }
	}
	function processTooltips(data )
	{
		var tooltipTexts = data.items;
		
		//go through the list...
		for(var i in tooltipTexts)
		{
			var tip = tooltipTexts[i];
			tip.options.tip = '#' + tip.id + 'Tip';
			
			var divTip = $('#' + tip.id + 'Tip');
			var divTrigger = $('#' + tip.id );
			
			if ((divTip.length > 0) && (divTrigger.length > 0))
			{
				divTip.html( tip.text );
				if (typeof divTrigger.tooltip == "function")
				{
					var tooltipObj = divTrigger.tooltip(tip.options);				
					if (typeof tooltipObj.dynamic == "function")
					{
						//this is meant to only run the first time this element is 'tooltipped'...
						tooltipObj.dynamic(); 
					}
				}
			}
		}
	}



	function toggleLoading(shown)
	{
		//slightly more normal behavior
		//$("#loading").toggle(shown);
		//$("#cicerologo").toggle(!shown);

		//more punkish behavior
		var loadingLogo = "images/loading1.gif";
		var normalLogo = "/gerrysite/img/cicero_logo.png";
		var shownLogo = (shown) ? loadingLogo : normalLogo;
		$("#cicerologo").children('img').attr('src', shownLogo);
	}


	function getControlByDistrictType(dType)
	{
		if (dType == "NATIONAL_LOWER") { return 'dtypeC'; }
		else if (dType == "STATE_UPPER") { return 'dtypeSU'; }
		else if (dType == "STATE_LOWER") { return 'dtypeSL'; }
		else if (dType == "LOCAL") { return 'dtypeL'; }
		return '';
	}
  
  	function getColorByDistrictType(dType)
	{
		if (dType == "NATIONAL_LOWER") { return '#69A8BA'; }
		else if (dType == "STATE_UPPER") { return '#7FC67A'; }
		else if (dType == "STATE_LOWER") { return '#D5883A'; }
		else if (dType == "LOCAL") { return '#DBE139'; }
		return '';
	}

	//called when one of the type (congressional, state upper, state lower, local) links are clicked
	function selectDistrictType(type)
	{
		toggleLoading(true);
		var control = getControlByDistrictType(type);
	
		 $('#dtypeC').removeClass('districtlevelselected');		
		 $('#dtypeSU').removeClass('districtlevelselected');	
		 $('#dtypeSL').removeClass('districtlevelselected');
		 $('#dtypeL').removeClass('districtlevelselected');
		 
		 $('#'+control).addClass('districtlevelselected');
		 $('#rightBody').removeClass().addClass(control);

		TopRankPage.districtTypeName = $(control).text();
		TopRankPage.districtType = type;
		refreshScores();
		
	}

	//loads the scores from the local cache, or from the service, and displays them using the template
	function refreshScores()
	{
		var cachedData = TopRankPage.scoresByType[TopRankPage.districtType];
		if ((cachedData != null) && (cachedData != ''))
		{
			//hit the callback directly
			handleScoreData(cachedData);
		}
		else		
		{
			//hit the webservice
			getScoreData(handleScoreData);
		}
	}
		
	//the webservice call
	function getScoreData(callback)
	{
  
		var inputs = { 
			DistrictType: TopRankPage.districtType,
			//,States: [ "PA", "NJ" ]
			//,States: [ "MN", "WI" ]

   
  
    FillColor: '#aaaaaa',
    EdgeColor: '#aaaaaa',
    //Opacity:,
    HoverFillColor: '#333333',
    HoverEdgeColor: '#333333'
    //HoverEdgeColor:,
    //HoverOpacity:,


		};
		
		//retrieve the current rankings from the web service
		callGetTopScores(inputs, callback);
	}
	
	//the callback after hitting the webservice
	function handleScoreData(data)
	{
		//cache these results for next time
		TopRankPage.scoresByType[TopRankPage.districtType] = data;
		
		//load our template (from cache, or from the server...)
		getTemplateAsync(TopRankPage.ScoreTemplateFile, function(template)
		{
			showScores(template, data);
		});
	}

	
	
	function showScores(scoretemplate, data)
	{
		var newhtml = scoretemplate.process(data);
		$(TopRankPage.divDistrictScores).html(newhtml);
		
		if (!isNullOrEmpty(data.columns))
		{
			for(var ci in data.columns)
			{
				var column = data.columns[ci];
				if (isNullOrEmpty(column.scores))
					continue;

				for(var si in column.scores)
				{
					var score = column.scores[si];
					var controlID = '.' + score.DistrictID.replace(/ /g, '') + score.State;
					$(controlID).unbind('click');
					$(controlID).click(generateHighlightDistrict(score));
					
					//$(controlID).bind('unhover', generateHoverOUT(score));
					
					$(controlID).unbind('hover');
					$(controlID).hover(generateHoverIN(score), generateHoverOUT(score));
				}
			}
		}
		
		activateTooltips();
		toggleLoading(false);
		// $(".6NJ").click(function() { highlightDistrict(".6NJ"); });
		// $(".3MD").click(function() { highlightDistrict(".3MD"); });
		
	}
	
	function generateCallback(score)
	{
		//oh generator functions.
		var controlID = '.' + score.DistrictID.replace(/ /g, '') + score.State;
		return function() { highlightDistrict(controlID); };
	}
	
	function generateHoverIN(score)
	{
		var controlID = '.' + score.DistrictID.replace(/ /g, '') + score.State;
		return function() {
			if (($(controlID).children('img').attr('src')) != score.HoverUrl)
			{
				//console.debug("hoverIN");
				$(controlID).children('img').attr('src', score.HoverUrl);
			}
		//	setTimeout("setHover('" + controlID + "', '"+newURL+"')", 125);
		};
	}
	
	//function setHover(controlID, newURL)
	//{
	//	if (($(controlID).children('img').attr('src')) != score.HoverUrl)
	//		$(controlID).children('img').attr('src', score.HoverUrl);
	//}
	
	function generateHoverOUT(score)
	{
		var controlID = '.' + score.DistrictID.replace(/ /g, '') + score.State;
		return function() {
			if ((!$(controlID).hasClass('selectedDistrict'))
				&& (($(controlID).children('img').attr('src')) != score.ImageUrl))
			{
				//console.debug("hover OUT");
				$(controlID).children('img').attr('src', score.ImageUrl);
			}
		}
	}
	
	function generateHighlightDistrict(score)
	{
		var controlID = '.' + score.DistrictID.replace(/ /g, '') + score.State;		
		return function() { 
			
			//unselect the last one.
			if (TopRankPage.lastSelectedControl != '')
			{
				$(TopRankPage.lastSelectedControl).removeClass('selectedDistrict');
				$(TopRankPage.lastSelectedControl).trigger('mouseleave');
			}

			TopRankPage.lastSelectedControl = controlID;
			$(controlID).addClass('selectedDistrict'); 
			$(controlID).children('img').attr('src', score.HoverUrl);
		}
	}
	
	
	
	function makeURL(DistrictType, score)
	{
		var searchPage = TopRankPage.SearchPageName;
		var thelink = searchPage + "?type="+ escape(DistrictType) + "&id=" + escape(score.DistrictID) + "&state=" + escape(score.State);
		if (score.City != null)
			thelink += "&city=" + escape(score.City);
			
		return thelink;
	}
	
	
	
