/* Vor dem Aufruf muss ein Array mit den zu prüfenden Feldern Initialisiert werden
	nach dem Muster
	var var_1 = new Array()
	var_1[0] = new Array('Feldname','Prüfkennzeichen','Fehlermeldung', Reglärer ausdruck (falls vorhanden));

	Prüfkennzeichen
		e --> empty (Feld darf nicht leer sein)
		n --> number (Feld darf nur Zahlen enthalten)
*/

var msg_1 = 'Fehler:';

function validate(sender,myarray,err_hd,msg) {

	var err_msg = !err_hd?new Array('Folgende Fehler sind aufgetreten:\n'):new Array(err_hd+'\n');
	var error = false;
	
	
	for (i=0;i<myarray.length;i++) {
	  field = document.forms[sender.name].elements[myarray[i][0]];
	
	/* Block 1 überprüft Felder, die ausgefüllt sein müssen */
	  if (myarray[i][1].indexOf('e')>-1) {
	    if (!field.value) {
	      error = true;
	      err_msg.push(myarray[i][2]);
	    }
	  }
	
	/* Block 2 überprüft Felder, deren Wert eine Zahl sein muss */
	  else if (myarray[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(myarray[i][2]);
	    }
	  }
	/* Block 3 überprüft ein Datum */
	  else if (myarray[i][1].indexOf('d')>-1) {
	    if (field.value) {
	      if (!string2date(field.value)) {
	        error = true;
	        err_msg.push(myarray[i][2]);
	      }
	    }
	  }
		
		/* Block 4 überprüft, ob die Emailadresse formal richtig ist */
	  else if (myarray[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(myarray[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 {
  	if(msg!=""){
	    return confirm(msg);
		}else{
			return true;
		}
  }
}

function string2date(string)
{
    if(!string) return null;
    string += '';
    string = string.replace(/[-\/]/g, '.'); // Trennzeichen normalisieren
    string = string.replace(/[^0-9.: ]/g, ''); // ungültige Zeichen entfernen
    string = string.replace(/ +/g, ' '); // doppelte Leerzeichen entfernen
    var uhr = string.split(" "); // Uhrzeit abtrennen
    var split = uhr[0].split(".");
    var day = parseInt(split[0], 10);
    var month = parseInt(split[1] || 0, 10);
    var year = parseInt(split[2] || 0, 10);

    if(isNaN(year)) year = getFullYear();

    var check = new Date(year, month - 1, day);
    if(uhr[1])
    {
         var uhr = uhr[1].split(':');
         check.setHours( uhr[0] || 0 );
         check.setMinutes( uhr[1] || 0 );
         check.setSeconds( uhr[2] || 0 );
    }

    var day2 = check.getDate();
    var year2 = getFullYear(check);
    var month2 = check.getMonth() + 1;

    return ( year2 == year && month == month2 && day == day2 ) ? check
    : null;
}
function getFullYear(date)
{
    if(!date) date = new Date();
    if(typeof date.getFullYear != 'undefined') return date.getFullYear();
    var year = date.getYear();
    if(year < 1000) year += 2000;
    return year;
}
