// JavaScript Document

var img=new Image();
img.src='coms2.png';

var img2=new Image();
img.src='nums2.png';

var img3=new Image();
img.src='red2.png';

var img4=new Image();
img.src='degrad2.png';

var img5=new Image();
img.src='omdegrad.png';

var img6=new Image();
img.src='omdegrad2.png';

document.onkeydown=function checkShortcut() { 
	if(event.keyCode==8) 
	{
		delNow(); 
		return false; 
	} 
} 

document.onkeypress=function(e){

	var e=window.event || e;
	var keyunicode=e.charCode || e.keyCode;
	
	if (keyunicode == 49) {
		checkStat('1','1');
		return false; 
	}
	
	if (keyunicode == 50) {
		checkStat('2','2');
		return false; 
	}
	
	if (keyunicode == 51) {
		checkStat('3','3');
		return false; 
	}
	
	
	if (keyunicode == 52) {
		checkStat('4','4');
		return false; 
	}
	
	
	if (keyunicode == 53) {
		checkStat('5','5');
		return false; 
	}
	
	if (keyunicode == 54) {
		checkStat('6','6');
		return false; 
	}
	
	if (keyunicode == 55) {
		checkStat('7','7');
		return false; 
	}
	
	if (keyunicode == 56) {
		checkStat('8','8');
		return false; 
	}
	
	if (keyunicode == 57) {
		checkStat('9','9');
		return false; 
	}
	
	if (keyunicode == 48) {
		checkStat('0','0');
		return false; 
	}
	
	if (keyunicode == 46) {
		checkStat('.','.');
		return false; 
	}
	
	if (keyunicode == 43) {
		checkStat(' + ','+');
		return false; 
	}
	
	if (keyunicode == 45) {
		checkStat(' &minus; ','-');
		return false; 
	}
	
	if (keyunicode == 42) {
		checkStat(' &times; ','*');
		return false; 
	}
	
	if (keyunicode == 47) {
		checkStat(' &divide; ','/');
		return false;
	}
	
	if (keyunicode == 8) {
		delNow(); 
		return false; 
	}
	
	if (keyunicode == 61 || keyunicode == 13) {
		dispResult();
		return false; 
	}

}
	
function CngBG(obj,nc){
	 obj.nc=obj.className;
	 obj.className=nc;
	 
		obj.onmouseout=function(){ 
		this.className=this.nc; 
		}
}


function disableSelection(target){
	if (typeof target.onselectstart!="undefined") //IE route
		target.onselectstart=function(){return false}
	else if (typeof target.style.MozUserSelect!="undefined") //Firefox route
		target.style.MozUserSelect="none"
	else //All other route (ie: Opera)
		target.onmousedown=function(){return false}
	target.style.cursor = "default"
}


function isNumeric(sText)

{
var ValidChars = "0123456789.";
var IsNumber=true;
var Char;


   for (var i = 0; i < sText.length && IsNumber == true; i++) 
	  { 
	  Char = sText.charAt(i); 
	  if (ValidChars.indexOf(Char) == -1) 
		 {
		 IsNumber = false;
		 }
	  }
	  
return IsNumber;

}

function isDec(sText)

{
var IsDec=false;

   for (var i = 0; i < sText.length && IsDec == false; i++) 
	  { 
	  if (sText.charAt(i) == ".") 
		 {
		 IsDec = true;
		 }
	  }
	  
return IsDec;

}

var input = new String();
var calcstring = new String();
var tempstring = new String();
var temp = new String();
var calculation = new Array();
var display = new Array();
var type = new Array();
var constcheck = new Array();
var count = 0;
var err = 0;
var checkerr = "";
var result;
var resultprev = 0;
var mode = 0;
var tconst = 0;
var isDegrees = 1;
var mincheck = 0;

var isResult = 0;
var viewResult = 0;
var isRenew = 0;
	
var test;

input = "";

var viewportwidth;
var viewportheight;
 
 // the more standards compliant browsers (mozilla/netscape/opera/IE7) use window.innerWidth and window.innerHeight
 
 if (typeof window.innerWidth != 'undefined')
 {
	  viewportwidth = window.innerWidth,
	  viewportheight = window.innerHeight
 }
 
// IE6 in standards compliant mode (i.e. with a valid doctype as the first line in the document)

 else if (typeof document.documentElement != 'undefined'
	 && typeof document.documentElement.clientWidth !=
	 'undefined' && document.documentElement.clientWidth != 0)
 {
	   viewportwidth = document.documentElement.clientWidth,
	   viewportheight = document.documentElement.clientHeight
 }
 
 // older versions of IE
 
 else
 {
	   viewportwidth = document.getElementsByTagName('body')[0].clientWidth,
	   viewportheight = document.getElementsByTagName('body')[0].clientHeight
 }


function userChange() {

	input ="";
			
	for (var i=0; i<count; i++) {
	
		input+=display[i];
	}
	
	var changeDetails = document.getElementById("userInput");
	changeDetails.innerHTML = '<span style="float:left;">&nbsp;&nbsp;' + input + '<img src="cursor.gif" width="2" height="19" /></span>';
}

function resultChange() {
	var changeDetails = document.getElementById("resultInput");
	
	if (viewResult == 1 && count > 0) {
		changeDetails.innerHTML = '<span style="float:right;">' + result + '&nbsp;&nbsp;</span>';
	} else {
		changeDetails.innerHTML = '<span style="float:right;">' + checkerr + '&nbsp;&nbsp;</span>';
	}
}

function changeDeg(obj) {
	if (isDegrees == 0) {
		isDegrees = 1;
		obj.className = "omdeg";
	} else {
		isDegrees = 0;
		obj.className = "omdeg2";
	}
}

function omdeg(obj) {

	if (isDegrees == 0) {
		obj.className = "omdeg2";
	} else {
		obj.className = "omdeg";	
	}

}

function setdeg(obj) {

	if (isDegrees == 0) {
		obj.className = "deg2";
	} else {
		obj.className = "deg";	
	}
		
}

function checkStat(datin, val) {

	err = 0;
	checkerr = "";
	tconst = 0;
	
	if (isRenew == 1) {
		clearAll();
		isRenew = 0;
		
		if (val == "+" || val == "-" || val == "/" || val == "*" || val=="xn" || val=="xi" || val == "nrt") {
			display[count] = "Ans";
			calculation[count] = resultprev;
			type[count] = 0;
			constcheck[count] = 1;
			count++;
		}
	}
			
	if (val =="xn") {
		
		if (type[count-1] == 0 && (isNumeric(calculation[count-1]) == true)) {
		
			mode = 1;
			datin = "" + display[count-1] + "<sup class='style1'>(";
			val = calculation[count-1];
			val += 'xn';
			count--;
			
		} else {
			err = 2;
		}
	}
	
	if (val =="xi") {
		if (type[count-1] == 0 && (isNumeric(calculation[count-1]) == true)) {
			
			mode = 2;
			datin = "" + display[count-1] + "<sup class='style1'> -1</sup>";
			val = calculation[count-1];
			val += 'xi';
			count--;
		
		} else {
			err = 2;
		}
	}
	
	if (val =="tenx") {
		if ((type[count-1] == 0 && count  > 0) || (count == 0)) {
		
			if (isNumeric(calculation[count-1]) == true && count > 0) {
				display[count] = " &times; ";
				calculation[count] = "*";
				type[count] = 0;
				constcheck[count] = 0;
				count++;
			}
		
			mode = 3;
			datin = "10<sup class='style1'> (";
			val= 'tenx';
		
		} else {
			err = 2;
		}
	}
	
	if (val =="ex") {
		if ((type[count-1] == 0 && count  > 0) || (count == 0)) {
		
			mode = 4;
			datin = "e<sup class='style1'> (";
			val = 'ex';
			
		} else {
			err = 2;
		}
	}
	
	if (val =="nrt") {
		if (type[count-1] == 0 && (isNumeric(calculation[count-1]) == true)) {
				
			mode = 5;
			datin = "<sup class='style1'>" + display[count-1] + "</sup>&radic;(";
			val = calculation[count-1];
			val += 'nrt';
			count--;
			
		} else {
			err = 2;
		}
			
	}
	
	if (val == "sqrt" || val == "sin" || val == "sin-1" || val == "cos" || val == "cos-1" || val == "tan" || val == "tan-1" || val == "log" || val == "ln") {
		if ((type[count-1] == 0 && count  > 0) || (count == 0)) {
				
			if (val == "sqrt") {
				mode = 6;
			} else if (val == "sin") {
				mode = 7;
			} else if (val == "sin-1") {
				mode = 8;
			} else if (val == "cos") {
				mode = 9;
			} else if (val == "cos-1") {
				mode = 10;
			} else if (val == "tan") {
				mode = 11;
			} else if (val == "tan-1") {
				mode = 12;
			} else if (val == "log") {
				mode = 13;
			} else if (val == "ln") {
				mode = 14;
			}
			
		} else {
			err = 2;
		}		
	}
	
	if (val =="(") {
	
		mode = 20;
		
		if (count > 0 && type[count-1] != 0 ) {
			err = 1;
		}					
	}
	
	if (val ==")") {
	
		if (count > 0) {
	
			if (type[count-1] == 1) {
				mode = 0;
				datin = "" + display[count-1] + ")</sup>";
				val = ""+calculation[count-1]+")";
				count--;
			}

			
			if (type[count-1] == 3) {
				mode = 0;
				datin = "" + display[count-1] + ")</sup>";
				val = ""+calculation[count-1]+")";
				count--;
			}
			
			if (type[count-1] == 4) {
				mode = 0;
				datin = "" + display[count-1] + ")</sup>";
				val = ""+calculation[count-1]+")";
				count--;
			}
			
			if (type[count-1] == 5) {
				mode = 0;
				datin = "" + display[count-1] + ")";
				val = ""+calculation[count-1]+")";
				count--;
			}	
			
			if (eval(type[count-1]) >= 6 && eval(type[count-1]) <= 14) {
				mode = 0;
				datin = "" + display[count-1] + ")";
				val = ""+calculation[count-1]+")";
				count--;
			}	
		
		} else {
			err = 1;
		}
				
	}
	
	
	if (val == "." && count > 0) {
		
		if (isDec(calculation[count-1]) == true) {
			err = 1;
		}		
	}
			
	if (isNumeric(val) == true && (count > 0) && err == 0) {
		if ((isNumeric(display[count-1]) == true)) {
			datin = (calculation[count-1])+val;
			val = datin;
			count--;			
		}
		
		while (datin.length > 1 && datin.charAt(0)=="0" && datin.charAt(1)!=".") {
			datin = datin.substr(1, datin.length);
			val = datin;		
		}
		
	}
	
	if (val == "ans") {
		if (isResult == 1) { 
			val = "ans";
			tconst = 1;
		} else {
			err = 1;
		}			
	}
	
	if (val == "pi") {
		val = Math.PI;
		tconst = 1;
	}
	
	if (val == "e") {
		val = Math.E;
		tconst = 1;			
	}
			
	if (err == 0) {
		
		display[count] = datin;
			
		calculation[count] = val;
		
		type[count] = mode;
		
		constcheck[count] = tconst;
		
		count++;
		
		userChange();
		resultChange();
		
	} else {
		if (err == 1) {
			checkerr = "Syntax error";
		} else if (err == 2) {
			checkerr = "Function-in-function not allowed";
		}
		resultChange();
	}
	
	if (mode == 2 || mode == 20) {
		mode = 0;
	}
	
	err = 0;
	checkerr = "";

}
	
function dispResult() {
	
	if (count > 0) {
	
		calcstring = "";
		
		for (var i=0; i<count; i++) {
			if (constcheck[i] == 1 && display[i]=="Ans") {
				calculation[i] = resultprev;
			}			
		}
		
		for (var i=0; i<count; i++) {
		
			tempstring = "";
			temp = "";
						
			if (type[i] == 0 && constcheck[i] == 0) {
			
				if (calcstring.length > 0 && (isNumeric(calcstring.charAt(calcstring.length - 1)) || calcstring.charAt(calcstring.length - 1) == ")") && isNumeric(calculation[i])) {
					calcstring += "*";
				}
		
				calcstring += calculation[i];
			} 
			
			else if (type[i] == 1) {
				
				var a = calculation[i];
				temp = a.substr(0, a.length-2);
				
				if (calcstring.length > 0 && calcstring.charAt(calcstring.length-1) == "-") {
					mincheck = 1;
				}

				while (type[i] == 1) {
				
					if (constcheck[i+1] == 1 && tempstring.length > 0 && isNumeric(tempstring.charAt(tempstring.length - 1))) {
						tempstring += "*";
					}
					
					if (i == count-2 && type[i+1] > 0) {
						type[i+1] = 0;
						calculation[i+1] += ")";
					}
				
					tempstring += calculation[i+1];
					i++;
					
				}
				
				tempstring = tempstring.substr(0, tempstring.length-1);
				
				if (mincheck == 1 && (eval(tempstring)%2 == 0)) {
				
					calcstring = calcstring.substr(0, calcstring.length-1);
					calcstring += "+";
				
				}
							
				calcstring += Math.pow(eval(temp), eval(tempstring));
				
				mincheck = 0;
				
			}
		
			else if (type[i] == 2) {
			
				var a = calculation[i];
				temp = a.substr(0, a.length-2);
				
				calcstring += Math.pow(eval(temp), eval(-1));				
			}
		
			else if (type[i] == 3) {
						
				while (type[i] == 3) {
					
					if (constcheck[i+1] == 1 && tempstring.length > 0 && isNumeric(tempstring.charAt(tempstring.length - 1))) {
						tempstring += "*";
					}
					
					if (i == count-2 && type[i+1] > 0) {
						type[i+1] = 0;
						calculation[i+1] += ")";
					}
				
					tempstring += calculation[i+1];
					i++;
				}
				
				tempstring = tempstring.substr(0, tempstring.length-1);
				
				calcstring += Math.pow(10, eval(tempstring));
				
			}
			
			else if (type[i] == 4) {
			
				if (calcstring.length > 0 && (isNumeric(calcstring.charAt(calcstring.length - 1)) || calcstring.charAt(calcstring.length - 1) == ")")) {
					calcstring += "*";
				}
		
				while (type[i] == 4) {
				
					if (constcheck[i+1] == 1 && tempstring.length > 0 && isNumeric(tempstring.charAt(tempstring.length - 1))) {
						tempstring += "*";
					}
					
					if (i == count-2 && type[i+1] > 0) {
						type[i+1] = 0;
						calculation[i+1] += ")";
					}
				
					tempstring += calculation[i+1];
					i++;
				}
				
				tempstring = tempstring.substr(0, tempstring.length-1);
				
				calcstring += Math.pow(Math.E, eval(tempstring));
				
			}
		
			else if (type[i] == 5) {
			
				var a = calculation[i];
				temp = a.substr(0, a.length-3);

				while (type[i] == 5) {
				
					if (constcheck[i+1] == 1 && tempstring.length > 0 && isNumeric(tempstring.charAt(tempstring.length - 1))) {
						tempstring += "*";
					}
					
					if (i == count-2 && type[i+1] > 0) {
						type[i+1] = 0;
						calculation[i+1] += ")";
					}
				
					tempstring += calculation[i+1];
					i++;
				}
				
				tempstring = tempstring.substr(0, tempstring.length-1);
							
				calcstring += Math.pow(eval(tempstring), (1/eval(temp)));
			
			}
			
			else if (type[i] == 6) {
					
				if (calcstring.length > 0 && (isNumeric(calcstring.charAt(calcstring.length - 1)) || calcstring.charAt(calcstring.length - 1) == ")")) {
					calcstring += "*";
				}
				
				while (type[i] == 6) {
				
					if (constcheck[i+1] == 1 && tempstring.length > 0 && isNumeric(tempstring.charAt(tempstring.length - 1))) {
						tempstring += "*";
					}
					
					if (i == count-2 && type[i+1] > 0) {
						type[i+1] = 0;
						calculation[i+1] += ")";
					}
				
					tempstring += calculation[i+1];
					i++;
				}
				
				tempstring = tempstring.substr(0, tempstring.length-1);
				
				calcstring += Math.sqrt(eval(tempstring));
			
			}
			
			else if (type[i] == 7) {
			
				if (calcstring.length > 0 && (isNumeric(calcstring.charAt(calcstring.length - 1)) || calcstring.charAt(calcstring.length - 1) == ")")) {
					calcstring += "*";
				}
					
				while (type[i] == 7) {
				
					if (constcheck[i+1] == 1 && tempstring.length > 0 && isNumeric(tempstring.charAt(tempstring.length - 1))) {
						tempstring += "*";
					}
					
					if (i == count-2 && type[i+1] > 0) {
						type[i+1] = 0;
						calculation[i+1] += ")";
					}
				
					tempstring += calculation[i+1];
					i++;
				}

				tempstring = tempstring.substr(0, tempstring.length-1);
							
				if (isDegrees == 0) {
				
					calcstring += Math.sin(eval(tempstring));
					
				} else {
				
					calcstring += Math.sin(eval(tempstring)*Math.PI/180);
				
				}
			
			}
			
			else if (type[i] == 8) {
			
				if (calcstring.length > 0 && (isNumeric(calcstring.charAt(calcstring.length - 1)) || calcstring.charAt(calcstring.length - 1) == ")")) {
					calcstring += "*";
				}
					
				while (type[i] == 8) {
				
					if (constcheck[i+1] == 1 && tempstring.length > 0 && isNumeric(tempstring.charAt(tempstring.length - 1))) {
						tempstring += "*";
					}
					
					if (i == count-2 && type[i+1] > 0) {
						type[i+1] = 0;
						calculation[i+1] += ")";
					}
				
					tempstring += calculation[i+1];
					i++;
				}
				
				tempstring = tempstring.substr(0, tempstring.length-1);
				
				if (isDegrees == 0) {
				
					calcstring += Math.asin(eval(tempstring));
					
				} else {
				
					calcstring += ((180/Math.PI) * Math.asin(eval(tempstring)));
				
				}
			
			}
			
			else if (type[i] == 9) {
			
				if (calcstring.length > 0 && (isNumeric(calcstring.charAt(calcstring.length - 1)) || calcstring.charAt(calcstring.length - 1) == ")")) {
					calcstring += "*";
				}
					
				while (type[i] == 9) {
				
					if (constcheck[i+1] == 1 && tempstring.length > 0 && isNumeric(tempstring.charAt(tempstring.length - 1))) {
						tempstring += "*";
					}
					
					if (i == count-2 && type[i+1] > 0) {
						type[i+1] = 0;
						calculation[i+1] += ")";
					}
				
					tempstring += calculation[i+1];
					i++;
				}
				
				tempstring = tempstring.substr(0, tempstring.length-1);
				
				if (isDegrees == 0) {
				
					calcstring += Math.cos(eval(tempstring));
					
				} else {
				
					calcstring += Math.cos(eval(tempstring)*Math.PI/180);
				
				}
			
			}
			
			else if (type[i] == 10) {
			
				if (calcstring.length > 0 && (isNumeric(calcstring.charAt(calcstring.length - 1)) || calcstring.charAt(calcstring.length - 1) == ")")) {
					calcstring += "*";
				}
					
				while (type[i] == 10) {
				
					if (constcheck[i+1] == 1 && tempstring.length > 0 && isNumeric(tempstring.charAt(tempstring.length - 1))) {
						tempstring += "*";
					}
					
					if (i == count-2 && type[i+1] > 0) {
						type[i+1] = 0;
						calculation[i+1] += ")";
					}
				
					tempstring += calculation[i+1];
					i++;
				}
				
				tempstring = tempstring.substr(0, tempstring.length-1);
				
				if (isDegrees == 0) {
				
					calcstring += Math.acos(eval(tempstring));
					
				} else {
				
					calcstring += ((180/Math.PI) * Math.acos(eval(tempstring)));
				
				}
			
			}
			
			else if (type[i] == 11) {
			
				if (calcstring.length > 0 && (isNumeric(calcstring.charAt(calcstring.length - 1)) || calcstring.charAt(calcstring.length - 1) == ")")) {
					calcstring += "*";
				}
					
				while (type[i] == 11) {
				
					if (constcheck[i+1] == 1 && tempstring.length > 0 && isNumeric(tempstring.charAt(tempstring.length - 1))) {
						tempstring += "*";
					}
					
					if (i == count-2 && type[i+1] > 0) {
						type[i+1] = 0;
						calculation[i+1] += ")";
					}
				
					tempstring += calculation[i+1];
					i++;
				}
				
				tempstring = tempstring.substr(0, tempstring.length-1);
				
				if (isDegrees == 0) {
				
					calcstring += Math.tan(eval(tempstring));
					
				} else {
				
					calcstring += Math.tan(eval(tempstring)*Math.PI/180);
				
				}
			
			}
			
			else if (type[i] == 12) {
			
				if (calcstring.length > 0 && (isNumeric(calcstring.charAt(calcstring.length - 1)) || calcstring.charAt(calcstring.length - 1) == ")")) {
					calcstring += "*";
				}
					
				while (type[i] == 12) {
				
					if (constcheck[i+1] == 1 && tempstring.length > 0 && isNumeric(tempstring.charAt(tempstring.length - 1))) {
						tempstring += "*";
					}
					
					if (i == count-2 && type[i+1] > 0) {
						type[i+1] = 0;
						calculation[i+1] += ")";
					}
				
					tempstring += calculation[i+1];
					i++;
				}
				
				tempstring = tempstring.substr(0, tempstring.length-1);
				
				if (isDegrees == 0) {
				
					calcstring += Math.atan(eval(tempstring));
					
				} else {
				
					calcstring += ((180/Math.PI) * Math.atan(eval(tempstring)));
				
				}
			
			}
			
			else if (type[i] == 13) {
			
				if (calcstring.length > 0 && (isNumeric(calcstring.charAt(calcstring.length - 1)) || calcstring.charAt(calcstring.length - 1) == ")")) {
					calcstring += "*";
				}
					
				while (type[i] == 13) {
				
					if (constcheck[i+1] == 1 && tempstring.length > 0 && isNumeric(tempstring.charAt(tempstring.length - 1))) {
						tempstring += "*";
					}
					
					if (i == count-2 && type[i+1] > 0) {
						type[i+1] = 0;
						calculation[i+1] += ")";
					}
				
					tempstring += calculation[i+1];
					i++;
				}
				
				tempstring = tempstring.substr(0, tempstring.length-1);
				
				calcstring += Math.log(eval(tempstring)) / Math.LN10;
			
			}
		
			else if (type[i] == 14) {
			
				if (calcstring.length > 0 && (isNumeric(calcstring.charAt(calcstring.length - 1)) || calcstring.charAt(calcstring.length - 1) == ")")) {
					calcstring += "*";
				}
					
				while (type[i] == 14) {
				
					if (constcheck[i+1] == 1 && tempstring.length > 0 && isNumeric(tempstring.charAt(tempstring.length - 1))) {
						tempstring += "*";
					}
					
					if (i == count-2 && type[i+1] > 0) {
						type[i+1] = 0;
						calculation[i+1] += ")";
					}
				
					tempstring += calculation[i+1];
					i++;
				}
				
				tempstring = tempstring.substr(0, tempstring.length-1);
				
				calcstring += Math.log(eval(tempstring));
			
			}
			
			else if (type[i] == 20 || constcheck[i] == 1) {
				if (calcstring.length > 0 && (isNumeric(calcstring.charAt(calcstring.length - 1)) || calcstring.charAt(calcstring.length - 1) == ")")) {
					calcstring += "*";
				}
				
				calcstring += calculation[i];
			}	
		
		}
			
		result = eval(calcstring);
		
		result = ((Math.round(result * (Math.pow(10, 13)))) / (Math.pow(10, 13)));
		
		resultprev = ""+result;
		
		isResult = 1;
		viewResult = 1;
		isRenew = 1;
		
		resultChange();
	}
}

function delNow() {
	if (count > 1) {
		
		count--;
		
		mode = type[count-1];
		
		isRenew = 0;
		
		userChange();
		resultChange();
	} else {
		clearAll();
	}
}

function clearAll() {
	input = "&nbsp;";
	calcstring = "&nbsp;";
	tempstring = "&nbsp;";
	display = new Array();
	calculation = new Array();
	constcheck = new Array();
	count = 0;
	mode = 0;
	isRenew = 0;
	viewResult = 0;
	
	
	if (viewportheight > 900 && viewportwidth > 800) {
		document.getElementById("wrapper").className = "wrap1";	
		document.getElementById("adlayerbottom").className = "adlayerbottom1";		
	}		
	
	var somediv=document.getElementById("commands")
	disableSelection(somediv) //disable text selection within DIV with id="mydiv"
	
	var somediv=document.getElementById("keys")
	disableSelection(somediv) //disable text selection within DIV with id="mydiv"

	
	userChange();
	resultChange();
}
