/* FORM VALIDATOR
 * Validiert Formulare
 * Author: Christian Sporer (http://www.acriba.at)
*/

/*
 Nachfolgend können vordefinierte Checks definiert werden
 zBsp.: 
 PatternsDict.mitbeistrich = /,/;
 Würde definieren, daß ein Beistrich im Text vorkommen muß. Dieser Test kann dann dann schnell durch Eingabe von:
 validator="mitbeistrich"
 durchgeführt werden.
*/

var PatternsDict = new Array();
    PatternsDict["email"] = new RegExp ("(\\w+[\\w|\\.|-]*\\w+)(@\\w+[\\w|\\.|-]*\\w+\\.\\w{2,4})"); // eine e-mail Adresse
    PatternsDict["nichtleer"] = new RegExp (".{1,}"); // mindestens ein character muß eingegeben werden
    PatternsDict["zahl"] = new RegExp ("\d"); // nur Zahlen
   
//PatternsDict["ip"] = new RegExp("[1-2]?\d{1,2}\.[1-2]?\d{1,2}\.[1-2]?\d{1,2}\.[1-2]?\d{1,2}"); //eine IP-Adresse
    PatternsDict["datum"] = new RegExp("^\\d{1,2}\/\\d{1,2}\/\\d{4}$"); //Datum in der Form dd/mm/yyyy

    PatternsDict["kreditkarte"] = new RegExp ("^((4\d{3})|(5[1-5]\d{2})|(6011))-?\d{4}-?\d{4}-?\d{4}|3[4,7]\d{13}$ "); //via, mastercard, discover, american express

    //PatternsDict["passwort"] = new RegExp ("^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{4,8}$");
    //mindestens 4 zeichen, nicht mehr als 8, mindestens ein buchstabe groß, 
    //ein kleingeschriebener buchstabe und eine zahl
   PatternsDict["name"] = new RegExp("(.*)?"); // vorname, nachnam oder beide 

    PatternsDict["zahlnichtnull"] = new RegExp ("^[1-9]{1}[0-9]*$");
    PatternsDict["kommazahlnichtnull"] = new RegExp ("^[1-9]{1}((.)?|(,)?)[0-9]*$|\empty");
    PatternsDict["postleitzahl"] = new RegExp ("^[0-9]{4,5}$|\empty");//("^(\d{0,5})$");
    PatternsDict["nichtundefiniert"] = new RegExp ("[^(^null$)]");
    PatternsDict["6ziffern"] = new RegExp ("^[0-9][0-9][0-9][0-9][0-9][0-9]$");
    
// Ab hier nichts mehr ändern.

function validate(objForm) {
		
    var errorfound = false;
    var errorstring = "";
    var elArr = objForm.elements;
    for(var i=0; i<elArr.length; i++)
    with(elArr[i]) { 
        var v = elArr[i].getAttribute("validator"); 
        if(!v) continue; 
        
        var thePat = PatternsDict[v];
        var gotIt = false;
        if(!thePat) {
        	var thePat = new RegExp(v);
        }
        
        // empty fix
        specialEmpty = false;
        source = thePat.source;
        if(source.lastIndexOf("|") != -1) {
		pos = source.lastIndexOf("|");
		end = source.substr(pos+1,source.length-pos);
		if(end == "empty") {
			specialEmpty =  true;
			pattern = source.substr(0,source.length - (source.length-pos));
			thePat = new RegExp(pattern);
		}
	}
             
        if(specialEmpty) {
        	if(value == "") {
        		continue;	
        	}	
        }
   
        gotIt = thePat.test(value);
        //var errtarget = elArr[i].getAttribute("errtarget");
        //if(!errtarget)  
   			errtarget = "alertbox";
   
        if(!gotIt) {
            errorfound = true;
            var errmsg = elArr[i].getAttribute("errmsg");    
            if(errtarget == "alertbox") {
            	errorstring = errorstring + errmsg + "\n";
            } else {
            	var errElem = document.getElementById(errtarget);
            	errElem.innerHTML = errmsg;
            }
        } else {
        	if(errtarget != "alertbox") {
        		var errElem = document.getElementById(errtarget);
            		errElem.innerHTML = "";
        	}
        }
    } 
    if(errorfound && errorstring != "") { 
    	alert(errorstring);
    	return false;
    }
    
    
    
    
    
    if(errorfound) {
    	return false;
    }
    return true;
}