/**
* OpenPHPNuke: Great Web Portal System
*
* Copyright (c) 2001-2010 by
* Heinz Hombergsheinz ( at ) hhombergs.de
* Stefan Kaletta stefan ( at ) kaletta.de
* Alexander Weber xweber ( at ) kamelfreunde.de
*
* This program is free software. You can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License.
* See LICENSE for details.
*
* This software is based on various code found in the internet
* See CREDITS for details
* If you are an author of a part of opn and not you are not mentioned
* SORRY for that ! We respect your rights to your code, so please send
* an eMail to devteam@openphpnuke.com we will include you to the CREDITS asap
*/


/** Arraycontent
	array ('fieldname', 'checktype', 'errormessage', 'regex', length)

	Checktype:
	b	=	Element must not contain any spaces.
	c	=	Correct the name.
	e	=	Element can't be empty.
	f	=	Checks an element against another.
	f+	=	Checks an element against another only when elment contains something.
	l	=	Element can't exceed the given length.
	l +	=	Element can't exceed the given length only when elment contains something.
	l-	=	Element must have the given length.
	l-+	=	Element must have the given length only when elment contains something.
	m	=	Element must be a valid emailaddress.
	n	=	Element must be a number.
	p	=	Element must be a price with decimalcomma.
	p.	=	Element must be a price with decimalpoint.
	r	=	Element must match the given regex.
	r-	=	Element must not match the given regex.
	s	=	Element len should'nt be selected.
	<	=	Element can't be lesser then x.
	>	=	Element can't be greater then x.
	!	=	Element can't contain the value x.
*/
var validateFields = new Array();
var var_msg	= 'Errors:';

function Trim(STRING){
	STRING = LTrim(STRING);
	return RTrim(STRING);
}

function RTrim(STRING){
	while(STRING.charAt((STRING.length -1))==" "){
		STRING = STRING.substring(0,STRING.length-1);
	}
	return STRING;
}

function LTrim(STRING){
	while(STRING.charAt(0)==" "){
		STRING = STRING.replace(STRING.charAt(0),"");
	}
	return STRING;
}

function initvalidateFields(sender) {
	validateFields[sender] = new Array();
}

function setMessage (msg) {
	var_msg = msg;
}

function setValidatorValues (sender, field, check, message, regex, len) {
	validateFields[sender][validateFields[sender].length] = new Array(field, check, message, regex, len);
}

function validateForm (sender,myarray,err_hd) {
	var err_msg = !err_hd?new Array('Folgende Fehler sind aufgetreten:\n'):new Array(err_hd+'\n');
	var error = false;
	var field = '';

	for (var i=0;i<myarray[sender].length;i++){

		field = document.forms[sender].elements[myarray[sender][i][0]];

		/* Block 1 überprüft Felder, die ausgefüllt sein müssen */
		if (myarray[sender][i][1].indexOf('e')>-1){
			if (Trim(field.value) == '') {
				if ((field.type) == 'hidden') {
				} else {
					error = true;
					err_msg.push(myarray[sender][i][2]);
				}
			}
		}

		/* Block 2 überprüft, ob die Emailadresse formal richtig ist */
		else if (myarray[sender][i][1].indexOf('m')>-1) {
			if (field.value) {
				var usr = "([a-zA-Z0-9][a-zA-Z0-9_.-]*|\"([^\\\\\x80-\xff\015\012\"]|\\\\[^\x80-\xff])+\")";
				var domain = "([a-zA-Z0-9][a-zA-Z0-9._-]*\\.)*[a-zA-Z0-9][a-zA-Z0-9._-]*\\.[a-zA-Z]{2,5}";
				var regex = "^"+usr+"\@"+domain+"$";
				var myrxp = new RegExp(regex);
				var check = (myrxp.test(field.value));
				if (check!=true) {
					error=true;
					err_msg.push(field.value+" "+myarray[sender][i][2]);
				}
			}
		}

		/* Block 3 überprüft Felder, deren Wert eine Zahl sein muss */
		else if (myarray[sender][i][1].indexOf('n')>-1) {
			var num_error = false;
			if(field.value) {
				var myvalue = field.value;
				var num = myvalue.match(/[^0-9,\.]/gi);
				var dot = myvalue.match(/\./g);
				var com = myvalue.match(/,/g);
				if (num!=null) {
					num_error = true;
				} else if ((dot!=null)&&(dot.length>1)) {
					num_error = true;
				} else if ((com!=null)&&(com.length>1)) {
					num_error = true;
				} else if ((com!=null)&&(dot!=null)) {
					num_error = true;
				}
			}
			if (num_error==true) {
				error = true;
				err_msg.push(myvalue+" "+myarray[sender][i][2]);
			}
		}

		/* Block 4 überprüft Wert anhand eines regulären Audrucks auf bestimmte Muster */
		else if (myarray[sender][i][1].indexOf('r')>-1) {
			var notregex = myarray[sender][i][1].substr(1,1)?myarray[sender][i][1].substr(1,1):'';
			var regexp = myarray[sender][i][3];
			var erg = regexp.test (field.value);

			if (field.value) {
				if (notregex == '-') {
					if (erg == true) {
						error = true;
						err_msg.push(field.value+" "+myarray[sender][i][2]);
					}
				} else {
					if (erg == false) {
						error = true;
						err_msg.push(field.value+" "+myarray[sender][i][2]);
					}
				}
			}
		}

		/* Block 5 überprüft Felder, die als Preis formatiert sein m?ssen, ändert die Formatierung eventuell */
		else if (myarray[sender][i][1].indexOf('p')>-1) {
			var myvalue = field.value;
			var reg = /,-{1,}|\.-{1,}/;
			var nantest_value = myvalue.replace(reg,"");
			var num = nantest_value.match(/[^0-9,\.]/gi);
			var sep = myarray[sender][i][1].substr(1,1)?myarray[sender][i][1].substr(1,1):',';
			if (field.value) {
				var myvalue = field.value.replace(/\./,',');
				if (myvalue.indexOf(',')==-1) {
					field.value = myvalue+sep+'00';
				} else if (myvalue.indexOf(",--")>-1) {
					field.value = myvalue.replace(/,--/,sep+'00');
				} else if (myvalue.indexOf(",-")>-1) {
					field.value = myvalue.replace(/,-/,sep+'00');
				} else if (!myvalue.substring(myvalue.indexOf(',') + 2)) {
					error=true;
					err_msg.push(field.value+" "+myarray[sender][i][2]);
				} else if (myvalue.substring(myvalue.indexOf(',') + 3)!='') {
					error=true;
					err_msg.push(field.value+" "+myarray[sender][i][2]);
				} else if (num!=null) {
					error=true;
					err_msg.push(field.value+" "+myarray[sender][i][2]);
				}
			}
		}

		/* Block 6 überprüft Namensfelder, und korrigiert evtl. die Gross-/Kleinschreibung */
		else if (myarray[sender][i][1].indexOf('c')>-1) {
			var noble = new Array("de","von","van","der","d","la","da","of");
			var newvalue='';
			var myvalue = field.value.split(/\b/);
			for (k=0;k<myvalue.length;k++) {
				newvalue+= myvalue[k].substr(0,1).toUpperCase()+myvalue[k].substring(1);
			}
			for(k=0;k<noble.length;k++){
				var reg = new RegExp ("\\b"+noble[k]+"\\b","gi");
				newvalue = newvalue.replace(reg,noble[k]);
			}
			field.value = newvalue;
		}

		/* Block 7 überprüft auf die L?nge */
		else if (myarray[sender][i][1].indexOf('l')>-1){
			var min = myarray[sender][i][1].substr(1,1)?myarray[sender][i][1].substr(1,1):'';
			var minthere = myarray[sender][i][1].substr(2,2)?myarray[sender][i][1].substr(2,2):'';
			if (minthere == '+') {
				if (field.value) {
					if (min == '-') {
						if (field.value.length < myarray[sender][i][4]){
							error = true;
							err_msg.push(myarray[sender][i][2]);
						}
					} else {
						if (field.value.length > myarray[sender][i][4]){
							error = true;
							err_msg.push(myarray[sender][i][2]);
						}
					}
				}
			} else {
				if (min == '-') {
					if (field.value.length < myarray[sender][i][4]){
						error = true;
						err_msg.push(myarray[sender][i][2]);
					}
				} else {
					if (field.value.length > myarray[sender][i][4]){
						error = true;
						err_msg.push(myarray[sender][i][2]);
					}
				}
			}
		}

		/* Block 8 überprüft die Selectbox */
		else if (myarray[sender][i][1].indexOf('s')>-1){
			if (field.selectedIndex == myarray[sender][i][4]){
				error = true;
				err_msg.push(myarray[sender][i][2]);
			}
		}

		/* Block 9 überprüft Feld gegen Feld */
		else if (myarray[sender][i][1].indexOf('f')>-1){
			var field1 = document.forms[sender].elements[myarray[sender][i][3]];
			var there = myarray[sender][i][1].substr(1,1)?myarray[sender][i][1].substr(1,1):'';
			if (there == '+') {
				if (field.value) {
					if (field.value != field1.value){
						error = true;
						err_msg.push(myarray[sender][i][2]);
					}
				}
			} else {
				if (field.value != field1.value){
					error = true;
					err_msg.push(myarray[sender][i][2]);
				}
			}
		}

		/* Block 10 überprüft auf Leerstellen */
		else if (myarray[sender][i][1].indexOf('b')>-1){
			var text = field.value;
			if (field.value) {
				if (text.indexOf(' ') > -1){
					error = true;
					err_msg.push(myarray[sender][i][2]);
				}
			}
		}

		/* Block 11 Überprüft auf kleiner als */
		else if (myarray[sender][i][1].indexOf('<')>-1){
			if (field.value < myarray[sender][i][4]){
				error = true;
				err_msg.push(myarray[sender][i][2]);
			}
		}

		/* Block 12 Überprüft auf grösser als */
		else if (myarray[sender][i][1].indexOf('>')>-1){
			if (field.value > myarray[sender][i][4]){
				error = true;
				err_msg.push(myarray[sender][i][2]);
			}
		}

		/* Block 13 Überprüft auf Gleichheit */
		else if (myarray[sender][i][1].indexOf('!')>-1){
			if (field.value) {
				if (field.value == myarray[sender][i][3]){
					error = true;
					err_msg.push(myarray[sender][i][2]);
				}
			}
		}
	}

	/* im Fehlerfall werden hier die gesammelten Fehlermeldungen verarbeitet und angezeigt. Wenn das
	Formular ohne Beanstandung ist, wird es ?bertragen */
	if (error) {
		err_msg = err_msg.join('\n\xB7 ');
		alert(err_msg);
		return false;
	} else {
		return true;
	}
}
