var process = new Array(); //array to hold process
var anum; //variable for numbers
var phoo = ""; //variable for operands
var newexp = true; //boolean for new expression
var newoprnd = true; //boolean for new operand

//main function
function calc(val) {
	toggle(18,0);
	if(numTest(val)) { //if value is a number
		if(process.length == 0) { //if queue is empty
			if(newexp) { //if a new expression
				anum = document.calcForm.input.value = val;
				newexp = false;
			} else { //if not a new expression
				anum = document.calcForm.input.value += val;
			}
		} else if(!numTest(process[process.length-1]) && process.length > 0) { //if previous item in queue is not a number and queue is not empty
			if(newoprnd) { //if a new operand
				anum = document.calcForm.input.value = val;
				newoprnd = false;
			} else { //if not a new operand
				anum = document.calcForm.input.value += val;
			}
		}
	} else if(val == "neg") { //if negate button was clicked
		anum = document.calcForm.input.value = -document.calcForm.input.value;
	} else if(val == "pi") { //if pi button was clicked
		anum = document.calcForm.input.value = Math.PI;
	} else { //if any operator
		phoo = val;
	}
	
	if(phoo == "clr") { //clear all
		clearQueue();
		clearVars();
		document.calcForm.input.value = 0;
		newexp = true;
		newoprnd = true;
	} else if(phoo == "equ") { //equate expression
		toggle(18,1);
		process[process.length] = anum;
		if(document.calcForm.input.value != "") {
			document.calcForm.input.value = equate();
			clearQueue();
			newexp = true;
			newoprnd = true;
		}
	} else if(phoo != "") { //add to expression
		process[process.length] = anum;
		process[process.length++] = phoo;
	}
	
	//clear variables
	clearVars();
}

//clear out variables
function clearVars() {
	anum;
	phoo = "";
}

//clear out Queue array
function clearQueue() {
	process = new Array();
}

//solve expressions
function equate() {
	var statement = "";
	var answer = "";
	
	//check for which operator
	for(var i = 0;i < process.length;i++) {
		if(process[i] == "add") {
			tank = "+";
		} else if(process[i] == "sub") {
			tank = "-";
		} else if(process[i] == "mul") {
			tank = "*";
		} else if(process[i] == "div") {
			tank = "/";
		} else if (process[i] == "mod") { 
			tank = "%";
		} else if (process[i] == "pow") { 
			tank = ",";
		} else {
			tank = "("+process[i]+")";
		}
		statement += tank;
	}
	
	//if power
	if(statement.indexOf(",") != -1) {
		statement = "Math.pow(" + statement + ")";
	}
	//evaluate expression
	answer = eval(statement);
	return answer;
}

//test for number
function numTest(field) {
	var nums = /[\0-9]/;
    if(nums.test(field)) {
  		return true;
	}
}

