//Globale Variablen
var error = false;
var newNumber = true;
var allowOperator = false;
var allowDot = true;

// Initialisierung

setDisplay("0");
	
// Fügt eine Zahl der Eingabe hinzu
function addNumber (s) {
	var before = "";

	if(s == "."){
		if(allowDot){
			allowDot = false;
		} else {
			s="";
		}
	}

	if(!error && newNumber) {
			before = '';
			newNumber = false;
	} else {
		before = getDisplay();
	}

	error = false;
	allowOperator = true;
	setDisplay(before + s);
}

// Fügt ein Operator der Eingabe hinzu
function addOperator (s) {
	var before = "";

	if(!error && allowOperator) {
		before = getDisplay();
		error = false;
		allowOperator = false;
		newNumber = false;
		allowDot = true;
		setDisplay(before + s);
	}
}

// Gibt ein Ergebnis aus
function getResult (func) {
	result = getDisplay();

	if(!error && allowOperator) {

		var result = 0;
		result = calc();

		switch (func) {
			case "sqrt":
				result = Math.sqrt(result);
				break;
			case "ln":
				result= Math.log(result);
				break;
			case "pow":
				result= result*result;
				break;
			case "changeSign":
				result = (-1) * result;
				break;
			case "calculate":
				break;
			default:
				result = "Interner Fehler";
				error = true;
				break;
		}

		allowOperator = true;
		newNumber = true;
		allowDot = true;
	}
	
	setDisplay(result);
}

// Berechnet den Ausdruck im Display und gibt entweder das Ergebnis als Zahl wieder
// oder eine Fehlermeldung und setzt error auf true
function calc () {
	var disp = 0;
	var result = 0;
	error = false;
	
	disp = getDisplay();
	
	if(check(disp) && allowOperator) {
		try {
			
			// Wenn alles korekt ist berechnet er hier den Ausdruck
			result = eval(disp);
		
		} catch (errorHandler) {
			result = 'Fehler';
			error = true;
		}
	} else {
		result = 'Fehler';
			error = true;
	}

	return result;	
}

// Überprüft den Eingabe-String
function check (input) {
	  var only = "0123456789[]()-+*%/.";
		  for (var i = 0; i < input.length; i++)
				    if (only.indexOf(input.charAt(i)) < 0)
							      return false;
			  return true;
}

// Zwei Funktionen um das Display zu manipulieren
function getDisplay(){
	return window.document.calculator.Display.value;
}

function setDisplay(x){
	window.document.calculator.Display.value = x;
}
