<!--Begin

//Copyright © 2004 Global Aircraft


function openMatrix() {document.Calulator.screen.value=0;}



function reqMat(which) {
var stoData;
which=which.replace(/\]/g,"");which=which.replace(/\[/g,"");
if (typeof matrixStorage[which] == "undefined") {alert("ERROR: Invalid matrix selected.");return;}
stoData=matrixStorage[which];
if (stoData == "") {alert("Matrix "+which+" is empty.");return;}
while (stoData.indexOf("[")>-1) {var pos=stoData.indexOf("[");var stoData=""+stoData.substring(0, pos)+""+stoData.substring((pos + 1), stoData.length);}
while (stoData.indexOf("]")>-1) {var pos=stoData.indexOf("]");var stoData=""+stoData.substring(0, pos)+""+stoData.substring((pos + 1), stoData.length);}
return stoData;}


var matrixStorage= new Array();
function addMatrix() {
var tab;

var whichMat=prompt('Enter a matrix to create, [A] - [F]','[A]');
if (whichMat != null && whichMat != ''){

var rows=prompt('Enter the number of rows in this Matrix, 1-7. (rows x cols)','');
if (rows != null && rows != '' && rows <= 7 && rows >= 1 && rows != -1 && (!isNaN(rows))){

var cols=prompt('Enter the number of columns in this Matrix, 1-7. (rows x cols)','');
if (cols != null && cols != '' && cols <= 7 && cols >= 1 && cols != -1 && (!isNaN(cols))){

var mT = new Array(rows-1);
for (z=0;z < rows;z++){mT[z] = new Array(cols-1);}

document.Calulator.screen.value = whichMat+" ["+rows+"x"+cols+"]\n\n[";

var br=0;var i=0;while (i<rows) {
var j=0;while (j<cols) {

var OneOne=prompt('Enter a value for ('+i+','+j+').','');
if (OneOne == null || OneOne == '' || (isNaN(OneOne))){OneOne=0;}

if (j == (cols-1)) {tab = "";}else {tab = "\t";}

if (!br) {document.Calulator.screen.value = document.Calulator.screen.value+OneOne+tab;}
else {document.Calulator.screen.value = document.Calulator.screen.value+"]\n["+OneOne+tab;}
mT[i][j] = OneOne;

j++;br=0;}
i++;br=1;}

document.Calulator.screen.value = document.Calulator.screen.value+"]\n\n";

var myMat="";
for (z=0;z < mT.length;z++){myMat += ""+mT[z]+";";}
myMat = "["+myMat+"]";

whichMat=whichMat.replace(/\]/g,"");whichMat=whichMat.replace(/\[/g,"");
matrixStorage[whichMat]=myMat;


}}}}




function matrixRand() {
var tab;

var whichMat=prompt('Enter a matrix to put this in, [A] - [F]','[A]');
if (whichMat != null && whichMat != ''){

var rows=prompt('Enter the number of rows in this Matrix, 1-7. (rows x cols)','');
if (rows != null && rows != '' && rows <= 7 && rows >= 1 && rows != -1 && (!isNaN(rows))){

var cols=prompt('Enter the number of columns in this Matrix, 1-7. (rows x cols)','');
if (cols != null && cols != '' && cols <= 7 && cols >= 1 && cols != -1 && (!isNaN(cols))){

var mT = new Array(rows-1);
for (z=0;z < rows;z++){mT[z] = new Array(cols-1);}

var lower=prompt('Enter a lower boundary for these random numbers.','-100');
if (lower == null || lower == '' || (isNaN(lower))){lower=-100;}

var upper=prompt('Enter a upper boundary for these random numbers.','100');
if (upper == null || upper == '' || (isNaN(upper))){upper=100;}

document.Calulator.screen.value = whichMat+" ["+rows+"x"+cols+"]\n\n[";

var br=0;var i=0;while (i<rows) {
var j=0;while (j<cols) {


var OneOne = Math.round( (lower*1) + ( (upper-lower) * Math.random()));

if (j == (cols-1)) {tab = "";}else {tab = "\t";}

if (!br) {document.Calulator.screen.value = document.Calulator.screen.value+OneOne+tab;}
else {document.Calulator.screen.value = document.Calulator.screen.value+"]\n["+OneOne+tab;}
mT[i][j] = OneOne;

j++;br=0;}
i++;br=1;}

document.Calulator.screen.value = document.Calulator.screen.value+"]\n\n";

var myMat="";
for (z=0;z < mT.length;z++){myMat += ""+mT[z]+";";}
myMat = "["+myMat+"]";

whichMat=whichMat.replace(/\]/g,"");whichMat=whichMat.replace(/\[/g,"");
matrixStorage[whichMat]=myMat;

}}}}






function viewMatrix() {
var whichMat=prompt('Enter a matrix to view, [A] - [F]','[A]');
if (whichMat != null && whichMat != ''){

var stoData=reqMat(whichMat);

if (stoData == "") {alert("Matrix "+whichMat+" is empty.");return;}

while (stoData.indexOf("[")>-1) {var pos=stoData.indexOf("[");var stoData=""+stoData.substring(0, pos)+""+stoData.substring((pos + 1), stoData.length);}

var mT = new Array();mT = stoData.split(';');
mT.pop();

for (z=0;z < mT.length;z++){mT[z] = mT[z].split(',');}

document.Calulator.screen.value = whichMat+" ["+mT.length+"x"+mT[0].length+"]\n\n[";

var br=0;var i=0;while (i<mT.length) {
var j=0;while (j<mT[0].length) {

if (j == (mT[0].length-1)) {tab = "";}else {tab = "\t";}

if (!br) {document.Calulator.screen.value = document.Calulator.screen.value+mT[i][j]+tab;}
else {document.Calulator.screen.value = document.Calulator.screen.value+"]\n["+mT[i][j]+tab;}

j++;br=0;}
i++;br=1;}

document.Calulator.screen.value = document.Calulator.screen.value+"]\n\n";

}}







function editMatrix() {
var whichMat=prompt('Enter a matrix to edit, [A] - [F]','[A]');
if (whichMat != null && whichMat != ''){

var stoData=reqMat(whichMat);

if (stoData == "") {alert("ERROR: Matrix "+whichMat+" is empty.");return;}

while (stoData.indexOf("[")>-1) {var pos=stoData.indexOf("[");var stoData=""+stoData.substring(0, pos)+""+stoData.substring((pos + 1), stoData.length);}

var mT = new Array();mT = stoData.split(';');
mT.pop();

for (z=0;z < mT.length;z++){mT[z] = mT[z].split(',');}

document.Calulator.screen.value = whichMat+" ["+mT.length+"x"+mT[0].length+"]\n\n[";

var br=0;var i=0;while (i<mT.length) {
var j=0;while (j<mT[0].length) {

if (j == (mT[0].length-1)) {tab = "";}else {tab = "\t";}

if (!br) {document.Calulator.screen.value = document.Calulator.screen.value+mT[i][j]+tab;}
else {document.Calulator.screen.value = document.Calulator.screen.value+"]\n["+mT[i][j]+tab;}

j++;br=0;}
i++;br=1;}

document.Calulator.screen.value = document.Calulator.screen.value+"]";


var getCoords=prompt('Enter the coordinates of the matrix cell you wish to alter, (row,column).','(1,1)');
if (getCoords != null && getCoords != '' && getCoords.indexOf('(') > -1 && getCoords.indexOf(')') > -1 && getCoords.indexOf(',') > -1){
while (getCoords.indexOf('(')>-1) {var pos=getCoords.indexOf('(');var getCoords=""+getCoords.substring(0, pos)+""+getCoords.substring((pos + 1), getCoords.length);}
while (getCoords.indexOf(')')>-1) {var pos=getCoords.indexOf(')');var getCoords=""+getCoords.substring(0, pos)+""+getCoords.substring((pos + 1), getCoords.length);}


document.Calulator.screen.value = "";

var crdsTmp = new Array();crdsTmp = getCoords.split(',');
var iAlt = eval(crdsTmp[0]-1);
var jAlt = eval(crdsTmp[1]-1);


document.Calulator.screen.value = whichMat+" ["+mT.length+"x"+mT[0].length+"]\n\n[";

var br=0;var i=0;while (i<mT.length) {
var j=0;while (j<mT[0].length) {

if (j == (mT[0].length-1)) {tab = "";}else {tab = "\t";}

if (i == iAlt && j == jAlt) {
var i2 = i+1;var j2 = j+1;
var OneOne=prompt('Enter a new value for ('+i2+','+j2+').','');
if (OneOne == null || OneOne == '' || (isNaN(OneOne))){OneOne=0;}
mT[i][j] = OneOne;}
else {OneOne=mT[i][j];}

if (!br) {document.Calulator.screen.value = document.Calulator.screen.value+OneOne+tab;}
else {document.Calulator.screen.value = document.Calulator.screen.value+"]\n["+OneOne+tab;}

j++;br=0;}
i++;br=1;}

document.Calulator.screen.value = document.Calulator.screen.value+"]\n\n";

var myMat="";
for (z=0;z < mT.length;z++){myMat += ""+mT[z]+";";}
myMat = "["+myMat+"]";

whichMat=whichMat.replace(/\]/g,"");whichMat=whichMat.replace(/\[/g,"");
matrixStorage[whichMat]=myMat;

}}}






function matrixDiv(income,rtrn) {

var myArray = new Array();
myArray = income.split("C");
var one = myArray[0];var two = myArray[1];var constA;var eekc;
var const1 = 0;var const2 = 0;var stoData1;var stoData2;var stoData3;

if ((!isNaN(one))) {const1 = 1;stoData1=one;}
else if (one.indexOf(";") > -1) {stoData1=one;}
else {stoData1=reqMat(one);}

if ((!isNaN(two))) {const2 = 1;stoData2=two;}
else if (two.indexOf(";") > -1) {stoData2=two;}
else {stoData2=reqMat(two);}

if (stoData1 == "") {alert("Matrix "+one+" is empty.");return;}
if (stoData2 == "") {alert("Matrix "+two+" is empty.");return;}

if ((const2) || (const1)) {
if ((const2) && (const1)) {alert("Error: One variable must be a matrix");return;}

if ((const1)) {
var inv = getInv(stoData2,"A");
var mult = matrixMult(stoData1+"C"+inv,"A");}
else {
var inv = getInv(stoData1,"A");
var mult = matrixMult(inv+"C"+stoData2,"A");}
}
else {
var inv = getInv(stoData2,"A");
var mult = matrixMult(stoData1+"C"+inv,"A");
}


while (mult.indexOf("[")>-1) {var pos=mult.indexOf("[");var mult=""+mult.substring(0, pos)+""+mult.substring((pos + 1), mult.length);}

var mT = new Array();mT = mult.split(';');
mT.pop();for (z=0;z < mT.length;z++){mT[z] = mT[z].split(',');}

document.Calulator.screen.value = one+"/"+two+"\n\n[";
var houndDog = "[";

var br=0;var i=0;while (i<mT.length) {
var j=0;while (j<mT[0].length) {

if (j == (mT[0].length-1)) {tab = "";}else {tab = "\t";}

if (mT[i][j] < 0.00001 && mT[i][j] > -0.00001) {mT[i][j]=0;}
if (mT[i][j] > 0.99999 && mT[i][j] < 1.00001) {mT[i][j]=1;}

if (!br) {document.Calulator.screen.value = document.Calulator.screen.value+mT[i][j]+tab;}
else {document.Calulator.screen.value = document.Calulator.screen.value+"]\n["+mT[i][j]+tab;}

if (!br) {houndDog = houndDog+mT[i][j]+tab;}
else {houndDog = houndDog+"]\n         ["+mT[i][j]+tab;}

j++;br=0;}
i++;br=1;}

if (rtrn == "" || rtrn == undefined) {document.Calulator.screen.value = document.Calulator.screen.value+"]\n\n";}
else if (rtrn == "A") {var myMat="";for (z=0;z < mT.length;z++){myMat += ""+mT[z]+";";}myMat = "["+myMat+"]";return myMat;}
else {return houndDog+"]\n";}



}






function matrixTrans(income,rtrn) {

var one = income;

if (one.indexOf(";") > -1) {stoData1=one;}
else {stoData1=reqMat(one);}

if (stoData1 == "") {alert("Matrix "+one+" is empty.");return;}

while (stoData1.indexOf("[")>-1) {var pos=stoData1.indexOf("[");var stoData1=""+stoData1.substring(0, pos)+""+stoData1.substring((pos + 1), stoData1.length);}

var m1 = new Array();m1 = stoData1.split(';');
m1.pop();for (z=0;z < m1.length;z++){m1[z] = m1[z].split(',');}

var T=0;
var mT = new Array(m1[0].length);

for (z=0;z < m1[0].length;z++){mT[z] = new Array(m1.length);}


for (i=0;i < m1.length; i++) {

	for (k=0;k < m1[0].length;k++) {
	mT[k][i] = m1[i][k];
	}
	
}

document.Calulator.screen.value = "tpose("+one+")\n\n[";
var houndDog = "[";

var br=0;var i=0;while (i<mT.length) {
var j=0;while (j<mT[0].length) {

if (j == (mT[0].length-1)) {tab = "";}else {tab = "\t";}

if (!br) {document.Calulator.screen.value = document.Calulator.screen.value+mT[i][j]+tab;}
else {document.Calulator.screen.value = document.Calulator.screen.value+"]\n["+mT[i][j]+tab;}

if (!br) {houndDog = houndDog+mT[i][j]+tab;}
else {houndDog = houndDog+"]\n         ["+mT[i][j]+tab;}


j++;br=0;}
i++;br=1;}


if (rtrn == "" || rtrn == undefined) {document.Calulator.screen.value = document.Calulator.screen.value+"]\n\n";}
else if (rtrn == "A") {var myMat="";for (z=0;z < mT.length;z++){myMat += ""+mT[z]+";";}myMat = "["+myMat+"]";return myMat;}
else {return houndDog+"]\n";}

}






function matrixSub(income,rtrn) {matrixAdd(income,"-",rtrn);}

function matrixAdd(income,addMinus,rtrn) {
if (addMinus == null || addMinus == "undefined" || addMinus == "") {addMinus = "+";}

var myArray = new Array();
myArray = income.split("C");
var one = myArray[0];var two = myArray[1];

if (one.indexOf(";") > -1) {stoData1=one;}
else {stoData1=reqMat(one);}

if (two.indexOf(";") > -1) {stoData2=two;}
else {stoData2=reqMat(two);}

if (stoData1 == "") {alert("Matrix "+one+" is empty.");return;}
if (stoData2 == "") {alert("Matrix "+two+" is empty.");return;}

while (stoData1.indexOf("[")>-1) {var pos=stoData1.indexOf("[");var stoData1=""+stoData1.substring(0, pos)+""+stoData1.substring((pos + 1), stoData1.length);}
while (stoData2.indexOf("[")>-1) {var pos=stoData2.indexOf("[");var stoData2=""+stoData2.substring(0, pos)+""+stoData2.substring((pos + 1), stoData2.length);}


var m1 = new Array();m1 = stoData1.split(';');
m1.pop();for (z=0;z < m1.length;z++){m1[z] = m1[z].split(',');}

var m2 = new Array();m2 = stoData2.split(';');
m2.pop();for (z=0;z < m2.length;z++){m2[z] = m2[z].split(',');}


if (m1[0].length != m2[0].length || m1.length != m2.length) {alert("Unmatched sizes!");return;}

var T=0;
var mT = new Array(m1.length);

for (z=0;z < m1.length;z++){mT[z] = new Array(m2[0].length);}


for (i=0;i < m1.length; i++) {

	for (k=0;k < m1[0].length;k++) {
	T=0;
	if (addMinus == "-") {T = eval((m1[i][k]*1) - (m2[i][k]*1));}
	else {T = eval((m1[i][k]*1) + (m2[i][k]*1));}
	mT[i][k] = T;
	}
	
}

document.Calulator.screen.value = one+""+addMinus+""+two+"\n\n[";
var houndDog = "[";

var br=0;var i=0;while (i<mT.length) {
var j=0;while (j<mT[0].length) {

if (j == (mT[0].length-1)) {tab = "";}else {tab = "\t";}

if (!br) {document.Calulator.screen.value = document.Calulator.screen.value+mT[i][j]+tab;}
else {document.Calulator.screen.value = document.Calulator.screen.value+"]\n["+mT[i][j]+tab;}

if (!br) {houndDog = houndDog+mT[i][j]+tab;}
else {houndDog = houndDog+"]\n         ["+mT[i][j]+tab;}

j++;br=0;}
i++;br=1;}

if (rtrn == "" || rtrn == undefined) {document.Calulator.screen.value = document.Calulator.screen.value+"]\n\n";}
else if (rtrn == "A") {var myMat="";for (z=0;z < mT.length;z++){myMat += ""+mT[z]+";";}myMat = "["+myMat+"]";return myMat;}
else {return houndDog+"]\n";}

}





function matrixMult(income,rtrn) {

var myArray = new Array();
myArray = income.split("C");
var one = myArray[0];var two = myArray[1];var constA;var eekc;
var const1 = 0;var const2 = 0;var stoData1;var stoData2;var stoData3;

if ((!isNaN(one))) {const1 = 1;stoData1=one;}
else if (one.indexOf(";") > -1) {stoData1=one;}
else {stoData1=reqMat(one);}

if ((!isNaN(two))) {const2 = 1;stoData2=two;}
else if (two.indexOf(";") > -1) {stoData2=two;}
else {stoData2=reqMat(two);}

if (stoData1 == "") {alert("Matrix "+one+" is empty.");return;}
if (stoData2 == "") {alert("Matrix "+two+" is empty.");return;}

while (stoData1.indexOf("[")>-1) {var pos=stoData1.indexOf("[");var stoData1=""+stoData1.substring(0, pos)+""+stoData1.substring((pos + 1), stoData1.length);}
while (stoData2.indexOf("[")>-1) {var pos=stoData2.indexOf("[");var stoData2=""+stoData2.substring(0, pos)+""+stoData2.substring((pos + 1), stoData2.length);}


if ((const2) || (const1)) {
if ((const2) && (const1)) {alert("Error: One variable must be a matrix");return;}

if ((const1)) {stoData3 = stoData2;constA = stoData1;eekc = two;}
else {stoData3 = stoData1;constA = stoData2;eekc = one;}

var m0 = new Array();m0 = stoData3.split(';');
m0.pop();for (z=0;z < m0.length;z++){m0[z] = m0[z].split(',');}

var T=0;
var mT = new Array(m0.length);

for (z=0;z < m0.length;z++){mT[z] = new Array(m0[0].length);}

for (i=0;i < m0.length; i++) {
	for (k=0;k < m0[0].length;k++) {
	T=0;
	T = eval((m0[i][k]*1) * constA);
	mT[i][k] = T;
	}
}

one = constA;two = eekc;

}
else {

var m1 = new Array();m1 = stoData1.split(';');
m1.pop();for (z=0;z < m1.length;z++){m1[z] = m1[z].split(',');}

var m2 = new Array();m2 = stoData2.split(';');
m2.pop();for (z=0;z < m2.length;z++){m2[z] = m2[z].split(',');}


if (m1[0].length != m2.length) {alert("Unmatched sizes!");return;}

var T=0;
var mT = new Array(m1.length);

for (z=0;z < m1.length;z++){mT[z] = new Array(m2[0].length);}

for (x=0;x < m2[0].length;x++) {

	for (i=0;i < m1.length; i++) {

		for (k=0;k < m1[0].length;k++) {

		T = eval(T+ ((m1[i][k]*1)*(m2[k][x]*1)));
		
		}
		mT[i][x] = T;var T=0;
	}
}


}

document.Calulator.screen.value = one+"*"+two+"\n\n[";
var houndDog = "[";

var br=0;var i=0;while (i<mT.length) {
var j=0;while (j<mT[0].length) {

if (j == (mT[0].length-1)) {tab = "";}else {tab = "\t";}

if (!br) {document.Calulator.screen.value = document.Calulator.screen.value+mT[i][j]+tab;}
else {document.Calulator.screen.value = document.Calulator.screen.value+"]\n["+mT[i][j]+tab;}

if (!br) {houndDog = houndDog+mT[i][j]+tab;}
else {houndDog = houndDog+"]\n         ["+mT[i][j]+tab;}

j++;br=0;}
i++;br=1;}

if (rtrn == "" || rtrn == undefined) {document.Calulator.screen.value = document.Calulator.screen.value+"]\n\n";}
else if (rtrn == "A") {var myMat="";for (z=0;z < mT.length;z++){myMat += ""+mT[z]+";";}myMat = "["+myMat+"]";return myMat;}
else {return houndDog+"]\n";}

}



function getInv(matrix,rtrn) {

if (matrix.indexOf(";") > -1) {stoData1=matrix;}
else {stoData1=reqMat(matrix);}

var m1 = new Array();m1 = stoData1.split(';');
m1.pop();for (z=0;z < m1.length;z++){m1[z] = m1[z].split(',');}

if (m1.length != 2) {var newMat = matrixTrans(stoData1,"A");}
else {var newMat = stoData1;}

while (newMat.indexOf("[")>-1) {var pos=newMat.indexOf("[");var newMat=""+newMat.substring(0, pos)+""+newMat.substring((pos + 1), newMat.length);}

var m1 = new Array();m1 = newMat.split(';');
m1.pop();for (z=0;z < m1.length;z++){m1[z] = m1[z].split(',');}

if (m1.length != m1[0].length) {alert("Matrix must be a square for this operation.");return false;}

var mmx = new Array(m1[0].length);for (z=0;z < m1[0].length;z++){mmx[z] = new Array(m1.length);}

if (m1.length == 2) {
mmx[0][0]=m1[1][1];mmx[0][1]=m1[0][1];
mmx[1][1]=m1[0][0];mmx[1][0]=m1[1][0];}
else {
for (var c=0;c<m1.length;c++) { // REMOVE ROW c
for (var i=0;i<m1.length;i++) { // REMOVE COLUMN i, SOLVE REMAINDER
// CREATE SUBMATRIX
var arr=0;
var mT = new Array(m1.length-1);
for (var x=0;x<m1.length;x++) { // ROW
var temp = new Array();
for (var y=0;y<m1.length;y++) { // COLUMN
if (x != c && y != i) {temp.push(m1[x][y]);}}
if (temp != '' && temp != "undefined") {mT[arr] = temp;arr++;}}
var subMatx="";for (z=0;z < mT.length;z++){subMatx += ""+mT[z]+";";}
var tmp = getDet(subMatx);
mmx[c][i] = tmp;}}
}

// IMPOSE PLACE SIGN
for (i=0;i<mmx.length;i++) {
var binary = i.toString(2);
if (binary.charAt(binary.length - 1) == "1") {
var posNeg = 1; // odd is minus, positive is plus
} // NUM IS ODD
else {
var posNeg = 0; // odd is minus, positive is plus
} // NUM IS EVEN
for (j=0;j<mmx[0].length;j++) {
var binary = posNeg.toString(2);
if (binary.charAt(binary.length - 1) == "1") {mmx[i][j]=eval(mmx[i][j] * -1);} // NUM IS ODD
posNeg++;}}

var mnT = new Array(mmx.length);
for (z=0;z < mmx.length;z++){mnT[z] = new Array(mmx[0].length);}

var stodat = getDet(stoData1);
for (i=0;i < mmx.length; i++) {
	for (k=0;k < mmx[0].length;k++) {
	T=0;
	T = eval((mmx[i][k]*1) * eval(1/stodat));
	mnT[i][k] = T;
	}
}



document.Calulator.screen.value = "inv("+stoData1+")\n\n[";
var houndDog = "[";

var br=0;var i=0;while (i<mnT.length) {
var j=0;while (j<mnT[0].length) {

if (j == (mnT[0].length-1)) {tab = "";}else {tab = "\t";}

if (!br) {document.Calulator.screen.value = document.Calulator.screen.value+mnT[i][j]+tab;}
else {document.Calulator.screen.value = document.Calulator.screen.value+"]\n["+mnT[i][j]+tab;}

if (!br) {houndDog = houndDog+mnT[i][j]+tab;}
else {houndDog = houndDog+"]\n         ["+mnT[i][j]+tab;}

j++;br=0;}
i++;br=1;}

if (rtrn == "" || rtrn == undefined) {document.Calulator.screen.value = document.Calulator.screen.value+"]\n\n";}
else if (rtrn == "A") {var myMat="";for (z=0;z < mnT.length;z++){myMat += ""+mnT[z]+";";}myMat = "["+myMat+"]";return myMat;}
else {return houndDog+"]\n";;}


}


function getDet(matrix) {

var one = matrix;

if (one.indexOf(";") > -1) {stoData1=one;}
else {stoData1=reqMat(one);}

if (stoData1 == "") {alert("Matrix "+one+" is empty.");return;}

while (stoData1.indexOf("[")>-1) {var pos=stoData1.indexOf("[");var stoData1=""+stoData1.substring(0, pos)+""+stoData1.substring((pos + 1), stoData1.length);}

var m1 = new Array();m1 = stoData1.split(';');
m1.pop();for (z=0;z < m1.length;z++){m1[z] = m1[z].split(',');}

if (m1.length != m1[0].length) {alert("Matrix must be a square for this operation.");return false;}

if (m1.length == 2) {return eval(m1[0][0]*m1[1][1] - m1[1][0]*m1[0][1]);}
else {

var sum = 0.0; var plusMinus = 0; // odd is minus, positive is plus

for (var i=0;i<m1.length;i++) { // IGNORE ROW 1, REMOVE COLUMN i, SOLVE REMAINDER

// CREATE SUBMATRIX
var arr=0;
var mT = new Array(m1.length-1);
for (var x=1;x<m1.length;x++) { // ROW
	var temp = new Array();
	for (var y=0;y<m1.length;y++) { // COLUMN
		if (x != 0 && y != i) {temp.push(m1[x][y]);}
	}
	if (temp != '' && temp != "undefined") {mT[arr] = temp;arr++;}
}

var subMatx="";for (z=0;z < mT.length;z++){subMatx += ""+mT[z]+";";}
var tmp = getDet(subMatx);

if (Math.floor(plusMinus/2) != (plusMinus/2)) {
	if (sum != 0) {var sum = eval(sum-(m1[0][i]*tmp));} else {var sum = eval(m1[0][i]*tmp);}
} // NUM IS ODD
else {
	if (sum != 0) {var sum = eval(sum+(m1[0][i]*tmp));} else {var sum = eval(m1[0][i]*tmp);}
} // NUM IS EVEN

plusMinus++;
}

return sum;}

}





function iAmMatrix() {

if (document.Calulator.altTwo.value != 'exit') {
swapup();
document.Calulator.secondBtn.disabled=true;
document.Calulator.cos.value="[A]";
document.Calulator.sec.value="[B]";
document.Calulator.acos.value="[C]";
document.Calulator.sin.value="[D]";
document.Calulator.csc.value="[E]";
document.Calulator.asin.value="[F]";

document.Calulator.tan.value="View";
document.Calulator.cot.value="Add";
document.Calulator.atan.value="Edit";

document.Calulator.log.value="inv(";
document.Calulator.store.value="det(";

document.Calulator.xToy.value="[ ins ]";

//document.Calulator.bsp.disabled=true;
document.Calulator.sqrt.value="Rand";
document.Calulator.posneg.value="tpose(";
document.Calulator.divide.value="div(";
document.Calulator.multiply.value="mult(";
document.Calulator.minus.value="sub(";
document.Calulator.plus.value="add(";
document.Calulator.sq.value=",";
document.Calulator.period.value="•";
document.Calulator.enterMem.disabled=true;
document.Calulator.lastAns.disabled=true;
document.Calulator.nlog.disabled=true;
document.Calulator.lastAns.disabled=true;
document.Calulator.cubed.disabled=true;
document.Calulator.recall.disabled=true;
document.Calulator.altOne.disabled=true;
document.Calulator.altTwo.value='exit';
document.Calulator.altThree.disabled=true;
document.Calulator.altFour.disabled=true;
document.Calulator.altFive.disabled=true;
document.Calulator.altSix.disabled=true;
document.Calulator.altSeven.disabled=true;
document.Calulator.screen.value="GAC Matrices v1.0\n\n\nFor buttons with a proceeding '(', enter appropriate values separated by a comma.\n\neg. sub([A],[B])  or  tpose([A])\n\n\n                Click to continue\n\n\n         Copyright © 2005 Global Aircraft";
//var ready=setTimeout("readState()",30000);
}
else if (document.Calulator.altTwo.value == 'exit') {
document.Calulator.acos.value="acos";
document.Calulator.sec.value="sec";
document.Calulator.cos.value="cos";
document.Calulator.atan.value="atan";
document.Calulator.tan.value="tan";
document.Calulator.asin.value="asin";
document.Calulator.csc.value="csc";
document.Calulator.sin.value="sin";
document.Calulator.sq.value="x^2";
document.Calulator.cot.value="cot";
document.Calulator.period.value=".";
document.Calulator.enterMem.disabled=false;
document.Calulator.sqrt.disabled=false;
document.Calulator.divide.value="÷";
document.Calulator.bsp.disabled=false;
document.Calulator.multiply.value="×";
document.Calulator.minus.value="-";
document.Calulator.plus.value="+";
document.Calulator.secondBtn.disabled=false;
document.Calulator.enterMem.disabled=false;
document.Calulator.sqrt.value="sqrt";
document.Calulator.log.value="log";
document.Calulator.store.value="sto";
document.Calulator.clear.disabled=false;
document.Calulator.lastAns.disabled=false;
document.Calulator.posneg.value="+/-";
document.Calulator.cubed.disabled=false;
document.Calulator.nlog.disabled=false;
document.Calulator.xToy.value="x^y";
document.Calulator.e.disabled=false;
document.Calulator.pi.disabled=false;
document.Calulator.lastAns.disabled=false;
document.Calulator.recall.disabled=false;
document.Calulator.equals.value="solve";
document.Calulator.enterMem.value="mem";
document.Calulator.enterMem.style.color='#ffffaa';
document.Calulator.sq.title='square';
document.Calulator.altOne.disabled=false;
document.Calulator.altTwo.value='2';
document.Calulator.altThree.disabled=false;
document.Calulator.altFour.disabled=false;
document.Calulator.altFive.disabled=false;
document.Calulator.altSix.disabled=false;
document.Calulator.altSeven.disabled=false;
document.Calulator.screen.value="0";
enterPrgms();
iWorkNow();
}
else {}


}


// END -->
