/**
 * @Authors: Rau A. 
 * @Version: 1.2
 * @Date: 2009-10-19
 * by RAGBIT GmbH
 **/
 
/** 
 * Regular expressions defenieren 
 * Um auf die Regular expression zuzugreifen 
 * wird in dem feld was gecheckt wird ein Atribut 
 * <INPUT name="be....checkfor="key"../> eingefügt (key ist z. B. "*")
 **/
function formClass() {
	this.checkRegs = new Object();
	/** Feldname = Regular expression **/
	// deprecated: this.checkRegs['*'] = '.+';
	// deprecated: this.checkRegs['#'] = '^[0-9]+$';
	// deprecated: this.checkRegs['@'] = '^([^@])+[@]([^@])+[.]([^@])+$';
	this.checkRegs['value'] = new Object();
	this.checkRegs['value']['regs'] = '.+';
	this.checkRegs['value']['msg'] = 'Angabe fehlt.';
	this.checkRegs['num'] = new Object();
	this.checkRegs['num']['regs'] = '^[0-9]+$';
	this.checkRegs['num']['msg'] = 'Nur nummerische Werte erlaubt.';
	this.checkRegs['email'] = new Object();
	this.checkRegs['email']['regs'] = '^([^@])+[@]([^@])+[.]([^@])+$';
	this.checkRegs['email']['msg'] = 'Keine gültige eMail-Adresse.';
	this.checkRegs['id'] = new Object();
	this.checkRegs['id']['regs'] = '^([a-z]|[A-Z]|[0-9]|[-]|[_]|[.])+$';
	this.checkRegs['id']['msg'] = 'Es sind nur die Zeichen a-z, A-Z, 0-9, -, _ und . erlaubt.';
	this.checkRegs['check'] = this.checkRegs['value'];
	this.checkRegs['check']['msg'] = 'Auswahl muss gesetzt sein.';

	/** Hintergrundfarbe von Felder **/
	this.useErrorBgColor = true; // Hintergrundfarbe ändern wenn ein Fehler auftritt
	this.errorBgColor = '#FFCCCC'; // Bei Fehler
	this.defaultColor = '#ffffff'; // Bei Ok
	
	/** CSS Klasse von Felder **/
	this.useErrorClass = false; // Klasse hinzufügen wenn ein Fehler auftritt
	this.errorClass = ' err'; // Klassname

	/** Fehlernachricht **/
	this.errorMessage = 'Bitte fuellen Sie alle mit * gekennzeichneten Felder aus!'; // Ändern mit formObj.errorMessage = 'Bla bla';
	this.errorTitle = 'Fehler!'; // Ändern mit formObj.errorTitle = 'Bla bla';

	var self = this;

	/**
	 * formular beim abschicken testen
	 * example: <FORM na....onSubmit="return formObj.check(this)"...>
	 **/
	this.check  = function (form_obj) {
		var checkfor;
		var err = 0;
		var err_field = null;
		var error_found = false;
		this.errorlist = '';
		
		e = form_obj.elements;
		
		for (i=0;i<e.length;i++) {
			// Checkfor festlegen
			checkfor = false;
			error_found = false;
			if (e[i].name){
				var tmp = e[i].name.split(".");
				checkfor = tmp[1];
			}
			
			//
			if (checkfor) {
				v = e[i].value;
				switch(e[i].type) {
					/*case 'option':
					case 'OPTION':
						
						// By errors!
						if (this.checkRegs[checkfor] && (!v.match(this.checkRegs[checkfor]['regs']) || !e[i].checked)) {
							error_found = true;
							// Background color by errors
							if (this.useErrorBgColor) {
								e[i].style.border = e[i].style.outline = '3px solid '+this.errorBgColor;
								// Change color
								if (typeof e[i].onmouseup == 'undefined' || typeof e[i].onmouseup == 'object') {
									e[i].onmouseup = (function (element, obj) {
										return function() { element.style.border = element.style.outline = '0px solid #FFF'; };
									})(e[i], this);
								}
							}
						} 
						// No errors found!
						else {
							if (this.useErrorBgColor) e[i].style.border = e[i].style.outline = 'none';							
						}
						break;*/
					case 'checkbox':
					case 'CHECKBOX':
						// By errors!
						if (this.checkRegs[checkfor] && (!v.match(this.checkRegs[checkfor]['regs']) || !e[i].checked)) {
							error_found = true;
							// Background color by errors
							if (this.useErrorBgColor) {
								e[i].style.border = e[i].style.outline = '3px solid '+this.errorBgColor;
								// Change color
								if (typeof e[i].onmouseup == 'undefined' || typeof e[i].onmouseup == 'object') {
									e[i].onmouseup = (function (element, obj) {
										return function() { element.style.border = element.style.outline = '0px solid #FFF'; };
									})(e[i], this);
								}
							}
						} 
						// No errors found!
						else {
							if (this.useErrorBgColor) e[i].style.border = e[i].style.outline = 'none';							
						}
						break;
					case 'text':
					case 'TEXT':
					default:
						// By errors!
						if (this.checkRegs[checkfor] && !v.match(this.checkRegs[checkfor]['regs'])) {
							error_found = true;
							
							// Background color by errors
							if (this.useErrorBgColor) {
								e[i].style.backgroundColor = this.errorBgColor;
								// Change color
								if (typeof e[i].onchange == 'undefined' || typeof e[i].onchange == 'object') {
									e[i].onchange = (function (element, obj) {
										return function() {element.style.backgroundColor = obj.defaultColor; };
									})(e[i], this);
								}
							}
						}
						// No errors found!
						else {
							if (this.useErrorBgColor) e[i].style.backgroundColor = this.defaultColor;
						}
						break;
				}
				
				// ERROR FOUND (Set class and generatte message)
				if (error_found) {
					err++;
					if (this.checkRegs[checkfor]['msg'] && tmp[0] != 'undefined') 
						this.errorlist += "\n"+(e[i].title ? e[i].title : tmp[0])+': '+this.checkRegs[checkfor]['msg'];					
					
					// Class by errors
					if(this.useErrorClass && !this.useErrorBgColor) {
						e[i].className += this.errorClass;
						if (typeof e[i].onchange == 'undefined') {
							e[i].onchange = (function (element) {
								return function() {
									element.className = element.className.replace(this.errorClass,"");
								};
							})(e[i]);
						}
					}
				} 
				// ERROR not found (Unset class)
				else {
					if(this.useErrorClass && e[i].className.match(this.errorClass))
						e[i].className = e[i].className.replace(this.errorClass,"");					
				}
			}
		}
		
		if (err > 0) {
      var errorMessageTmp = this.errorMessage;
			if (typeof easyPupup == 'object') {
        if (this.errorlist) errorMessageTmp += "\n" + this.errorlist;
				easyPopup.message(errorMessageTmp, this.errorTitle, 'error_message');
      }
			else {
				if (this.errorlist) errorMessageTmp += "\n" + this.errorlist;
				alert(errorMessageTmp);
			}
	
      delete errorMessageTmp;

		if (err_field) err_field.select();
			return false;
		}
		
		// Felder säubern
		for (i=0;i<e.length;i++) {
			if (e[i].name){
				var tmp = e[i].name.split(".");
				if (tmp[0]) e[i].name = tmp[0];
			}
		}
		return true;
	};
}

var formObj = new formClass();


