var currentSite = "http://www.platinum.matthey.com:80/cgi-bin/generate.pl?page_id=price_charts&save=screen";
currentSite = '';
var currentCGILocation = currentSite + "/cgi-bin/graphing/";

var currentGraphType = "preset";

function generateMetalOptions()
{
	for(i=0;i<metalList.length;i++)
	{
		colonPosition = metalList[i].indexOf(":");
		document.writeln('<option value="' + metalList[i].substring(colonPosition+1,metalList[i].length) + '">' + metalList[i].substring(0,colonPosition) + '</option>');
	}
}

function getKeyPairs(items,delimiter)
{
	params = new Array();
	for(i=0;i<items.length;i++)
	{
		itemParts = items[i].split(delimiter);
		params[itemParts[0]] = itemParts[1];
	}
	return params;
}

function setSelectedDropDown(formElement,currentValue,casetype)
{
	switch(casetype)
	{
		case "metal":
			comparisonValues = metalList;
		break;
		case "timeperiod":
			comparisonValues = timePeriod;
		break;
	}

	for(i=0;i<comparisonValues.length;i++)
	{
		if(comparisonValues[i].indexOf(":" + currentValue) > -1)
		{
			formElement.selectedIndex = i;
			break;
		}
	}
}

function buildCurrentView()
{
	documentLocation = document.location.toString();
	paramStart = documentLocation.indexOf("?");

	if(paramStart > -1)
	{
		paramStart++;
		qString = documentLocation.substring(paramStart,documentLocation.length);
		keyPairs = getKeyPairs(qString.split('&'),"=");

		if (keyPairs["timeperiod"])
		{
			document.getElementById("chartDisplay").src= currentCGILocation + "jmpreset.pl?&imagetype=raw&act=Graph+Display&metal="+keyPairs["metal"] + "&timeperiod=" + keyPairs["timeperiod"];
			setSelectedDropDown(document.getElementById("metal"),keyPairs["metal"],"metal");
			setSelectedDropDown(document.getElementById("timeperiod"),keyPairs["timeperiod"],"timeperiod");
			currentGraphType = keyPairs["graphtype"];
		}
	}
}

function loadPresetDataTable()
{

	frmElement = document.getElementById("metal");
	queryString = "jmpreset.pl?&act=Text+Display";
	queryString += "&metal=" + frmElement.options[frmElement.selectedIndex].value;
	frmElement = document.getElementById("timeperiod");
	queryString += "&timeperiod=" + frmElement.options[frmElement.selectedIndex].value;

	newWin = window.open(currentCGILocation + queryString,'win','width=700,height=450,scrollbars=1,status=1,menu=1');
	newWin.focus();

	return false;
}

function popupPrinterFriendlyVersion(type,version)
{

	windowParams = 'width=700,height=450,scrollbars=1,status=1,menu=1';

	scriptLocation    = currentCGILocation;

	switch(type)
	{
		case "graph":
			imgLocation     = document.getElementById("chartDisplay").src.toString();
			scriptLocation   += (version == 'bespoke')?'jmbespoke.pl':'jmpreset.pl';
			scriptLocation += imgLocation.substring(imgLocation.indexOf('?')+1,imgLocation.length)
		break;
		case "table":
			tableQueryString += getDynamicQueryString(type,'text')
		break;
	}

	printerWin = window.open(scriptLocation,'PrinterFriendly',windowParams);
	printerWin.focus();
}

function displayGraph()
{
	document.getElementById("chartDisplay").src=graphImages[1].src;
	frmElement = document.getElementById("metal");
	queryString = currentCGILocation + "jmpreset.pl?imagetype=raw&act=Graph+Display";
	queryString += "&metal=" + frmElement.options[frmElement.selectedIndex].value;
	buttonString = "&metal=" + frmElement.options[frmElement.selectedIndex].value;
	frmElement = document.getElementById("timeperiod");
	queryString += "&timeperiod=" + frmElement.options[frmElement.selectedIndex].value;
	buttonString += "&timeperiod=" + frmElement.options[frmElement.selectedIndex].value;
	document.getElementById("chartDisplay").src=queryString;

	document.getElementById("printButton").innerHTML="<a href='/cgi-bin/dynamic.pl?template=graph_print&pre=Y"+buttonString+"' target='_new'>Printer friendly version of this page</a>";

	return false;
}

var metalList    = new Array();
	metalList[0] = "Platinum:Pl";
	metalList[1] = "Palladium:Pd";
	metalList[2] = "Platinum &amp; Palladium:PlPd";
	metalList[3] = "Rhodium:Rh";
	metalList[4] = "Iridium:Ir";
	metalList[5] = "Ruthenium:Ru";


var timePeriod    = new Array();
	timePeriod[0] = "Last 30 Days (daily):L30D";
	timePeriod[1] = "Last 3 Months (daily):L3MD";
	timePeriod[2] = "Last 6 Months (daily):L6MD";
	timePeriod[3] = "Last 12 Months (daily):LYD";
	timePeriod[4] = "Last 5 Years (monthly):L5Y";
	timePeriod[5] = "Since 1st July 1992 (monthly):ELM";

var graphImages        = new Array();
	graphImages[0]     = new Image(25,25);
	graphImages[0].src = currentSite + '/images/spacer.gif';

	graphImages[1]     = new Image(620,440);
	graphImages[1].src = currentSite + '/images/graph_loading_large.gif';

	graphImages[2]     = new Image(112,19)
	graphImages[2].src = currentSite + "/images/button_data.gif"

	graphImages[3]     = new Image(112,19)
	graphImages[3].src = currentSite + "/images/button_data_disabled.gif"



var monthList = new Array();
	monthList[0]  = "January";
	monthList[1]  = "February";
	monthList[2]  = "March";
	monthList[3]  = "April";
	monthList[4]  = "May";
	monthList[5]  = "June";
	monthList[6]  = "July";
	monthList[7]  = "August";
	monthList[8]  = "September";
	monthList[9]  = "October";
	monthList[10] = "November";
	monthList[11] = "December";

var currentDate  = new Date();
var currentYear  = currentDate.getFullYear();
var currentMonth = currentDate.getMonth();
var currentDay   = currentDate.getDate();

var dataStartDay   = "01";
var dataStartMonth = 6;
var dataStartYear  = "1992";

function howManyDaysInMonth(monthNumber,year)
{
	numDaysInMonth = -1;

	if(monthNumber == 9 || monthNumber == 4 || monthNumber == 6 || monthNumber == 11)
	{
		numDaysInMonth = 30;
	}
	else if(monthNumber == 1 || monthNumber == 3 || monthNumber == 5 || monthNumber==7 || monthNumber == 8 || monthNumber == 10 || monthNumber == 12)
	{
		numDaysInMonth = 31;
	}
	else if(monthNumber == 2) //the dreaded february.
	{
		numDaysInMonth = ((year % 4) == 0)?29:28;
	}

	return numDaysInMonth;

}

function resetDropDown(formElement)
{
	for (i = formElement.length; i >= 0; i--)
	{
		formElement.options[i] = null;
	}
}


function generateDayOptions(formElement,monthIndex,year)
{
	resetDropDown(formElement)

	numDays = howManyDaysInMonth(monthIndex + 1,year);

	for(i=1;i<=numDays;i++)
	{
		formElement.options[formElement.length] = new Option(i,i);
	}

}

function generateMonthOptions(monthFormElement)
{
	for(i=0;i<monthList.length;i++)
	{
		monthFormElement.options[monthFormElement.length] = new Option(monthList[i],i);
	}
}

function changeDay(dayFormElement, monthIndex, yearFormElement)
{
	selectedDay  = dayFormElement.selectedIndex;
	selectedYear = yearFormElement.options[yearFormElement.selectedIndex].value
	generateDayOptions(dayFormElement,monthIndex,selectedYear);
	numDays = howManyDaysInMonth(monthIndex+1,selectedYear);

	if(selectedDay >= numDays)
	{
		dayFormElement.selectedIndex = (numDays-1);
	}
	else if(selectedDay < 1)
	{
		dayFormElement.selectedIndex = 0;
	}
	else
	{
		dayFormElement.selectedIndex = selectedDay;
	}
}

function changeYear(yearFormElement,monthFormElement,dayFormElement)
{
	selectedYear  = yearFormElement.options[yearFormElement.selectedIndex].value
	selectedMonth = monthFormElement.selectedIndex;
	selectedDay   = dayFormElement.selectedIndex

	generateDayOptions(dayFormElement,selectedMonth,selectedYear)

	numDays = howManyDaysInMonth(selectedMonth+1,selectedYear);

	if(selectedDay >= numDays)
	{
		dayFormElement.selectedIndex = (numDays-1);
	}
	else if(selectedDay < 1)
	{
		dayFormElement.selectedIndex = 0;
	}
	else
	{
		dayFormElement.selectedIndex = selectedDay;
	}

}

function generateYearOptions(formElement)
{
	for(i=dataStartYear;i<currentYear+1;i++)
	{
		formElement.options[formElement.length] = new Option(i,i);
	}
}

function buildDynamicChartView()
{

	/* build the from elements */
	generateYearOptions(document.getElementById("year_from"));
	generateMonthOptions(document.getElementById("month_from"),document.getElementById("day_from"));
	generateDayOptions(document.getElementById("day_from"),0,dataStartYear);

	/* build the to elements */

	generateYearOptions(document.getElementById("year_to"));
	generateMonthOptions(document.getElementById("month_to"),document.getElementById("month_to"));
	generateDayOptions(document.getElementById("day_to"),currentMonth,currentYear);

	document.getElementById("month_from").selectedIndex = 6
	document.getElementById("year_from").selectedIndex = 0
	document.getElementById("day_from").selectedIndex = 0

	document.getElementById("month_to").selectedIndex = currentMonth
	document.getElementById("year_to").selectedIndex = (document.getElementById("year_to").length - 1)
	document.getElementById("day_to").selectedIndex = (currentDay-1);
}

function loadDynamicDataTable()
{
	qs = getDynamicQueryString("bespoke") + "&act=Text+Display";
	newWin = window.open(currentCGILocation + qs,'win','width=700,height=450,scrollbars=1,status=1,menu=1');
	newWin.focus();
}

function getDynamicQueryString(graphtype,viewtype)
{

	queryStr = (graphtype == "preset")?"jmpreset.pl?":"jmbespoke.pl?";
	queryStr += "graphtype=" + graphtype;
	queryStr += "&act=";
	queryStr += (viewtype == "graph")?"Graph+Display":"Text+Display";
	queryStr += "&metal=" + document.getElementById("dyn_metal").options[document.getElementById("dyn_metal").selectedIndex].value;
	queryStr += "&startDay=" + document.getElementById("day_from").value;
	queryStr += "&startMonth=" + (1 + parseInt(document.getElementById("month_from").value));
	queryStr += "&startYear=" + document.getElementById("year_from").value;
	queryStr += "&endDay=" + document.getElementById("day_to").value;
	queryStr += "&endMonth=" + (1 + parseInt(document.getElementById("month_to").value));
	queryStr += "&endYear=" + document.getElementById("year_to").value;

	periodTypeObject = document.forms["dynamicallyDefinedGraphForm"].ptype;

	for(i=0;i<periodTypeObject.length;i++)
	{
		if(periodTypeObject[i].checked == true)
		{
			queryStr += "&days=" + periodTypeObject[i].value;
		}
	}

	queryStr += "&imagetype=raw";

	return queryStr;
}

function validateDynamicInputs()
{
	/*
		Need to make sure that ..
		A) The selected date starts from atleast the 1st of June 1992.
		B) The selected dates do not see into the future
		C) That the dates are not inverse.
	*/

	dayFrom   = document.getElementById("day_from").options[document.getElementById("day_from").selectedIndex].value;
	monthFrom = document.getElementById("month_from").options[document.getElementById("month_from").selectedIndex].value;
	yearFrom  = document.getElementById("year_from").options[document.getElementById("year_from").selectedIndex].value;
	dayTo     = document.getElementById("day_to").options[document.getElementById("day_to").selectedIndex].value;
	monthTo   = document.getElementById("month_to").options[document.getElementById("month_to").selectedIndex].value;
	yearTo    = document.getElementById("year_to").options[document.getElementById("year_to").selectedIndex].value;

	if (dayFrom.length == 1) {
		dayFrom = "0" + dayFrom;
	}
	if (monthFrom.length == 1) {
		monthFrom = "0" + monthFrom;
	}
	if (dayTo.length == 1) {
		dayTo = "0" + dayTo;
	}
	if (monthTo.length == 1) {
		monthTo = "0" + monthTo;
	}

	//check to see if the from date is > 1 July 1992
	if((yearFrom == 1992) && (monthFrom < 6))
	{
		errStr = getErrorHeader();
		errStr += "1.) Please ensure that the start date is on or past 1st July 1992";

		alert(errStr);
		return false;
	}



	if ((yearTo > currentYear)||(((monthTo > currentMonth) || ((monthTo == currentMonth) && dayTo > currentDay )) && (yearTo == currentYear)))
	{
		alert(getErrorHeader() + "1.) Please ensure that the `To` date is not in the future.");
		return false;
	}

	endDateErrorMsg = getErrorHeader() + "1.) Please ensure that the `From` date is not in the future.";

	if(yearFrom > yearTo)
	{
		alert(endDateErrorMsg);
		return false;
	}
	else if((yearFrom == yearTo) && (monthFrom > monthTo))
	{
		alert(endDateErrorMsg);
		return false;
	}
	else if((yearFrom == yearTo) && (monthFrom == monthTo) && (dayFrom > dayTo))
	{
		alert(endDateErrorMsg);
		return false;
	}
	else if((yearFrom == yearTo) && (monthFrom == monthTo) && (dayFrom == dayTo))
	{
		alert(getErrorHeader() + "1.) Please ensure that the `From` and `To` dates do not match.");
		return false;
	}



	return true;
}

function getErrorHeader()
{
		var header = "Date Error:\n--------------------------------------------------------------------------------\n";
		header += "You have made an error whilst building your own chart or data table.\n\n";
		return header;
}


function loadDynamicGraph()
{
	if(validateDynamicInputs())
	{
		document.getElementById("chartDisplay").src=graphImages[1].src;
		qs = getDynamicQueryString("bespoke","graph");
		document.getElementById("chartDisplay").src = currentCGILocation + qs;

		buttonStr = "/cgi-bin/dynamic.pl?template=print_graph&";

		buttonStr += "graphtype=bespoke";
		buttonStr += "&metal=" + document.getElementById("dyn_metal").options[document.getElementById("dyn_metal").selectedIndex].value;
		buttonStr += "&startDay=" + document.getElementById("day_from").value;
		buttonStr += "&startMonth=" + (1 + parseInt(document.getElementById("month_from").value));
		buttonStr += "&startYear=" + document.getElementById("year_from").value;
		buttonStr += "&endDay=" + document.getElementById("day_to").value;
		buttonStr += "&endMonth=" + (1 + parseInt(document.getElementById("month_to").value));
		buttonStr += "&endYear=" + document.getElementById("year_to").value;

		periodTypeObject = document.forms["dynamicallyDefinedGraphForm"].ptype;

		for(i=0;i<periodTypeObject.length;i++)
		{
			if(periodTypeObject[i].checked == true)
			{
				buttonStr += "&days=" + periodTypeObject[i].value;
			}
		}

		document.getElementById("printButton").innerHTML="<a href='/cgi-bin/dynamic.pl?template=graph_print&pre=N"+buttonStr+"' target='_new' >Printer friendly version of this page</a>";

	}

	return false;
}


function checkMetalType(formElement,formDisableItem)
{
	if(formElement.options[formElement.selectedIndex].value == 'PlPd')
	{
		document.getElementById(formDisableItem).disabled = true;
		document.getElementById(formDisableItem).src      = graphImages[3].src;
		document.getElementById(formDisableItem).style.cursor = "none";

	}
	else
	{
		document.getElementById(formDisableItem).disabled = false;
		document.getElementById(formDisableItem).src      = graphImages[2].src;
		document.getElementById(formDisableItem).style.cursor = "auto";
	}
}
