<!--Begin

//Copyright © 2004 Global Aircraft


function contains(a, e) {for(j=0;j<a.length;j++)if(a[j]==e)return true;return false;}

function solveThisEqtn() {
var eqtn=document.Calulator.screen.value.substring(document.Calulator.screen.value.lastIndexOf("\n")+1, document.Calulator.screen.value.length);
if (eqtn.indexOf("=") != -1) {
alert("Calculating value of x in "+eqtn+".  It may take a few seconds ...");

var getMe=document.Calulator.screen.value.substring(document.Calulator.screen.value.lastIndexOf("\n"), document.Calulator.screen.value.length);
var theseAAs = doItDoItDoIt(getMe);

document.Calulator.screen.value=eqtn+"\n    "+theseAAs+"\n";}}


function doItDoItDoIt(eqtn,skip,leftbound) {


var re = / /g;eqtn = eqtn.replace(re, "");
eqtn = eqtn.replace(/([0-9])x/g, "$1*x");
eqtn = eqtn.replace(/x([0-9])/g, "x*$1");
eqtn = eqtn.replace(/xx/g, "x*x");
eqtn = eqtn.replace(/\n/g, "");
eqtn = eqtn.replace(/\\n/g, "");

var equation3=eqtn;
var equation3 = replaceLetters(equation3);

if (skip != "t") {
var equation3 = removeCommas(equation3);


equation3 = equation3.replace(/asin/g, "ASIN");
equation3 = equation3.replace(/acos/g, "ACOS");
equation3 = equation3.replace(/atan/g, "ATAN");

if (equation3.indexOf("x^3") != -1) {
equation3 = equation3.replace(/x\^3/g, "x*x*x");}

if (equation3.indexOf("x^2") != -1) {
equation3 = equation3.replace(/x\^2/g, "x*x");}

if (equation3.indexOf("sin(") != -1 || equation3.indexOf("cos(") != -1 || equation3.indexOf("tan(") != -1) {
equation3 = equation3.replace(/sin\(/g, "Math.sin(");
equation3 = equation3.replace(/cos\(/g, "Math.cos(");
equation3 = equation3.replace(/tan\(/g, "Math.tan(");}

if (equation3.indexOf("ASIN(") != -1 || equation3.indexOf("ACOS(") != -1 || equation3.indexOf("ATAN(") != -1) {
equation3 = equation3.replace(/ASIN\(/g, "Math.asin(");
equation3 = equation3.replace(/ACOS\(/g, "Math.acos(");
equation3 = equation3.replace(/ATAN\(/g, "Math.atan(");}

if (equation3.indexOf("log(") != -1) {
equation3 = equation3.replace(/log/g, "Math.log");
equation3 = equation3.replace(/Math\.log\(([^)]+)\)/g, "(Math.log($1)/Math.log(10))");}

if (equation3.indexOf("ln(") != -1) {
equation3 = equation3.replace(/ln/g, "Math.log");}

if (equation3.indexOf("sqrt(") != -1) {
equation3 = equation3.replace(/sqrt/g, "Math.sqrt");}

}

var myArray = new Array(2);
var decArray = new Array(2);
myArray = equation3.split("=");

if (myArray[0].indexOf("x") == -1) {myArray[0] = eval(myArray[0]);myArray[0]=myArray[0]+"";}
if (myArray[1].indexOf("x") == -1) {myArray[1] = eval(myArray[1]);myArray[1]=myArray[1]+"";}


// PHASE I
var equation1 = myArray[0];
var equation2 = myArray[1];
if (equation1 == "x" && equation2.indexOf("x") == -1) {return "Exact number found: "+eval(equation2);}
if (equation2 == "x" && equation1.indexOf("x") == -1) {return "Exact number found: "+eval(equation1);}
///
if (equation1 == "x*x" && equation2.indexOf("x") == -1) {return "Exact number found: "+eval(Math.sqrt(equation2));}
if (equation2 == "x*x" && equation1.indexOf("x") == -1) {return "Exact number found: "+eval(Math.sqrt(equation1));}
///
if (equation1 == "x*x*x" && equation2.indexOf("x") == -1) {return "Exact number found: "+eval(Math.pow(equation2,(1/3)));}
if (equation2 == "x*x*x" && equation1.indexOf("x") == -1) {return "Exact number found: "+eval(Math.pow(equation1,(1/3)));}



if (skip != "t") {
var rangeLow = prompt("Please choose a lower range for this x-value.  The lowest you think x could be. This is taken into account for whole numbers only.",-25);
var rangeHigh = prompt("Please choose an upper range for this x-value.  The highest you think x could be. This is taken into account for whole numbers only.",25);
rangeLow = eval(rangeLow*1.0);
rangeHigh = eval(rangeHigh*1.0);
var equation1 = myArray[0];
var equation2 = myArray[1];
var rangeHighS = rangeHigh;
var addedTo=0;
var keepTrack=0;

var validAnsas = new Array();
var validVals = new Array();
for (var allAnsas=0;allAnsas<5;allAnsas++) {
//rangeLow=Math.ceil(rangeLow);
rangeLow += 0.1;
rangeHigh=rangeHighS;
var incrementi=1.0;
var decrementi=2.0;
var rangeLowS = rangeLow;
keepTrack++;

if (addedTo != 1 && allAnsas == 4) {allAnsas--;}
addedTo=0;
if (keepTrack > 10) {break;}

for (var iterati=0;iterati<5;iterati++) {
incrementi = eval(incrementi/Math.pow(10,iterati));
decrementi = eval(decrementi/Math.pow(10,iterati));
rangeLow = (Math.round(rangeLow*Math.pow(10,iterati+1))/Math.pow(10,iterati+1));
rangeHigh = (Math.round(rangeHigh*Math.pow(10,iterati+1))/Math.pow(10,iterati+1));


//alert("DW: " + rangeLow + "\nUP: "+ rangeHigh + "\n\n[" + validAnsas + "]");


if (rangeLow == rangeHigh) {
	var nEq = "("+equation1+")-("+equation2+")";
	nEq = nEq.replace(/x/g, "("+rangeLow+")");
	var fstHalf = eval(nEq);
	if (fstHalf == 0) {
		rangeLow = (Math.round(rangeLow*10000)/10000);
		if(!contains(validVals, rangeLow)){
			validAnsas.push("Exact number found: "+rangeLow);
			validVals.push(rangeLow);
			addedTo=1;
		}
		break;
	}
	else {
		if ((Math.round(fstHalf*100)/100) == 0) {
			rangeLow = (Math.round(rangeLow*10000)/10000);
			if(!contains(validVals, rangeLow)){
				validAnsas.push("Roughly around: "+rangeLow);
				validVals.push(rangeLow);
				addedTo=1;
			}
		}
		break;
	}
}


var lastAns="x";
for (var i=rangeLow;i<=rangeHigh;i=i+incrementi) {
	var nEq = "("+equation1+")-("+equation2+")";
	nEq = nEq.replace(/x/g, "("+i+")");
	var fstHalf = eval(nEq);
	if (fstHalf == 0) {
		i = (Math.round(i*10000)/10000);
		if(!contains(validVals, i)){
			validAnsas.push("Exact number found: "+i);
			validVals.push(i);
			addedTo=1;
		}
		iterati=5;
		break;
	}
	if (Math.abs(lastAns) < Math.abs(fstHalf) && lastAns != "x" && (i-decrementi) > rangeLowS) {
		rangeLow=i-decrementi;
		rangeHigh=i;
		break;
	} else {lastAns=fstHalf;}
}


} // LIMIT

//if (validAnsas[0].length < 10) {
	var avgRange = eval((rangeLow+rangeHigh)/2);
	avgRange = (Math.round(avgRange*10000)/10000);
	if(!contains(validVals, avgRange)){
		var nEq = "("+equation1+")-("+equation2+")";
		nEq = nEq.replace(/x/g, "("+avgRange+")");
		var fstHalf = eval(nEq);
		if ((Math.round(fstHalf*100)/100) == 0) {
			validVals.push(avgRange);
			addedTo=1;
			validAnsas.push("Roughly around: "+avgRange);
		}
	}
//}


} // ALL ANSAS

if (validAnsas.length > 0) {return validAnsas.join("\n    ");}
else {return "No numbers found!";}

alert("ESCAPE!");}







if (skip == "t") {var lowest = leftbound;}else {var lowest = 0.0;}



for (var myIteration = lowest;myIteration<=900; myIteration=myIteration+100.0) {


var startGrab=0;
var forRoundingU = new Array();
var forRoundingM = new Array();
var forRoundingL = new Array();
var forRoundingT = new Array();
var equation1 = myArray[0];
var equation2 = myArray[1];
for (var i=myIteration;i<=(myIteration+100.0);i=i+0.01) {
var nEq = "("+equation1+")-("+equation2+")";
nEq = nEq.replace(/x/g, "("+i+")");
var fstHalf = eval(nEq);
if (fstHalf == 0) {i = (Math.round(i*1000)/1000);return "Exact number found: "+i;}
roundedA = (Math.round(fstHalf*10000)/10000);
roundedB = (Math.round(fstHalf*1000)/1000);
roundedC = (Math.round(fstHalf*100)/100);
roundedD = (Math.round(fstHalf*10)/10);
if (roundedA == 0) {forRoundingT.push(i);startGrab=1;}
else if (roundedB == 0) {forRoundingU.push(i);startGrab=1;}
else if (roundedC == 0) {forRoundingM.push(i);startGrab=1;}
else if (roundedD == 0) {forRoundingL.push(i);startGrab=1;}
else {if (startGrab) {break;}}
}

if (forRoundingT.length > 0) {
var sum = 0;for (var i=0; i<forRoundingT.length; i++) {sum = eval(sum + eval(forRoundingT[i]*1));}
var mean = eval(sum / forRoundingT.length);
mean = (Math.round(mean*1000)/1000);
return "Roughly around: "+mean;}
if (forRoundingU.length > 0) {
var sum = 0;for (var i=0; i<forRoundingU.length; i++) {sum = eval(sum + eval(forRoundingU[i]*1));}
var mean = eval(sum / forRoundingU.length);
mean = (Math.round(mean*1000)/1000);
return "Roughly around: "+mean;}
if (forRoundingM.length > 0) {
var sum = 0;for (var i=0; i<forRoundingM.length; i++) {sum = eval(sum + eval(forRoundingM[i]*1));}
var mean = eval(sum / forRoundingM.length);
mean = (Math.round(mean*1000)/1000);
return "Roughly around: "+mean;}
if (forRoundingL.length > 0) {
var sum = 0;for (var i=0; i<forRoundingL.length; i++) {sum = eval(sum + eval(forRoundingL[i]*1));}
var mean = eval(sum / forRoundingL.length);
mean = (Math.round(mean*1000)/1000);
return "Roughly around: "+mean;}
///
if (skip != "t") {var startGrab=0;
var forRoundingU = new Array();
var forRoundingM = new Array();
var forRoundingL = new Array();
var forRoundingT = new Array();
for (var i=(myIteration*-1.0);i>=((myIteration+100.0)*-1.0);i=i-0.01) {
var nEq = "("+equation1+")-("+equation2+")";
nEq = nEq.replace(/x/g, "("+i+")");
var fstHalf = eval(nEq);
if (fstHalf == 0) {i = (Math.round(i*1000)/1000);return "Exact number found: "+i;}
roundedA = (Math.round(fstHalf*10000)/10000);
roundedB = (Math.round(fstHalf*1000)/1000);
roundedC = (Math.round(fstHalf*100)/100);
roundedD = (Math.round(fstHalf*10)/10);
if (roundedA == 0) {forRoundingT.push(i);startGrab=1;}
else if (roundedB == 0) {forRoundingU.push(i);startGrab=1;}
else if (roundedC == 0) {forRoundingM.push(i);startGrab=1;}
else if (roundedD == 0) {forRoundingL.push(i);startGrab=1;}
else {if (startGrab) {break;}}
}

if (forRoundingT.length > 0) {
var sum = 0;for (var i=0; i<forRoundingT.length; i++) {sum = eval(sum + eval(forRoundingT[i]*1));}
var mean = eval(sum / forRoundingT.length);
mean = (Math.round(mean*1000)/1000);
return "Roughly around: "+mean;}
if (forRoundingU.length > 0) {
var sum = 0;for (var i=0; i<forRoundingU.length; i++) {sum = eval(sum + eval(forRoundingU[i]*1));}
var mean = eval(sum / forRoundingU.length);
mean = (Math.round(mean*1000)/1000);
return "Roughly around: "+mean;}
if (forRoundingM.length > 0) {
var sum = 0;for (var i=0; i<forRoundingM.length; i++) {sum = eval(sum + eval(forRoundingM[i]*1));}
var mean = eval(sum / forRoundingM.length);
mean = (Math.round(mean*1000)/1000);
return "Roughly around: "+mean;}
if (forRoundingL.length > 0) {
var sum = 0;for (var i=0; i<forRoundingL.length; i++) {sum = eval(sum + eval(forRoundingL[i]*1));}
var mean = eval(sum / forRoundingL.length);
mean = (Math.round(mean*1000)/1000);
return "Roughly around: "+mean;}
}

if (myIteration != 900) {if (!confirm("Number was not found in the ±"+myIteration+" range.  Would you like to scan x-values between ±"+(myIteration+100)+" to ±"+(myIteration+200)+"?")){return "Computation aborted.";}}

}

return "No numbers found!";}


function prepareEqtn() {
if (document.Calulator.altFive.value == 'exit') {
document.Calulator.screen.value="0";}
}


function iAmEquations() {


if (document.Calulator.altFive.value != 'exit') {
swapup();
document.Calulator.type[0].checked = true;
document.Calulator.type[0].disabled = true;
document.Calulator.type[1].disabled = true;
document.Calulator.secondBtn.disabled=true;
document.Calulator.enterMem.value="=";
document.Calulator.enterMem.style.color='#000000';
document.Calulator.posneg.value="x";
document.Calulator.posneg.title="Variable X";
document.Calulator.lastAns.disabled=true;
document.Calulator.xToy.disabled=true;
document.Calulator.cot.disabled=true;
document.Calulator.csc.disabled=true;
document.Calulator.sec.disabled=true;
document.Calulator.lastAns.disabled=true;
document.Calulator.store.disabled=true;
document.Calulator.recall.disabled=true;
document.Calulator.sq.value='x^2';
document.Calulator.sq.style.backgroundColor='#AAAAAA';
document.Calulator.sq.title='square';
document.Calulator.altOne.disabled=true;
document.Calulator.altTwo.disabled=true;
document.Calulator.altThree.disabled=true;
document.Calulator.altFour.disabled=true;
document.Calulator.altFive.value='exit';
document.Calulator.altSix.disabled=true;
document.Calulator.altSeven.disabled=true;
document.Calulator.screen.value="GAC Equation Solver v1.0\n\nPlease be patient -- calculations can take up to 60 seconds.\n\nThis will only work on x-values between -1000 and 1000 for decimal numbers (there is no programmed limit for whole numbers).\n\nTrigonometric functions valid for radian measures only, so pay attention to the mode you're in.\n\nUse the minus sign for negative numbers.\n\n                Click to continue\n\n\n         Copyright © 2005 Global Aircraft";
//var ready=setTimeout("readState()",30000);
}
else if (document.Calulator.altFive.value == 'exit') {
document.Calulator.type[0].disabled = false;
document.Calulator.type[1].disabled = false;
document.Calulator.secondBtn.disabled=false;
document.Calulator.enterMem.disabled=false;
document.Calulator.sqrt.disabled=false;
document.Calulator.clear.disabled=false;
document.Calulator.lastAns.disabled=false;
document.Calulator.cubed.disabled=false;
document.Calulator.nlog.disabled=false;
document.Calulator.xToy.disabled=false;
document.Calulator.log.disabled=false;
document.Calulator.atan.disabled=false;
document.Calulator.cot.disabled=false;
document.Calulator.tan.disabled=false;
document.Calulator.asin.disabled=false;
document.Calulator.csc.disabled=false;
document.Calulator.sin.disabled=false;
document.Calulator.acos.disabled=false;
document.Calulator.sec.disabled=false;
document.Calulator.cos.disabled=false;
document.Calulator.e.disabled=false;
document.Calulator.pi.disabled=false;
document.Calulator.lastAns.disabled=false;
document.Calulator.store.disabled=false;
document.Calulator.recall.disabled=false;
document.Calulator.equals.value="solve";
document.Calulator.posneg.value="+/-";
document.Calulator.posneg.title="positive / negative";
document.Calulator.sq.value='x^2';
document.Calulator.sq.style.backgroundColor='#AAAAAA';
document.Calulator.enterMem.value="mem";
document.Calulator.enterMem.style.color='#ffffaa';
document.Calulator.sq.title='square';
document.Calulator.altOne.disabled=false;
document.Calulator.altTwo.disabled=false;
document.Calulator.altThree.disabled=false;
document.Calulator.altFour.disabled=false;
document.Calulator.altFive.value='5';
document.Calulator.altSix.disabled=false;
document.Calulator.altSeven.disabled=false;
document.Calulator.screen.value="0";
enterPrgms();
iWorkNow();
}
else {}


}


// END -->
