
  var clearresult = false;
  var oper = "";
  var input = null;
  var preinput = null;
  
  function num(number)
  {
	  
	   
	  if (clearresult)
	  {		  
		  input.value = "";
		  clearresult=false;
	  }
	  
	  input.value += number; 

	  
  }

  function equal( inputval )
  {
	  /*
	  $.getJSON( "/api/", { input: inputval , trigo: $("#deg")[0].checked?"deg":"rad" }, function(data) {
		   var result = data.result;

		   if (result["code"]=="200")
		   {
			
		     input.value = result["value"];
		   } else
			   input.value = "";

		 clearresult = true;
	  });
	  */
	  $.ajax({  
		  url: "/api/",  
		  dataType: 'json',  
		  data: { input: inputval , trigo: $("#deg")[0].checked?"deg":"rad" },  
		  async: false,  
		  success: function(data){  
			  var result = data.result;

			   if (result["code"]=="200")
			   {				
			     input.value = result["value"];
			   } else
				   input.value = "";

			 clearresult = true;
           }  
		}); 
	  return false;
  }

  function op(operation)
  {
	 

	  if (operation == ".")
	  {
		  if (input.value.indexOf(".")<0)
			  input.value += ".";
		  
		   return;
	  }

	   if (operation=="+-")
	   {
		   if (input.value.indexOf("-")==0)
			   input.value = input.value.substring(1);
		   else
			   input.value = "-"+input.value;
		   return;
	   }
	  

	  if (input.value.length==0) return;
	  
	  if (clearresult)
	  {
		  preinput.value  = input.value + " "+ operation+" ";
		  input.value = "";
		  clearresult=false;
	  } else	  
	  

	  
	  preinput.value += input.value + " "+ operation+" ";
	  input.value = ""; 
	  equal( preinput.value  );

	  oper = preinput.value;
  }

  function cmd(command)
  {
	 

	  if (input.value.length==0) return;

	  clearresult = false;
	  if (clearresult)
	  {
		  preinput.value  = input.value;
		  input.value = "";
		  clearresult=false;
	  }


	  
	  switch (command)
	  {
	   case "e^":
		   preinput.value = oper + "e^"+input.value ;
	   break;
	   case "1/":
		   preinput.value = oper + "1/"+input.value ;
	   break;
	   case "10^":
		   preinput.value = oper +"10^"+input.value;
	   break;
	   case "^":
		   oper= preinput.value = oper +input.value +"^";
		   clearresult = true;
		   return;		   
	   break;
	   case "sqry":
		   oper = preinput.value = oper + "sqrt( "+ input.value +", ";
		   clearresult = true;
		   return;		   
	   break;
	   case "!":
		   preinput.value = oper +input.value +"!";
	   break;
	   case "%":
		   preinput.value = oper +input.value +"%";
       break;
	   case "^2":
		 
		     preinput.value = oper +input.value +"^2";
		 
	   break;
	   case "^3":
		   preinput.value = oper +input.value +"^3";
	   break;

	   case "mod":
		   oper = preinput.value = oper +input.value +" mod ";
		   clearresult = true;
		   return;		   
	   break;
	   	   
	   default:
		   
			 preinput.value = oper + command+"( "+input.value +" )";
		 
	  }
	  
	  input.value = ""; 
	  equal(  preinput.value );

	  oper ="";
	  
  }

  function eq()
  {
	 

	  var inp = oper + input.value ;

	

	  equal( inp );
	  preinput.value = "";

	  oper="";
  }

  function clr()
  {
	 
	  input.value = "0";
	  preinput.value = "";
	
	  clearresult = true;
  }

  function undo()
  {
	

	  if (input.value.length>1)
	    input.value = input.value.substring( 0, input.value.length-1 );
	  else
	  {
		  input.value = "0";
		  clearresult = true;
	  }	   
  }  
    
  $(document).keypress(function(event) {

	  if (event.target && event.target.nodeName && event.target.nodeName.toLowerCase()=="input")
	  {
		  if (event.which==13)
			  eq();
		  return;
	  }

	  switch ( event.which )
	  {
	    case 94: op( '^' ); break;
	    case 48: num( '0' ); break;
	    case 49: num( '1' ); break;
	    case 50: num( '2' ); break;
	    case 51: num( '3' ); break;
	    case 52: num( '4' ); break;
	    case 53: num( '5' ); break;
	    case 54: num( '6' ); break;
	    case 55: num( '7' ); break;
	    case 56: num( '8' ); break;
	    case 57: num( '9' ); break;
	    case 43: op( '+' ); break;
	    case 45: op( '-' ); break;
	    case 42: op( '*' ); break;
	    case 47: op( '/' ); break;
	    case 46:
	    case 44: op( '.' ); break;
	    case 8: undo(); break;
	    	    
	    case 13: eq(); break;
	    
	    case 27: clr(); break;
	    default:
	    	//alert( event.which+" " );
	    	
	    	if (event.which>=32 && event.which<=125)
	    	 num( String.fromCharCode( event.which ) );
	    	
		    break;
	  }
	  
	  if (event.which!=0)
	  event.preventDefault();	  
	  
  });
	  

  $(document).ready(function() {
	$("#input")[0].value="0";
	$("#preinput")[0].value="";
	 clearresult = true;

	  input = $("#input")[0];
	  preinput = $("#preinput")[0];  

	$("#deg")[0].checked="checked";
	
	window.setTimeout( function() {		

		$(".btn").mousedown( function(event) {
			$(event.target).addClass("active");
		});
		$(".btn").mouseup( function(event) {
			$(event.target).removeClass("active");
		});
		$(".btn").mouseout( function(event) {
			$(event.target).removeClass("active");
		});
		
		
	},10);
	
  });

