var oper = "";
var out = "";
var hiox = 1;
var lsd = "";
function isNum(argvalue) {
argvalue = argvalue.toString();

if (argvalue.length == 0)
return false;

for (var n = 0; n < argvalue.length; n++)
if (argvalue.substring(n, n+1) < "0" || argvalue.substring(n, n+1) > "9")
return false; return true;
}


function factorialFunction(n)
  {
   if (isNaN(n) || n < 0)
    return NaN

   value = n == 0 ? 1 : n*factorialFunction(n - 1);
  // Do not return a rounded float value. // Do not return Infinity. // Return NaN instead.
    if (String(value).indexOf('.') != -1 || value == Number.POSITIVE_INFINITY)
   return NaN

	return value
   }


function simpleCalc(ss,df)
{
	var result = "";
	var ss = df.length;
	var arg1 ="";
	var arg2 = "";
	var bol = true;
	for(var c=0; c< ss; c++)
	{
		var digit = df.charAt(c);
		if(isNum(digit))
		{
			if(bol == true)
			{
			  	  arg1 = arg1+digit.toString();
			  }
			if(bol == false)
			   arg2 = arg2+digit;
		}
		else
		{
			if(c==0 && digit=="-")
			{
			    arg1 = arg1+digit.toString();
			}
			else if(digit==".")
			{
				if(bol == true)
				{
			   	arg1 = arg1+digit.toString();
				}
				else
				{
				arg2 = arg2+digit.toString();
				}
			}
			else
			{
				bol = false;
				oper = digit;
			}
		}
	}

	//alert(arg1);
	//alert(arg2);
	//alert(oper);

	if(oper=="" || oper==null)
	{
	out = arg1;
	return arg1;
	}
	else if(arg2=="" || arg2==null)
	{
	out = arg1;
	return arg1;
	}

	if(oper == "-")
	{
		var res = Math.round((parseFloat(arg1)-parseFloat(arg2))*10000)/10000;
		result =res;
		out = arg1+"-"+arg2+" = "+res;
		set(out);
	}
	if(oper == "+")
	{
		var res = Math.round((parseFloat(arg1)+parseFloat(arg2))*10000)/10000;
		result =res;
		out = arg1+"+"+arg2+" = "+res;
		set(out);
	}
	if(oper == "/")
	{
		var res = Math.round((parseFloat(arg1)/parseFloat(arg2))*10000)/10000;
		result =res;
		out = arg1+"/"+arg2+" = "+res;
		set(out);
	}
	if(oper == "*")
	{
		var res = Math.round((parseFloat(arg1)*parseFloat(arg2))*10000)/10000;
		result =res;
		out = arg1+"*"+arg2+" = "+res;
		set(out);
	}
	if(oper == "^")
	{
		var res = Math.pow(parseInt(arg1),parseInt(arg2));
		result =res;
		out = arg1+"^"+arg2+" = "+res;
		set(out);
	}
	return result;
}

var resa = false;
function change(name)
{
	var sd = name.value;
     //alert(sd);
	var df = document.calci.result.value;

	 if(sd == "AC")
	{
		 document.calci.result.value = "";
		 df="";
		 out = "clear data";
		set(out);
	 }
	else if(sd == "<")
	{
		 if(df.length>=1)
		 {
		 var res2 = df.substring(0,df.length-1);
		 document.calci.result.value = res2;
	 	}
	 }
	 else if(sd == "x!")
	{
		 var res = simpleCalc("=",df)
	  	 var res2 = factorialFunction(res);
	    	 out = "("+out+")! = "+res2;
	        set(out);
	  	document.calci.result.value = res2;
		resa = true;
	}
	else if(sd == "1/x")
	{
	 	var res = simpleCalc("=",df)
	 	var res2 = 1/res;
	 	out = "1/("+out+") = "+res2;
	 	document.calci.result.value = res2;
	 	set(out);
		resa = true;
	}
	else if(sd == "x^2")
	{
	 var res = simpleCalc("=",df)
	 var res2 = res*res;
	  out = "("+out+")^2 = "+res2;
	  set(out);
	  document.calci.result.value = res2;
  	  resa = true;
	}
	 else if(sd == "SQRT")
	{
	 var res = simpleCalc("=",df)
	 var res2 = Math.sqrt(res);
	  out = "SQRT("+out+") = "+res2;
	  set(out);
	  document.calci.result.value = res2;
	  resa = true;
	}
	 else if(sd == "sin")
	{
	 var res = simpleCalc("=",df)
	 //alert(res);
	 var res2 = Math.round(Math.sin(res*Math.PI/180)*100)/100;
	 // alert(res2);
	  out = "sin("+out+") = "+res2;
	  set(out);
	  document.calci.result.value = res2;
	  resa = true;
	}
	else if(sd == "cos")
	{
	 var res = simpleCalc("=",df)
	 var res2 = Math.round(Math.cos(res*Math.PI/180)*100)/100;
	  out = "cos("+out+") = "+res2;
	  set(out);
	  document.calci.result.value = res2;
	  resa = true;
	}
	else if(sd == "tan")
	{
	 var res = simpleCalc("=",df)
	 var res2 = Math.round(Math.tan(res*Math.PI/180)*100)/100;
	  out = "tan("+out+") = "+res2;
	  set(out);
	  document.calci.result.value = res2;
	  resa = true;
	}
	else if(sd == "e")
	{
		var res2 = Math.E;
		if(!isNaN(lsd))
			resa = true;

 		if(resa == true)
	  		document.calci.result.value = res2;
	  	else
	  		document.calci.result.value = df+res2;
		resa = true;
	}
	else if(sd == "exp")
	{
	 var res = simpleCalc("=",df)
	 var res2 = Math.exp(res);
	  out = "exponential("+out+") = "+res2;
	  set(out);
	  document.calci.result.value = res2;
	  resa = true;
	}
	else if(sd == "log")
	{
 		var res2 = Math.LN10;

		if(!isNaN(lsd))
			resa = true;

 		if(resa == true)
	  		document.calci.result.value = res2;
	  	else
	  		document.calci.result.value = df+res2;
		resa = true;
	}
	else if(sd == "ln")
	{
	 var res = simpleCalc("=",df)
	 var res2 = Math.log(res);
	  out = "log("+out+") = "+res2;
	  set(out);
	  document.calci.result.value = res2;
	  resa = true;
	}
	else if(sd == "PI")
	{
		if(lsd == "log" || lsd == "e")
		{
			if(lsd == "log")
			{
				df = df.substring(0,df.length-17);
			}
			if(lsd == "e")
			{
				df = df.substring(0,df.length-17);
			}
		}
		if(lsd != "PI" && (lsd == "" || lsd == "+" || lsd == "-" || lsd == "/" || lsd == "*"  || lsd == "AC" || lsd == "e" || lsd == "log") )
		{
	  		var res2 = Math.PI;
	  		document.calci.result.value = df+res2;
	   		if(isNaN(df))
	 		{
				document.calci.result.value = df+res2;
				resa = true;
			}
	  		else
	  		{
	  			document.calci.result.value = res2;
				resa = true;
			}
		}
	}
	else if(sd == "=")
	{
		var res = simpleCalc(sd,df)
		document.calci.result.value = res;
		resa = true;
	}
	else if(sd != "")
	{
		if(df=="" || df==null)
		{
   			document.calci.result.value = sd;
		}
		else
		{
			var cal = false;
			if(isNaN(sd) && sd != ".")
			{
				for(var si=0; si<df.length;si++)
				{
					var d = df.charAt(si);
					if(isNaN(d))
					{
					 	if(si==0 && d=="-"){}
					 	else{
						cal =true;
						}
					}
					//alert(d);
				}
			}

			if(cal == true){
				var res = simpleCalc("=",df)
				document.calci.result.value = res+sd;
				resa = false;
			}
			else{
				//if to check if previous is a result
				//alert(sd);
				if(resa == true && !isNaN(sd)){
					df="";
				}
				resa = false;
				document.calci.result.value = df+sd;
			}
		}
	}
lsd=sd;
}


function color(test)
{

//var ch ="background-color: "+test+"; width: 60px; height: 25px;";
//alert(ch);
	for(var j=1; j<31; j++)
	{
		if(j!=4)
		{
		var myI=document.getElementsByTagName("input").item(j);
		//myI.setAttribute("style",ch);
		myI.style.backgroundColor=test;
		}
	}

//myI.setAttribute("style","background-color: #F70808; width: 60px; height: 25px;");
}


function color1(test)
{
var myI=document.getElementsByTagName("table").item(0);
//myI.setAttribute("style",ch);
myI.style.backgroundColor=test;
}

var xx = true;

function set(result)
{
	/*var mytable=document.getElementsByTagName("table").item(12);
	var myrow=mytable.getElementsByTagName("tr").item(0);
	var mycol=myrow.getElementsByTagName("td").item(0);
	var mycol2=myrow.getElementsByTagName("div").item(1);*/

	var mycol=  document.getElementById("results");
	var mycol2=mycol.getElementsByTagName("div").item(1);

	var font2 = document.createElement("div");
	if(xx==true)
	{
	//font2.setAttribute("style","background-color: #EBCAC1;");
	font2.style.backgroundColor = "#edfbfa";
	xx=false;
	}
	else
	{
	//font2.setAttribute("style","background-color: #B7B3DB;");
	font2.style.backgroundColor = "#cdebfa";
	xx=true;
	}
	font2.style.fontSize = "15px";
	currenttext=document.createTextNode(hiox+") "+result);
	font2.appendChild(currenttext);

	//mycol.insertBefore(breakl,mycol2)
	mycol.insertBefore(font2,mycol2)
	//mytable.appendChild(myrow2);
	
	hiox = hiox+1;
	return true;
}