// Metoka-Projekt
// 4.10.2007 R. Stahl
// 16.7.2009 regex für UTF8 und mehrsprachig \w -> \S

/*
Validierung eines beliebigen Formulars
======================================

Voraussetzungen:
----------------

1) Im HTML-Teil muss ein Array regex definiert werden, das ein Array pro
(jedes!!!) Formularelenment und den dazu passenden regex-Ausdruck enthält.

Beispiel:
var regex = new Array(
	new Array('Username', regex_user),
	new Array('Passwort', regex_passwd),
	...
	new Array('Mail', regex_mail,
	new Array('hidden', /.+/),
	new Array('Knopf', /.+/)
);

2) jedes Formular einer Seite muß eine eindeutige ID haben,
damit dessen Felder ausgelesen werden können.
*/

var regex_phone = /^(\+?[\d\s\(\)\/-]+)$/;					// (+49) 1234/5-0
var regex_mail =  /^[\d\w\-\._]+@([\d\w\-\.]+)\.([\w]){2,4}$/;
var regex_web = /^(http:\/\/)?(\w+\.)+\w{2,4}$/;
var regex_pwd = /^\S{5,}$/;
var regex_egal = /.*/;
var regex_egalmin1 = /.+/;
var regex_min1buchstabe = /\S+/;
var regex_min1zahl = /\d+/;


function validate(formID, regex, errtx) {
	debug = 'GEPRÜFTE ELEMENTE:\n';

	// das Formular anhand seiner ID:
	// alert(formID);
	var arrElements = document.forms[formID].elements;
	// alert(regex.length + '#' + arrElements.length);

	// --------------------------------
	// für Debugging: alle übergebenen Elementnamen
	debugElements = 'ÜBERGEBENE ELEMENTE:\n';
	for(i = 0; i < arrElements.length; i++) {
		debugElements += document.forms[formID].elements[i].name + '\n';
	}
	// Ende Debugging
	// --------------------------------

	// Rückgabewert -> nicht abschicken bei Fehler:
	var okay = true;
	var err = '';

	// ------------------------------------------------------------------------
	// aus unerfindlichen Gründen ist anscheinend die Einstellung für
	// url_rewriter.tags = "form=" manchmal falsch,
	// sodass <input type="hidden" name="PHPSESSID" value="...">
	// entsteht. das führt bei der Validierung von Formularen zum Fehler
	// (register-data.php)
	// Dazu wird eine Kopie von arrElements benutzt, die kein Element mit dem
	// Namen PHPSESSID mehr enthält
	//
	// ACHTUNG: sehr "quick & dirty", da eigentliche Ursache nicht gefunden!!!
	var arrElements2 = new Array();

	for(i = 0; i < arrElements.length; i++) {
		if(arrElements[i].name != 'PHPSESSID')
			arrElements2.push(arrElements[i]);
	}
	// ------------------------------------------------------------------------

	try {
		for(i = 0; i < arrElements2.length; i++) {
			matches = arrElements2[i].value.match(regex[i][1]);	// Wert testen
			// alert(matches + ' ### ' + regex[i]);

			if(matches == null) {
				// Meldung des Fehlers:
				err += errtx + ' ' + regex[i][0]+ '\n';	// Meldung erzeugen
			 	okay = false;
			}

		 	debug += regex[i][0]+ '\n';
		}	// for
	} catch(e) {
			debug += '\n' + debugElements;
			alert(debug);
	}

	if(err) {
		alert(err);		// Meldung ausgeben
	}

	return okay;
}

// Test, ob zwei Passworteingaben identisch sind:
// ==============================================
// Formular: form[0]
// Feldnamen: passwd + passwd2

function twicePwd(txt) {
	theSame = document.forms[0].elements['passwd'].value === document.forms[0].elements['passwd2'].value;

	if(! theSame) {
		alert (txt);
		return false;
	} else return true;
}

// Das mit der ID="firstFocus" versehen Formularelement bekommt den Fokus
// ----------------------------------------------------------------------

function focusToFirstInput() {
	document.getElementById('firstFocus').focus();
	return true;
}

// Zähler für die restliche Zeichenzahl in einem Eingabefeld "tocountfield" (this)
// -------------------------------------------------------------------------------

function countChars(tocountfield, counter, max) {
	var len = tocountfield.value.length;
	var rest = max - len;

	if(rest <= -1) {	// über die Grenze hinaus geschrieben oder eingefügt?
		tocountfield.value = tocountfield.value.substr(0, len + rest);	// abschneiden -(-rest)
		rest = 0;
	}

	document.forms['main'].elements[counter].value = rest;
	return true;
}

