//******************** functions *********************************************

//******************** General ***********************************************


function redirectToBorough(sBorough)
{
	document.location="datatable.php?borough=" + sBorough + "&period=" + msPeriod;
}

function init()	
{
	loadData(msPeriod,msLocation);
}

function dataLoaded() //This gets called once the appropriate data file is loaded
{
	try
	{
		var sLoc="";
		if (mbArea==0){sLoc="LONDON";}
		else if(mbArea==1){sLoc=boroughName(ConvertMPStoONSCode(msBorough));}
		else if(mbArea==2){sLoc=wardName(msLocation);}
	
		if (documentAll(msPeriod)) //if there is a period selector
		{
			documentAll(msPeriod).selected=true;
		}
	
		//set title
		documentAll("hTitle").innerText="LATEST CRIME FIGURES FOR " + sLoc.toUpperCase();
	
		mbLoading=false;
		if (document.location.toString().search("datatable.php")>1) //Don't refresh page data if datatable.php
		{
			setupPage();
		}
		else
		{
	
			if (mbXML)
			{
				moXMLBoroughs=loadValidExternalXMLFile("data/boroughs.xml");
				moXMLWards=loadValidExternalXMLFile("data/wards.xml");
			}
			if (mbSVG)
			{
				sltFile.onchange();		
			}
	
			optionList(documentAll("myVar"));
			commentHTML(documentAll("MPSComments"),msLocation);
			//should MPS change to lowercase??
			glossaryText(documentAll("glossarytext"),index());
			TellMeWard("");
		}
	}
	catch(e)
	{
	}
}

function setLocation(areaname)
{
	msLocation = areaname;
}

function getLocation()
{
	return msLocation;
}

function dataFileSource(period,sLocation)
{
	return("data/" + period + " - " + sLocation + ".js");
}

function loadData(period,sLocation){
	if (!mbLoading)
	{
		try
		{
			msPeriod=period;
			mbLoading=true;

			//var scriptTag = document.getElementById('loadScript');
			var ohead=documentAll("head");

			script = document.createElement('script');
			//alert("New file source is " + filesource);
			script.src = dataFileSource(period,sLocation);
			script.type = 'text/javascript';
			script.id = 'loadScript';
//alert(script.src);
			ohead.appendChild(script);
			//Once data has loaded, then the dataLoaded method will be triggered

		}
		catch(e)
		{
			alert("error: " + e);
		}
	}

}

function loadMap(sMap)
{
}


function documentAll(sID)
{
	try
	{
		return((document.all)?document.all[sID]:document.getElementById(sID));
	}
	catch(e)
	{
		alert("Could not find " + sID);
	}
}

function glossaryText(oParagraph,sCrimeCode)
{
	oParagraph.innerHTML=crime[sCrimeCode][1];
}

function commentHTML(oParagraph,sCode)
{
	if(sCode=="mps")
		sCode="MPS";
	var sResult="<ul>"

	for(var i=0;i<comments[sCode].length;i++)
	{
		if (comments[sCode][i])
		{
			if(comments[sCode][i]!="")
			{
				sResult+="<li class='bluebullet'>" + comments[sCode][i].replace("£","&pound;") + "</li>";
			}
		}
	}
	sResult+="</ul>";

	if(oParagraph)
	{
		oParagraph.innerHTML=sResult;
	}
	else
	{
		return(sResult);
	}
}

function changeFile(sFile)
{
	if (mbXML)
	{	
		moXML=loadValidExternalXMLFile(sFile);
	}

	optionList(document.all.myVar);
}                                                                                                                                                  



function optionList(oSelect)
{
	var j=oSelect.options.length;
	for(var i=0;i<j;i++)
	{
		oSelect.options.remove(0);
	}
	
	if(mbXML)
	{
		if(moXML!=null)
		{
			try
			{
				moXML.setProperty("SelectionLanguage", "XPath");
				var oElts=moXML.selectNodes("//stats/crimes/*");
				for (i=0;i<oElts.length;i++)
				{
					createOptionElement(oSelect,oElts[i].getAttribute("displayname"),oElts[i].getAttribute("id"));
				}
				oElts=null;
			}
			catch(e)
			{
				alert("error2" + e.description);
			}
				
		}
	}
	else
	{
		for (i=0;i<crimes.length;i++)
		{
			createOptionElement(oSelect,crimes[i][1],crimes[i][0]);
		}
	}
}

function createOptionElement(oSelect,sName,sID)
{
	var oOption = document.createElement("OPTION");
	oSelect.options.add(oOption);
	oOption.text=sName;
	oOption.value = sID;
}

function boroughValue(sBoroughCode,iCrimeCode,iPeriod)
{
	if (mbXML)
	{
		if (moXML!=null)
		{
			if (iCrimeCode==0)
			{
				return(0);
			}
			else
			{
				var oElt=moXML.selectSingleNode("//stats/boroughs/borough[@code='" + sBoroughCode + "']/crime[@id='" + iCrimeCode + "']/period[@order='" + iPeriod + "']");
				if (oElt!=null)
				{
					return(parseFloat(oElt.getAttribute("offences")));
				}
				else
				{
					return(0);
				}
			}
		}
	}
	else
	{
		try
		{

			//sUpperCaseBorVal = sBoroughCode.toUpperCase();
			return(boroughData[sBoroughCode][iCrimeCode][iPeriod]);
		}
		catch(e)
		{
			return(0);
		}
	}

}


function boroughValueforWard(sBoroughCode,iCrimeCode,iPeriod)
{
//alert("entering boroughvalue for ward with " + sBoroughCode);
	if (mbXML)
	{
		if (moXML!=null)
		{
			if (iCrimeCode==0)
			{
				return(0);
			}
			else
			{
				var oElt=moXML.selectSingleNode("//stats/boroughs/borough[@mpscode='" + sBoroughCode + "']/crime[@id='" + iCrimeCode + "']/period[@order='" + iPeriod + "']");
				if (oElt!=null)
				{
					return(parseFloat(oElt.getAttribute("offences")));
				}
				else
				{
					return(0);
				}
			}
		}
	}
	else
	{
		try
		{
			//alert("Entered other else method");
			//var oElt=moXML.selectSingleNode("//stats/boroughs/borough[@mpscode='" + sBoroughCode + "']/crime[@id='" + iCrimeCode + "']/period[@order='" + iPeriod + "']");
			//alert("oEl2t is " + oElt);
			//sUpperCaseBorVal = sBoroughCode.toUpperCase();

			return (boroughData[msLocation][iCrimeCode][iPeriod]);
		}
		catch(e)
		{
			return(0);
		}
	}

}


function wardValue(sWardCode,iCrimeCode,iPeriod)
{
	if (mbXML)
	{
		if (moXML!=null)
		{
			if (iCrimeCode==0)
			{
				return(0);
			}
			else
			{
				var oElt=moXML.selectSingleNode("//stats/wards/ward[@mpscode='" + sWardCode + "']/crime[@id='" + iCrimeCode + "']/period[@order='" + iPeriod + "']");
				if (oElt!=null)
				{
					return(parseFloat(oElt.getAttribute("offences")));
				}
				else
				{
					return(0);
				}
			}
		}
	}
	else
	{
		try
		{
			//sUpperCaseBorVal = sBoroughCode.toUpperCase();
			//alert("Upper is " + sUpperCaseBorVal);
			//alert("Just doing a straight return from ward value");
			return(wardData[sWardCode][iCrimeCode][iPeriod]);
		}
		catch(e)
		{
			return(0);
		}
	}

}


function MPSValue(iCrimeCode, iPeriod)
{
	if (mbXML)
	{
		if (moXML!=null)
		{
			if (iCrimeCode==0)
			{
				return(0);
			}
			else
			{
				var oElt=moXML.selectSingleNode("//stats/mps/crime[@id='" + iCrimeCode + "']/period[@order='" + iPeriod + "']");
				if (oElt!=null)
				{
					return(parseFloat(oElt.getAttribute("offences")));
				}
				else
				{
					return(0);
				}
			}
		}
	}
	else
	{
		try
		{
			return(parseFloat(MPSData[iCrimeCode][iPeriod]));
		}
		catch(e)
		{
			return(0);
		}
	}

}

function period(iOrder)
{
	if (mbXML)
	{
		if (moXML!=null)
		{
			var oElt=moXML.selectSingleNode("//stats/mps/crime[1]/period[@order='" + iOrder + "']");
			if (oElt!=null)
			{
				return(oElt.getAttribute("name"));
			}
			else
			{
				return("");
			}
		}
	}
	else
	{
		return(periodType[iOrder]);
	}

}

function boroughName(sBoroughCode)
{
	sBoroughCode=sBoroughCode.toUpperCase();
	if (mbXML)
	{
		if (moXMLBoroughs!=null)
		{
			var oElt=moXMLBoroughs.selectSingleNode("//boroughs/borough[@code='" + sBoroughCode + "']");
			if (oElt!=null)
			{
				return(oElt.getAttribute("displayname"));
			}
			else
			{
				return("unknown");
			}
		}
	}
	else
	{
		try
		{
			return(boroughs[sBoroughCode][1]);
		}
		catch(e)
		{
			return("unknown");
		}
	}
}


function boroughNameWards(sBoroughCode)
{
	if (mbXML)
	{
		if (moXMLBoroughs!=null)
		{	//alert("entering the first bit");
			var oElt=moXMLBoroughs.selectSingleNode("//boroughs/borough[@mpscode='" + sBoroughCode + "']");
			if (oElt!=null)
			{
				return(oElt.getAttribute("displayname"));
			}
			else
			{
				return("unknown");
			}
		}
	}
	else
	{
		try
		{	
			//alert("Entering the try part of boroughNamesWards" + sBoroughCode);
			return(boroughs2[sBoroughCode][1]);
		}
		catch(e)
		{
			return("unknown");
		}
	}
}

function wardName(sBoroughCode)
{
	if (mbXML)
	{
		if (moXMLBoroughs!=null)
		{
			var oElt=moXMLBoroughs.selectSingleNode("//wards/ward[@mpscode='" + sBoroughCode + "']");
			if (oElt!=null)
			{
				return(oElt.getAttribute("displayname"));
			}
			else
			{
				return("unknown");
			}
		}
	}
	else
	{
		try
		{
			return(wards[sBoroughCode][1]);
		}
		catch(e)
		{
			return("unknown");
		}
	}
}

function rateKeys(sIndex)
{
	if (mbXML)
	{
		if (moXML!=null)
		{
			var oElt=moXML.selectSingleNode("//stats/crimes/crime[@id='" + sIndex + "']");
			if (oElt!=null)
			{
				return(oElt.getAttribute("name"));
			}
			else
			{
				return("unknown");
			}
		}
	}
	else
	{
		for (var i=0;i<crimes.length;i++)
		{
			if(crimes[i][0]==sIndex)
			{
				return(crimes[i][1]);
			}
		}
	}
}

function DWData(sName,sID)
{
	var sCatID = sID;
	dataWindow.document.write("<tr><td class='cellblueback'>" + sName + "</td><td align='right' class='cellfullborder'>" + FormatNumber(boroughValue(myBor,sCatID,0),1,true,false,true) + "</td><td class='cellfullborder' align='right'>" + FormatNumber(MPSValue(sCatID,0),1,true,false,true) + "</td><td class='cellfullborder' align='right' valign='top'>" + FormatNumber(boroughValue(myBor,sCatID,1),1,true,false,true) + "</td><td align='right' class='cellfullborder' valign='top'>" + FormatNumber(MPSValue(sCatID,1),1,true,false,true) + "</td></tr>");
}

function DWDataWard(sName,sID)
{
	var sCatID = sID;
	myWardsBor = (myBor.split("_")[0]);
	dataWindow.document.write("<tr><td class='cellblueback'>" + sName + "</td><td align='right' class='cellfullborder'>" + FormatNumber(wardValue(myBor,sCatID,0),1,true,false,true) + "</td><td class='cellfullborder' align='right'>" + FormatNumber(boroughValueforWard(myWardsBor,sCatID,0),1,true,false,true) + "</td><td class='cellfullborder' align='right' valign='top'>" + FormatNumber(wardValue(myBor,sCatID,1),1,true,false,true) + "</td><td align='right' class='cellfullborder' valign='top'>" + 	FormatNumber(boroughValueforWard(myWardsBor,sCatID,1),1,true,false,true) + "</td></tr>");
}


function showcats()
{
	var sList;
	var oOption;
	var sCatID;
	
	dataWindow.document.write("<table cellspacing='2' cellpadding='2' width='100%'>");
	dataWindow.document.write("<tr><td></td><td align='center' colspan='2' class='cellfullborder'>" + period(0) + "</td><td colspan='2' align='center' class='cellfullborder'>" + period(1) + "</td></tr>");
	dataWindow.document.write("<tr><td width='40%'></td><td width='15%' align='right' class='cellblueback'>" + wardName(myBor) + "</td><td class='cellblueback' width='15%' align='right'>Borough Total</td><td width='15%' class='cellblueback' align='right'>" + wardName(myBor) + "</td><td width='15%' align='right' class='cellblueback'>Borough Total</td></tr>");
	
	if (mbXML)
	{
		if(moXML!=null)
		{
			try
			{
				moXML.setProperty("SelectionLanguage", "XPath");
				var oElts=moXML.selectNodes("//stats/crimes/*");
				for (i=0;i<oElts.length;i++)
				{
					DWData(oElts[i].getAttribute("displayname"),oElts[i].getAttribute("id"));
				}
				oElts=null;
			}
			catch(e)
			{
				alert("error3" + e.description);
			}
				
		}
	}
	else
	{
		for (var i=0;i<crimes.length;i++)
		{
			DWDataWard(crimes[i][1],crimes[i][0]);
		}
	}
	dataWindow.document.write("</table>");
}

function showcatsward()
{
	var sList;
	var oOption;
	var sCatID;
	
	dataWindow.document.write("<table cellspacing='2' cellpadding='2' width='100%'>");
	dataWindow.document.write("<tr><td></td><td align='center' colspan='2' class='cellfullborder'>" + period(0) + "</td><td colspan='2' align='center' class='cellfullborder'>" + period(1) + "</td></tr>");
	dataWindow.document.write("<tr><td width='40%'></td><td width='15%' align='right' class='cellblueback'>" + wardName(myBor) + "</td><td class='cellblueback' width='15%' align='right'>Borough Total</td><td width='15%' class='cellblueback' align='right'>" + wardName(myBor) + "</td><td width='15%' align='right' class='cellblueback'>Borough Total</td></tr>");
	
	if (mbXML)
	{
		if(moXML!=null)
		{
			try
			{
				moXML.setProperty("SelectionLanguage", "XPath");
				var oElts=moXML.selectNodes("//stats/crimes/*");
				for (i=0;i<oElts.length;i++)
				{
					DWDataWard(oElts[i].getAttribute("displayname"),oElts[i].getAttribute("id"));
				}
				oElts=null;
			}
			catch(e)
			{
				//alert("error3" + e.description);
			}
				
		}
	}
	else
	{
		for (var i=0;i<crimes.length;i++)
		{
			DWDataWard(crimes[i][1],crimes[i][0]);
		}
	}
	dataWindow.document.write("</table>");
}

function loadValidExternalXMLFile(sFile)
{
	var oXML;
    try
	{
		oXML = jsXML.createDOMDocument();
		oXML.async=false;
		oXML.load(sFile);
		if (oXML.parseError.errorCode!=0)
		{
			//alert("ParseErrorReason: " + oXML.parseError.reason);
		}		
		
		oXML.setProperty("SelectionLanguage", "XPath");
		return(oXML);
	}
	catch(e)
	{
		//alert("loadValidExternalFile: " + e.description);
	}
}


function ShowMe(sWard)//load in a variable here say KG1
{

	if (!mbLoading)
	{
		document.location="datatable.php?ward=" + sWard + "&borough=" + msBorough + "&period=" + msPeriod;
	}
}

function boroughSiteURL(Bor)
{
		try
		{
			return(boroughs[Bor][3]);
		}
		catch(e)
		{
			return("");
		}
}

function wardSiteURL(Bor)
{
		try
		{
			return(wards[Bor][3]);
		}
		catch(e)
		{
			return("");
		}
}

function boroughMapURL(sBoroughCode)
{
	sBoroughCode=sBoroughCode.toUpperCase();
	//alert(sBoroughCode);
	try
	{
		return(boroughs[sBoroughCode][4]);
	}
	catch(e)
	{
		return("");
	}
}

function wardMapURL(Bor)
{
		try
		{
			return(wards[Bor][4]);
		}
		catch(e)
		{
			return("");
		}
}




function wardSiteURL(Bor)
{
		try
		{
			return(wards[Bor][3]);
		}
		catch(e)
		{
			return("");
		}
}

function wardMapURL(Bor)
{
		try
		{
			return(wards[Bor][4]);
		}
		catch(e)
		{
			return("");
		}
}

function selectedBoroughCode()
{
	return(documentAll("selectVarForm").myVar.value);
}

function selectedCrimeType()
{
	return(documentAll("selectVarForm").myVar.options[documentAll("selectVarForm").myVar.selectedIndex].text);
}

function loadDataTable(Bor,index)
{
	myBor=Bor;
	var BorName = boroughValue(myBor,0,0);
	var MyBorInfo = boroughValue(myBor,index,0);
	
	if (Bor!="")
	{
		documentAll("tdLegendMPS").innerHTML="Met Total";
		documentAll("tdLegendBorough").innerHTML=boroughName(myBor);

		var boroughLatest=boroughValue(myBor,index,0)
		documentAll("tdLegendValueBoroughPeriod0").innerHTML=FormatNumber(boroughLatest,1,true,false,true);
		var boroughPrevious=boroughValue(myBor,index,1)
		documentAll("tdLegendValueBoroughPeriod1").innerHTML=FormatNumber(boroughPrevious,1,true,false,true);
		if (boroughPrevious>0)
		{
			documentAll("tdLegendChangeBorough").innerHTML=formatPercent((boroughLatest/boroughPrevious) - 1,1,true,false,true,true,true);
		}
		else
		{
			documentAll("tdLegendChangeBorough").innerHTML="Division by zero";
		}
	}
	else
	{
		documentAll("tdLegendBorough").innerHTML="";
		documentAll("tdLegendValueBoroughPeriod0").innerHTML="";
		documentAll("tdLegendValueBoroughPeriod1").innerHTML="";
		documentAll("tdLegendChangeBorough").innerHTML="";
	}
	
	documentAll("tdLegendCrime").innerHTML=selectedCrimeType();	
	
	var MPSLatest=MPSValue(index,0)
	//alert(("tdLegendValueMPSPeriod0").innerHTML=FormatNumber(MPSLatest,1,true,false,true));
	documentAll("tdLegendValueMPSPeriod0").innerHTML=FormatNumber(MPSLatest,1,true,false,true);
	
	documentAll("tdLegendTitlePeriod0").innerHTML="No. of crimes (" + period(0) + ")";
	documentAll("tdLegendTitlePeriod1").innerHTML="No. of crimes (" + period(1) + ")";
	var MPSPrevious=MPSValue(index,1)
	documentAll("tdLegendValueMPSPeriod1").innerHTML=FormatNumber(MPSPrevious,1,true,false,true);
	
	if (MPSPrevious>0)
	{
		documentAll("tdLegendChangeMPS").innerHTML=formatPercent((MPSLatest/MPSPrevious) - 1,1,true,false,true,true,true);
	}
	else
	{
		documentAll("tdLegendChangeMPS").innerHTML="Division by zero";
	}

}


function loadDataTableWard(Bor,index)
{
	//alert("Entering loadDataTableWard");
	myBor=Bor;
	//alert("in LoadDataTableWard Bor is " + Bor);
	//alert("this gives Borough as " + Bor.split("_")[0]);
	var WardsBorID = Bor.split("_")[0];
	var BorName = wardValue(myBor,0,0);
	var MyBorInfo = wardValue(myBor,index,0);
	
	if (Bor!="")
	{

		documentAll("tdLegendMPS").innerHTML=PCase((boroughNameWards(msLocation)));
		documentAll("tdLegendBorough").innerHTML=wardName(myBor);
		var boroughLatest=wardValue(myBor,index,0)
//alert(myBor);
		documentAll("tdLegendValueBoroughPeriod0").innerHTML=FormatNumber(boroughLatest,1,true,false,true);
		var boroughPrevious=wardValue(myBor,index,1)
		documentAll("tdLegendValueBoroughPeriod1").innerHTML=FormatNumber(boroughPrevious,1,true,false,true);
		
		//% Change
		if (boroughPrevious>0)
		{
			documentAll("tdLegendChangeBorough").innerHTML=formatPercent((boroughLatest/boroughPrevious) - 1,1,true,false,true,true,true);
		}
		else
		{
			documentAll("tdLegendChangeBorough").innerHTML="Division by zero";
		}
	}
	else
	{
		documentAll("tdLegendMPS").innerHTML="";
		documentAll("tdLegendBorough").innerHTML="";
		documentAll("tdLegendValueBoroughPeriod0").innerHTML="";
		documentAll("tdLegendValueBoroughPeriod1").innerHTML="";
		documentAll("tdLegendChangeBorough").innerHTML="";
	}
	documentAll("tdLegendCrime").innerHTML=selectedCrimeType();	
	//testlatest = boroughValueforWard(WardsBorID,index,0);
//alert(WardsBorID);
	var MPSLatest=boroughValueforWard(WardsBorID,index,0);//MPSValue(index,0)
	documentAll("tdLegendValueMPSPeriod0").innerHTML=FormatNumber(MPSLatest,1,true,false,true);
	
	documentAll("tdLegendTitlePeriod0").innerHTML="No. of crimes (" + period(0) + ")";
	documentAll("tdLegendTitlePeriod1").innerHTML="No. of crimes (" + period(1) + ")";

	var MPSPrevious=boroughValueforWard(WardsBorID,index,1);//MPSValue(index,1)
	documentAll("tdLegendValueMPSPeriod1").innerHTML=FormatNumber(MPSPrevious,1,true,false,true);
	
	if (MPSPrevious>0)
	{
		documentAll("tdLegendChangeMPS").innerHTML=formatPercent((MPSLatest/MPSPrevious) - 1,1,true,false,true,true,true);
	}
	else
	{
		documentAll("tdLegendChangeMPS").innerHTML="Division by zero";
	}

}

function index()
{
	return(documentAll("selectVarForm").myVar.value);
}

function TellMe(Bor)
{
//alert("Entering TellMe with " + Bor);
	if (!mbLoading)
	{
	//alert("MB Not Loading");
	//'ie MPS, change this to use location
		locationAsString = ("" + msLocation);
		locationAsStringLength = locationAsString.length;
		if (locationAsStringLength>=4)
		{
			//alert("Location longer than 5 letters");
			//alert("Borough is:" + wards2[msLocation]);
			msLocation=wards2[msLocation];
			//alert("mbArea = " + mbArea);
			mbArea=1;
		}

		if (mbArea==1)
		{
		//	alert("Location is a borough");
			TellMeWard(Bor);
		}
		else
		{
			//alert("Location is the MPS");
	
			myBor=Bor;
			var BorName = boroughValue(myBor,0,0);
			//alert("BorName is " + BorName);
			var MyBorInfo = boroughValue(myBor,index(),0);
			
			if (Bor!="")
			{
				if (mbSVG)
				{
					var	svgvaldoc = (document.all) ? svgVal.getSVGDocument() : document.svgvalues.document.embeds[0].getSVGDocument(); 				
					svgObj = svgdoc.getElementById(myBor);
			
					svgStyle = svgObj.getStyle();
					polycolour = svgStyle.getPropertyValue("fill");
					svgStyle.setProperty("fill","#FFFF00");
				}
				else
				{
	
					documentAll("nameofselectedborough").innerHTML=boroughName(myBor);
				}
			}
			loadDataTable(Bor,index());
			glossaryText(documentAll("glossarytext"),index());
		}
	}
}

function TellMeWard(Bor)
{
	//alert("Entering Tell Me Ward");
	if (!mbLoading)
	{
		myBor=Bor;
		var BorName = wardValue(myBor,0,0);
		//alert("In TellMeWard Name Passed MyBor was:" + myBor + " and BorName is " + BorName);
		var MyBorInfo = wardValue(myBor,index(),0);
		//alert(MyBorInfo);
		
		if (Bor!="")
		{
			if (mbSVG)
			{
				var	svgvaldoc = (document.all) ? svgVal.getSVGDocument() : document.svgvalues.document.embeds[0].getSVGDocument(); 				
				svgObj = svgdoc.getElementById(myBor);
		
				svgStyle = svgObj.getStyle();
				polycolour = svgStyle.getPropertyValue("fill");
				svgStyle.setProperty("fill","#FFFF00");
			}
			else
			{
				documentAll("nameofselectedborough").innerHTML=wardName(myBor);
			}
		}
		loadDataTableWard(Bor,index());
		glossaryText(documentAll("glossarytext"),index());
	}
}

function formatPercent(num,decimalNum,bolLeadingZero,bolParens,bolCommas,bolPlus,bolGreen)
/**********************************************************************
	IN:
		NUM - the number to format
		decimalNum - the number of decimal places to format the number to
		bolLeadingZero - true / false - display a leading zero for
										numbers between -1 and 1
		bolParens - true / false - use parenthesis around negative numbers
		bolCommas - put commas as number separators.										
 
	RETVAL:
		The formatted number!		
 **********************************************************************/
{
	var tmpStr = new String(FormatNumber(num*100,decimalNum,bolLeadingZero,bolParens,bolCommas));

	if (tmpStr.indexOf(")") != -1) {
		// We know we have a negative number, so place '%' inside of ')'
		tmpStr = tmpStr.substring(0,tmpStr.length - 1) + "%)";
	}
	else
		tmpStr+="%";			// Return formatted string!
	
	if (bolGreen)
		if (num<=0)
			tmpStr="<span class='decrease'>" + tmpStr + "</span>";
		else
			tmpStr="<span class='increase'>+" + tmpStr + "</span>";
	
	return (tmpStr);
}

function FormatNumber(num,decimalNum,bolLeadingZero,bolParens,bolCommas,bolPlus,bolGreen)
/**********************************************************************
	IN:
		NUM - the number to format
		decimalNum - the number of decimal places to format the number to
		bolLeadingZero - true / false - display a leading zero for
										numbers between -1 and 1
		bolParens - true / false - use parenthesis around negative numbers
		bolCommas - put commas as number separators.
 
	RETVAL:
		The formatted number!
 **********************************************************************/
{ 
        if (isNaN(parseInt(num))) return "NaN";

	var tmpNum = num;
	var iSign = num < 0 ? -1 : 1;		// Get sign of number
	
	// Adjust number so only the specified number of numbers after
	// the decimal point are shown.
	tmpNum *= Math.pow(10,decimalNum);
	tmpNum = Math.round(Math.abs(tmpNum))
	tmpNum /= Math.pow(10,decimalNum);
	tmpNum *= iSign;					// Readjust for sign
	
	
	// Create a string object to do our formatting on
	var tmpNumStr = new String(tmpNum);

	// See if we need to strip out the leading zero or not.
	if (!bolLeadingZero && num < 1 && num > -1 && num != 0)
		if (num > 0)
			tmpNumStr = tmpNumStr.substring(1,tmpNumStr.length);
		else
			tmpNumStr = "-" + tmpNumStr.substring(2,tmpNumStr.length);
		
	// See if we need to put in the commas
	if (bolCommas && (num >= 1000 || num <= -1000)) {
		var iStart = tmpNumStr.indexOf(".");
		if (iStart < 0)
			iStart = tmpNumStr.length;

		iStart -= 3;
		while (iStart >= 1) {
			tmpNumStr = tmpNumStr.substring(0,iStart) + "," + tmpNumStr.substring(iStart,tmpNumStr.length)
			iStart -= 3;
		}		
	}

	// See if we need to use parenthesis
	if (bolParens && num < 0)
		tmpNumStr = "(" + tmpNumStr.substring(1,tmpNumStr.length) + ")";
	
	if (bolPlus)
		if(num>0)
			tmpNumStr="+" + tmpNumStr.substring(1,tmpNumStr.length);
		else if(num<0)
			tmpNumStr="-" + tmpNumStr.substring(1,tmpNumStr.length);
			
	
	return tmpNumStr;		// Return our formatted string!
}

function toggleOptions()
{
	for(var i=0;i<document.all.length;i++)
	{
		if (document.all[i].className=="cOption")
		{
			document.all[i].style.display=(document.all[i].style.display=="block")?"none":"block";
		}
	}
}

//var moXML=loadValidExternalXMLFile("data/crimes_feb04.xml");
    

/*loadXML("Jan-04.xml");
function loadXML(sFile)
{
	//Note That this will not work with Netscape Navigator - http://javascript.about.com/library/weekly/aa101501a.htm
	moXML=new ActiveXObject("MSXML.DOMDocument");
	moXML.async=false;
	moXML.load(sFile);
	alert(moXML.xml);
}*/
/*function heading()
{
	if(moXML!=null)
	{
		try
		{
			return(moXML.selectSingleNode("//stats/heading").text);
		}
		catch(e)
		{
			alert(e.description);
		}
	}	
}*/

/*function period()
{
	if(moXML!=null)
	{
		try
		{
			return(moXML.selectSingleNode("//stats/period").text);
		}
		catch(e)
		{
			alert(e.description);
		}
	}	
}*/


/*function mpswide()
{
	if(moXML!=null)
	{
		try
		{
			var sList;
			var oOption;
			moXML.setProperty("SelectionLanguage", "XPath");
			var oElts=moXML.selectNodes("//stats/crimes/*");
			var sCatID;
			var sOutput;
			
			sOutput = "<table width='80%'>";
			sOutput = sOutput + "<tr><td width='80%' height='8' bgcolor='#EEEEEE'></td><td width='20%' align='right' bgcolor='#EEEEEE'></td></tr>";
			for (i=0;i<oElts.length;i++)
			{
				sCatID = oElts[i].getAttribute("id");
				sOutput = sOutput + "<tr><td><p>" + oElts[i].getAttribute("name") + "</p></td><td align='right' valign='top'><p>" + MPSValue(sCatID) + showunit(sCatID) + "</p></td></tr>";
			}
			sOutput = sOutput + "</table>";
			oElts=null;
			return sOutput;
		}
		catch(e)
		{
			alert(e.description);
		}
			
	}
}*/


/*function showunit(iCatNo)
{
	if (keyDetail(iCatNo)!="number")
	{
		return keyDetail(iCatNo);
	}
	else
	{
		return ""
	}
}*/



function PCase(STRING){
var strReturn_Value = "";
var iTemp = STRING.length;
if(iTemp==0){
return"";
}
var UcaseNext = false;
strReturn_Value += STRING.charAt(0).toUpperCase();
for(var iCounter=1;iCounter < iTemp;iCounter++){
if(UcaseNext == true){
strReturn_Value += STRING.charAt(iCounter).toUpperCase();
}
else{
strReturn_Value += STRING.charAt(iCounter).toLowerCase();
}
var iChar = STRING.charCodeAt(iCounter);
if(iChar == 32 || iChar == 45 || iChar == 46){
UcaseNext = true;
}
else{
UcaseNext = false
}
if(iChar == 99 || iChar == 67){
if(STRING.charCodeAt(iCounter-1)==77 || STRING.charCodeAt(iCounter-1)==109){
UcaseNext = true;
}
}


} //End For

return strReturn_Value;
} //End Function

var convertONSMPS=new Array(); 
convertONSMPS["AB"]="kg"; 
convertONSMPS["AC"]="sx"; 
convertONSMPS["AD"]="ry"; 
convertONSMPS["AE"]="qk"; 
convertONSMPS["AF"]="py"; 
convertONSMPS["AG"]="ek"; 
convertONSMPS["AH"]="zd"; 
convertONSMPS["AJ"]="xb";
 convertONSMPS["AK"]="ye"; 
 convertONSMPS["AL"]="rg"; 
 convertONSMPS["AM"]="gd"; 
 convertONSMPS["AN"]="fh"; 
 convertONSMPS["AP"]="yr"; 
 convertONSMPS["AQ"]="qa"; 
 convertONSMPS["AR"]="kd"; 
 convertONSMPS["ID"]="id"; 
 convertONSMPS["AS"]="xh"; 
 convertONSMPS["AT"]="tx"; 
 convertONSMPS["AU"]="ni"; 
 convertONSMPS["AW"]="bs"; 
 convertONSMPS["AX"]="vk"; 
 convertONSMPS["AY"]="lx"; 
 convertONSMPS["AZ"]="pl"; 
 convertONSMPS["BA"]="vw"; 
 convertONSMPS["BB"]="kf"; 
 convertONSMPS["BC"]="ji"; 
 convertONSMPS["BD"]="tw"; 
 convertONSMPS["BE"]="md"; 
 convertONSMPS["BF"]="zt"; 
 convertONSMPS["BG"]="ht"; 
 convertONSMPS["BH"]="jc"; 
 convertONSMPS["BJ"]="ww"; 
 convertONSMPS["BK"]="cw"; 
 convertONSMPS["SO"]="so"; 
 


var aMPSCodes=new Array();
aMPSCodes["kg"]="AB"; 
aMPSCodes["sx"]="AC"; 
aMPSCodes["ry"]="AD"; 
aMPSCodes["qk"]="AE"; 
aMPSCodes["py"]="AF"; 
aMPSCodes["ek"]="AG"; 
aMPSCodes["zd"]="AH"; 
aMPSCodes["xb"]="AJ";
aMPSCodes["ye"]="AK"; 
aMPSCodes["rg"]="AL"; 
aMPSCodes["gd"]="AM"; 
aMPSCodes["fh"]="AN"; 
aMPSCodes["yr"]="AP"; 
aMPSCodes["qa"]="AQ"; 
aMPSCodes["kd"]="AR"; 
aMPSCodes["id"]="ID"; 
aMPSCodes["xh"]="AS"; 
aMPSCodes["tx"]="AT"; 
aMPSCodes["ni"]="AU"; 
aMPSCodes["bs"]="AW"; 
aMPSCodes["vk"]="AX"; 
aMPSCodes["lx"]="AY"; 
aMPSCodes["pl"]="AZ"; 
aMPSCodes["vw"]="BA"; 
aMPSCodes["kf"]="BB"; 
aMPSCodes["ji"]="BC"; 
aMPSCodes["tw"]="BD"; 
aMPSCodes["md"]="BE"; 
aMPSCodes["zt"]="BF"; 
aMPSCodes["ht"]="BG"; 
aMPSCodes["jc"]="BH"; 
aMPSCodes["ww"]="BJ"; 
aMPSCodes["cw"]="BK"; 
aMPSCodes["so"]="SO"; 
aMPSCodes["id"]="ID";

function ConvertMPStoONSCode(sMPSCode)
{
	//alert(sMPSCode);
	var sONSCode = aMPSCodes[sMPSCode.toLowerCase()];

	return sONSCode;
}

/*********************************** Datatable specific ***************************************/
function loadDataFile(sPeriod)
{
	var sLocation="";
	if (mbArea==1)
	{
		sLocation="mps";
	}
	else
	{
		sLocation=msBorough;
	}

	loadData(sPeriod,sLocation);
}

function setupPage()
{
	var sWard=msWard;
	var sBorough=msBorough;
	var sPeriod=msPeriod;
	
	var sLocation=msLocation;
	var sLocationName="";
	var sChildName="";
	var sParentName="";
	var sParentCode="";
	var sComments="";
	var sONSCode=ConvertMPStoONSCode(sBorough);
	var NO_LEVELS=2;
	var sTableTitle="";

	if(sWard!="") //ward view
	{
		sLocationName=wardName(sLocation);
		sChildName=sLocationName;
		sParentName=boroughName(sONSCode);
		sParentCode=sBorough;

		if (wardMapURL(sLocation)!="")
		{
			documentAll("tdMap").innerHTML="<img src='images/maps/" + wardMapURL(sLocation) + "' alt='Map of " + sParentName + " highlighting " + wardName(sLocation) + " ward.' vspace='5'><p style='font-size:8pt'>&#169; Crown copyright 2006. All rights reserved. Ordnance Survey Licence number 0100022456</p>";
		}

		sComments=commentHTML(null,sParentCode);
		NO_LEVELS=3;
		sTableTitle="Offences per 1000 population";
	}
	else if(sBorough!="") //Borough view
	{
		//alert("Borough Map " + sBorough + " URL is " + boroughMapURL(sONSCode));
		sLocationName=boroughName(sONSCode);
		sChildName=sLocationName;
		sParentName="Met Total";
		sParentCode=sParentName;

		if (boroughMapURL(sONSCode)!="")
		{
sTemp=documentAll("tdMap").innerHTML;
			documentAll("tdMap").innerHTML="<img src='images/maps/" + boroughMapURL(sONSCode) + "' alt='Map of London highlighting " + sLocationName + " borough.' vspace='5'>" + sTemp;
		}

		documentAll("spLinkNext").innerHTML="<p/><a href='index.php?borough=" + sBorough + "&period=" + sPeriod + "'>Click for ward data</a>";

		sComments=commentHTML(null,sONSCode);
		NO_LEVELS=2;
		sTableTitle="Number of Offences";
	}

	document.title="Metropolitan Police: Latest Crime Figures for " + sLocationName;
	documentAll("hTitle").innerText="LATEST CRIME FIGURES FOR " + sLocationName.toUpperCase();
	//retrieve relevant borough js file

	documentAll("boroughComments").innerHTML=sComments;


	//showcatsward(window);
	var oTable=documentAll("tblData");

	var oRow=oTable.insertRow(-1);
	var oCell=oRow.insertCell(-1);
	
	var i,j;	

	WIDTH_TITLE=40;
	WIDTH_NO=(100 - WIDTH_TITLE)/(2*NO_LEVELS);

	for (j=0;j<2;j++)
	{
		var oCell=oRow.insertCell(-1);
		oCell.className="cellfullborder";
		oCell.id="tdPeriod" + j;
		oCell.innerHTML=period(j) + " (" + msPeriod + ")";
		oCell.colSpan=NO_LEVELS;
		oCell.align="center";
	}

	var oRow=oTable.insertRow(-1);
	var oCell=oRow.insertCell(-1);
	oCell.className="cellfullborder";
	oCell.id="tdDataTableTitle";
	//oCell.colspan=3;
	oCell.align="right";
	oCell.width=WIDTH_TITLE + "%";
	oCell.innerText=sTableTitle;

	var s="";
	for(i=0;i<2;i++)
	{
		for (j=0;j<NO_LEVELS;j++)
		{
			var oCell=oRow.insertCell(-1);
			oCell.className="cellblueback";
			oCell.id="tdTitle" + j + i;
			oCell.align="right";
			oCell.width=WIDTH_NO + "%";
			if(j==0)
			{
				s=sChildName;
			}
			else if(j==1)
			{
				s=sParentName;
			}
			else if(j==2)
			{
				s="Met Total";
			}
			oCell.innerHTML=s;
		}
	}

	if (sParentCode=="Met Total")
	{
		sLocation=sONSCode;
	}

	for (i=0;i<crimes.length;i++)
	{
		var oRow=oTable.insertRow(-1);
	
		//Crime type
		var oCell=oRow.insertCell(-1);
		oCell.className="cellblueback";
		oCell.innerHTML=crimes[i][1];
	
		//Child value - period 0
		var oCells=new Array();
		oCells[0]=new Array();
		oCells[1]=new Array();

		for (j=0;j<2;j++)
		{
			for (k=0;k<NO_LEVELS;k++)
			{
				oCells[j][k]=oRow.insertCell(-1);
				oCells[j][k].className="cellfullborder";
				oCells[j][k].style.textAlign="right";
			}
		}

		if(sParentCode=="Met Total")
		{
			oCells[0][0].innerHTML=FormatNumber(boroughValue(sLocation,crimes[i][0],0),1,true,false,true);//wardValue(sWard,crimes[i][0],0),1,true,false,true);
			oCells[0][1].innerHTML=FormatNumber(MPSValue(crimes[i][0],0),1,true,false,true);
			oCells[1][0].innerHTML=FormatNumber(boroughValue(sLocation,crimes[i][0],1),1,true,false,true);
			oCells[1][1].innerHTML=FormatNumber(MPSValue(crimes[i][0],1),1,true,false,true);
	
		}
		else
		{
			oCells[0][0].innerHTML=FormatNumber(wardValue(sLocation,crimes[i][0],0),1,true,false,true);
			oCells[0][1].innerHTML=FormatNumber(boroughValue(sParentCode,crimes[i][0],0),1,true,false,true);
			oCells[0][2].innerHTML=FormatNumber(MPSValue(crimes[i][0],0),1,true,false,true);
			oCells[1][0].innerHTML=FormatNumber(wardValue(sLocation,crimes[i][0],1),1,true,false,true);
			oCells[1][1].innerHTML=FormatNumber(boroughValue(sParentCode,crimes[i][0],1),1,true,false,true);
			oCells[1][2].innerHTML=FormatNumber(MPSValue(crimes[i][0],1),1,true,false,true);
		}

	}

}


