/* Zaehlt die Woerter und Buchstaben eines Textes, und zeigt diese
 * fuer den Benutzer an.
 */
function EingabenZaehler(eid) {
	var eingabefeld = document.getElementById(eid);
	var keineBuchstaben = ' ,.!?=)(/&%$§"\':;|<>#+*~\n';
	// max. Anzahl Woerter/Buchstaben
	var maxW = null;
	var maxBpW = 50;
	var maxB = null;
	// Funktion, die aufgerufen wird, wenn die max. Anzahl überschritten wird.
	var mwF = null;
	var mbF = null;
	
	this.woerterZaehler = function(element, maxbpw) {
		if (typeof maxbpw != 'undefined')
			maxBpW = maxbpw;
		
		var e = document.getElementById(element);
		
		if (eingabefeld.addEventListener) {
			eingabefeld.addEventListener('change', function() { zaehleWoerter(e); }, false);
			eingabefeld.addEventListener('keyup', function() { zaehleWoerter(e); }, false);
		}
		else if (eingabefeld.attachEvent) {
			eingabefeld.attachEvent('onchange', function() { zaehleWoerter(e); });
			eingabefeld.attachEvent('onkeyup', function() { zaehleWoerter(e); });
		}
		
		zaehleWoerter(e);
	};
	
	this.buchstabenZaehler = function(element) {
		var e = document.getElementById(element);
		
		if (eingabefeld.addEventListener) {
			eingabefeld.addEventListener('change', function() { zaehleBuchstaben(e); }, false);
			eingabefeld.addEventListener('keyup', function() { zaehleBuchstaben(e); }, false);
		}
		else if (eingabefeld.attachEvent) {
			eingabefeld.attachEvent('onchange', function() { zaehleBuchstaben(e); });
			eingabefeld.attachEvent('onkeyup', function() { zaehleBuchstaben(e); });
		}
		
		zaehleBuchstaben(e);
	};
	
	var zaehleBuchstaben = function(element) {
		anzahl = eingabefeld.value.length;
		
		if (typeof element != 'undefined') 
			element.innerHTML = anzahl;
		
		if (null !== maxB && null !== mbF) {
			if (anzahl > maxB) {
				mbF(true);
			}
			else {
				mbF(false);
			}
		}
	};
	
	var zaehleWoerter = function(element) {
		var text = eingabefeld.value;
		var imwort = 0;
		var anzahl = 0;
		for (var i = 0; i < text.length; i++) {
			if (keineBuchstaben.indexOf(text.charAt(i)) != -1
			    || imwort > maxBpW) {
				if (imwort) {
					anzahl++;
					imwort = 0;
				}
			}
			else {
				imwort++;
			}
		}
		if (imwort) anzahl++;
	
		if (typeof element != 'undefined') 
			element.innerHTML = anzahl;
			
		if (null !== maxW && null !== mwF) {
			if (anzahl > maxW) {
				mwF(true);
			}
			else {
				mwF(false);
			}
		}
		
	};
	
	this.maxWoerter = function(max, element, funktion) {
		maxW = max;
		mwF = funktion;
		
		document.getElementById(element).innerHTML = max;
	}
	
	this.maxBuchstaben = function(max, element, funktion) {
		maxB = max;
		mbF = funktion;
		
		document.getElementById(element).innerHTML = max;
	}
	
}

function text_einfaerben(drueber) {
	// Variablen initialisieren (beim ersten Aufruf)
	if (typeof this.geaendert == 'undefined') {
		this.geaendert = false;
		this.alteFarbe = document.getElementById('warnung').style.color;
	}
	// max. Anzahl überschritten, färbe Text rot ein.
	if (drueber && this.geaendert === false) {
		this.geaendert = true;
		document.getElementById('warnung').style.color = 'red';
	}
	// max. Anzahl nicht oder nicht mehr überschritten, normale Farbe.
	else if (drueber === false) {
		this.geaendert = false;
		document.getElementById('warnung').style.color = this.alteFarbe;
	}
}

window.onload = function () {
	// Wörter- und Buchstabenzähler initialisieren
	// 'text' ist die ID des Eingabefeldes
	var eingabenzaehler = new EingabenZaehler('text');
	// Maximale Anzahl an Buchstaben festlegen. (450)
	// 'bmax' ist die ID des Elements, in dem die maximale Anzahl von 
	// Buchstaben angezeigt wird. text_einfaerben ist die Funktion, 
	// die beim Überschreiten der max. Anzahl aufgerufen wird
	eingabenzaehler.maxBuchstaben(450, 'bmax', text_einfaerben);
	// Wörterzähler aktivieren, 'wz' ist die ID des Elements in dem
	// die Anzahl der Wörter angezeigt wird.
	eingabenzaehler.woerterZaehler('wz');
	// Buchstabenzähler aktivieren, 'bz' ist die ID des Elements in dem
	// die Anzahl der Buchstaben angezeigt wird.
	eingabenzaehler.buchstabenZaehler('bz');
};

