var series={};
var editing=-1;
var series_criteria=[];
var svg;
var series_num=0;

function toggleDataSets(s){
	var table=s.value;
	var fm=s.form;
	var fields=document.getElementById('fields');
	var data_criteria=document.getElementById('data_criteria');
	var axis_which=document.getElementById('plot_axis');
	var selects=fields.getElementsByTagName('SELECT');
	for(var i=0;i<selects.length;i++){
		if(selects[i].id.indexOf(table)==0){
			selects[i].style.display='block';
		}
		else{
			selects[i].style.display='none';
		}

	}
	selects=data_criteria.getElementsByTagName('TBODY');
	for(var i=0;i<selects.length;i++){
		if(selects[i].id.indexOf(table)==0){
			series_criteria=selects[i].getElementsByTagName('SELECT');
			try{
				selects[i].style.display='table-row-group';
			}
			catch(x){
				selects[i].style.display='block';
			}
		}
		else{
			selects[i].style.display='none';
		}

	}
	var hidefields=(table == '-1');
	fields.style.visibility=(hidefields ? 'hidden' : 'visible');
	var hidecrit=hidefields;
	if(!hidecrit){
		hidecrit=(fm.elements[table + '.fields'].value=='-1');
	}
	data_criteria.style.visibility=(hidecrit ? 'hidden' : 'visible');
	var hideaxis=hidecrit;
	if(!hidecrit){
		for(var i=0;i<series_criteria.length;i++){
			if(series_criteria[i].value == '-1'){
				hideaxis=true;
				break;
			}
		}

	}
	axis_which.style.visibility=(hideaxis ? 'hidden' : 'visible');
}
function checkFieldChange(p){
	var data_criteria=document.getElementById('data_criteria');
	var axis_which=document.getElementById('plot_axis');
	data_criteria.style.visibility=(p.value == '-1' ? 'hidden' : 'visible');
	checkCriteriaChange(p);
}
function checkCriteriaChange(p){
	var numc_set=0;
	for(var i=0;i<series_criteria.length;i++){
		if(series_criteria[i].value!='-1'){
			numc_set++;
		}
	}
	var axis_which=document.getElementById('plot_axis');
	axis_which.style.visibility=(numc_set==series_criteria.length ? 'visible' : 'hidden');

}
function init(){
	var sels=document.getElementsByTagName('SELECT');
	for(var i=0;i<sels.length;i++){
		if(/(mm|yy)$/.test(sels[i].name)){
			if(sels[i].name=='start_yy'){
				sels[i].getElementsByTagName('OPTION')[1].selected=true;
			}
		}
		else{
			var opt=sels[i].getElementsByTagName('OPTION')[0];
			if(opt){
				opt.selected=true;
			}
		}
	}
	try{
		self.height='1000px';
	}
	catch(x){alert(x)}
}
function textOfPopup(p){
	var sels=p.getElementsByTagName('OPTION');
	for(var i=0;i<sels.length;i++){
		if(sels[i].selected){
			return sels[i].firstChild.nodeValue;
		}
	}
	return '';
}
function addTableCell(r,t){
	var c=document.createElement('TD');
	r.appendChild(c);
	c.appendChild(document.createTextNode(t));

}
function addPlot(b,fm){
	var start_mm=fm.start_mm.value;
	var end_mm=fm.end_mm.value;
	var start_yy=fm.start_yy.value;
	var end_yy=fm.end_yy.value;
	var table=fm.table.value;
	var data={  'table' : table, 'axis' : fm.axis.value};
	var fieldpopup;
	var criteria=[];

	for(var i=0;i<fm.elements.length;i++){
		if(fm.elements[i].name.indexOf(table)==0){
			data[fm.elements[i].name] = fm.elements[i].value;
			if(/fields/.test(fm.elements[i].name)){
				fieldpopup=fm.elements[i];
			}
			else {
				criteria.push(fm.elements[i]);
			}

		}
	}
	var ps=document.getElementById('plot_series');
	var r;
	var ctxt='';
	if(criteria.length){
		var crit=[];
		var tb=document.getElementById(table + '.criteria');
		var th=tb.getElementsByTagName('TH');
		for(var i=0;i<criteria.length;i++){
			crit.push(th[i].firstChild.nodeValue + '=' + textOfPopup(criteria[i]));
		}
		ctxt=crit.join(' and ');
	}
	var f='';
	if(fieldpopup){
		f=textOfPopup(fieldpopup);
	}

	if(editing>=0){
		series[editing]=data;
		r=ps.rows[editing];
		r.cells[1].innerHTML=textOfPopup(fm.table);
		r.cells[2].innerHTML=f;
		r.cells[3].innerHTML=ctxt;
	}
	else {
		series[series_num]=data;
		r=document.createElement('TR');
		r.id="series_" + series_num;
		var numrows=ps.rows.length;
		editing=numrows;
		addTableCell(r,'#' + (numrows + 1));
		addTableCell(r,textOfPopup(fm.table));
		addTableCell(r,f);
		addTableCell(r,ctxt);
		c=document.createElement('TD');
		r.appendChild(c);
		var edit=new Image();
		edit.src='/images/edit.gif';
		edit.style.width='20px';
		edit.style.height='20px';
		edit.alt='edit';
		edit.style.cursor='pointer';
		var editclick=function(row){
			return function(){
				editRow(row);
			};
		};
		edit.onclick=editclick(r);
		edit.title='Edit';
		c.appendChild(edit);
		c=document.createElement('TD');
		r.appendChild(c);
		var del=new Image();
		del.src='/images/delete.gif';
		del.style.width='20px';
		del.style.height='20px';
		del.alt='Delete';
		del.style.cursor='pointer';
		var delclick=function(row){
			return function(){
				delRow(row);
			};
		};
		del.onclick=delclick(r);
		del.title='Delete';
		c.appendChild(del);
		if(numrows==0){
			var pt=document.getElementById('plot_table');
			pt.style.visibility='visible';
		}
		ps.appendChild(r);
		series_num++;
	}
	redraw(editing,false);
	editing=-1;
	setLineNum();
}

function plotSeriesIndex(row){
	
	return i;
}



function editRow(row){
	var i= row.id.match(/\d+/);
	var fm=document.forms.chartdrawer;
	var data=series[i];
	for(var k in data){
		fm.elements[k].value=data[k];
	}
	editing=i;
	setLineNum();

}
function delRow(row){
	var i= row.id.match(/\d+/);
	delete series[i];
	var ps=document.getElementById('plot_series');
	var r=row;
	while(r=r.nextSibling){
		r.cells[0].innerHTML='#' + (++i);
	}
	ps.removeChild(row);
	editing=-1;
	setLineNum();
	redraw(i,true);
}
function setLineNum(){
	var ln=document.getElementById('line_number');
	var i;
	if(editing>=0){
		var ds=document.getElementById('series_' + editing);
		i=1;
		while(ds=ds.previousSibling){
			i++;
		}

	}
	else {
		var ps=document.getElementById('plot_series');
		i=ps.rows.length;
	}
	ln.innerHTML=i;
}
function showGraph(xml){
	try{
		var gh=document.getElementById('graph_holder');
		var data=xml.getElementsByTagNameNS(svgns,'svg')[0];
		if(typeof(svg)!='undefined'){
			var doc=svg.contentDocument;
			var docs=doc.getElementsByTagNameNS(svgns,'svg')[0];
			var suspid=docs.suspendRedraw(5000);
			for(var i=docs.childNodes.length;i>0;i--){
				if(docs.childNodes[i-1].tagName=='g'){
					docs.removeChild(docs.childNodes[i-1]);
				}
			}
			for(var i=0;i<data.childNodes.length;i++){
				if(data.childNodes[i].tagName=='g'){
					try{
					docs.appendChild(data.childNodes[i].cloneNode(true));
					}catch(x){alert(x);}
				}
			}
			docs.unsuspendRedraw(suspid);
		}
	}
	catch(x){alert(x);}
}
function redraw(i,del){
	var fm=document.forms.chartdrawer;
	var data;
	if(del){
		data=['sid=' + fm.sid.value,'_cmd=del','line=' + i];
	}
	else {
		var table=series[i].table;
		data=['sid=' + fm.sid.value,'_cmd=plot','line=' + i, 'start_mm='+fm.start_mm.value, 'start_yy='+fm.start_yy.value, 'end_mm='+fm.end_mm.value, 'end_yy='+fm.end_yy.value, 'table=' + table, 'field=' + series[i][table + '.fields'],'axis=' + fm.axis.value ];
		for(var k in series[i]){
			if(k.indexOf(table)==0 && !/fields/.test(k)){
				var kb=k.split('.');
				data.push('criteria=' + [kb[1],series[i][k]].join('~'));
			}
		}
	}
	for(var k in series){
		data.push('s=' + k);
	}
	/*
	if(typeof(svg)=='undefined'){
		var gh=document.getElementById('graph_holder');
		svg=new Image();
		svg.style.width='600px';
		svg.style.height='450px';
		svg.ale='[graph]';
		svg.src='/cgi-bin/graphs-jpg-1.pl?' + data.join('&');
		gh.appendChild(svg);
	}
	else {
		svg.src='/cgi-bin/graphs-jpg-1.pl?' + data.join('&');
	}
	*/








	if(typeof(svg)=='undefined'){
		try{
		var gh=document.getElementById('graph_holder');
		svg = document.createElement('object', true);
		svg.setAttribute('type', 'image/svg+xml');
		svg.setAttribute('data', '/cgi-bin/graphs-svg.pl?reset=1&' + data.join('&'));
		svg.setAttribute('width', '600');
		svg.setAttribute('height', '450');
		svg.addEventListener('load', function() {
		  
		}, false);
		svgweb.appendChild(svg,gh);
		svg.id='SVGGraph';
		}catch(x){alert(x)}
		return;
	}
	else {
	//	svg.setAttribute('data', '/cgi-bin/graphs-svg.pl?' + data.join('&'));
	//	return;
	}
	var req=XMLRequest();
	req.open('POST','/cgi-bin/graphs-svg.pl',true);
	req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
	req.onreadystatechange=function(){
		if(req.readyState==4){
			if(req.status==200){
				showGraph(req.responseXML);
			}
			else {
				alert(req.responseText);
			}
		}
	};
	req.send(data.join('&'));
}
function resetChart(fm){
	var serb=document.getElementById('plot_series');
	while(serb.firstChild){
		serb.removeChild(serb.firstChild);
	}
	series={};
	editing=-1;
	series_num=0;
	fm.table.value=-1;
	document.getElementById('plot_table').style.visibility='hidden';
	document.getElementById('fields').style.visibility='hidden';
	document.getElementById('data_criteria').style.visibility='hidden';
	setLineNum();

}

try{
	var chartsty=loadXMLDoc('/scripts/datacharts.xsl',false);
	var chartdata=loadXMLDoc('/cgi-bin/aedata.pl',false);
	var doc;
	var doit;
	var target=document.getElementById('chartdrawer_form');
	if(window.ActiveXObject){
		doc=chartdata.transformNode(chartsty);
		doc=doc.replace(/<\?.*?\?>/,'');
		doit=function(){
			var target=document.getElementById('chartdrawer_form');
			target.innerHTML=doc;
		}
	}
	else {
		var xsltProcessor=new XSLTProcessor(); 
		xsltProcessor.importStylesheet(chartsty); 
		doc = xsltProcessor.transformToFragment(chartdata,document); 
		doit=function(){
			try{
				var target=document.getElementById('chart_data_form');
				target.appendChild(doc);
			}
			catch(x){}
		}

	}
	window.eventListenerList.addEventListener(window,'load',doit,false);
}
catch(x){alert(x)}



