var accountingOptions = Array(2)
accountingOptions[0] = Array('Real (' + baseYear + ') dollars', 'Nominal dollars', '% of GDP');
accountingOptions[1] = Array('Real','Nominal','GDP');

var politicalOptions = Array(2)
politicalOptions[0] = Array('None', "President's party", 'Senate majority party', 'House majority party');
politicalOptions[1] = Array('none','presidency','senate','house');

var seriesSelectorOptions = Array(2)
seriesSelectorOptions[0] = Array('Show both selections', 'Selection 1 only', 'Selection 2 only');
seriesSelectorOptions[1] = Array('both','series1','series2');

var TSChartXMLObject;

var TSPageReady = false;

function initTSPage (transport) {
	var i;
	var j;
	var newTSPage = transport.responseXML.getElementsByTagName('div')[0];
	var timeSeriesDiv = $('TSPage');
	
	copyXMLToDOM (newTSPage,timeSeriesDiv);
	
/*	//Initialize chart with empty data.
	var TSChart = new FusionCharts("./FusionCharts/MSCombi2D.swf", "TSChartID", "700","500","0","1");
	TSChart.setDataXML("<chart></chart>");
	TSChart.render("timeSeriesChart");
*/	

	for (i=0;i<2;i++) {
		//Build the category selection menu.
		var catDropDownArea = $('categorySelection' + (i+1));
		catDropDownArea.appendChild(document.createTextNode("Category for selection " + (i+1) + ":"));
		var newMenu = new Element("form", {'id': 'item' + (i+1) + 'CatSelector'});
		catDropDownArea.appendChild(newMenu);
		var myMenu = new Element("select", {'class': 'ddmenu'});
		newMenu.appendChild(myMenu);
		myMenu.appendChild(new Element('optgroup', {'label': 'Outlays'}));
		myMenu.childNodes[0].appendChild(new Element('option', {'value': 11, 'name': 'Total federal outlays'}));
		myMenu.childNodes[0].appendChild(new Element('option', {'value': 12, 'name': 'Outlays by branch of government'}));
		myMenu.childNodes[0].appendChild(new Element('option', {'value': 13, 'name': 'Outlays by function'}));
		myMenu.appendChild(new Element('optgroup', {'label': 'Budget Authority'}));
		myMenu.childNodes[1].appendChild(new Element('option', {'value': 21, 'name': 'Total federal budget authority'}));
		myMenu.childNodes[1].appendChild(new Element('option', {'value': 22, 'name': 'Budget authority by branch of government'}));
		myMenu.childNodes[1].appendChild(new Element('option', {'value': 23, 'name': 'Budget authority by function'}));
		myMenu.appendChild(new Element('optgroup', {'label': 'Receipts'}));
		myMenu.childNodes[2].appendChild(new Element('option', {'value': 31, 'name': 'Total federal receipts'}));
		myMenu.childNodes[2].appendChild(new Element('option', {'value': 32, 'name': 'Receipts by source cagetory'}));
		myMenu.childNodes[2].appendChild(new Element('option', {'value': 33, 'name': 'Receipts by branch of government'}));
		myMenu.options[0].text = 'Total federal outlays';
		myMenu.options[1].text = 'Outlays by branch of government';
		myMenu.options[2].text = 'Outlays by function';
		myMenu.options[3].text = 'Total federal budget authority';
		myMenu.options[4].text = 'Budget authority by branch of government';
		myMenu.options[5].text = 'Budget authority by function';
		myMenu.options[6].text = 'Total federal receipts';
		myMenu.options[7].text = 'Receipts by source category';
		myMenu.options[8].text = 'Receipts by branch of government';
		myMenu.setAttribute('name', 'item' + (i+1));
		myMenu.setAttribute('dbase', (i==0 ? 'outlays' : 'receipts'));
		myMenu.setAttribute('itemNum', i+1);
		myMenu.setAttribute('menuLevel',0);
		
		myMenu.onchange=function(){changeItemCategory(this)};
		
		changeMenuSelection(myMenu, getSeriesValue(i+1,0,'value'));
	}
	
	//Build the chart options tables.
	//Start with the accounting options.
	var accountingArea = $('accountingSelector');
	var accountingMenu = new Element("form");
	accountingArea.appendChild(accountingMenu);
	var newMenu = new Element("select", {'id': 'accountingMenu'});
	accountingMenu.appendChild(newMenu);
	
	for (i=0; i<accountingOptions[0].length; i++) {
		newMenu.appendChild(new Element("option"));
		newMenu.options[i].text = accountingOptions[0][i];
		newMenu.options[i].value = accountingOptions[1][i];
	}
	newMenu.onchange=function(){changeAccounting(this)};
	
	//Now build the political context menu.
	var politicalArea = $('politicalSelector');
	var politicalForm = new Element("form");
	politicalArea.appendChild(politicalForm);
	var politicalMenu = new Element("select", {'id': 'politicalMenu'});
	politicalForm.appendChild(politicalMenu);
	for (i=0; i<politicalOptions[0].length; i++) {
		politicalMenu.appendChild(new Element("option"));
		politicalMenu.options[i].text = politicalOptions[0][i];
		politicalMenu.options[i].value = politicalOptions[1][i];
	}
	politicalMenu.onchange=function(){changePartyControlOption(this)};
	
	//Build the "2 axes" checkbox.
	var twoAxesArea = $('2AxesSelector');
	var twoAxesChkBox = new Element("form")
	twoAxesArea.appendChild(twoAxesChkBox);
	twoAxesChkBox.appendChild(new Element("input", {'type': 'checkbox', 'name': '2axes',
										  'checked': false, 'defaultChecked': false, 'id': '2AxesChkBox'}));
	twoAxesChkBox.firstChild.onclick=function(){changeNumAxes(this)};
	
	//Now build the series selector menu.
	var seriesSelectorArea = $('numSeriesSelector');
	var seriesSelectorForm = new Element("form");
	seriesSelectorArea.appendChild(seriesSelectorForm);
	var seriesSelectorMenu = new Element("select", {'id': 'seriesSelectorMenu'});
	seriesSelectorForm.appendChild(seriesSelectorMenu);
	for (i=0; i<seriesSelectorOptions[0].length; i++) {
		seriesSelectorMenu.appendChild(new Element("option"));
		seriesSelectorMenu.options[i].text = seriesSelectorOptions[0][i];
		seriesSelectorMenu.options[i].value = seriesSelectorOptions[1][i];
	}
	seriesSelectorMenu.onchange=function(){changeSeriesSelectorOption(this)};
	
	//Now set the global page variable to indicate the page has been initialized.
	for (i=0;i<pageDivIds[0].length;i++) {
		if (pageDivIds[0][i] == 'TSPage') {
			pageDivIds[1][i] = true;
		}
	}
	
	if (TSPageReady) {
		selectTSPage ();
	} else {
		TSPageReady = true;
	}
}

function refreshTSChart(loadChart) {
	var i;
	var chartObject = TSChartXMLObject.getElementsByTagName('chart')[0];
	
	var TSXMLString = convertXMLObjectToChartString(chartObject);
	
	if (loadChart) {
		if ($('2AxesSelector').firstChild.firstChild.checked) {
			var chartPath = "./FusionCharts/MSCombiDY2D.swf";
		} else {
			var chartPath = "./FusionCharts/MSCombi2D.swf";
		}
		var TSChart = new FusionCharts(chartPath, "TSChartID", "638","500","0","1");
		TSChart.setDataXML(TSXMLString);
		TSChart.render("timeSeriesChart");
	} else {
		var TSChart = getChartFromId(TSChartXMLObject.getElementsByTagName('TSChartInfo')[0].getAttribute('activeChart'));
		TSChart.setDataXML(TSXMLString);
	}
}

//initializeTSChart is called as part of the initial launch process to initialize the time series chart.
//initializeTSChart takes the following arguments: chartID -- the ID of the chart that needs to change; and
//chartData -- the responseXML element of the XMLHTTP response.
function initializeTSChart (transport) {
	var i;
	var j;
	var year;
	var economicDataIndex=0;
	var economicDataItems = economicData.getElementsByTagName("economicStat");
	var partyControlDataItems = partyControlData.getElementsByTagName("partyControl");
	var chartData = transport.responseXML;

	var chartItem = chartData.getElementsByTagName('item')[0];
	
	TSChartXMLObject = convertStringToXMLDOMObject("<TSChartData></TSChartData>");
	
	var TSChartInfo = TSChartXMLObject.createElement("TSChartInfo");
	TSChartXMLObject.firstChild.appendChild(TSChartInfo);
	TSChartInfo.setAttribute('id','TSChartInfo');
	TSChartInfo.setAttribute('activeChart','TSChartID');
	TSChartInfo.setAttribute('inactiveChart','TSChart2AxesID');
	TSChartInfo.setAttribute('activeChartDiv','timeSeriesChart');
	TSChartInfo.setAttribute('inactiveChartDiv','timeSeriesChart2');
	TSChartInfo.setAttribute('numAxes','1');
	TSChartInfo.setAttribute('seriesMax1','0');
	TSChartInfo.setAttribute('seriesMin1','0');
	TSChartInfo.setAttribute('seriesMax2','0');
	TSChartInfo.setAttribute('seriesMin2','0');
	TSChartInfo.setAttribute('seriesMaxTotal','0');
	TSChartInfo.setAttribute('seriesMinTotal','0');
	TSChartInfo.setAttribute('partyControl','presidency');
	TSChartInfo.setAttribute('series1Visible',1);
	TSChartInfo.setAttribute('series2Visible',1);
	
	for (i=0;i<economicDataItems.length && economicDataItems[i].getAttribute('year') != baseYear;i++);
	TSChartInfo.setAttribute('baseCPI',economicDataItems[i].getAttribute('CPI'));
	
	//Create the chart data
	var TSChartXMLData = TSChartXMLObject.createElement("chart");
	TSChartXMLObject.firstChild.appendChild(TSChartXMLData);
	TSChartXMLData.setAttribute('id','TSChartData');
	
	//Set chart attributes.
	TSChartXMLData.setAttribute('caption','U.S. Federal Budget Overview');
	TSChartXMLData.setAttribute('subCaption','1962-2015');
	TSChartXMLData.setAttribute('xAxisName','Fiscal Year');
	TSChartXMLData.setAttribute('yAxisName','Real (' + baseYear + ') Dollars');
	TSChartXMLData.setAttribute('SYAxisName','Real (' + baseYear + ') Dollars');
	TSChartXMLData.setAttribute('PYAxisName','Real (' + baseYear + ') Dollars');
	TSChartXMLData.setAttribute('numberPrefix','$');
	TSChartXMLData.setAttribute('sNumberPrefix','$');
	TSChartXMLData.setAttribute('bgColor','707E92');
	TSChartXMLData.setAttribute('baseFontSize','12');
	TSChartXMLData.setAttribute('baseFontColor','000000');
	TSChartXMLData.setAttribute('showBorder','1');
	TSChartXMLData.setAttribute('animation','1');
	TSChartXMLData.setAttribute('showValues','0');
	TSChartXMLData.setAttribute('formatNumberScale','1');
	TSChartXMLData.setAttribute('numberScaleValue','1000,1000,1000,1000');
	TSChartXMLData.setAttribute('numberScaleUnit','K,M,B,T');
	TSChartXMLData.setAttribute('sFormatNumberScale','1');
	TSChartXMLData.setAttribute('sNumberScaleValue','1000,1000,1000,1000');
	TSChartXMLData.setAttribute('sNumberScaleUnit','K,M,B,T');
	TSChartXMLData.setAttribute('lineDashLen','6');
	TSChartXMLData.setAttribute('lineDashGap','12');
	TSChartXMLData.setAttribute('adjustDiv','1');
	
	//Get series 1 data.
	var seriesData = chartItem.getElementsByTagName("column");
	
	var seriesCategories = seriesData[0].getElementsByTagName("row");
	var seriesValues = seriesData[1].getElementsByTagName("row");
	
	//Create time series categories.
	var TSChartXMLCategories = TSChartXMLObject.createElement("categories");
	TSChartXMLData.appendChild(TSChartXMLCategories);
	TSChartXMLCategories.setAttribute('id','TSChartCategories');
	
	//If we're at the current year, insert a vertical line.
	var currentYear = currentDate.getFullYear();
	var currentMonth = currentDate.getMonth() + 1.0;
	if (currentMonth < 4) {currentYear--;}
	
	var partyControlIndex = 0;

	for (j=0; j<seriesCategories.length; j++) {
		year = seriesCategories[j].firstChild.nodeValue;
		while (partyControlDataItems[partyControlIndex].getAttribute('year') != year) {
			partyControlIndex++;
		}
		
		if(j>0 && j<seriesCategories.length) {
			TSChartXMLCategories.appendChild(TSChartXMLObject.createElement('vLine'));
			TSChartXMLCategories.childNodes[TSChartXMLCategories.childNodes.length - 1].setAttribute('color',(partyControlDataItems[partyControlIndex-1.0].getAttribute('presidency') == "Republican" ? 'FF0000' : (partyControlDataItems[partyControlIndex-1.0].getAttribute('presidency') == "Democrat" ? '0070B0' : 'FFFFFF')));
			TSChartXMLCategories.childNodes[TSChartXMLCategories.childNodes.length - 1].setAttribute('thickness','11');
			TSChartXMLCategories.childNodes[TSChartXMLCategories.childNodes.length - 1].setAttribute('alpha','25');
			TSChartXMLCategories.childNodes[TSChartXMLCategories.childNodes.length - 1].setAttribute('linePosition','0.25');
			TSChartXMLCategories.childNodes[TSChartXMLCategories.childNodes.length - 1].setAttribute('showInChart','0');
			TSChartXMLCategories.childNodes[TSChartXMLCategories.childNodes.length - 1].setAttribute('partyControlIndex',(partyControlIndex-1.0));
			TSChartXMLCategories.childNodes[TSChartXMLCategories.childNodes.length - 1].setAttribute('partyControlLine','1');
		}
		
		//Append category element.
		TSChartXMLCategories.appendChild(TSChartXMLObject.createElement('category'));
		TSChartXMLCategories.childNodes[TSChartXMLCategories.childNodes.length - 1].setAttribute('label',year);
		TSChartXMLCategories.childNodes[TSChartXMLCategories.childNodes.length - 1].setAttribute('showLabel',(year % 5 == 0 ? 1 : 0));
		
		if (year == currentYear) {
			TSChartXMLCategories.appendChild(TSChartXMLObject.createElement('vLine'));
			TSChartXMLCategories.childNodes[TSChartXMLCategories.childNodes.length - 1].setAttribute('color','000000');
			TSChartXMLCategories.childNodes[TSChartXMLCategories.childNodes.length - 1].setAttribute('thickness','4');
			TSChartXMLCategories.childNodes[TSChartXMLCategories.childNodes.length - 1].setAttribute('linePosition',(currentMonth < 4 ? (currentMonth+8.5)/12 : (currentMonth-3.5)/12));
			TSChartXMLCategories.childNodes[TSChartXMLCategories.childNodes.length - 1].setAttribute('label',' Now ');
			TSChartXMLCategories.childNodes[TSChartXMLCategories.childNodes.length - 1].setAttribute('labelPosition','0.92');
		}
	}
	
	//Create time series datasets.
	var TSChartSeriesDataNominal = Array(2);
	var TSChartSeriesDataReal = Array(2);
	var TSChartSeriesDataGDP = Array(2);
	for (i=0;i<2;i++) {
		TSChartSeriesDataNominal[i] = TSChartXMLObject.createElement("dataset");
		TSChartSeriesDataNominal[i].setAttribute('id','TSSeries' + (i+1) + 'Nominal');
		TSChartSeriesDataNominal[i].setAttribute('showInChart','0');
		TSChartSeriesDataNominal[i].setAttribute('seriesMax',0);
		TSChartSeriesDataNominal[i].setAttribute('seriesMin',0);
		TSChartXMLData.appendChild(TSChartSeriesDataNominal[i]);
		TSChartSeriesDataReal[i] = TSChartXMLObject.createElement("dataset");
		TSChartSeriesDataReal[i].setAttribute('id','TSSeries' + (i+1) + 'Real');
		TSChartSeriesDataReal[i].setAttribute('showInChart','0');
		TSChartSeriesDataReal[i].setAttribute('seriesMax',0);
		TSChartSeriesDataReal[i].setAttribute('seriesMin',0);
		TSChartXMLData.appendChild(TSChartSeriesDataReal[i]);
		TSChartSeriesDataGDP[i] = TSChartXMLObject.createElement("dataset");
		TSChartSeriesDataGDP[i].setAttribute('id','TSSeries' + (i+1) + 'GDP');
		TSChartSeriesDataGDP[i].setAttribute('showInChart','0');
		TSChartSeriesDataGDP[i].setAttribute('seriesMax',0);
		TSChartSeriesDataGDP[i].setAttribute('seriesMin',0);
		TSChartXMLData.appendChild(TSChartSeriesDataGDP[i]);
		
		//Set dataset attributes.
		TSChartSeriesDataNominal[i].setAttribute('color',(i==0 ? 'B00000' : '344B6D'));
		TSChartSeriesDataReal[i].setAttribute('color',(i==0 ? 'B00000' : '344B6D'));
		TSChartSeriesDataGDP[i].setAttribute('color',(i==0 ? 'B00000' : '344B6D'));
		TSChartSeriesDataNominal[i].setAttribute('lineThickness','4');
		TSChartSeriesDataReal[i].setAttribute('lineThickness','4');
		TSChartSeriesDataGDP[i].setAttribute('lineThickness','4');
		TSChartSeriesDataNominal[i].setAttribute('parentYAxis',(i == 0 ? 'P' : 'S'));
		TSChartSeriesDataReal[i].setAttribute('parentYAxis',(i == 0 ? 'P' : 'S'));
		TSChartSeriesDataGDP[i].setAttribute('parentYAxis',(i == 0 ? 'P' : 'S'));
		TSChartSeriesDataNominal[i].setAttribute('anchorRadius','2');
		TSChartSeriesDataReal[i].setAttribute('anchorRadius','2');
		TSChartSeriesDataGDP[i].setAttribute('anchorRadius','2');
		TSChartSeriesDataNominal[i].setAttribute('seriesName',getSeriesLabel(i+1));
		TSChartSeriesDataReal[i].setAttribute('seriesName',getSeriesLabel(i+1));
		TSChartSeriesDataGDP[i].setAttribute('seriesName',getSeriesLabel(i+1));
		TSChartSeriesDataNominal[i].setAttribute('renderAs','LINE');
		TSChartSeriesDataReal[i].setAttribute('renderAs','LINE');
		TSChartSeriesDataGDP[i].setAttribute('renderAs','LINE');
		
		economicDataIndex = 0;
		
		//Populate series data.
		for (j=0; j<seriesCategories.length; j++) {
			year = seriesCategories[j].firstChild.nodeValue;
			while (economicDataItems[economicDataIndex].getAttribute('year') != year) {
				economicDataIndex++;
			}
			
			//Append data elements.
			TSChartSeriesDataNominal[i].appendChild(TSChartXMLObject.createElement('set'));
			TSChartSeriesDataNominal[i].childNodes[j].setAttribute('value',(seriesValues[j].firstChild.nodeValue == 'null' ? "" : seriesValues[j].firstChild.nodeValue));
			TSChartSeriesDataReal[i].appendChild(TSChartXMLObject.createElement('set'));
			TSChartSeriesDataReal[i].childNodes[j].setAttribute('value',(seriesValues[j].firstChild.nodeValue == 'null' ? "" : seriesValues[j].firstChild.nodeValue*(TSChartInfo.getAttribute('baseCPI')/economicDataItems[economicDataIndex].getAttribute('CPI'))));
			TSChartSeriesDataGDP[i].appendChild(TSChartXMLObject.createElement('set'));
			TSChartSeriesDataGDP[i].childNodes[j].setAttribute('value',(seriesValues[j].firstChild.nodeValue == 'null' ? "" : 100*seriesValues[j].firstChild.nodeValue/economicDataItems[economicDataIndex].getAttribute('GDP')));
			if (seriesValues[j].firstChild.nodeValue != "") {
				if (TSChartSeriesDataNominal[i].childNodes[j].getAttribute('value')/1000 > TSChartSeriesDataNominal[i].getAttribute('seriesMax')/1000) {
					TSChartSeriesDataNominal[i].setAttribute('seriesMax',TSChartSeriesDataNominal[i].childNodes[j].getAttribute('value'));
				}
				if (TSChartSeriesDataNominal[i].childNodes[j].getAttribute('value')/1000 < TSChartSeriesDataNominal[i].getAttribute('seriesMin')/1000) {
					TSChartSeriesDataNominal[i].setAttribute('seriesMin',TSChartSeriesDataNominal[i].childNodes[j].getAttribute('value'));
				}
				if (TSChartSeriesDataReal[i].childNodes[j].getAttribute('value')/1000 > TSChartSeriesDataReal[i].getAttribute('seriesMax')/1000) {
					TSChartSeriesDataReal[i].setAttribute('seriesMax',TSChartSeriesDataReal[i].childNodes[j].getAttribute('value'));
				}
				if (TSChartSeriesDataReal[i].childNodes[j].getAttribute('value')/1000 < TSChartSeriesDataReal[i].getAttribute('seriesMin')/1000) {
					TSChartSeriesDataReal[i].setAttribute('seriesMin',TSChartSeriesDataReal[i].childNodes[j].getAttribute('value'));
				}
				if (TSChartSeriesDataGDP[i].childNodes[j].getAttribute('value') > TSChartSeriesDataGDP[i].getAttribute('seriesMax')) {
					TSChartSeriesDataGDP[i].setAttribute('seriesMax',TSChartSeriesDataGDP[i].childNodes[j].getAttribute('value'));
				}
				if (TSChartSeriesDataGDP[i].childNodes[j].getAttribute('value') < TSChartSeriesDataGDP[i].getAttribute('seriesMin')) {
					TSChartSeriesDataGDP[i].setAttribute('seriesMin',TSChartSeriesDataGDP[i].childNodes[j].getAttribute('value'));
				}
			}
			
			//If we're past the current year, make the lines dashed.
			if (year > currentYear) {
				TSChartSeriesDataNominal[i].childNodes[j].setAttribute('dashed','1');
				TSChartSeriesDataReal[i].childNodes[j].setAttribute('dashed','1');
				TSChartSeriesDataGDP[i].childNodes[j].setAttribute('dashed','1');
			}
		}
	}
	
	TSChartSeriesDataReal[0].setAttribute('showInChart','1');
	TSChartSeriesDataReal[1].setAttribute('showInChart','1');

	new Ajax.Request ("./phpscripts/getTSdata.php", {
					  parameters: {sessionID: sessionID, seriesID: "receipts", startYear: 1962, endYear: 2015, category: 'receipts', drillDown: 'all'},
					  onSuccess: function(transport) {
					  updateTSChart(transport.responseXML,2);
					  if (TSPageReady) {
					  selectTSPage ();
					  } else {
					  TSPageReady = true;
					  }
					  },
					  onFailure: function(){ alert('Something went wrong...getTSData') }
					  });
}

//initializeTSChart is called when series data needs to be added or changed.
//initializeTSChart takes the following arguments: chartID -- the ID of the chart that needs to change; and
//chartData -- the responseXML element of the XMLHTTP response; and seriesNum -- the number of the series to be
//replaced or added into the chart.
function updateTSChart (chartData, seriesNum) {
	var i;
	var j;
	var year;
	var maxValue;
	var alertString = '';
	var economicDataItems = economicData.getElementsByTagName("economicStat");
	var TSChartInfo = TSChartXMLObject.getElementsByTagName("TSChartInfo")[0];
	
	var categoryList = TSChartXMLObject.getElementsByTagName('categories')[0];
	var categoryData = categoryList.getElementsByTagName('category');
	var seriesData = TSChartXMLObject.getElementsByTagName('dataset');
	for (i=0;i<seriesData.length;i++) {
		if (seriesData[i].getAttribute('id') == 'TSSeries' + seriesNum + 'Nominal') {
			var seriesNominal = seriesData[i];
			var seriesDataNominal = seriesData[i].getElementsByTagName('set');
		} else if (seriesData[i].getAttribute('id') == 'TSSeries' + seriesNum + 'Real') {
			var seriesReal = seriesData[i];
			var seriesDataReal = seriesData[i].getElementsByTagName('set');
		} else if (seriesData[i].getAttribute('id') == 'TSSeries' + seriesNum + 'GDP') {
			var seriesGDP = seriesData[i];
			var seriesDataGDP = seriesData[i].getElementsByTagName('set');
		}
	}
	seriesNominal.setAttribute('seriesMax',0);
	seriesNominal.setAttribute('seriesMin',0);
	seriesReal.setAttribute('seriesMax',0);
	seriesReal.setAttribute('seriesMin',0);
	seriesGDP.setAttribute('seriesMax',0);
	seriesGDP.setAttribute('seriesMin',0);
	seriesNominal.setAttribute('seriesName',getSeriesLabel(seriesNum));
	seriesReal.setAttribute('seriesName',getSeriesLabel(seriesNum));
	seriesGDP.setAttribute('seriesName',getSeriesLabel(seriesNum));
	
	var chartItem = chartData.getElementsByTagName('item')[0];
	
	var newSeriesData = chartItem.getElementsByTagName("column");
	var newSeriesValues = newSeriesData[1].getElementsByTagName("row");
	
	var economicDataIndex = 0;
	for (i=0; i<newSeriesValues.length; i++) {
		year = categoryData[i].getAttribute('label');
		while (economicDataItems[economicDataIndex].getAttribute('year') != year) {
			economicDataIndex++;
		}
		seriesDataNominal[i].setAttribute('value',(newSeriesValues[i].firstChild.nodeValue == "null" ? '' : newSeriesValues[i].firstChild.nodeValue));
		seriesDataReal[i].setAttribute('value',(newSeriesValues[i].firstChild.nodeValue == "null" ? '' : newSeriesValues[i].firstChild.nodeValue*(TSChartInfo.getAttribute('baseCPI')/economicDataItems[economicDataIndex].getAttribute('CPI'))));
		seriesDataGDP[i].setAttribute('value',(newSeriesValues[i].firstChild.nodeValue == "null" ? '' : 100*newSeriesValues[i].firstChild.nodeValue/economicDataItems[economicDataIndex].getAttribute('GDP')));
		alertString += seriesDataGDP[i].getAttribute('value') + "\n";
		if (newSeriesValues[i].firstChild.nodeValue != '') {
			if (newSeriesValues[i].firstChild.nodeValue > 0) {
				if (seriesDataNominal[i].getAttribute('value')/1000 > seriesNominal.getAttribute('seriesMax')/1000) {
					seriesNominal.setAttribute('seriesMax',seriesDataNominal[i].getAttribute('value'));
				}
				if (seriesDataReal[i].getAttribute('value')/1000 > seriesReal.getAttribute('seriesMax')/1000) {
					seriesReal.setAttribute('seriesMax',seriesDataReal[i].getAttribute('value'));
				}
				if (seriesDataGDP[i].getAttribute('value') > seriesGDP.getAttribute('seriesMax')) {
					seriesGDP.setAttribute('seriesMax',seriesDataGDP[i].getAttribute('value'));
				}
			} else if (newSeriesValues[i].firstChild.nodeValue < 0) {
				if (Math.abs(seriesDataNominal[i].getAttribute('value')/1000) > Math.abs(seriesNominal.getAttribute('seriesMin')/1000)) {
					seriesNominal.setAttribute('seriesMin',seriesDataNominal[i].getAttribute('value'));
				}
				if (Math.abs(seriesDataReal[i].getAttribute('value')/1000) > Math.abs(seriesReal.getAttribute('seriesMin')/1000)) {
					seriesReal.setAttribute('seriesMin',seriesDataReal[i].getAttribute('value'));
				}
				if (Math.abs(seriesDataGDP[i].getAttribute('value')) > Math.abs(seriesGDP.getAttribute('seriesMin'))) {
					seriesGDP.setAttribute('seriesMin',seriesDataGDP[i].getAttribute('value'));
				}
			}
		}
	}
	
	//	alert(alertString);
	
	setChartLimits();
	
	updatePartyControlData();

	//Now set the global page variable to indicate the data structure has been initialized.
	for (i=0;i<pageDivIds[0].length;i++) {
		if (pageDivIds[0][i] == 'TSPage') {
			pageDivIds[2][i] = true;
		}
	}
}

//buildDropDownMenu method will build a menu with the given headerText in the
//menuHolder with the id formID.
function buildDropDownMenu (menuHolder, formId, headerText, itemArray) {
	var i;
	var j;
	
	menuHolder.appendChild(document.createTextNode(headerText));
	
	var menuForm = new Element("form", {'id': formId});
	menuHolder.appendChild(menuForm);
	var newMenu = new Element("select", {'class': 'ddmenu'});
	menuForm.appendChild(newMenu);
	
	for (i=0; i<itemArray.length; i++) {
		newMenu.appendChild(new Element("option"));
		newMenu.options[i].text = itemArray[i].getAttribute('name');
		for (j=0;j<itemArray[i].attributes.length;j++) {
			newMenu.options[i].setAttribute(itemArray[i].attributes[j].nodeName, itemArray[i].attributes[j].value);
		}
	}
}

function buildSubMenus (menuData, menuLevel, menuAreas, itemNum) {
	buildDropDownMenu(menuAreas[menuLevel+1],'level' + (menuLevel+1) + 'Selector' + itemNum, menuData.getAttribute('nextLevelTitle'), menuData.childNodes);
	
	var newMenu = $('level' + (menuLevel+1) + 'Selector' + itemNum).firstChild;
	
	newMenu.onchange=function(){TSMenuChangeHandler(this)};
	newMenu.setAttribute('dbase',getTimeSeriesDbase(itemNum));
	newMenu.setAttribute('itemNum',itemNum);
	newMenu.setAttribute('menuLevel',menuLevel+1);
	
	newMenu.selectedIndex = 0;
	
	updateTimeSeries(itemNum,menuLevel+1,newMenu.options[newMenu.selectedIndex].value,newMenu.options[newMenu.selectedIndex].text);
	
	if (menuData.firstChild.childNodes.length > 0) {
		buildSubMenus (menuData.firstChild, menuLevel+1, menuAreas, itemNum);
	}
}

function TSMenuChangeHandler (myMenu) {
	var i;
	var newMenuData;
	var branchCode = '';
	var entityCode = '';
	var agencyCode = '';
	var bureauCode = '';
	var functionCode = '';
	var subfunctionCode = '';
	var sourceCategoryCode = '';
	var sourceSubCategoryCode = '';
	
	var newText = myMenu.options[myMenu.selectedIndex].text;
	var newValue = myMenu.options[myMenu.selectedIndex].value;
	
	var dbase = myMenu.getAttribute('dbase');
	var itemNum = myMenu.getAttribute('itemNum');
	var menuLevel = 1.0*myMenu.getAttribute('menuLevel');
	
	var drillDown = myMenu.options[myMenu.selectedIndex].getAttribute('drillDown');
	switch (drillDown) {
		case "branch":
			var branchCode = myMenu.options[myMenu.selectedIndex].getAttribute('branchCode');
			break;
		case "entity_type":
			var entityCode = myMenu.options[myMenu.selectedIndex].getAttribute('entityCode');
			break;
		case "bureau":
			var bureauCode = myMenu.options[myMenu.selectedIndex].getAttribute('bureauCode');
		case "agency":
			var agencyCode = myMenu.options[myMenu.selectedIndex].getAttribute('agencyCode');
			break;
		case "subfunction":
			var subfunctionCode = myMenu.options[myMenu.selectedIndex].getAttribute('subfunctionCode');
		case "function":
			var functionCode = myMenu.options[myMenu.selectedIndex].getAttribute('functionCode');
			break;
		case "source_subcategory":
			var sourceSubCategoryCode = myMenu.options[myMenu.selectedIndex].getAttribute('sourceSubCategoryCode');
		case "source_category":
			var sourceCategoryCode = myMenu.options[myMenu.selectedIndex].getAttribute('sourceCategoryCode');
			break;
	}
	
	var menuAreas = $('categorySelection' + itemNum, 'branchSelection' + itemNum, 'entityTypeSelection' + itemNum, 'agencySelection' + itemNum, 'bureauSelection' + itemNum);
	updateTimeSeries(itemNum,menuLevel,newValue,newText);
	clearTimeSeriesData(itemNum,menuLevel);
	changeMenuSelection(myMenu,newValue);
	
	deleteSubMenus (menuAreas, menuLevel);
	if (menuLevel < 4) {
		newMenuData = getMenuData(itemNum,menuLevel);
		if (newMenuData.childNodes.length > 0) {
			buildSubMenus (newMenuData, menuLevel, menuAreas, itemNum);
		}
	}
	
	new Ajax.Request ("./phpscripts/getTSdata.php", {
					  parameters: {sessionID: sessionID, seriesID: dbase, startYear: 1962, endYear: 2015, category: dbase, drillDown: drillDown, branchCode: branchCode, entityCode: entityCode, bureauCode: bureauCode, agencyCode: agencyCode, subfunctionCode: subfunctionCode, functionCode: functionCode, sourceSubCategoryCode: sourceSubCategoryCode, sourceCategoryCode: sourceCategoryCode},
					  onSuccess: function(transport) {
					  updateTSChart(transport.responseXML,itemNum);
					  refreshTSChart(false);
					  },
					  onFailure: function(){ alert('Something went wrong...getTSdata') }
					  });
}	

function changeItemCategory(myMenu) {
	var i;
	var newMenuData;
	var categoryLabel;
	var drillDown;
	var branchCode = '';
	var entityCode = '';
	var agencyCode = '';
	var bureauCode = '';
	var functionCode = '';
	var subfunctionCode = '';
	var sourceCategoryCode = '';
	var sourceSubCategoryCode = '';
	var adjustedValue = 1.0*myMenu.options[myMenu.selectedIndex].value;
	var newText = myMenu.options[myMenu.selectedIndex].text;
	var itemNum = myMenu.getAttribute('itemNum');
	
	var priorDbase = getTimeSeriesDbase(itemNum);
	var priorCategorySelection = getSeriesValue(itemNum,0,'value');
	var priorLevel = getSeriesLevel(itemNum);
	var priorValue = getSeriesValue(itemNum,priorLevel,'value');
	var changeSubMenus = false;
	
	switch (adjustedValue) {
		case 11:
		case 12:
		case 13:
			var dbase = 'outlays';
			var menuText = 'outlays';
			break;
		case 21:
		case 22:
		case 23:
			var dbase = 'budauth';
			var menuText = 'budget authority';
			break;
		case 31:
		case 32:
		case 33:
			var dbase = 'receipts';
			var menuText = 'receipts';
			break;
	}
	
	var menuAreas = $('categorySelection' + itemNum, 'branchSelection' + itemNum, 'entityTypeSelection' + itemNum, 'agencySelection' + itemNum, 'bureauSelection' + itemNum);
	var branchMenuItems = menuTree.getElementsByTagName('branch');
	var functionMenuItems = menuTree.getElementsByTagName('function');
	var sourceCategoryMenuItems = menuTree.getElementsByTagName('sourceCategory');
	
	switch (adjustedValue) {
		case 11:
		case 21:
		case 31:
			drillDown = "all";
			changeSubMenus = true;
			clearTimeSeriesData(itemNum,0);
			break;
		case 12:
		case 22:
		case 33:
			if (priorCategorySelection == 12 || priorCategorySelection == 22 || priorCategorySelection == 33) {
				changeSubMenus = false;
			} else {
				changeSubMenus = true;
				drillDown = "branch";
				branchCode = branchMenuItems[0].getAttribute('value');
				updateTimeSeries(itemNum,1,branchCode,branchMenuItems[0].getAttribute('name'));
				updateTimeSeries(itemNum,2,'all',"Total " + branchMenuItems[0].getAttribute('name') + " " + menuText);
				clearTimeSeriesData(itemNum,2);
			}
			break;
		case 13:
		case 23:
			if (priorCategorySelection == 13 || priorCategorySelection == 23) {
				changeSubMenus = false;
			} else {
				changeSubMenus = true;
				drillDown = "function";
				functionCode = functionMenuItems[0].getAttribute('value');
				updateTimeSeries(itemNum,1,functionCode,functionMenuItems[0].getAttribute('name'));
				updateTimeSeries(itemNum,2,'all',"Total " + functionMenuItems[0].getAttribute('name') + " " + menuText);
				clearTimeSeriesData(itemNum,2);
			}
			break;
		case 32:
			changeSubMenus = true;
			drillDown = "source_category";
			sourceCategoryCode = sourceCategoryMenuItems[0].getAttribute('value');
			updateTimeSeries(itemNum,1,sourceCategoryCode,sourceCategoryMenuItems[0].getAttribute('name'));
			updateTimeSeries(itemNum,2,'all',"Total " + sourceCategoryMenuItems[0].getAttribute('name') + " " + menuText);
			clearTimeSeriesData(itemNum,2);
			break;
	}
	
	myMenu.setAttribute('dbase',dbase);
	changeMenuSelection(myMenu,adjustedValue);
	updateTimeSeries(itemNum,0,adjustedValue,newText);
	updateTimeSeriesDbase(itemNum,dbase);
	
	if (changeSubMenus == false) {
		for (i=1;i<=priorLevel;i++) {
			$('level' + i + 'Selector' + itemNum).firstChild.setAttribute('dbase',dbase);
		}
		var selectionMenu = $('level' + priorLevel + 'Selector' + itemNum).firstChild;
		var drillDown = selectionMenu.options[selectionMenu.selectedIndex].getAttribute('drillDown');
		switch (drillDown) {
			case "branch":
				var branchCode = selectionMenu.options[selectionMenu.selectedIndex].getAttribute('branchCode');
				break;
			case "entity_type":
				var entityCode = selectionMenu.options[selectionMenu.selectedIndex].getAttribute('entityCode');
				break;
			case "bureau":
				var bureauCode = selectionMenu.options[selectionMenu.selectedIndex].getAttribute('bureauCode');
			case "agency":
				var agencyCode = selectionMenu.options[selectionMenu.selectedIndex].getAttribute('agencyCode');
				break;
			case "subfunction":
				var subfunctionCode = selectionMenu.options[selectionMenu.selectedIndex].getAttribute('subfunctionCode');
			case "function":
				var functionCode = selectionMenu.options[selectionMenu.selectedIndex].getAttribute('functionCode');
				break;
			case "source_subcategory":
				var sourceSubCategoryCode = selectionMenu.options[selectionMenu.selectedIndex].getAttribute('sourceSubCategoryCode');
			case "source_category":
				var sourceCategoryCode = selectionMenu.options[selectionMenu.selectedIndex].getAttribute('sourceCategoryCode');
				break;
		}
		//		alert("not going to change the submenus: drilldown=" + drillDown + "\nbranchCode=" + branchCode + "\nentityCode=" + entityCode + "\nbureauCode=" + bureauCode + "\nagencyCode=" + agencyCode);
	} else {
		deleteSubMenus(menuAreas,0);
		
		newMenuData = getMenuData(itemNum,0);
		if (newMenuData != null && newMenuData.childNodes.length > 0) {
			buildSubMenus (newMenuData, 0, menuAreas, itemNum);
		}
	}
	
	new Ajax.Request ("./phpscripts/getTSdata.php", {
					  parameters: {sessionID: sessionID, seriesID: dbase, startYear: 1962, endYear: 2015, category: dbase, drillDown: drillDown, branchCode: branchCode, entityCode: entityCode, bureauCode: bureauCode, agencyCode: agencyCode, subfunctionCode: subfunctionCode, functionCode: functionCode, sourceSubCategoryCode: sourceSubCategoryCode, sourceCategoryCode: sourceCategoryCode},
					  onSuccess: function(transport) {
					  updateTSChart(transport.responseXML,itemNum);
					  refreshTSChart(false);
					  },
					  onFailure: function(){ alert('Something went wrong...') }
					  });
}

function changeAccounting(myMenu) {
	var i;
	var datasets = TSChartXMLObject.getElementsByTagName('dataset');
	var chartInfo = TSChartXMLObject.getElementsByTagName('TSChartInfo')[0];
	var chartObject = TSChartXMLObject.getElementsByTagName('chart')[0];
	
	seriesType = myMenu.options[myMenu.selectedIndex].value;
	
	series1Id = 'TSSeries1' + seriesType;
	series2Id = 'TSSeries2' + seriesType;
	
	for (i=0;i<6;i++) {
		if ((datasets[i].getAttribute('id') == series1Id) && (chartInfo.getAttribute('series1Visible') == 1)) {
			datasets[i].setAttribute('showInChart','1');
		} else if ((datasets[i].getAttribute('id') == series2Id) && (chartInfo.getAttribute('series2Visible') == 1)) {
			datasets[i].setAttribute('showInChart','1');
		} else {
			datasets[i].setAttribute('showInChart','0');
		}
	}
	
	setChartLimits();
	
	if (seriesType == 'Real' || seriesType == 'Nominal') {
		if(chartObject.getAttribute('numberSuffix')) {
			chartObject.removeAttribute('numberSuffix');
			chartObject.removeAttribute('sNumberSuffix');
		}
		chartObject.setAttribute('numberPrefix','$');
		chartObject.setAttribute('sNumberPrefix','$');
	} else {
		if(chartObject.getAttribute('numberPrefix')) {
			chartObject.removeAttribute('numberPrefix');
			chartObject.removeAttribute('sNumberPrefix');
		}
		chartObject.setAttribute('numberSuffix','%25');
		chartObject.setAttribute('sNumberSuffix','%25');
	}
	
	switch (seriesType) {
		case 'Real':
			chartObject.setAttribute('yAxisName','Real (' + baseYear + ') Dollars');
			chartObject.setAttribute('SYAxisName','Real (' + baseYear + ') Dollars');
			chartObject.setAttribute('PYAxisName','Real (' + baseYear + ') Dollars');
			break;
		case 'Nominal':
			chartObject.setAttribute('yAxisName','Dollars');
			chartObject.setAttribute('SYAxisName','Dollars');
			chartObject.setAttribute('PYAxisName','Dollars');
			break;
		case 'GDP':
			chartObject.setAttribute('yAxisName','Percent of GDP');
			chartObject.setAttribute('SYAxisName','Percent of GDP');
			chartObject.setAttribute('PYAxisName','Percent of GDP');
			break;
	}
	
	updatePartyControlData();
	
	refreshTSChart(false);
}

function changePartyControlOption(myMenu) {
	var i;
	var datasets = TSChartXMLObject.getElementsByTagName('dataset');
	var chartInfo = TSChartXMLObject.getElementsByTagName('TSChartInfo')[0];
	var chartObject = TSChartXMLObject.getElementsByTagName('chart')[0];
	var partyControlLines = TSChartXMLObject.getElementsByTagName('vLine');
	
	var politicalOption = myMenu.options[myMenu.selectedIndex].value;
	
	chartInfo.setAttribute('partyControl',politicalOption);
	
	for (i=0;i<partyControlLines.length;i++) {
		if (partyControlLines[i].getAttribute('partyControlLine') == '1') {
			partyControlLines[i].setAttribute('showInChart',(politicalOption == 'none' ? '0' : '1'));
		}
	}
	
	setChartLimits();
	
	updatePartyControlData();

	refreshTSChart(false);
}

function changeNumAxes(myChkBox) {
	var i;
	var chartInfo = TSChartXMLObject.getElementsByTagName('TSChartInfo')[0];
	var chartObject = TSChartXMLObject.getElementsByTagName('chart')[0];
	
	if (myChkBox.checked) {
		numAxes = '2';
	} else {
		numAxes = '1';
	}
	
	chartInfo.setAttribute('numAxes',numAxes);
	
	setChartLimits();
	
	updatePartyControlData();
	
	refreshTSChart(true);
}

function changeSeriesSelectorOption(myMenu) {
	var i;
	var chartInfo = TSChartXMLObject.getElementsByTagName('TSChartInfo')[0];
	var chartObject = TSChartXMLObject.getElementsByTagName('chart')[0];
	var datasets = TSChartXMLObject.getElementsByTagName('dataset');
	var changeNumAxes = false;
	var chartPath;
	
	chartInfo.setAttribute('series1Visible',0);
	chartInfo.setAttribute('series2Visible',0);
	
	var accountingMenu = $('accountingMenu');
	seriesType = accountingMenu.options[accountingMenu.selectedIndex].value;
	
	series1Id = 'TSSeries1' + seriesType;
	series2Id = 'TSSeries2' + seriesType;
	
	var seriesSelectorOption = myMenu.options[myMenu.selectedIndex].value;
	
	var twoAxesChkBox = $('2AxesChkBox');
	
	switch (seriesSelectorOption) {
		case 'both':
			if (twoAxesChkBox.checked) {
				changeNumAxes = true;
				chartInfo.setAttribute('numAxes',2);
			}
			twoAxesChkBox.enable();
			chartInfo.setAttribute('series1Visible',1);
			chartInfo.setAttribute('series2Visible',1);
			break;
		case 'series1':
		case 'series2':
			if (chartInfo.getAttribute('numAxes') == '2') {
				changeNumAxes == true;
				chartInfo.setAttribute('numAxes',1);
			}
			twoAxesChkBox.disable();
			chartInfo.setAttribute(seriesSelectorOption + 'Visible',1);
			break;
	}
	
	for (i=0;i<6;i++) {
		if (datasets[i].getAttribute('id') == series1Id && (seriesSelectorOption == 'series1' || seriesSelectorOption == 'both')) {
			datasets[i].setAttribute('showInChart','1');
		} else if (datasets[i].getAttribute('id') == series2Id && (seriesSelectorOption == 'series2' || seriesSelectorOption == 'both')) {
			datasets[i].setAttribute('showInChart','1');
		} else {
			datasets[i].setAttribute('showInChart','0');
		}
	}
	
	setChartLimits();
	
	updatePartyControlData();
	
	var TSXMLString = convertXMLObjectToChartString(chartObject);

	refreshTSChart(changeNumAxes);
}


//setChartLimits finds the appropriate limits for the chart based on the currently active series.
function setChartLimits () {
	var i;
	
	var chartInfo = TSChartXMLObject.getElementsByTagName('TSChartInfo')[0];
	var chartXMLObject = TSChartXMLObject.getElementsByTagName('chart')[0];
	var dataSets = TSChartXMLObject.getElementsByTagName('dataset');
	
	var seriesMax = Array(0,0,0);
	var seriesMin = Array(0,0,0);
	var range = Array(3);
	var numDigits = Array(3);
	var division = Array(3);
	
	for (i=0;i<3;i++) {
		if (dataSets[i].getAttribute('showInChart') == 1) {
			seriesMax[1] = dataSets[i].getAttribute('seriesMax');
			seriesMin[1] = dataSets[i].getAttribute('seriesMin');
		}
		if (dataSets[i+3].getAttribute('showInChart') == 1) {
			seriesMax[2] = dataSets[i+3].getAttribute('seriesMax');
			seriesMin[2] = dataSets[i+3].getAttribute('seriesMin');
		}
	}
	seriesMax[0] = Math.max(seriesMax[1],seriesMax[2]);
	seriesMin[0] = Math.min(seriesMin[1],seriesMin[2]);
	
	range[0] = seriesMax[0]-seriesMin[0];
	range[1] = seriesMax[1]-seriesMin[1];
	range[2] = seriesMax[2]-seriesMin[2];
	
	for (i=0;i<3;i++) {
		division[i] = range[i]/5;
		numDigits[i] = Math.floor(Math.log(division[i])/Math.log(10));
		division[i] = division[i]/Math.pow(10,numDigits[i]);
		if (division[i] < 2) {
			division[i] = 2*Math.pow(10,numDigits[i]);
		} else if (division[i] < 5) {
			division[i] = 5*Math.pow(10,numDigits[i]);
		} else {
			division[i] = Math.pow(10,numDigits[i]+1);
		}
	}
	
	chartInfo.setAttribute('seriesMaxTotal',division[0]*Math.ceil(seriesMax[0]/division[0]));
	chartInfo.setAttribute('seriesMinTotal',(-1.0)*division[0]*Math.ceil(Math.abs(seriesMin[0])/division[0]));
	chartInfo.setAttribute('seriesDigitsTotal',(numDigits[0] < 0 ? numDigits[0]-1 : 0));
	chartInfo.setAttribute('seriesMax1',division[1]*Math.ceil(seriesMax[1]/division[1]));
	chartInfo.setAttribute('seriesMin1',(-1.0)*division[1]*Math.ceil(Math.abs(seriesMin[1])/division[1]));
	chartInfo.setAttribute('seriesDigits1',(numDigits[1] < 0 ? numDigits[1]-1 : 0));
	chartInfo.setAttribute('seriesMax2',division[2]*Math.ceil(seriesMax[2]/division[2]));
	chartInfo.setAttribute('seriesMin2',(-1.0)*division[2]*Math.ceil(Math.abs(seriesMin[2])/division[2]));
	chartInfo.setAttribute('seriesDigits2',(numDigits[2] < 0 ? numDigits[2]-1 : 0));
	
	chartXMLObject.setAttribute('yAxisMinValue',chartInfo.getAttribute('seriesMinTotal'));
	chartXMLObject.setAttribute('yAxisMaxValue',chartInfo.getAttribute('seriesMaxTotal'));
	chartXMLObject.setAttribute('PYAxisMinValue',chartInfo.getAttribute('seriesMin1'));
	chartXMLObject.setAttribute('PYAxisMaxValue',chartInfo.getAttribute('seriesMax1'));
	chartXMLObject.setAttribute('SYAxisMinValue',chartInfo.getAttribute('seriesMin2'));
	chartXMLObject.setAttribute('SYAxisMaxValue',chartInfo.getAttribute('seriesMax2'));
	
	//	alert (chartXMLObject.getAttribute('yAxisMinValue') + "\n" + chartXMLObject.getAttribute('yAxisMaxValue') + "\n" + chartXMLObject.getAttribute('PYAxisMinValue') + "\n" + seriesMin[1] + "\n" + chartXMLObject.getAttribute('PYAxisMaxValue') + "\n" + chartXMLObject.getAttribute('SYAxisMinValue') + "\n" + chartXMLObject.getAttribute('SYAxisMaxValue')); 
	if(chartInfo.getAttribute('numAxes') == '2') {
		chartXMLObject.setAttribute('decimals',Math.abs((numDigits[1] < 0 ? numDigits[1]-1 : 1)));
		chartXMLObject.setAttribute('sDecimals',Math.abs((numDigits[2] < 0 ? numDigits[2]-1 : 1)));
	} else {
		chartXMLObject.setAttribute('decimals',Math.abs((numDigits[0] < 0 ? numDigits[0]-1 : 1)));
	}
}