function checkForm()
{	
	//--- default Werte setzen
	this.__construct = function()
	{
		this.element = false;
		this.value = false;
		this.arCache = new Array();
		this.arAusnahme = new Array();
		this.submit = true;
		this.deleteLastChar = false;
	}

	this.setConfig = function(form,fillmodus,cssForError)
	{
		if(!form)
		{
			return false;
		}
		this.form = form;		
		this.cssForError = (cssForError) ? cssForError : "global_checkform_plaus_error";
		this.fillmodus = (fillmodus) ? true : false;				
	}

	//--- Definiert Ids die Ausnahmen darstellen, welche nicht überprüft werden
	this.loadAusnahme = function(id)
	{
		this.arAusnahme[id] = id;
	}

	this.resetAusnahme = function()
	{
		this.arAusnahme = new Array();
	}
	
	//--- Formular auf plausibilität prüfen
	this.checkForm = function(form,fillmodus,background)
	{
		this.focus = false;
		this.deleteLastChar = false;
		this.setConfig(form,fillmodus,background);
		this.submit = true;				
		
		//--- Elemente des Formulars durchgehen
		for(var i = 0 ; i < this.form.elements.length ; i++)
		{
			this.element = this.form.elements[i];
			if(this.element.name && this.element.id != this.arAusnahme[this.element.id])
			{				
				this.explodeCssName();
			}else if(this.element.id == this.arAusnahme[this.element.id]){
				var arCssClass = this.element.className.split(" ");
				var elementCss = "";
				//--- Css bei plausibilitätsfehler wieder herausholen (wird eventuell wieder gesetzt)
				//--- Wenn nicht wieder gesetzt wird, war alles okay -> plausibilität okay
				for(var j = 0;j < arCssClass.length;j++)
				{									
					if(arCssClass[j] != this.cssForError)
					{							
						elementCss += arCssClass[j] + " ";
					}
				}
				this.element.className = elementCss;			
			}
		}
		if(!this.submit)
		{
			this.focus.focus();
		}
//		return false;
		return this.submit;
	}
	
	//--- Css Klassen auseinander nehmen und nach Funktionen überprüfen
	this.explodeCssName = function()
	{		
		var arCssClass = this.element.className.split(" ");
		var cssName = "";
		var elementCss = "";
		
		//--- Css bei plausibilitätsfehler wieder herausholen (wird eventuell wieder gesetzt)
		//--- Wenn nicht wieder gesetzt wird, war alles okay -> plausibilität okay
		for(var j = 0;j < arCssClass.length;j++)
		{									
			if(arCssClass[j] != this.cssForError)
			{							
				elementCss += arCssClass[j] + " ";
			}
		}
		this.element.className = elementCss;		
		
		//--- CSS Klassen nach Klammern durchsuchen...		
		for(var j = 0;j < arCssClass.length;j++)
		{
			cssName = arCssClass[j];
		
			//--- ...Wenn Klammern gefunden entsprechende Funktion aufrufen
			if(cssName.indexOf("(") > -1 && cssName.indexOf(")") > -1)
			{	
				this.value = this.element.value;
				eval("this.afterChecked(this."+cssName+");");
				if(this.deleteLastChar)
				{
					this.value = this.value.substr(this.value.length-1,1);
					eval("this.deleteLastCharFun(this."+cssName+");");
				}
			}			
		}
	}
	
	//--- nach jeder einzelnen Plausibilitätsprüfung CSS Fehler-Klasse setzen
	this.afterChecked = function(ready)
	{
		if(!this.arCache[this.element.name])
		{
			this.arCache[this.element.name] = true;
			addEvent(this.element,"keyup",this.singleCheck.scope(this));
		}
		if(ready)
		{			
			return true;
		}
		
		this.submit = false;
		if(!this.focus)
		{
			this.focus = this.element;
		}
		this.element.className = this.element.className + " " + this.cssForError;			
	}
	
	//--- Wenn das letzte eingegeben Zeichen nicht erlaubt ist, wieder wegnehmen
	this.deleteLastCharFun = function(allowedChar)
	{
		if(!allowedChar)
		{
			this.element.value = this.element.value.substr(0,this.element.value.length-1);
		}
		return true;
	}
	//--- nachdem alle Elemente überprüft wurden, wurde ein keyup gesetzt, somit kann jedes Elemente einzeln überprüft werden
	this.singleCheck = function(e)
	{
//		this.deleteLastChar = true;
		this.element = getETarget(getE(e));		
		this.value = this.element.value;
		this.explodeCssName();
		this.deleteLastChar = false;			
	}

	//--- ######################### Plausibilitaeten ######################## ---//
	//--- Plausibilitäts Methoden
	this.number = function(minChar)
	{
		minChar = (this.value.length > minChar) ? this.value.length : minChar;
		var regular = new RegExp("[0-9]{"+minChar+"}");		
		return regular.test(this.value);
	}

	this.betrag = function(minChar,notnull)
	{
		minChar = (this.value.length > minChar) ? this.value.length : minChar;
		var regular = new RegExp("[0-9,\.-]{"+minChar+"}");
		notnull = (notnull) ? true : false;		
		betrag = parseFloat(this.value.replace(/,/g,"."));		
		return ((!notnull || (notnull && betrag > 0)) && regular.test(this.value));
	}
	
	this.letter = function(minChar)
	{
		minChar = (this.value.length > minChar) ? this.value.length : minChar;
		var regular = new RegExp("[_a-zA-Z ß-üÄÖÜ-]{"+minChar+"}");
		return regular.test(this.value);	
	}
	
	this.char = function(minChar)
	{
		minChar = (this.value.length > minChar) ? this.value.length : minChar;
		var regular = new RegExp(".{"+minChar+"}");
		return regular.test(this.value);	
	}

	this.mail = function()
	{		
		this.deleteLastChar = false;
		if(this.value.indexOf(".",this.value.indexOf("@") + 1) == -1)
		{			
			return false;
		}else{
			var regular = new RegExp("^[_a-zA-Z0-9äöüÄÖÜ-]+(\.[_a-zA-Z0-9äöüÄÖÜ-]+)*@[a-zA-Z0-9äöüÄÖÜ-]+(\.[a-zA-Z0-9äöüÄÖÜ-]{2,6})+$");
			return regular.test(this.value);
		}
	}	

	this.telefon = function(minChar)
	{
		var strpos = 0;
		var counter = 0;
		while(this.value.indexOf(" ",strpos) > -1)
		{
			counter++;
			strpos = this.value.indexOf(" ",strpos) + 1;
		}
		minChar += counter;
		minChar = (this.value.length > minChar) ? this.value.length : minChar;
		var regular = new RegExp("[0-9\+\-\/\(\) ]{"+minChar+"}");
		return regular.test(this.element.value);
	}

	this.__construct();
}