/**
 * @Authors: Rau A. 
 * @Version: 1.2
 * @Date: 2009-08-31
 * 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 form() {
	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'] = 'Missing value.';
	this.checkRegs['num'] = new Object();
	this.checkRegs['num']['regs'] = '^[0-9]+$';
	this.checkRegs['num']['msg'] = 'Only numeric values.';
	this.checkRegs['num1'] = new Object();
	this.checkRegs['num1']['regs'] = '^[1-9]+[0-9]*$';
	this.checkRegs['num1']['msg'] = 'Selection required.';
	this.checkRegs['email'] = new Object();
	this.checkRegs['email']['regs'] = '^([^@])+[@]([^@])+[.]([^@])+$';
	this.checkRegs['email']['msg'] = 'No valid eMail-address.';
	this.checkRegs['id'] = new Object();
	this.checkRegs['id']['regs'] = '^([a-z]|[A-Z]|[0-9]|[-]|[_]|[.])+$';
	this.checkRegs['id']['msg'] = 'Characters allowed: a-z A-Z 0-9 . - _';
	this.checkRegs['check'] = new Object();
	this.checkRegs['check']['msg'] = 'Selection required.';

	/** 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 form.errorMessage = 'Bla bla';
	this.errorTitle = 'Fehler!'; // �ndern mit form.errorTitle = 'Bla bla';

	var self = this;

	/**
	 * formular beim abschicken testen
	 * example: <FORM na....onSubmit="return form.check(this)"...>
	 **/
	form.prototype.check  = function (f) {
		var checkfor;
		var err = 0;
		var err_field = null;
		this.errorlist = '';
		
		e = f.elements;

		for (i=0;i<e.length;i++) {
			var checkfor = false;
			if (e[i].name){
				var tmp = e[i].name.split(".");
				checkfor = tmp[1];
			}
			if (checkfor) {
				//alert(e[i].checkfor);
				v = e[i].value;
				if (this.checkRegs[checkfor] && checkfor != 'check' && !v.match(this.checkRegs[checkfor]['regs']) || checkfor == 'check' && !e[i].checked) {
					err++;
					if (this.checkRegs[checkfor]['msg'] && tmp[0] != 'undefined') this.errorlist += "\n"+(e[i].title ? e[i].title : tmp[0])+': '+this.checkRegs[checkfor]['msg'];
					if (this.useErrorBgColor) { 
						e[i].style.backgroundColor = this.errorBgColor;
						// Farbe �ndern
						if (typeof e[i].onchange == 'undefined') {
							e[i].onchange = (function (element, obj) {
								return function() {element.style.backgroundColor = obj.defaultColor };
							})(e[i], this);
						}
					}
					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]);
						}
					}
				} else {
					//alert(e[i].name);
					if (this.useErrorBgColor) e[i].style.backgroundColor = this.defaultColor;
					
					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 form = new form();


