function checkforzeros(column)
{
	zerofound = false;
	for (i=1;i<=25;i++) {
		name = column+i;
		z = eval(document.getElementById(name).value);
		if (z == 0) zerofound = true;
	}
	return zerofound;
}


function fix(fixNumber,decPlaces)
{
	decPlaces = eval(document.dataEntryTable.numPlaces.value);
	if (decPlaces != -1) {
		var div = Math.pow(10,decPlaces);
		fixNumber = Math.round(fixNumber * div)/div;
	} 
	return fixNumber;
}

function swapColumns()
{
	for (i=1;i<=25;i++) {
		xname = "x"+i;
		x = document.getElementById(xname).value;
		yname = "y"+i;
		y = document.getElementById(yname).value;
		document.getElementById(xname).value = y;
		document.getElementById(yname).value = x;
	}
	xlabel = document.dataEntryTable.xlabel.value;
	ylabel = document.dataEntryTable.ylabel.value;
	document.dataEntryTable.xlabel.value = ylabel;
	document.dataEntryTable.ylabel.value = xlabel;


}

function linearFit()
{

	document.datagraph.plotRegression(1,1,1);
	regID = document.datagraph.getRegressionID(1,1,1);

	slope = eval(document.datagraph.getSourceData(regID,"m"));
	slope = fix(slope);
	document.dataEntryTable.slopeField.value = slope;
	slopeUnc = eval(document.datagraph.getSourceData(regID,"dm"));
	slopeUnc = fix(slopeUnc);
	document.dataEntryTable.slopeUncField.value = slopeUnc;
	yint = eval(document.datagraph.getSourceData(regID,"b"));
	yint = fix(yint);
	document.dataEntryTable.yintField.value = yint;
	yintUnc = eval(document.datagraph.getSourceData(regID,"db"));
	yintUnc = fix(yintUnc);
	document.dataEntryTable.yintUncField.value = yintUnc;

	eqString = "y = "+slope+"x +"+yint;
	document.dataEntryTable.equationField.value = eqString;

	xTransformKey = document.dataEntryTable.xTransformChoice.value;
	yTransformKey = document.dataEntryTable.yTransformChoice.value;
	xlabel = transformLabel(document.dataEntryTable.xlabel.value,xTransformKey);
	ylabel = transformLabel(document.dataEntryTable.ylabel.value,yTransformKey);
	eqLabelled = ylabel + " = " + slope + "*" + xlabel + " + " + yint;
	document.dataEntryTable.equationFieldLabelled.value = eqLabelled;

}

function transformLabel(label,key)
{
	key = parseInt(key);
	switch (key) {
	
	case 2:
	// squared
		label += "^2";
		break;

	case 3:
	//cubed
		label += "^3";
		break;

	case 4:
	//inverse
		label = "1/"+label;
		break;

	case 5:
	//inverse square
		label = "1/"+label+"^2";
		break;
		
	case 6:
	//exponential
		label = "e^"+label;
		break;

	case 7:
	//ln()
		label = "ln("+label+")";
		break;
		
	case 8:
	//square root
		label = "sqrt("+label+")";
		break;
	
	default:
		break;
	}

	return label;
}



function transformData(i,key)
{
	i = eval(i);
	key = parseInt(key);
	switch (key) {
	
	case 2:
	// squared
		newi = i*i;
		break;

	case 3:
	//cubed
		newi = i*i*i;
		break;

	case 4:
	//inverse
		newi = 1/i;
		break;

	case 5:
	//inverse square
		newi = 1/(i*i);
		break;
		
	case 6:
	//exponential
		newi = Math.exp(i);
		break;

	case 7:
	//ln()
		newi = Math.log(i);
		break;
	
	case 8:
	//square root
		newi = Math.sqrt(i);
		break;
	
	default:
		newi = i;
		break;
	
	}
	
	return newi;

}



function dataToGraph()
{	

		xTransformKey = document.dataEntryTable.xTransformChoice.value;
		yTransformKey = document.dataEntryTable.yTransformChoice.value;
		
		document.datagraph.setAutoRefresh(false);
		document.datagraph.deleteAllFunctions();
		document.datagraph.clearSeries(1);
	
		xlabel = transformLabel(document.dataEntryTable.xlabel.value,xTransformKey);
		ylabel = transformLabel(document.dataEntryTable.ylabel.value,yTransformKey);
		document.datagraph.setLabelX(xlabel);
		document.datagraph.setLabelY(ylabel);

		for (i=1;i<=25;i++) {
			xname = "x"+i;
			x = eval(document.getElementById(xname).value);
			yname = "y"+i;
			y = eval(document.getElementById(yname).value);
			if (!isNaN(x) && !isNaN(y)) {
				x = transformData(x,xTransformKey);
				y = transformData(y,yTransformKey);
				document.datagraph.addDatum(1,x,y);
			}
		}
		
		document.datagraph.setSeriesStyle(1,false,2);
		document.datagraph.setAutoscaleX(true);
		document.datagraph.setAutoscaleY(true);
		document.datagraph.setAutoRefresh(true);
	
		document.dataEntryTable.slopeField.value = "";
		document.dataEntryTable.yintField.value = "";
		document.dataEntryTable.slopeUncField.value = "";
		document.dataEntryTable.yintUncField.value = "";
		document.dataEntryTable.equationField.value = "";
		document.dataEntryTable.equationFieldLabelled.value = "";
	
}

function checkTransform(column)
{
	if (column == 'x') {
		theTransformChoice = document.dataEntryTable.xTransformChoice;
		theTransformCurrent = document.dataEntryTable.xTransformCurrent;
	} else {
		theTransformChoice = document.dataEntryTable.yTransformChoice;
		theTransformCurrent = document.dataEntryTable.yTransformCurrent;
	}
	
	aZero = false;
	transformKey = theTransformChoice.value;
	if (transformKey == 4 || transformKey == 5 || transformKey == 7) aZero = checkforzeros(column);

	if (aZero == true) {
		alert ("You cannot choose that option because there is a zero in your data.");
		oldChoice = theTransformCurrent.value;
		if (column == 'x') {
			document.dataEntryTable.xTransformChoice.value = oldChoice;
		} else {
			document.dataEntryTable.yTransformChoice.value = oldChoice;			
		}
		return false;
	} else {
		if (column == 'x') {
			document.dataEntryTable.xTransformCurrent.value = transformKey;
		} else {
			document.dataEntryTable.yTransformCurrent.value = transformKey;			
		}			
		dataToGraph();
		return true;
	}
}