/*
var msg = 'Error:';

var fields = new Array()
fields[0]  = new Array('name','check','errormessage',/regexp/);

parameter      example                  description
name           street                   name of the form-element to be tested
check          e                        the type of test that sould be done
fehlermeldung  the street is missing    Fehlermeldung fŸr das betreffende Element
regexp         [0-9A-Za-z]{3,16}        regular expression
msg            You've missed something  custom error title

value  info        test
e      empty       the element should not be empty
b      checkbox    is checked or not
n      number      the element has to be a number
m      mail        the email validity
r      regexp      regular expression
p      price       special number format "10,00" (colon)
p.     price_dot   special number format "10.00" (period)
c      capitalize  the entry to capitalize
*/

function validate(sender,myarray,err_hd) {

	var err_msg = !err_hd?'Folgende Fehler sind aufgetreten:\n':err_hd+'\n';
	var error = false;

	for (i=0;i<myarray.length;i++) {
		field = document.forms[sender.name].elements[myarray[i][0]];

		/* check for empty form fields */
		if (myarray[i][1].indexOf('e')>-1){
			if (!field.value){
				error = true;
				err_msg += myarray[i][2]+'\n';
			}
		}
		/* check for checkbox entries */
		if (myarray[i][1].indexOf('b')>-1){
			box = document.forms[sender.name].elements[myarray[i][0]];
			bc  = false;
			if (box.length > 1) {
				for (j=0;j<box.length;j++) {
					if (box[j].checked) bc = true;
				}
				if (!bc) {
					error = true;
					err_msg += myarray[i][2]+'\n';
				}
			} else {
				if (!box.checked) {
					error = true;
					err_msg += myarray[i][2]+'\n';
				}
			}
		}

		/* Check the email address */
		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 += field.value+" "+myarray[i][2]+'\n';
				}
			}
		}
	
		/* check the syntax of number fields */
		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 += myvalue+" "+myarray[i][2]+'\n';
			}
		}
	
		/* check values using regular expressions */
		else if (myarray[i][1].indexOf('r')>-1) {
			var regexp = myarray[i][3];
			if (field.value) {
				if (!regexp.test(field.value)) {
					error = true;
					err_msg += field.value+" "+myarray[i][2]+'\n';
				}
			}
		}

		/* check number entries that have to be formated as price */
		else if (myarray[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)
			sep = myarray[i][1].substr(1,1)?myarray[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 += field.value+" "+myarray[i][2]+'\n';
				} else if (myvalue.substring(myvalue.indexOf(',') + 3)!='') {
					error=true;
					err_msg += field.value+" "+myarray[i][2]+'\n';
				} else if (num!=null) {
					error=true;
					err_msg += field.value+" "+myarray[i][2]+'\n';
				}
			}
		}
	
		/* check name erntries  */
		else if (myarray[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;
		}
	}

	/* the followeing code ensembles the error information or passes the form when there's no error */
	if (error) {
		//err_msg = err_msg.join('\n\xB7 ');
		alert(err_msg);
		return false;
	} else {
		return true;
	}
}

