﻿var results = new Array();
var servicePath = "/Slate60Service/Slate60Service.asmx";
var popupIllo = "/features/slate60/images/moneycouple.jpg";
var winWidth = 	document.documentElement.clientWidth;
var winHeight = 	document.documentElement.clientHeight;
var navYears = new Array(2008,2007,2006,2005,2004,2003,2002,2001,2000,1999,1998,1997,1996);

function getXMLData(k_v,target)//target = "table" | "popup"
{
	var cat = k_v.split("=")[0];
	var val = k_v.split("=")[1];
	var service;
	var searchNode;
	switch(cat)
	{
		case("year"):
			service = "/GetSlate60ByYear?addFilePath=false&";
			searchNode = "Slate60MemberDetailed";
			break;
		case("donorName"):
			service = "/GetAllRecipientsToDonors?addFilePath=false&";
			searchNode = "DonorRecord";
			break;
		case("recipientName"):
			service = "/GetAllDonersToRecipient?";
			searchNode = "RecipientRecord";
			break;
	}
	
	//document.getElementById("Slate60_query").innerHTML = "<p>Showing records whose <b>" + k_v +"</b></p>";
	
	if(results.length > 0) results = new Array();
		
	var xmlHttp = verifyAjax();
	
	xmlHttp.open("GET",servicePath + service + k_v,false);
	xmlHttp.send(null);
	
	var rootNode = xmlHttp.responseXML.documentElement;
	var children = rootNode.getElementsByTagName(searchNode);

	for (var i = 0; i<children.length; i++)
	{
		if(cat!="recipientName")
		{
			var rnames = new Array();
			var recps = children[i].getElementsByTagName("Recipients")[0].getElementsByTagName("Recipient");

			for(var j = 0; j<recps.length; j++)
			{
				try {
					rnames.push('<a href="javascript:void(0)" onclick="javascript:trackPV();getXMLData(\'recipientName=' + recps[j].getElementsByTagName("Name")[0].firstChild.nodeValue + '\',\'popup\')">' + recps[j].getElementsByTagName("Name")[0].firstChild.nodeValue + '</a>');	
				}catch(e){
					rnames = new Array();
				}
			}	
		}
			
		switch(cat)
		{
			case("year"):
				results.push(
					{
						rank:getNodeValue(children[i],"Rank"),
						pledged:getNodeValue(children[i],"AmountPledged"),
						donated:getNodeValue(children[i],"AmountDonated"),
						committed:getNodeValue(children[i],"TotalCommitted"),
						name: '<a href="javascript:void(0)" onclick="javascript:trackPV();getXMLData(\'donorName='+getChildNodes(children[i], "Name")[0].firstChild.nodeValue+'\',\'popup\')">' + getChildNodes(children[i], "Name")[0].firstChild.nodeValue + '</a>',
						imgFile: getNodeValue(children[i],"FullImagePath"),
						info: getNodeValue(children[i], "DonorInfo"),
						source: getNodeValue(children[i],"SourceOfWealth"),
						recipients:rnames
					}
				);
				break;
			case("donorName"):
				results.push(
					{					
						year:'<a href="javascript:void(0)" onclick="javascript:trackPV();getXMLData(\'year='+children[i].getElementsByTagName("Year")[0].firstChild.nodeValue+'\')">' + children[i].getElementsByTagName("Year")[0].firstChild.nodeValue + '</a>',
						rank:getNodeValue(children[i],"Rank"),//children[i].getElementsByTagName("Rank")[0].firstChild.nodeValue,
						pledged:getNodeValue(children[i],"AmountPledged"),//children[i].getElementsByTagName("AmountPledged")[0].firstChild.nodeValue,
						donated:getNodeValue(children[i],"AmountDonated"),//children[i].getElementsByTagName("AmountDonated")[0].firstChild.nodeValue,
						committed:getNodeValue(children[i],"TotalCommitted"),//children[i].getElementsByTagName("TotalCommitted")[0].firstChild.nodeValue,
						source:getNodeValue(children[i],"SourceOfWealth"),
						name: '<a href="javascript:void(0)" onclick="javascript:trackPV();getXMLData(\'donorName='+getChildNodes(children[i], "DonorName")[0].firstChild.nodeValue+'\',\'popup\')">' + getChildNodes(children[i], "DonorName")[0].firstChild.nodeValue + '</a>',
						recipients:rnames
					}
				);
				break;
			case("recipientName"):
				results.push(
					{
						donor:'<a href="javascript:void(0)" onclick="javascript:trackPV();getXMLData(\'donorName='+getChildNodes(children[i], "DonorName")[0].firstChild.nodeValue+'\',\'popup\')">' + getChildNodes(children[i], "DonorName")[0].firstChild.nodeValue + '</a>',
						year:'<a href="javascript:void(0)" onclick="javascript:trackPV();getXMLData(\'year='+children[i].getElementsByTagName("Year")[0].firstChild.nodeValue+'\')">' + children[i].getElementsByTagName("Year")[0].firstChild.nodeValue + '</a>',
						pledged:getNodeValue(children[i],"AmountPledged"),//children[i].getElementsByTagName("AmountPledged")[0].firstChild.nodeValue,
						donated:getNodeValue(children[i],"AmountDonated"),//children[i].getElementsByTagName("AmountDonated")[0].firstChild.nodeValue,
						committed:getNodeValue(children[i],"TotalCommitted"),//children[i].getElementsByTagName("TotalCommitted")[0].firstChild.nodeValue,
						name:'<a href="javascript:void(0)" onclick="javascript:trackPV();getXMLData(\'recipientName=' + getChildNodes(children[i], "Recipient")[0].firstChild.nodeValue + '\',\'popup\')">' + getChildNodes(children[i], "Recipient")[0].firstChild.nodeValue + '</a>'
					}
				);
				break;				
		}
	}
	
	if(document.getElementById("Slate60_popup")) killPopup();
	if(target == "popup")
	{
		showPopup(cat);	
	}
	else
	{
		buildTable(cat);
	}
	if(cat=="year")
	{
		buildYearNav(val);
		document.getElementById("Slate60_Srch_txt").value="";
	}
}

function buildTable(cat)// cat = year | donor | recip
{	
	var main = document.getElementById("Slate60_Main");
	
	var tableHeaders = new Array();
	switch(cat)
	{
		case("year"):	
			tableHeaders[0] = {field:"rank",label:"Rank"};
			tableHeaders[1] = {field:"name",label:"Donor"};
			tableHeaders[2] = {field:"source",label:"Source<br/>of Wealth"};
			tableHeaders[3] = {field:"committed",label:"Total"};
			tableHeaders[4] = {field:"donated",label:"Paid"};
			tableHeaders[5] = {field:"recipients",label:"Recipients"};
			tableHeaders[6] = {field:"info",label:"Notes"};
			break;
		case("donorName"):		
			tableHeaders[0] = {field:"name",label:"Name"};
			tableHeaders[2] = {field:"year",label:"Year"};
			tableHeaders[1] = {field:"rank",label:"Rank"};
			tableHeaders[3] = {field:"committed",label:"Total"};
			tableHeaders[4] = {field:"donated",label:"Paid"};
			tableHeaders[5] = {field:"source",label:"Source of Wealth"};
			tableHeaders[6] = {field:"recipients",label:"Recipients"};
			break;
		case("recipientName"):	
			tableHeaders[0] = {field:"name",label:"Name"};
			tableHeaders[1] = {field:"donor",label:"Donor"};
			tableHeaders[2] = {field:"year",label:"Year"};
			tableHeaders[3] = {field:"committed",label:"Total Received"};
			break;
	}

	var table = document.createElement("table");
	table.id = "Slate60_Table";
	if(document.getElementById("Slate60_Table"))
	{
	 main.removeChild(document.getElementById("Slate60_Table"));
	}
	main.appendChild(table);
	
	var thead = document.createElement("thead");	
	table.appendChild(thead);
	
	var tr = document.createElement("tr");
	thead.id = "Slate60_results_" + cat;
	thead.appendChild(tr);
	
	for (var i=0; i<tableHeaders.length; i++)
	{
		var td = document.createElement("td");
		tr.appendChild(td);
		td.id = "th_" + tableHeaders[i].field.toLowerCase();
		td.innerHTML = tableHeaders[i].label.toUpperCase();;
	}
	
	var tbody = document.createElement("tbody");
	table.appendChild(tbody);
	
	for (var i=0; i<results.length; i++)
	{
		var tr = document.createElement("tr");
		tr.className = (i%2==0) ? "tr_even" : "tr_odd";
		tbody.appendChild(tr);
	
		for (var j=0; j<tableHeaders.length; j++)
		{
			var html = results[i][tableHeaders[j].field];
			var td = document.createElement("td");
			tr.appendChild(td);
			td.innerHTML = html;
		}
	}
	
//move the digg/yahoo buzz boxes below the table
//	var digg = document.getElementById("DiggContainer");
//	var buzz = document.getElementById("YahooBuzzContainer");
//	var diggDump = document.createElement("div");
//	main.appendChild(diggDump);
//	var buzzDump = document.createElement("div");
//	main.appendChild(buzzDump);
//	main.replaceChild(digg, diggDump);
//	main.replaceChild(buzz, buzzDump);
}

function renderList(cat, loc)// loc = target div's Id
{
	var pDiv = document.getElementById(loc);
	var tableHeaders = new Array();
	
	switch(cat)
	{
		case("donorName"):		
			tableHeaders[0] = {field:"year",label:"Year"};
			tableHeaders[1] = {field:"rank",label:"Rank"};
			tableHeaders[2] = {field:"committed",label:"Total"};
			tableHeaders[3] = {field:"donated",label:"Paid"};
			break;
		case("recipientName"):
			tableHeaders[0] = {field:"donor",label:"Donor"};
			tableHeaders[1] = {field:"year",label:"Year"};
			tableHeaders[2] = {field:"committed",label:"Donation"};
			break;
	}

	var table = document.createElement("table");
	table.id = "Slate60_pop_table";
	pDiv.appendChild(table);
	
	var thead = document.createElement("thead");	
	table.appendChild(thead);
	
	var tr = document.createElement("tr");
	thead.appendChild(tr);
	
	for (var i=0; i<tableHeaders.length; i++)
	{
		var td = document.createElement("td");
		tr.appendChild(td);
		td.id = "popth_" + i;
		td.innerHTML = tableHeaders[i].label.toUpperCase();;
	}
	
	var tbody = document.createElement("tbody");
	table.appendChild(tbody);
	
	for (var i=0; i<results.length; i++)
	{
		var tr = document.createElement("tr");
		tbody.appendChild(tr);
	
		for (var j=0; j<tableHeaders.length; j++)
		{
			var html = results[i][tableHeaders[j].field];
			var td = document.createElement("td");
			tr.appendChild(td);
			td.innerHTML = html;
		}
	}
}

function populatePopup(cat)
{
	var popDiv = document.getElementById("Slate60_popup");
	var dataDivs = new Array();		
	switch(cat)
	{
		case("donorName"):
			dataDivs.push({id:"name",field:results[0].name,label:""});
			dataDivs.push({id:"source",field:results[0].source,label:"Source of wealth: "});
			dataDivs.push({id:"most_recent",field:results[0].committed,label:"Most recent pledge/donation: "});
			dataDivs.push({id:"to_date",field:convertToText(getSum(getFieldValues(results,"donated","number"))),label:"Total pledges/donations to date: "});
			dataDivs.push({id:"list",cat:"donorName"});
			dataDivs.push({id:"recips",field:results[0].recipients,label:"Beneficiaries: "});
			break;
		case("recipientName"):
			dataDivs.push({id:"name",field:results[0].name,label:""});
			dataDivs.push({id:"donations",field:convertToText(getSum(getFieldValues(results,"committed","number"))),label:"Total donations recieved: "});
			dataDivs.push({id:"list",cat:"recipientName"});
			break;
	}
			
	var img = document.createElement("img");
	img.id = "Slate60_pop_illo";
	img.src = popupIllo;
	popDiv.appendChild(img);
	
	var a = document.createElement("a")
	a.href = "javascript:killPopup()";
	a.innerHTML = "close [X]";
	a.id = "Slate60_close_link";
	popDiv.appendChild(a);
		
	for (var i=0; i<dataDivs.length; i++)
	{		
		var div = document.createElement("div");
		div.id = "Slate60_pop_" + dataDivs[i].id;
		popDiv.appendChild(div);
		if(dataDivs[i].id=="list")
		{
			if(results.length > 6) 
			{
				div.style.overflowY = "scroll"
				if(cat=="donorName") div.style.height = "135px";
				else if(cat=="recipientName") div.style.height = "210px";
			}
			renderList(dataDivs[i].cat,div.id);
		}
		else
		{
			div.innerHTML = dataDivs[i].label + dataDivs[i].field;
		}
	}	
}

function getNodeValue(context, nodeName)
{
	var value = "";
	try
	{
		value = context.getElementsByTagName(nodeName)[0].firstChild.nodeValue;
	}
	catch(e)
	{
		value="";
		//alert(e);
	}
	return value;
}

function getChildNodes(context, child)
{
	//extends document.getElementsByTagName to return just the child nodes and not all descendents
	var childNodes = context.getElementsByTagName(child);
	if(childNodes.length > 0) 
	{	
		var children = new Array();
		for(var i=0; i<childNodes.length; i++)
		{
			if(childNodes[i].parentNode.tagName == context.tagName)
			{
				children.push(childNodes[i]);
			}
		}
		return children;
	}
	else
	{
		return null
	}	
}

function showPopup(cat)
{
	blackout();
	var offsetY = (window.pageYOffset) ? window.pageYOffset : document.documentElement.scrollTop;
	var div = document.createElement("div");
	div.id = "Slate60_popup";
	div.style.left = (winWidth -500)/2 + "px";
	div.style.top = ((winHeight - 350)/2) + offsetY + "px";
	document.body.appendChild(div);
	populatePopup(cat);
}

function killPopup()
{
	var pop = document.getElementById("Slate60_popup");
	var bg = document.getElementById("blackout");
	document.body.removeChild(pop);
	document.body.removeChild(bg);
}

function blackout()
{
	var div = document.createElement("div");
	div.id = "blackout";
	div.style.width = winWidth + "px";
	div.style.height = document.body.clientHeight + "px";
	document.body.appendChild(div);
	div.innerHTML = "&#160;";
}

function buildYearNav(curYear)
{
	
	var navDiv = document.getElementById("Slate60_nav");
	var separator = "&nbsp;|&nbsp;";
	navDiv.innerHTML = "";
	var span = document.createElement("span");
	navDiv.appendChild(span);
	span.innerHTML = "Select a year: ";
	for (var i=0; i<navYears.length; i++)
	{
		if(curYear==navYears[i])
		{
			var span = document.createElement("span");
			span.id = "Slate60_selected_year";
			navDiv.appendChild(span);
			span.innerHTML = navYears[i];
		}
		else
		{
			var a = document.createElement("a");
			a.setAttribute("target","_self");
			a.href="javascript:trackPV();getXMLData('year="+navYears[i]+"')";
			navDiv.appendChild(a);
			a.innerHTML = navYears[i];
		}
		if(i<navYears.length-1)
		{
			var span = document.createElement("span");
			navDiv.appendChild(span);
			span.innerHTML = separator;
		}
	}
}

function getFieldValues(arr,field,type)
{
	var vals = new Array();
	for(var i=0; i<arr.length; i++)
	{
		if(type=="number")
		{
			vals.push(convertToNumber(arr[i][field]));
		}
		else vals.push(arr[i][field]);
	}
	return vals;
}

function getSum(arr)
{
	var total = 0;
	for (var i=0; i<arr.length; i++)
	{
		total += arr[i];
	}
	return total;
}

function convertToNumber(text)
{	
	text = text.substr(1);
	if(text==0) return 0;
	var arr = text.split(" ");
	var factor;
	switch(arr[1].toLowerCase())
	{
		case("billion"):factor=1000000000;break;
		case("million"):factor=1000000;break;
		default:factor=1;break;
	}
	var num = arr[0]*factor;
	return num;
}

function convertToText(num)
{
	var precision = 0;
	if(num > 1000000000)
	{
		precision = (num % 1000000000 > 0) ? 1 : 0;
		return "$" + (num/1000000000).toFixed(precision) + " Billion"
	}
	else if(num > 1000000)
	{
		precision = (num % 1000000 > 0) ? 1 : 0;
		return "$" + (num/1000000).toFixed(precision) + " Million"
	}
	else
	{
		return "$" + num;
	}
}

//OMNITURE CODE
function trackPV()
{
	//s.pageName="sl - " + document.title;
	s.t();
}

function verifyAjax(){var xmlHttp;try{xmlHttp = new XMLHttpRequest()}catch(e){try{xmlHttp=new ActiveXObjext('Msxml2.XMLHTTP');}catch(e){try{xmlHttp = new ActiveXObject('Microsoft.XMLHTTP');}catch(e){alert('This site requires Ajax.');return false;}}}return xmlHttp;}
