var lendig = 16; 
var levelpush = 12;
var digh = 8;
var maxval = 4294967296;
var digithex = "" + "0123456789ABCDEF";
var stack = new array(levelpush);
var selectang = "deg";

var value = 0;	
var stackTier = 0;
var flag = true;
var decimal = 0;
var fixed = 0;
var expMode = false;
var base = 10;

function update(){
	if(base == 10)
	{
	    //value=8888888888888888888;
		var display = format(value);
		//alert(value);
		//var str = document.resbox.result.value;
		//if (display.indexOf("N") >=0) alert(display);
		/*
		if (value == 0)
		{
		        alert(str);
				if (str == "0.")
				{
					 document.resbox.result.value = "0.0";						 
				}
				else if (str == "0.0")
				{
					 document.resbox.result.value = "0.00";			    
				}
				else if (str == "0.00")
				{
					 document.resbox.result.value = "0.000";			    
				}
				else if (str == "0.000")
				{
					 document.resbox.result.value = "0.0000";			    
				}
				else if (str == "0.0000")
				{
					 document.resbox.result.value = "0.00000";			    
				}
				else if (str == "0.00000")
				{
					 document.resbox.result.value = "0.000000";			    
				}
				else if (str == "0.000000")
				{
					 document.resbox.result.value = "0.0000000";			    
				}
				else if (str == "0.0000000")
				{
					 document.resbox.result.value = "0.00000000";			    
				}
				else if (str == "0.00000000")
				{
					 document.resbox.result.value = "0.000000000";			    
				}
				else if (str == "0.000000000")
				{
					 document.resbox.result.value = "0.0000000000";			    
				}
				else if (str == "0.0000000000")
				{
					 document.resbox.result.value = "0.00000000000";			    
				}
				else if (str == "0.00000000000")
				{
					 document.resbox.result.value = "0.000000000000";			    
				}
				else if (str == "0.000000000000")
				{
					 document.resbox.result.value = "0.0000000000000";			    
				}
				else if (str == "0.0000000000000")
				{
					 document.resbox.result.value = "0.00000000000000";			    
				}
				//return;
        }
		*/
		if (expMode)
		{
			if (expval<0){
				display += " " + expval;
			}

			else{
				display += " +" + expval;
			}
		}

		if (display.indexOf(".")<0 && display != "Error "){
			if (flag || decimal>0){
				display += '.';
			}

			else{
			}
		}
		

		//alert(display);
		//if (display == 0) 
		//{document.resbox.result.value = "";}
		//else
		//{
		document.resbox.result.value = display;
		//}
	}

	else{
		value = value % maxval;

		if (value<0){
			value = value + maxval;
		}

		var display = format(value);

		if (flag){
			display += ".";
		}

		//alert(display);
		//if (display == 0) 
		//{document.resbox.result.value = "";}
		//else
		//{
		document.resbox.result.value = display;
		//}
	}	
}

function format(val)
 {
    //alert(val);
	if (base == 10)
	{
	 	var valStr = "" + value;
	 	if (valStr.indexOf("N")>=0 || (value == 2*value && value == 1+value))
		{
			return "Error ";
		}
		var i = valStr.indexOf("e")
		if (value > 1000000000000 && i < 0)
		{
		     value = value.toExponential(12);
			 valStr = "" + value;
			 i = valStr.indexOf("e");
		}
		if (i>=0)
		{
			var expStr = valStr.substring(i+1,valStr.length);
			if (i>11) i=11;  // max 11 digits
			valStr = valStr.substring(0,i);
			if (valStr.indexOf(".")<0) valStr += ".";
	 		valStr += " " + expStr;
	 	}
	 	else
	 	{
	 		var valNeg = false;
	 		if (value < 0)
	 		{ value = -value; valNeg = true; }
	
	 		var valInt = Math.floor(value);
			//alert("valInt is: " + valInt);
	 		var valFrac = value - valInt;
	 		var prec = lendig - (""+valInt).length - 1;	// how many digits available after period
	 		if (! flag && fixed>0)
			{
				prec = fixed;
			}
			   var mult = " 1000000000000000000".substring(1,prec+2);
			var frac = Math.floor(valFrac * mult + 0.5);

			valInt = Math.floor(Math.floor(value * mult + .5) / mult);
	
			if (valNeg)
			{
			    value = -value;
				valStr = "-" + valInt;
			}

			else
				valStr = "" + valInt;
				
			//alert("valStr is:" + valStr);

			var fracStr = "00000000000000"+frac;

			fracStr = fracStr.substring(fracStr.length-prec, fracStr.length);
			i = fracStr.length-1;
			if (flag || fixed==0)
			{
				while (i>=0 && fracStr.charAt(i)=="0")
					--i;
				fracStr = fracStr.substring(0,i+1);
			}
			if (i>=0) valStr += "." + fracStr;
		}
		return valStr;
	}

	else{
			var s = "";

		if (val<0 || val>maxval)

			return "Error";

		if (val==0)

			return "0";

		if (base<2)

		{

			while (val && s.length < 20)

			{

				var x = val % 16;

				var d = digithex.charAt(x);

				val = (val-x)/16 | 0;

				var y = val % 16;

				var e = digithex.charAt(y);

				val = (val-y)/16 | 0;

				s = "%" + e + d + s;

			}

			s = '"' + s + '"';

			return unescape(s);

		}

		while (val && s.length < 20)

		{

			var x = val % base;

			var d = digithex.charAt(x);

			val = (val-x)/base | 0;

			s = "" + d + s;

		}

		return s;
		}
}

function digit(n){
    //alert(value);
	//if (n
	if(base == 10){
		if (flag){
			value = 0;
			digits = 0;
			flag = false;
		}

		if (n==0 && digits == 0)
		{
			update();
			if(document.resbox.result.value.substr(0,2) != "0.")
			    return;
		}

		if (expMode){
			if (expval<0){
				n = -n;
			}

			if (digits < 3){
				expval = expval * 10 + n;
				++digits;
				update();
			}

			return;
		}

		if (value<0){
			n = -n;
		}
		//else if (value == 0 && document.resbox.result.value.substring(0,2) == "0.")
		//{}

		if (digits < lendig-1)
		{
		    //alert("good");
			++digits;
			if (decimal>0)
			{
			    //alert("decimal");
				decimal = decimal * 10;
				if (value !=0)
				{
				    value = value + (n/decimal);
				}
				else
				{
				    var str = document.resbox.result.value;
					str += n;
		            value = parseFloat(str);
					//++digits;
                    //alert(value);					
				}
				++fixed;
			}

			else{
				value = value * 10 + n;
			}
		}
		update();
	}

	else{
		if (flag){
			value = 0;
			digits = 0;
		}

		if (n>=base){
			return;
		}

		flag = false;

		if (value<0){
			n = -n;
		}

		if (digits < digh){
			value = value * base + n;
			++digits;
		}

		update();
	}
	document.emcalc.equalssign.focus();
}

function PhysicConstant(constantnum)
{
    var num= constantnum;
	   
	document.resbox.result.value = num;	
	value = num/1;
	update();	

	//document.emcalc.equalssign.focus();	 

	document.resbox.result.focus();	
}

function ChemElem(elem)
{
   var mw = 0;
   if (elem == "H")
   {
      mw = 1.00794;
	  //mw = 43343232222222222343444444444434;
   }
   else if (elem == "He")
   {
       mw=4.002602;
   }
   else if (elem == "Li")
   {
       mw=6.941;
   }
   else if (elem == "Be")
   {
       mw=9.012182
   }
   else if (elem == "B")
   {
       mw=10.811;
   }
   else if (elem == "C")
   {
       mw=12.0107;
   }
   else if (elem == "N")
   {
       mw=14.0067;
   }
   else if (elem == "O")
   {
       mw=15.9994
   }
   else if (elem == "F")
   {
       mw=18.9984032;
   }
   else if (elem == "Ne")
   {
       mw=20.1797;
   }
   else if (elem == "Na")
   {
       mw=22.98976;
   }
   else if (elem == "Mg")
   {
       mw=24.3050;
   }
   else if (elem == "Al")
   {
       mw=26.9815386;
   }
   else if (elem == "Si")
   {
       mw=28.0855;
   }
   else if (elem == "P")
   {
       mw=30.973762;
   }
   else if (elem == "S")
   {
       mw=32.065;
   }
   else if (elem == "Cl")
   {
       mw=35.453;
   }
   else if (elem == "Ar")
   {
       mw=39.948;
   }
   else if (elem == "K")
   {
       mw=39.0983;
   }
   else if (elem == "Ca")
   {
       mw=40.078;
   }
   else if (elem == "Sc")
   {
       mw=44.955912;
   }
   else if (elem == "Ti")
   {
       mw=47.867;
   }
   else if (elem == "V")
   {
       mw=50.9415;
   }
   else if (elem == "Cr")
   {
       mw=51.9961;
   }
   else if (elem == "Mn")
   {
       mw=54.938045;
   }
   else if (elem == "Fe")
   {
       mw=55.845;
   }
   else if (elem == "Co")
   {
       mw=58.933195;
   }
   else if (elem == "Ni")
   {
       mw=58.6934;
   }
   else if (elem == "Cu")
   {
       mw=63.546;
   }
   else if (elem == "Zn")
   {
       mw=65.38;
   }
   else if (elem == "Ga")
   {
       mw=69.723;
   }
   else if (elem == "Ge")
   {
       mw=72.64;
   }
   else if (elem == "As")
   {
       mw=74.92160;
   }
   else if (elem == "Se")
   {
       mw=78.96;
   }
   else if (elem == "Br")
   {
       mw=79.904;
   }
   else if (elem == "Kr")
   {
       mw=83.798;
   }
   else if (elem == "Rb")
   {
       mw=85.4678;
   }
   else if (elem == "Sr")
   {
       mw=87.62;
   }
   else if (elem == "Y")
   {
       mw=88.90585;
   }
   else if (elem == "Zr")
   {
       mw=91.224;
   }
   else if (elem == "Nb")
   {
       mw=92.90638;
   }
   else if (elem == "Mo")
   {
       mw=95.96;
   }
   else if (elem == "Tc")
   {
       mw=98;
   }
   else if (elem == "Ru")
   {
       mw=101.07;
   }
   else if (elem == "Rh")
   {
       mw=102.90550;
   }
   else if (elem == "Pd")
   {
       mw=106.42;
   }
   else if (elem == "Ag")
   {
       mw=107.8682;
   }
   else if (elem == "Cd")
   {
       mw=112.411;
   }
   else if (elem == "In")
   {
       mw=114.818;
   }
   else if (elem == "Sn")
   {
       mw=118.710;
   }
   else if (elem == "Sb")
   {
       mw=121.760;
   }
   else if (elem == "Te")
   {
       mw=127.60;
   }
   else if (elem == "I")
   {
       mw=126.90447;
   }
   else if (elem == "Xe")
   {
       mw=131.293;
   }
   else if (elem == "Cs")
   {
       mw=132.9054;
   }
   else if (elem == "Ba")
   {
       mw=137.327;
   }
   else if (elem == "Hf")
   {
       mw=178.49;
   }
   else if (elem == "Ta")
   {
       mw=180.94788;
   }
   else if (elem == "W")
   {
       mw=183.84;
   }
   else if (elem == "Re")
   {
       mw=186.207;
   }
   else if (elem == "Os")
   {
       mw=190.23;
   }
   else if (elem == "Ir")
   {
       mw=192.217;
   }
   else if (elem == "Pt")
   {
       mw=195.084;
   }
   else if (elem == "Au")
   {
       mw=196.966569;
   }
   else if (elem == "Hg")
   {
       mw=200.59;
   }
   else if (elem == "Tl")
   {
       mw=204.3833;
   }
   else if (elem == "Pb")
   {
       mw=207.2;
   }
   else if (elem == "Bi")
   {
       mw=208.98040;
   }
   else if (elem == "Po")
   {
       mw=209;
   }
   else if (elem == "At")
   {
       mw=210;
   }
   else if (elem == "Rn")
   {
       mw=222;
   }
   else if (elem == "Fr")
   {
       mw=223;
   }
   else if (elem == "Ra")
   {
       mw=226;
   }
   else if (elem == "Rf")
   {
       mw=267;
   }
   else if (elem == "Db")
   {
       mw=268;
   }
   else if (elem == "Sg")
   {
       mw=271;
   }
   else if (elem == "Bh")
   {
       mw=272;
   }
   else if (elem == "Hs")
   {
       mw=270;
   }
   else if (elem == "Mt")
   {
       mw=276;
   }
   else if (elem == "Ds")
   {
       mw=281;
   }
   else if (elem == "Rg")
   {
       mw=280;
   }
   else if (elem == "Cn")
   {
       mw=285;
   }
   else if (elem == "La")
   {
       mw=138.90547;
   }
   else if (elem == "Ce")
   {
       mw=140.116;
   }
   else if (elem == "Pr")
   {
       mw=140.90765;
   }
   else if (elem == "Nd")
   {
       mw=144.242;
   }
   else if (elem == "Pm")
   {
       mw=145;
   }
   else if (elem == "Sm")
   {
       mw=150.36;
   }
   else if (elem == "Eu")
   {
       mw=151.964;
   }
   else if (elem == "Gd")
   {
       mw=157.25;
   }
   else if (elem == "Tb")
   {
       mw=158.92535;
   }
   else if (elem == "Dy")
   {
       mw=162.500;
   }
   else if (elem == "Ho")
   {
       mw=164.93032;
   }
   else if (elem == "Er")
   {
       mw=167.259;
   }
   else if (elem == "Tm")
   {
       mw=168.93421;
   }
   else if (elem == "Yb")
   {
       mw=173.054;
   }
   else if (elem == "Lu")
   {
       mw=174.9668;
   }
   else if (elem == "Ac")
   {
       mw=227;
   }
   else if (elem == "Th")
   {
       mw=232.03806;
   }
   else if (elem == "Pa")
   {
       mw=231.03588;
   }
   else if (elem == "U")
   {
       mw=238.02891;
   }
   else if (elem == "Np")
   {
       mw=237;
   }
   else if (elem == "Pu")
   {
       mw=244;
   }
   else if (elem == "Am")
   {
       mw=243;
   }
   else if (elem == "Cm")
   {
       mw=247;
   }
   else if (elem == "Bk")
   {
       mw=247;
   }
   else if (elem == "Cf")
   {
       mw=252;
   }
   else if (elem == "Es")
   {
       mw=252;
   }
   else if (elem == "Fm")
   {
       mw=257;
   }
   else if (elem == "Md")
   {
       mw=258;
   }
   else if (elem == "No")
   {
       mw=259;
   }
   else if (elem == "Lr")
   {
       mw=262;
   }
 
   document.resbox.result.value = mw;	
   value = mw/1;
   update();
   document.resbox.result.focus();
}

function change(sd)
{
	var df = document.resbox.result.value;

	if (sd == "CP")
	{
		 if (df.indexOf(".") == df.length -1)
		 {
		   df = df.substring(0,df.length-1);
		 }
	   
	     clipboardData.setData('text',df); 
	}
	else if (sd == "PST")
	{
	   var str = clipboardData.getData('text'); 
	   value = str/1;
 	   update();
	}	
	else if (sd == "+/-")
	{
		 document.resbox.result.value = df * (-1);	 
	}
	else if(sd == "BKS")
	{
		 if(df.length>=1)
		 {
		     if (base == 10)
			 {
			     if (decimal > 0) 
				 {
				    decimal = decimal/10;
					fixed -= 1;
				 }
			 }
			 var res2 = df.substring(0,df.length-1);
			 if (df.indexOf(".") == df.length -1)
			   res2 = df.substring(0,df.length-2);
			 document.resbox.result.value = res2;
			 
			 if (base == 10)
				value = res2/1;
			 else
				value = value/base;
		 
			 update();
	 	}
	 }
	document.emcalc.equalssign.focus();	 
}

function angleConvert(e){
	if (e == "deg"){
		if (selectang == "rad"){
			value = (180 / Math.PI) * value;
		}

		else if (selectang == "grad"){
			value = (180 / 200) * value;
		}

		selectang = "deg";
	}

	else if (e == "rad"){
		if (selectang == "deg"){
			value = (Math.PI / 180) * value;
		}

		else if (selectang == "grad"){
			value = (Math.PI / 200) * value;
		}

		selectang = "rad";
	}

	else if (e == "grad"){
		if (selectang == "deg"){
			value = (200 / 180) * value;
		}

		else if (selectang == "rad"){
			value = (200 / Math.PI) * value;
		}

		selectang = "grad";
	}

	equals();
}

function emKeypress(evt){
    var keyCode = (evt.which) ? evt.which : evt.keyCode;
	var key = String.fromCharCode(keyCode);
	var charCode = (evt.which)? evt.which : evt.charCode;

	if (charCode > 0) charCode = 1;
	else if (charCode != 0 && charCode != 1) charCode = 2;
	
	//alert(keyCode);
	if (key >= "0" && key <= "9" && key < base){
	    //alert(key);
		intkey = parseInt(key);
		digit(intkey);
	}

	else if((key == "a" || key == "A") && 10 < base){
		digit(10);
	}

	else if((key == "b" || key == "B") && 11 < base){
		digit(11);
	}

	else if((key == "c" || key == "C") && 12 < base){
		digit(12);
	}

	else if((key == "d" || key == "D") && 13 < base){
		digit(13);
	}

	else if((key == "e" || key == "E") && 14 < base){
		digit(14);
	}

	else if((key == "f" || key == "F") && 15 < base){
		digit(15);
	}

	else if(key == "." && charCode > 0){
		period();
	}

	else if ((keyCode == "13" && charCode > 0) || key == "="){
	    equals();
	}
	
	else if ((key == "+" || key == "-" || key == "*") && charCode > 0)
	{
		emoper(key);
	}
	
	else if (key == "/" && charCode == 2)
	{
	    //alert("divide clicked");
		emoper("/");
	}
	
	else if(key == "i"){
		emoper("+");
	}
	else if(key == "k"){
		emoper("-");
	}
	else if(key == "j"){
		emoper("*");
	}
	else if(key == "l"){
		emoper("/");
	}
	else if(key== "(" && charCode > 0){
		openp();
	}

	else if(key == ")" && charCode > 0){
		closep();
	}

	else if(key == "S"){
		emoper("-");
	}
	else if(key == "A"){
		emoper("+");
	}
	else if(key == "Z"){
		emoper("/");
	}
	else if(key == "X"){
		emoper("*");
	}
	else if(key == "r"){
		emfunc("1/x");
	}

	else if(key == "q"){
		clearAll();
	}

	else if(key == "!" && charCode > 0){
		emfunc("n!");
	}

	else if(key == "n"){
		emfunc("ln");
	}

	else if(key == "N"){
		emfunc("etox");
	}

	else if(key == "m"){
		sign();
	}

	else if(key == "%" && charCode > 0){
		emoper('%');
	}

	else if(key == "&" && charCode > 0){
		emoper('and');
	}

	else if(key == "|" && charCode > 0){
		emoper('or');
	}

	else if(key == "^" && charCode > 0){
		emoper('xor');
	}

	else if(key == "~" && charCode > 0){
		emfunc('not');
	}

	else if(key == "<" && charCode > 0){
		openp();
	}

	else if(key == ">" && charCode > 0){
		closep();
	}
	
	else if (key == "_" && charCode > 0)
	{
		if(base==10){sign()}; 
	}
	else if (key == "\\" && charCode > 0)
	{
		emoper("/"); 
	}
	else{
		return false;
	}
}


function emKeydown(evt){
    var keyCode = (evt.which) ? evt.which : evt.keyCode;
	//alert(keyCode);

	if (keyCode == "27"){
		clearAll();
	}
	else if (keyCode == "13")
	{
	    ;
	
	}
	else if (evt.ctrlKey && keyCode == "67")
	{
		change("CP");
	}
	else if (evt.ctrlKey && keyCode == "86")
	{
		change("PST");
	}	
}

function checkbase(e){
	if(e >= base){
		return false;
	}

	else{
		return true;
	}
}

function calcBase(e)
{
	if(e == 10)
	{
		base=10;
		equals();
		document.resbox.radiobase[1].checked = true;
		document.resbox.trigmeth[0].disabled = false;
		document.resbox.trigmeth[1].disabled = false;
		document.resbox.trigmeth[2].disabled = false;

		document.emcalc.digit2.disabled = false;
		document.emcalc.digit3.disabled = false;
		document.emcalc.digit4.disabled = false;
		document.emcalc.digit5.disabled = false;
		document.emcalc.digit6.disabled = false;
		document.emcalc.digit7.disabled = false;
		document.emcalc.digit8.disabled = false;
		document.emcalc.digit9.disabled = false;
		document.emcalc.digit1.className = "calcbtn";
		document.emcalc.digit2.className = "calcbtn";
		document.emcalc.digit3.className = "calcbtn";
		document.emcalc.digit4.className = "calcbtn";
		document.emcalc.digit5.className = "calcbtn";
		document.emcalc.digit6.className = "calcbtn";
		document.emcalc.digit7.className = "calcbtn";
		document.emcalc.digit8.className = "calcbtn";
		document.emcalc.digit9.className = "calcbtn";
		
		document.btnabcdef.hexA.disabled = true;
		document.btnabcdef.hexB.disabled = true;
		document.btnabcdef.hexC.disabled = true;
		document.btnabcdef.hexD.disabled = true;
		document.btnabcdef.hexE.disabled = true;
		document.btnabcdef.hexF.disabled = true;
		document.btnabcdef.hexA.className = "disabledbtn";
		document.btnabcdef.hexB.className = "disabledbtn";
		document.btnabcdef.hexC.className = "disabledbtn";
		document.btnabcdef.hexD.className = "disabledbtn";
		document.btnabcdef.hexE.className = "disabledbtn";
		document.btnabcdef.hexF.className = "disabledbtn";

		document.extrabtn.funcPi.disabled = false;
		document.emcalc.funcSin.disabled = false;
		document.emcalc.funcCos.disabled = false;
		document.emcalc.funcCot.disabled = false;	
		document.emcalc.funcTan.disabled = false;
		document.extrabtn.funcG.disabled = false;
		document.extrabtn.funcR.disabled = false;
		document.extrabtn.funcAtm.disabled = false;
		document.emcalc.digitPeriod.disabled = false;
		document.emcalc.digitPlusMinus.disabled = false;
		
		document.emcalc.funcSin.className = "calcbtncoral";
		document.emcalc.funcCos.className = "calcbtncoral";
		document.emcalc.funcTan.className = "calcbtncoral";
		document.emcalc.funcCot.className = "calcbtncoral";
		document.extrabtn.funcPi.className = "calcbtn";
		document.extrabtn.funcR.className = "calcbtn";
		document.extrabtn.funcG.className = "calcbtn";
		document.extrabtn.funcAtm.className = "calcbtn";
		document.emcalc.digitPeriod.className = "calcbtn";
		document.emcalc.digitPlusMinus.className = "calcbtncoral";		
	}
	else{
		if(e == 16){
			base=16;
			equals();
			document.resbox.radiobase[0].checked = true;

			document.btnabcdef.hexA.disabled = false;
			document.btnabcdef.hexB.disabled = false;
			document.btnabcdef.hexC.disabled = false;
			document.btnabcdef.hexD.disabled = false;
			document.btnabcdef.hexE.disabled = false;
			document.btnabcdef.hexF.disabled = false;
			
			document.btnabcdef.hexA.className = "calcbtn";
			document.btnabcdef.hexB.className = "calcbtn";
			document.btnabcdef.hexC.className = "calcbtn";
			document.btnabcdef.hexD.className = "calcbtn";
			document.btnabcdef.hexE.className = "calcbtn";
			document.btnabcdef.hexF.className = "calcbtn";
			
			document.emcalc.digit2.disabled = false;
			document.emcalc.digit3.disabled = false;
			document.emcalc.digit4.disabled = false;
			document.emcalc.digit5.disabled = false;
			document.emcalc.digit6.disabled = false;
			document.emcalc.digit7.disabled = false;
			document.emcalc.digit8.disabled = false;
			document.emcalc.digit9.disabled = false;

			document.emcalc.digit2.className = "calcbtn";
			document.emcalc.digit3.className = "calcbtn";
			document.emcalc.digit4.className = "calcbtn";
			document.emcalc.digit5.className = "calcbtn";
			document.emcalc.digit6.className = "calcbtn";
			document.emcalc.digit7.className = "calcbtn";
			document.emcalc.digit8.className = "calcbtn";
			document.emcalc.digit9.className = "calcbtn";			
		}

		else if(e == 8){
			base=8;
			equals();
			document.resbox.radiobase[2].checked = true;

			document.emcalc.digit2.disabled = false;
			document.emcalc.digit3.disabled = false;
			document.emcalc.digit4.disabled = false;
			document.emcalc.digit5.disabled = false;
			document.emcalc.digit6.disabled = false;
			document.emcalc.digit7.disabled = false;
			
			document.emcalc.digit2.className = "calcbtn";
			document.emcalc.digit3.className = "calcbtn";
			document.emcalc.digit4.className = "calcbtn";
			document.emcalc.digit5.className = "calcbtn";
			document.emcalc.digit6.className = "calcbtn";
			document.emcalc.digit7.className = "calcbtn";
			
			document.btnabcdef.hexA.disabled = true;
			document.btnabcdef.hexB.disabled= true;
			document.btnabcdef.hexC.disabled= true;
			document.btnabcdef.hexD.disabled= true;
			document.btnabcdef.hexE.disabled= true;
			document.btnabcdef.hexF.disabled= true;
			
			document.btnabcdef.hexA.className = "disabledbtn";
			document.btnabcdef.hexB.className = "disabledbtn";
			document.btnabcdef.hexC.className = "disabledbtn";
			document.btnabcdef.hexD.className = "disabledbtn";
			document.btnabcdef.hexE.className = "disabledbtn";
			document.btnabcdef.hexF.className = "disabledbtn";
			
			document.emcalc.digit8.disabled = true;
			document.emcalc.digit9.disabled = true;
			
			document.emcalc.digit8.className = "disabledbtn";
			document.emcalc.digit9.className = "disabledbtn";
			
		}

		else if(e == 2){
			base=2;
			equals();
			document.resbox.radiobase[3].checked = true;

			document.emcalc.digit2.disabled = true;
			document.emcalc.digit3.disabled = true;
			document.emcalc.digit4.disabled = true;
			document.emcalc.digit5.disabled = true;
			document.emcalc.digit6.disabled = true;
			document.emcalc.digit7.disabled = true;
			document.emcalc.digit8.disabled = true;
			document.emcalc.digit9.disabled = true;
			
			document.emcalc.digit2.className = "disabledbtn";
			document.emcalc.digit3.className = "disabledbtn";
			document.emcalc.digit4.className = "disabledbtn";
			document.emcalc.digit5.className = "disabledbtn";
			document.emcalc.digit6.className = "disabledbtn";
			document.emcalc.digit7.className = "disabledbtn";
			document.emcalc.digit8.className = "disabledbtn";
			document.emcalc.digit9.className = "disabledbtn";
			
			document.btnabcdef.hexA.disabled = true;
			document.btnabcdef.hexB.disabled= true;
			document.btnabcdef.hexC.disabled= true;
			document.btnabcdef.hexD.disabled= true;
			document.btnabcdef.hexE.disabled= true;
			document.btnabcdef.hexF.disabled= true;
			
			document.btnabcdef.hexA.className = "disabledbtn";
			document.btnabcdef.hexB.className = "disabledbtn";
			document.btnabcdef.hexC.className = "disabledbtn";
			document.btnabcdef.hexD.className = "disabledbtn";
			document.btnabcdef.hexE.className = "disabledbtn";
			document.btnabcdef.hexF.className = "disabledbtn";
			
			document.emcalc.digit8.disabled = true;
			document.emcalc.digit9.disabled = true;
			
			document.emcalc.digit8.className = "disabledbtn";
			document.emcalc.digit9.className = "disabledbtn";		
		}
		document.resbox.trigmeth[0].disabled = true;
		document.resbox.trigmeth[1].disabled = true;
		document.resbox.trigmeth[2].disabled = true;

		document.extrabtn.funcPi.disabled = true;
		document.emcalc.funcSin.disabled = true;
		document.emcalc.funcCos.disabled = true;
		document.emcalc.funcTan.disabled = true;
		document.extrabtn.funcG.disabled = true;
		document.extrabtn.funcR.disabled = true;
		document.extrabtn.funcAtm.disabled = true;
		document.emcalc.funcCot.disabled = true;
		
		document.extrabtn.funcPi.className = "disabledbtn";
		document.emcalc.funcSin.className = "disabledbtn";
		document.emcalc.funcCos.className = "disabledbtn";
		document.emcalc.funcCot.className = "disabledbtn";	
		document.emcalc.funcTan.className = "disabledbtn";
		document.extrabtn.funcG.className = "disabledbtn";
		document.extrabtn.funcR.className = "disabledbtn";
		document.extrabtn.funcAtm.className = "disabledbtn";			

		document.emcalc.digitPeriod.disabled = true;
		document.emcalc.digitPlusMinus.disabled = true;			

		document.emcalc.digitPeriod.className = "disabledbtn";
		document.emcalc.digitPlusMinus.className = "disabledbtn";
	}
}


function pageonload(){
 	var display = format(value);
	display = " " + display;
	display = display.substring(display.length-lendig-1,display.length);
	document.resbox.result.value = display;
	document.resbox.radiobase[1].checked = true;
	document.resbox.trigmeth[0].checked = true;
	func("memclearall");
	calcBase(10);
	document.resbox.result.focus();	
}


function stackPushTier(){
	this.value = 0;
	this.op = "";
}

function array(length){
	this[0] = 0;
	for (i=0; i<length; ++i){
		this[i] = 0;
		this[i] = new stackPushTier();
	}

	this.length = length;
}


function push(value,op,prec){
	if (stackTier==levelpush){
		return false;
	}

	for (i=stackTier;i>0; --i){
		stack[i].value = stack[i-1].value;
		stack[i].op = stack[i-1].op;
		stack[i].prec = stack[i-1].prec;
	}

	stack[0].value = value;
	stack[0].op = op;
	stack[0].prec = prec;
	++stackTier;
	return true;
}


function pop(){
	if (stackTier==0){
		return false;
	}

	for (i=0;i<stackTier; ++i){
		stack[i].value = stack[i+1].value;
		stack[i].op = stack[i+1].op;
		stack[i].prec = stack[i+1].prec;
	}

	--stackTier;
	return true;
}

function clearAll(){
	stackTier = 0;
	clear();
}


function clear(){
	expMode = false;
	value = 0;
	enter();
	update();
	document.resbox.result.value = "";
}


function evalx()
{
    var str = "";     //History
	if (stackTier==0){
		return false;
	}

	op = stack[0].op;
	sval = stack[0].value;
	
	var valuepre = value;

	if (op == "+"){
 		value = sval + value;
	}

	else if (op == '-'){
		value = sval - value;
	}

	else if (op == '*'){
		value = sval * value;
	}

	else if (op == '/'){
		value = sval / value;
	}

	else if (op == '%'){
		value = sval % value;
	}

	else if (op == 'pow')
	{
		value = Math.pow(sval,value);
		//value = "^";
	}
	
	else if (op == 'xNd'){
		value = Math.pow(sval,1/value);
		op = "^1/";
		//op += value;
		//op += ")";
	}
	
	else if (op == 'xaddtoy'){
		var res = 0;
		for (var i = sval; i <= value; i++)
		{
		     res += i;
		}
		value = res;
		op = "...";
	}

	else if(op == "and"){
		value = sval & value;
	}

	else if(op == "or"){
		value = sval | value;
	}

	else if(op == "xor"){
		value = sval ^ value;
	}

	else if(op == "lsh"){
		value = sval << value;
	}

	else if(op == "rsh"){
		value = sval >> value;
	}

	pop();
	if (op=='(')
		return false;
	
    str += sval;
    str += " "; 
	str += op;
	str += " ";
	str += valuepre;
    str += " = "; 
	str += value;	
	//alert (str);
	var obj = document.getElementById("output");
	var x = obj.innerHTML;

    x += "<LI>";
    x += str;
	x += "<br>";
	obj.innerHTML = x;
 
	return true;
}


function openp(){
	enter();
	if (!push(0,'(',0)){
		value = "NAN (";
	}

	update();
	
	var obj = document.getElementById("output");
	var x = obj.innerHTML;

    x += "<LI>";
    x += document.resbox.result.value;
	x += "<LI>(";
	x += "<br>";
	obj.innerHTML = x;
}


function closep(){
	enter();
	while (evalx())
		;
		
	var obj = document.getElementById("output");
	var x = obj.innerHTML;

    x += "<LI>";
    x += ")";
	x += "<br>";
	obj.innerHTML = x;

	update();
	equals();
}


function emoper(oper)
{
	enter();

	if(base == 10){
		if (oper=='+' || oper=='-'){
			prec = 1;
		}

		else if (oper=='*' || oper=='/' || oper=='%')
		{ // oper=='%' was added (blippie)
			//alert("divide clicked");		 
			prec = 2;
		}

		else if (oper=="pow"){
			prec = 3;
		}

		else if (oper=="or" || oper=='xor'){ // this statement wasn't originally here
			prec = 4;
		}

		else if (oper=="and"){ // this statement wasn't originally here
			prec = 5;
		}

		else if(oper=="lsh" || oper=="rsh"){ // this statement wasn't originally here
			prec = 6;
		}
		
		else if (oper=="xNd"){
			prec = 7;
		}
		
		else if (oper=="xaddtoy"){
			prec = 8;
		}
		
		if (stackTier>0 && prec <= stack[0].prec){
			evalx();
		}

		if (!push(value,oper,prec)){
			value = "NAN emoper";
		}

		update();

	}

	else{
		if (oper=='+' || oper=='-'){
			prec = 1;
		}

		else if (oper=='*' || oper=='/' || oper=='%'){ 
			prec = 2;
		}

		else if(oper=='pow'){
			prec = 3;
		}

		else if (oper=="or" || oper=='xor'){
			prec = 4; 
		}

		else if (oper=="and"){
			prec = 5; 
		}

		else if(oper=="lsh" || oper=="rsh"){ 
			prec = 6;
		}
		
		else if (oper=="xNd"){
			prec = 7;
		}
		
		else if (oper=="xaddtit"){
			prec = 8;
		}

		else{
			value = "NAN EL";
		}

		if (stackTier>0 && prec <= stack[0].prec){
			evalx();
		}

		if (!push(value,oper,prec)){
			value = "NAN PU";
		}

		update();
	}
}

function refreshresult()
{
    var v = document.resbox.result.value;
	v = 1 * v;
	value = v;
	//alert(value);
	if (value != 0)
	{
	    update();
	}
}

function enter()
{
    //var v = document.resbox.result.value;
	//v = 1 * v;
	//value = v;
	//update();
	if(base == 10){
			if (expMode){
				value = value * Math.exp(expval * Math.LN10);
			}

			flag = true;
			expMode = false;
			decimal = 0;
			fixed = 0;
	}

	else{
		flag = true;
	}
}


function equals(){
	enter();
	while (stackTier>0){
		evalx();
	}
	
	//alert(value);

	update();
}




function sign(){
	if(base == 10)
	{
		if (expMode){
				expval = -expval;
		}
		
		else{
			value = -1 * value;
		}

		update();
	}
	document.resbox.result.focus();
}


function period(){
	if(base == 10)
	{
		var val = document.resbox.result.value;
		if (Math.ceil(val) == val && decimal == 0)
		{
				decimal = 1;		
		}
		else if (flag){
				value = 0;
				digits = 1;
		}

		flag = false;

		update();
	}
	document.resbox.result.focus();
}

function emfunc(f)
{
    var flag = 0;
	var str = "";
	
	enter();
	if (f=="1/x"){
		str += "1/";
		str += value;
		value = 1/value;
	}
	
	else if(f=="memclearall"){
		document.memform.meminput1.value = "";
		document.memform.meminput2.value = "";
		document.memform.meminput3.value = "";
		document.getElementById('output').innerHTML="";
		flag = 1;
	}
	
	else if (f=="n!")
	{
	    str += value;
		str += "!";
		value = Math.floor(value);
		oldFactValue = value;

		if (value<0 || value>200){
			value = "NAN 2";
		}

		else{
			var n = 1;
			var i;
			for (i=1;i<=value;++i){
				n *= i;
			}
		}

		value = n;
	}

	else if(f=="memplus1"){
		document.memform.meminput1.value = value;
		flag = 1;
	}

	else if(f=="memrecall1"){
		value = parseFloat(document.memform.meminput1.value);
		flag = 1;
	}

	else if(f=="memclear1"){
		document.memform.meminput1.value = "";
		flag = 1;
	}

	else if(f=="memplus2"){
		document.memform.meminput2.value = value;
		flag = 1;
	}

	else if(f=="memrecall2"){
		value = parseFloat(document.memform.meminput2.value);
		flag = 1;
	}

	else if(f=="memclear2"){
		document.memform.meminput2.value = "";
		flag = 1;
	}

	else if(f=="memplus3"){
		document.memform.meminput3.value = value;
		flag = 1;
	}

	else if(f=="memrecall3"){
		value = parseFloat(document.memform.meminput3.value);
		flag = 1;
	}

	else if(f=="memclear3"){
		document.memform.meminput3.value = "";
		flag = 1;
	}

	else if(f=="sin"){
		str += "Sin(";
		str += value;
		str += ")"
		if(document.resbox.trigmeth[0].checked){
			value = Math.sin(value * Math.PI / 180);
		}

		else if(document.resbox.trigmeth[1].checked){
			value = Math.sin(value);
		}

		else if(document.resbox.trigmeth[2].checked){
			value = Math.sin(value * Math.PI / 200);
		}
	}

	else if (f=="cos"){
		str += "Cos(";
		str += value;
		str += ")"		
		if(document.resbox.trigmeth[0].checked){
			value = Math.cos(value * Math.PI / 180);
		}

		else if(document.resbox.trigmeth[1].checked){
			value = Math.cos(value);
		}

		else if(document.resbox.trigmeth[2].checked){
			value = Math.cos(value * Math.PI / 200);
		}
	}

	else if (f=="tan"){
		str += "Tan(";
		str += value;
		str += ")"		
		if(document.resbox.trigmeth[0].checked){
			value = Math.tan(value * Math.PI / 180);
		}

		else if(document.resbox.trigmeth[1].checked){
			value = Math.tan(value);
		}
		
		else if(document.resbox.trigmeth[2].checked){
			value = Math.tan(value * Math.PI / 200);
		}
	}
	
	else if (f=="cot"){
		str += "Cot(";
		str += value;
		str += ")"		
		if(document.resbox.trigmeth[0].checked){
			value = Math.tan(value * Math.PI / 180);
			value = 1/value;
		}

		else if(document.resbox.trigmeth[1].checked){
			value = Math.tan(value);
			value = 1/value;
		}

		else if(document.resbox.trigmeth[2].checked){
			value = Math.tan(value * Math.PI / 200);
			value = 1/value;
		}
	}

	else if (f=="log"){
		str += "Log(";
		str += value;
		str += ")"		
		value = Math.log(value)/Math.LN10;
	}

	else if (f=="log2"){
		str += "Log2(";
		str += value;
		str += ")"		
		value = Math.log(value)/Math.LN2;
	}

	else if (f=="ln"){
		str += "Ln(";
		str += value;
		str += ")"		
		value = Math.log(value);
	}

	else if (f=="sqrt"){
		str += "Sqrt(";
		str += value;
		str += ")"		
		value = Math.sqrt(value);
	}

	//else if (f=="leftshift"){
	//	value = value << 1;
	//}

	//else if (f=="rightshift"){
	//	value = value >> 1;
	//}

	else if (f=="pi"){
		value = Math.PI;
		flag = 1;
		}
		
	else if (f=="G"){
		value = 0.000000000066684627;
		flag = 1;
	}
	
	else if (f=="atm"){
		value = 101325;
		flag = 1;
	}
	
	else if (f=="R"){
		value = 602200000000000000000000;
		flag = 1;
	}

	else if(f=="10tox"){
		str += "10^";
		str += value;
		value = Math.exp(value * Math.LN10);
	}

	else if(f=="etox"){
		str += "e^";
		str += value;
		value = Math.exp(value);
	}

	else if(f=="2tox"){
		str += "2^";
		str += value;
		value = Math.exp(value * Math.LN2);
	}

	else if(f=="xsq"){
		str += value;
		str += "^2";
		value = value*value;
	}
	
	else if(f=="x3"){
		str += value;
		str += "^3";
		value = value*value*value;
	}
	
	else if(f=="x3d"){
		str += value;
		str += "^(1/3)";
		//alert(value);
		value = Math.pow(value,1/3);
	}

	else if(f=="not"){
		str += "~";
		str += value;
		value = ~ value;
	}
	
	else if(f=="ceil"){
		str += "Ceil(";
		str += value;
		str += ")";
		value = Math.ceil(value);
	}
	else if(f=="flr"){
		str += "Floor(";
		str += value;
		str += ")";
		value = Math.floor(value);
	}
	else if(f=="int"){
		str += "Int(";
		str += value;
		str += ")";		
		value = Math.round(value);
	}

	update();
	if (flag == 0)
	{
	    str += " = ";
		str += value;
		
		var obj = document.getElementById("output");
		var x = obj.innerHTML;

		x += "<LI>";
		x += str;
		x += "<br>";
		obj.innerHTML = x;		
	}
}
