// JavaScript Document
//functions needed to validate the chi-square table (see snippet)
//also requires .flat class in stylesheet;  oArr and eArr in header

function makeFlat(idname) {
   document.getElementById(idname).className="flat";
}

function grayCol(col) {
	for(i=0; i<tdArr.length; ++i) {
		makeFlat(tdArr[i]+col);
		}
}

function within(answer, ideal, perc) {
	if (Math.abs(answer-ideal)<Math.abs(perc*ideal)) {return ideal;} else {return false;}
	}
	
function withinSet(answer, ideal, perc, id, msg) {
	if (within(answer, ideal, perc)) {
		document.getElementById(id).value = ideal; 
		return true;
		} 
	  else {
		if (msg!=null) alert(msg);
		return false;
		}
	}	

function colFull(col) {
	var full=true;
	for(i=0; i<tdArr.length; ++i) {
	    full = full && (document.getElementById(tdArr[i]+col).value != "");
		}
	if (full==false) alert("please fill out the whole column first");
	return full;	
}

function checkOE(idealArr, col) {
	if (colFull(col)==false) return(false);

	for(i=0, ok=true; i<tdArr.length; ++i) {
	    var msg = "mistake in row \'" + document.getElementById(tdArr[i]+"name").innerHTML + "\'";
   		ok = ok && withinSet(document.getElementById(tdArr[i]+col).value, idealArr[i], .2, tdArr[i]+col, msg);
		}
	if (ok==false) {return(false);}
	grayCol(col);
	//document.getElementById("td0-o").type = "button";
	//document.getElementById("td0-o").class = "flat";
	return(true);

}//checkFin

function check1Diff(row) {
    var e = parseFloat(document.getElementById(row+"e").value);
    var o = parseFloat(document.getElementById(row+"o").value);
	var msg = "mistake in row \'" + document.getElementById(row+"name").innerHTML + "\'";
	return(withinSet(document.getElementById(row+"diff").value, o-e, .2, row+"diff", msg)); 
} //check1Diff

function checkDiff() {
	if (colFull("diff")==false) return(false);

	for(i=0, ok=true; i<tdArr.length; ++i) {
   		ok = ok && check1Diff(tdArr[i]);
		}
	if (ok==false) {return(false);}
	grayCol("diff");
	return(true);

}//checkDiff

function check1Sq(row) {
    var e = parseFloat(document.getElementById(row+"e").value);
    var o = parseFloat(document.getElementById(row+"o").value);
	var msg = "mistake in row \'" + document.getElementById(row+"name").innerHTML + "\'";
	return(withinSet(document.getElementById(row+"sq").value, (o-e)*(o-e), .2, row+"sq", msg)); 
} //check1Diff

function checkSq() {
	if (colFull("sq")==false) return(false);

	for(i=0, ok=true; i<tdArr.length; ++i) {
   		ok = ok && check1Sq(tdArr[i]);
		}
	if (ok==false) {return(false);}
	grayCol("sq");
	return(true);

}//checkDiff

function check1Fin(row) {
    var e = parseFloat(document.getElementById(row+"e").value);
    var o = parseFloat(document.getElementById(row+"o").value);
	var msg = "mistake in row \'" + document.getElementById(row+"name").innerHTML + "\'";
	return(withinSet(document.getElementById(row+"fin").value, (o-e)*(o-e)/e, .2, row+"fin", msg)); 
} //check1Fin

function checkFin() {
	if (colFull("fin")==false) return(false);

	for(i=0, ok=true, cs=0; i<tdArr.length; ++i) {
   		ok = ok && check1Fin(tdArr[i]);
		cs += parseFloat(document.getElementById(tdArr[i]+"fin").value);
		}
	if (ok==false) {return(false);}
	document.getElementById("td-cs").value = cs;
	grayCol("fin");
	return(true);

}//checkFin