/*
 * Goldener Schnitt berechnen
 * (c) 2007 Mathias Hayoz, http://lemats.net
 *
 * Based on Prototype and script.aculo.us.
 */

GS = Class.create();

GS.phi  = 1.618033989;
GS.resIdA    = "rA";
GS.resIdB    = "rB";
GS.resIdAB   = "rAB";
GS.errorIdA  = "fieldAError";
GS.errorIdB  = "fieldBError";
GS.errorIdAB = "fieldABError";
GS.E_NaN     = "Bitte eine Zahl eingeben";
GS.E_EMPTY   = "Das Feld ist leer";

GS.calcByA = function(val) {
	GS._clearError(GS.errorIdA);
	var a = GS._prepareFloat(val);
	if (!isNaN(a)) {
		var b = a / GS.phi;
		GS.showResult(a, b);
	} else {
		GS._triggerError(GS.errorIdA, GS.E_NaN)
	}
}

GS.calcByB = function(val) {
	GS._clearError(GS.errorIdB);
	var b = GS._prepareFloat(val);
	if (!isNaN(b)) {
		var a = b * GS.phi;
		GS.showResult(a, b);
	} else {
		GS._triggerError(GS.errorIdB, GS.E_NaN)
	}
}
GS.calcByAB = function(val) {
	GS._clearError(GS.errorIdAB);
	var ab = GS._prepareFloat(val);
	if (!isNaN(ab)) {
		var a = ab / GS.phi;
		var b = ab - a;
		GS.showResult(a, b);
	} else {
		GS._triggerError(GS.errorIdAB, GS.E_NaN)
	}
}

GS.showResult = function(a, b) {
	var rA = $(GS.resIdA);
	var rB = $(GS.resIdB);
	var rAB = $(GS.resIdAB);
	var g = GS._getGenau();
	GS._setTextNode(rA, a.toFixed(g));
	GS._setTextNode(rB, b.toFixed(g));
	GS._setTextNode(rAB, (a+b).toFixed(g));
	
	new Effect.Highlight(rA, {duration: 2.0});
	new Effect.Highlight(rB, {duration: 2.0});
	new Effect.Highlight(rAB, {duration: 2.0});
}

GS.resetAll = function() {
	var rA = $(GS.resIdA);
	var rB = $(GS.resIdB);
	var rAB = $(GS.resIdAB);
	GS._setTextNode(rA, '');
	GS._setTextNode(rB, '');
	GS._setTextNode(rAB, '');
	GS._clearError(GS.errorIdA);
	GS._clearError(GS.errorIdB);
	GS._clearError(GS.errorIdAB);
	return true;
}

GS._prepareFloat = function(value) {
	return parseFloat(value.strip());
}

GS._triggerError = function(elementId, message) {
	var ct = $(elementId);
	GS._setTextNode(ct, message);
	new Effect.Pulsate(ct);

}

GS._getGenau = function() {
	var fElem = $('genau');
	return parseInt($F(fElem));
}

GS._clearError = function(elementId) {
	var ct = $(elementId);
	GS._setTextNode(ct, '');
}

GS._setTextNode = function(element, value) {
	if (element.hasChildNodes()) {
		element.firstChild.nodeValue = value;
	}
	else {
		element.appendChild(document.createTextNode(value));		
	}
}

