
// initilialise all
function init_graphics() {

	update_upImage = new Image();
	update_upImage.src = "./graphics/update_u.gif";
	update_downImage = new Image();
	update_downImage.src = "./graphics/update_d.gif";
	update_normalImage = new Image();
	update_normalImage.src = "./graphics/update_n.gif";

	blue_upImage = new Image();
	blue_upImage.src = "./graphics/blue_u.gif";
	blue_downImage = new Image();
	blue_downImage.src = "./graphics/blue_d.gif";
	blue_normalImage = new Image();
	blue_normalImage.src = "./graphics/blue_n.gif";
	beige_upImage = new Image();
	beige_upImage.src = "./graphics/beige_u.gif";
	beige_downImage = new Image();
	beige_downImage.src = "./graphics/beige_d.gif";
	beige_normalImage = new Image();
	beige_normalImage.src = "./graphics/beige_n.gif";
	dblue_upImage = new Image();
	dblue_upImage.src = "./graphics/dblue_u.gif";
	dblue_downImage = new Image();
	dblue_downImage.src = "./graphics/dblue_d.gif";
	dblue_normalImage = new Image();
	dblue_normalImage.src = "./graphics/dblue_n.gif";
	black_upImage = new Image();
	black_upImage.src = "./graphics/black_u.gif";
	black_downImage = new Image();
	black_downImage.src = "./graphics/black_d.gif";
	black_normalImage = new Image();
	black_normalImage.src = "./graphics/black_n.gif";

	bar_upImage = new Image();
	bar_upImage.src = "./graphics/bar_u.gif";
	bar_downImage = new Image();
	bar_downImage.src = "./graphics/bar_d.gif";
	bar_normalImage = new Image();
	bar_normalImage.src = "./graphics/bar_n.gif";
	candle_upImage = new Image();			
	candle_upImage.src = "./graphics/candle_u.gif";
	candle_downImage = new Image();
	candle_downImage.src = "./graphics/candle_d.gif";
	candle_normalImage = new Image();
	candle_normalImage.src = "./graphics/candle_n.gif";	
	line_upImage = new Image();
	line_upImage.src = "./graphics/line_u.gif";
	line_downImage = new Image();
	line_downImage.src = "./graphics/line_d.gif";
	line_normalImage = new Image();
	line_normalImage.src = "./graphics/line_n.gif";

	zoomout_upImage = new Image();
	zoomout_upImage.src = "./graphics/zoomout_u.gif";
	zoomout_downImage = new Image();
	zoomout_downImage.src = "./graphics/zoomout_d.gif";
	zoomout_normalImage = new Image();
	zoomout_normalImage.src = "./graphics/zoomout_n.gif";
	zoomin_upImage = new Image();			
	zoomin_upImage.src = "./graphics/zoomin_u.gif";
	zoomin_downImage = new Image();
	zoomin_downImage.src = "./graphics/zoomin_d.gif";
	zoomin_normalImage = new Image();
	zoomin_normalImage.src = "./graphics/zoomin_n.gif";

	size_upImage = new Image();			
	size_upImage.src = "./graphics/size_u.gif";
	size_downImage = new Image();
	size_downImage.src = "./graphics/size_d.gif";
	size_normalImage = new Image();
	size_normalImage.src = "./graphics/size_n.gif";
	}
	
function init() {
	// introduce a small delay - IE6 on slow PC tries to initialise dropdowns before they are ready
	setTimeout( "init_dropdowns();", 100);
	}
function init_dropdowns() {

	document.forms.selector.type.selectedIndex = 3;		
	dynamicSelect("type", "symb");
	document.forms.selector.symb.selectedIndex = 6;
	dynamicSelect("symb", "contract");

	dynamicSelect("type2", "symb2");
	dynamicSelect("symb2", "contract2");
	dynamicSelect("type3", "symb3");
	dynamicSelect("symb3", "contract3");
	dynamicSelect("type4", "symb4");
	dynamicSelect("symb4", "contract4");
	
	build_url();
	}


// - - - - - - - - - - - - - - - - - - -  dynamic drop down boxes - - - - - - - - - - - - - - - - - - - - - - - 
function dynamicSelect(id1, id2) {
	// Browser and feature tests to see if there is enough W3C DOM support
	var agt = navigator.userAgent.toLowerCase();
	var is_ie = ((agt.indexOf("msie") != -1) && (agt.indexOf("opera") == -1));
	var is_mac = (agt.indexOf("mac") != -1);
	if (!(is_ie && is_mac) && document.getElementById && document.getElementsByTagName) {
		// Obtain references to both select boxes
		var sel1 = document.getElementById(id1);
		var sel2 = document.getElementById(id2);
		// Clone the dynamic select box
		var clone = sel2.cloneNode(true);
		// Obtain references to all cloned options 
		var clonedOptions = clone.getElementsByTagName("option");
		// Onload init: call a generic function to display the related options in the dynamic select box
		refreshDynamicSelectOptions(sel1, sel2, clonedOptions);
		// Onchange of the main select box: call a generic function to display the related options in the dynamic select box
		sel1.onchange = function() {
			refreshDynamicSelectOptions(sel1, sel2, clonedOptions);
		};
	}
}

function refreshDynamicSelectOptions(sel1, sel2, clonedOptions) {
	// Delete all options of the dynamic select box
	while (sel2.options.length) {
		sel2.remove(0);
	}
	// Create regular expression objects for "select" and the value of the selected option of the main select box as class names
	var pattern1 = /( |^)(select)( |$)/;
	var pattern2 = new RegExp("( |^)(" + sel1.options[sel1.selectedIndex].value + ")( |$)");
	// Iterate through all cloned options
	for (var i = 0; i < clonedOptions.length; i++) {
		// If the classname of a cloned option either equals "select" or equals the value of the selected option of the main select box
		if (clonedOptions[i].className.match(pattern1) || clonedOptions[i].className.match(pattern2)) {
			// Clone the option from the hidden option pool and append it to the dynamic select box
			sel2.appendChild(clonedOptions[i].cloneNode(true));
		}
	}
}

// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

// sets default values for selected indicators 
function set_indefault(ind, pram) {
	var deflt="";
	var y=document.getElementById(ind).value;
	switch (y) {
		case "boll":
			deflt="20,2";
			break;
		case "donc":
			deflt="20";
			break;
		case "env":
			deflt="20,10";
			break;
		case "macd":
			deflt="26,12,9";
			break;
		case "sstoc":
			deflt="14,3";
			break;
		case "rsi":
			deflt="14";
			break;
		case "mom":
			deflt="12";
			break;
		case "atr":
			deflt="14";
			break;
		case "cci":
			deflt="20";
			break;
		case "dpo":
			deflt="20";
			break;
		case "aroon":
			deflt="25";
			break;
		case "arosc":
			deflt="25";
			break;
		case "adx":
			deflt="14";
			break;
		case "chaimf":
			deflt="20";
			break;
		case "chaivo":
			deflt="10,10";
			break;
		case "emv":
			deflt="10";
			break;
		case "fstoc":
			deflt="14,3";
			break;
		case "mfi":
			deflt="14";
			break;
		case "nvi":
			deflt="255";
			break;
		case "ppo":
			deflt="26,12,9";
			break;
		case "pvi":
			deflt="255";
			break;
		case "pvo":
			deflt="26,12,9";
			break;
		case "roc":
			deflt="12";
			break;
		case "stddev":
			deflt="10";
			break;
		case "storsi":
			deflt="14";
			break;
		case "trix":
			deflt="12";
			break;
		case "ult":
			deflt="7,14,28";
			break;
		case "willr":
			deflt="14";
			break;
		}
	document.getElementById(pram).value = deflt;
	}
	
// manage the update button1
	function update1_changeImage()	{
		document.images["update_button1"].src= update_upImage.src;
		return true;
		}
	function update1_changeImageBack() {
		document.images["update_button1"].src = update_normalImage.src;
		return true;
		}
	function update1_handleMDown()	{
		document.images["update_button1"].src = update_downImage.src;
		build_url();
		return true;
		}
	function update1_handleMUp()  {
		update1_changeImage();
		return true;
		}
// manage the update button2
	function update2_changeImage()	{
		document.images["update_button2"].src= update_upImage.src;
		return true;
		}
	function update2_changeImageBack() {
		document.images["update_button2"].src = update_normalImage.src;
		return true;
		}
	function update2_handleMDown()	{
		document.images["update_button2"].src = update_downImage.src;
		build_url();
		return true;
		}
	function update2_handleMUp()  {
		update2_changeImage();
		return true;
		}
		
// set the style default
var style="&style=bar";
// manage the bar button
	function bar_changeImage()	{
		document.images["bar_button"].src= bar_upImage.src;
		return true;
		}
	function bar_changeImageBack() {
		document.images["bar_button"].src = bar_normalImage.src;
		return true;
		}
	function bar_handleMDown()	{
		document.images["bar_button"].src = bar_downImage.src;
		style="&style=bar";
		build_url();
		return true;
		}
	function bar_handleMUp()  {
		bar_changeImage();
		return true;
		}		
// manage the candle button
	function candle_changeImage()	{
		document.images["candle_button"].src= candle_upImage.src;
		return true;
		}
	function candle_changeImageBack() {
		document.images["candle_button"].src = candle_normalImage.src;
		return true;
		}
	function candle_handleMDown()	{
		document.images["candle_button"].src = candle_downImage.src;
		style="&style=candle";
		build_url();
		return true;
		}
	function candle_handleMUp()  {
		candle_changeImage();
		return true;
		}
// manage the line button
	function line_changeImage()	{
		document.images["line_button"].src= line_upImage.src;
		return true;
		}
	function line_changeImageBack() {
		document.images["line_button"].src = line_normalImage.src;
		return true;
		}
	function line_handleMDown()	{
		document.images["line_button"].src = line_downImage.src;
		style="&style=line";
		build_url();
		return true;
		}
	function line_handleMUp()  {
		line_changeImage();
		return true;
		}

	
// manage the zoom buttons
var dura_val=90;
var dura="&dura="+dura_val;
var zoom_multiplier=1.3;
// zoomin button
	function zoomin_changeImage()	{
		document.images["zoomin_button"].src= zoomin_upImage.src;
		return true;
		}
	function zoomin_changeImageBack() {
		document.images["zoomin_button"].src = zoomin_normalImage.src;
		return true;
		}
	function zoomin_handleMDown()	{
		document.images["zoomin_button"].src = zoomin_downImage.src;
		if(dura_val>5)dura_val=Math.round(dura_val/zoom_multiplier);
		dura="&dura="+dura_val;
		delay_build_url();
		return true;
		}
		function zoomin_handleMUp()  {
		zoomin_changeImage();
		return true;
		}
// zoomout button
	function zoomout_changeImage()	{
		document.images["zoomout_button"].src= zoomout_upImage.src;
		return true;
		}
	function zoomout_changeImageBack() {
		document.images["zoomout_button"].src = zoomout_normalImage.src;
		return true;
		}	
	function zoomout_handleMDown()	{
		document.images["zoomout_button"].src = zoomout_downImage.src;
		if(dura_val<3000) dura_val=Math.round(dura_val*zoom_multiplier);
		dura="&dura="+dura_val;
		delay_build_url();
		return true;
		}
	function zoomout_handleMUp()  {
		zoomout_changeImage();
		return true;
		}
		
// set the scheme default	
var scheme="&scheme=beige";	
// manage the blue button
	function blue_changeImage()	{
		document.images["blue_button"].src= blue_upImage.src;
		return true;
		}
	function blue_changeImageBack() {
		document.images["blue_button"].src = blue_normalImage.src;
		return true;
		}
	function blue_handleMDown()	{
		document.images["blue_button"].src = blue_downImage.src;
		scheme="&scheme=blue";
		build_url();
		return true;
		}
	function blue_handleMUp()  {
		blue_changeImage();
		return true;
		}
// manage the beige button
	function beige_changeImage()	{
		document.images["beige_button"].src= beige_upImage.src;
		return true;
		}
	function beige_changeImageBack() {
		document.images["beige_button"].src = beige_normalImage.src;
		return true;
		}
	function beige_handleMDown()	{
		document.images["beige_button"].src = beige_downImage.src;
		scheme="&scheme=beige";
		build_url();
		return true;
		}
	function beige_handleMUp()  {
		beige_changeImage();
		return true;
		}
// manage the dblue button
	function dblue_changeImage()	{
		document.images["dblue_button"].src= dblue_upImage.src;
		return true;
		}
	function dblue_changeImageBack() {
		document.images["dblue_button"].src = dblue_normalImage.src;
		return true;
		}
	function dblue_handleMDown()	{
		document.images["dblue_button"].src = dblue_downImage.src;
		scheme="&scheme=dblue";
		build_url();
		return true;
		}
	function dblue_handleMUp()  {
		dblue_changeImage();
		return true;
		}
// manage the black button
	function black_changeImage()	{
		document.images["black_button"].src= black_upImage.src;
		return true;
		}
	function black_changeImageBack() {
		document.images["black_button"].src = black_normalImage.src;
		return true;
		}
	function black_handleMDown()	{
		document.images["black_button"].src = black_downImage.src;
		scheme="&scheme=black";
		build_url();
		return true;
		}
	function black_handleMUp()  {
		black_changeImage();
		return true;
		}

var small="&width=400";
var medium="&width=500";
var large="&width=600";
var width=large;
// manage the size button
	function size_changeImage()	{
		document.images["size_button"].src= size_upImage.src;
		return true;
		}
	function size_changeImageBack() {
		document.images["size_button"].src = size_normalImage.src;
		return true;
		}
	function size_handleMDown()	{
		document.images["size_button"].src = size_downImage.src;
		if (width==small) width=medium;	
		else {
			if (width==medium) width=large;
			else width=small;
			}
		build_url();
		return true;
		}
	function size_handleMUp()  {
		size_changeImage();
		return true;
		}

// function to strip any non-numeric chars from MAs
function stripMA(inpString) { 
	var outString = new String(inpString); 
    outString = outString.replace(/[^0-9]/g, ''); 
    return outString; 
	}
	
// function to strip any non-numeric chars from indicator paramaters - allow commas
function stripParams(inpString) { 
	var outString = new String(inpString); 
    outString = outString.replace(/[^0-9,]/g, ''); 
    return outString; 
	}
	
	
// introduce delay between chart requests to avoid server overload - new request cancels any pending requests during delay period
var alertTimerId = 0;
function delay_build_url()	{
	clearTimeout ( alertTimerId );
	alertTimerId = setTimeout( "build_url();", 500);
	return true;
	}	
		
// set up array for contract month values - note: this is not a true associative array	- unsupported in js	
var cm= [];
cm["f"]="01"; cm["g"]="02"; cm["h"]="03"; cm["j"]="04"; cm["k"]="05"; cm["m"]="06";
cm["n"]="07"; cm["q"]="08"; cm["u"]="09"; cm["v"]="10"; cm["x"]="11"; cm["z"]="12"; 

function build_url() {
	
	var inp_ar=document.getElementById("selector");
	
	var type=inp_ar.elements[0].value;
	var contract=inp_ar.elements[1].value;
	var symb=inp_ar.elements[2].value;
	if(symb=="select") {return;}
	if(contract=="Rolling" || contract=="") {
		var type_symbol="type_symbol="+type+"_"+symb;
		}
	else {
		var type_symbol="type_symbol="+type+"_"+symb+"_"+contract;
		}
	
	var sma1=stripMA(inp_ar.elements[3].value);
	inp_ar.elements[3].value=sma1;
	if(!sma1) {sma1="";}
	else{sma1="&sma1="+sma1;}
	
	var sma2=stripMA(inp_ar.elements[4].value);
	inp_ar.elements[4].value=sma2;
	if(!sma2) {sma2="";}
	else{sma2="&sma2="+sma2;}
	
	var ema1=stripMA(inp_ar.elements[6].value);
	inp_ar.elements[6].value=ema1;
	if(!ema1) {ema1="";}
	else{ema1="&ema1="+ema1;}
	
	var ema2=stripMA(inp_ar.elements[7].value);
	inp_ar.elements[7].value=ema2;
	if(!ema2) {ema2="";}
	else{ema2="&ema2="+ema2;}
	
	var volbars=inp_ar.elements[5].checked;
	if(volbars) {volbars="&volbars=y";}
	else{volbars="&volbars=n";}
	
	
	var chan=inp_ar.elements[8].value;
	if(!chan) {chan="";}
	else {
		var chan_po=stripParams(inp_ar.elements[9].value);
		inp_ar.elements[9].value=chan_po;
		var chan_p=inp_ar.elements[9].value.split(',');
		if(!chan_p[0]) {chan_p[0]="0";}
		if(!chan_p[1]) {chan_p[1]="0";}
		chan="&chan="+chan+"&chanp1="+chan_p[0]+"&chanp2="+chan_p[1];
		}
	
	var ind1=inp_ar.elements[10].value;
	if(!ind1) {ind1="";}
	else {
		var ind1_po=stripParams(inp_ar.elements[11].value);
		inp_ar.elements[11].value=ind1_po;
		var ind1_p=inp_ar.elements[11].value.split(',');
		if(!ind1_p[0]) {ind1_p[0]="0";}
		if(!ind1_p[1]) {ind1_p[1]="0";}
		if(!ind1_p[2]) {ind1_p[2]="0";}
		ind1="&ind1="+ind1+"&ind1p1="+ind1_p[0]+"&ind1p2="+ind1_p[1]+"&ind1p3="+ind1_p[2];
		}
	
	var ind2=inp_ar.elements[12].value;
	if(!ind2) {ind2="";}
	else {
		var ind2_po=stripParams(inp_ar.elements[13].value);
		inp_ar.elements[13].value=ind2_po;
		var ind2_p=inp_ar.elements[13].value.split(',');
		if(!ind2_p[0]) {ind2_p[0]="0";}
		if(!ind2_p[1]) {ind2_p[1]="0";}
		if(!ind2_p[2]) {ind2_p[2]="0";}
		ind2="&ind2="+ind2+"&ind2p1="+ind2_p[0]+"&ind2p2="+ind2_p[1]+"&ind2p3="+ind2_p[2];
		}
	
	var ind3=inp_ar.elements[14].value;
	if(!ind3) {ind3="";}
	else {
		var ind3_po=stripParams(inp_ar.elements[15].value);
		inp_ar.elements[15].value=ind3_po;
		var ind3_p=inp_ar.elements[15].value.split(',');
		if(!ind3_p[0]) {ind3_p[0]="0";}
		if(!ind3_p[1]) {ind3_p[1]="0";}
		if(!ind3_p[2]) {ind3_p[2]="0";}
		ind3="&ind3="+ind3+"&ind3p1="+ind3_p[0]+"&ind3p2="+ind3_p[1]+"&ind3p3="+ind3_p[2];
		}

	var type2=inp_ar.elements[16].value;
	var contract2=inp_ar.elements[17].value;
	var symb2=inp_ar.elements[18].value;
	if(symb2!="select") {
		if(contract2=="Rolling" || contract2=="") {
			var type_symbol2="&type_symbol2="+type2+"_"+symb2;
			}
		else {
			var type_symbol2="&type_symbol2="+type2+"_"+symb2+"_"+contract2;
			}
		}
	else type_symbol2="";
	
	var type3=inp_ar.elements[19].value;
	var contract3=inp_ar.elements[20].value;
	var symb3=inp_ar.elements[21].value;
	if(symb3!="select") {
		if(contract3=="Rolling" || contract3=="") {
			var type_symbol3="&type_symbol3="+type3+"_"+symb3;
			}
		else {
			var type_symbol3="&type_symbol3="+type3+"_"+symb3+"_"+contract3;
			}
		}
	else type_symbol3="";
	
	var type4=inp_ar.elements[22].value;
	var contract4=inp_ar.elements[23].value;
	var symb4=inp_ar.elements[24].value;
	if(symb4!="select") {
		if(contract4=="Rolling" || contract4=="") {
			var type_symbol4="&type_symbol4="+type4+"_"+symb4;
			}
		else {
			var type_symbol4="&type_symbol4="+type4+"_"+symb4+"_"+contract4;
			}
		}
	else type_symbol4="";
	
	// test for futures contract dates - need to ensure startdate includes some valid time for at least one instrument
	var cy="0";
	if(type=="futures" && contract!="Rolling") cy=contract.substring(1)+cm[contract.substring(0,1)];
	var cy2="0";
	if(type2=="futures" && contract2!="Rolling") cy2=contract2.substring(1)+cm[contract2.substring(0,1)];
	var cy3="0";
	if(type3=="futures" && contract3!="Rolling") cy3=contract3.substring(1)+cm[contract3.substring(0,1)];
	var cy4="0";
	if(type4=="futures" && contract4!="Rolling") cy4=contract4.substring(1)+cm[contract4.substring(0,1)];
	var max_cy=Math.max(cy,Math.max(cy2,Math.max(cy3,cy4)));
	var end="";
	if (max_cy>0) {
		var d = new Date();
		var today = d.getFullYear()*10000+(d.getMonth()+1)*100+d.getDate();
		max_cy=max_cy*100+28;
		end="&end="+Math.min(max_cy,today);
		}
	
	var url_params="chart_producer.php?"+type_symbol+style+scheme+dura+end+width+sma1+sma2+ema1+ema2+volbars+chan+ind1+ind2+ind3+type_symbol2+type_symbol3+type_symbol4;
		
	// update the image
	img = document.getElementById('chart');
	img.src = url_params;
	
	//refresh the ads
	//window.frames['chartsupport1'].location.replace('chartsupport1.php');
	//window.frames['chartsupport2'].location.replace('chartsupport2.php');
	//window.frames['chartsupport3'].location.replace('chartsupport3.php');

	// output the chartlink
	var chartlink='<a href="http:/\/www.livecharts.co.uk/daily_charts/daily_charts.php"><img src="http:/\/www.livecharts.co.uk/daily_charts/'+url_params+'" alt="'+alttitle+'" title="'+alttitle+'" border="0"></a>';
	document.getElementById("linkbox").value= chartlink;
	

	}
	
	
	
	
	
	
	
	