/*
	formCheck
	Version 1.01a
	

	Changelog 1.0 - 1.01a
	- displayname für validateas aktiviert
	- Selectboxen werden jetzt abgefragt
	
*/

/*
	Objekt zum überprüfen von Forms
*/
function formCheck() {
	this.checkBoxary = new Array();
	this.checkBoxtest = new Array();
	this.checkBoxmsg = new Array();
	
	this.radioBoxary = new Array();
}

/*
	Validiert das Feld zusätzlich
	Return:
		true wenn validierung erfolgreich
		false wenn fehlgeschlagen
*/	
formCheck.prototype.checkSpecialFields = function( ctrl, type ) {
	switch ( type ) {
		case "email":
			var filter  = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
		break;
		case "int":
			var filter = /^[0-9]+$/;
		break;
	}
	
	return filter.test($F(ctrl))	;
}

/*
	setzt einen Fehler bei einem Feld
*/
formCheck.prototype.setFieldError = function( ctrl, errorState ) {
	var self = this;
	
	/* Fehler */
	if ( errorState == true ) {
		if ( (Element.readAttribute(ctrl,"oldbgcolor") == null) ) {
			ctrl.setAttribute("oldbgcolor", ctrl.style.backgroundColor );
		}
		ctrl.style.backgroundColor = "#FAF3CF";
		ctrl.setAttribute("error", "true");

		Event.observe( ctrl, "focus", function() { self.setFieldError( ctrl, false); } );
	/* Fehler aufgehoben */
	} else {
		if ( Element.readAttribute(ctrl,"error") == "true" ) {
			ctrl.removeAttribute("error");
			
			if ( Element.readAttribute(ctrl,"oldbgcolor") != null ) {
				ctrl.style.backgroundColor = ctrl.getAttribute("oldbgcolor");
			} else {
				ctrl.style.backgroundColor = "";
			}
			ctrl.removeAttribute("oldbgcolor");
			
			Event.stopObserving( ctrl, "focus", function() { self.setFieldError( ctrl, false); } );			
		}
	}
}

/*
	checkt eine Form ob alle required fields übergeben worden sind
*/
formCheck.prototype.check = function( frm ) {
	var ele = Form.getElements( frm );
	var focusSet = false;
	var msglist = "";
	var password = "";
	
	this.checkBoxary = new Array();
	this.checkBoxtest = new Array();
	this.checkBoxmsg = new Array();
	this.radioBoxary = new Array();
	
	for (i=0; i < ele.length; i++ ) {
		if ( ((ele[i].getAttribute("required") == "true") && ($F(ele[i]) == "")) && (Element.readAttribute(ele[i],"type") != "checkbox") ) {
			if ( Element.readAttribute(ele[i], "requiredmsg") != null ) {
				msglist += "- " + Element.readAttribute(ele[i], "requiredmsg") + "\n";
			} else {		
				if ( Element.readAttribute(ele[i], "displayname") == null ) {
					msglist += "- Bitte tragen Sie in das Feld '"+ele[i].getAttribute("name")+"' etwas ein." + "\n";
				} else {
					msglist += "- Bitte tragen Sie in das Feld '"+Element.readAttribute(ele[i],"displayname")+"' etwas ein." + "\n";
				}
			}
			
			/* Feld rot markieren*/
			this.setFieldError( ele[i], true );
			if ( !focusSet ) { ele[i].focus(); focusSet = true; }
		
			
		/* Passwörter */
		} else if (Element.readAttribute(ele[i],"type") == "password") {			
			if ( (password == "") && ( $F(ele[i]) != "") ) password = $F(ele[i]); else {
				if ( password != $F(ele[i]) ) {
					msglist += "- Die Passwörter müssen übereinstimmen.\n";

					this.setFieldError( ele[i], true );					
					if ( !focusSet ) {
						ele[i].focus();
						focusSet = true;
					}
				}
			}
		/* Selectboxen */
		} else if ((ele[i].getAttribute("required") == "true") && (ele[i].nodeName == "SELECT") ) {
			var minValue = Element.readAttribute(ele[i],"minvalue");
			if ( (minValue != null) && (parseInt(minValue) == minValue) ) {
				minValue = parseInt(minValue);
				if ( $F(ele[i]) < minValue ) {
					
					if ( Element.readAttribute( ele[i],"requiredmsg") == null ) {
						if ( Element.readAttribute( ele[i], "displayname") == null ) {
							msglist += "- Sie müssen im Feld '"+Element.readAttribute(ele[i],"name")+"' etwas auswählen.\n";
						} else {
							msglist += "- Sie müssen im Feld '"+Element.readAttribute(ele[i],"displayname")+"' etwas auswählen.\n";
						}
					} else {
						msglist += Element.readAttribute(ele[i],"requiredmsg")+"\n";
					}
					this.setFieldError( ele[i], true );
					if (!focusSet ) {
						ele[i].focus();
						focusSet = true;
					}
				}
			}
		/* radiobutton */
		} else if ((ele[i].getAttribute("required") == "true") && (Element.readAttribute(ele[i],"type") == "radio")) {
			var found = false;
			for ( c=0; c < this.radioBoxary.length; c++ ) {
				if ( this.radioBoxary[c] == Element.readAttribute(ele[i],"name") ) {
					found = true;
					break;
				}
			}
			
			if ( !found ) {
				var radioAry = $$("input[name="+Element.readAttribute(ele[i],"name")+"]");	
				var error = true;
				
				for (c=0; c < radioAry.length; c++ ) {
					if ( $F(radioAry[c]) != null ) {
						error = false;
					}
				}
				
				if ( error ) {
					for (c=0; c < radioAry.length; c++ ) {
						this.setFieldError( radioAry[c], true );
						focusSet = true;
					}
					
					if ( Element.readAttribute( ele[i],"requiredmsg") == null ) {
						if ( Element.readAttribute( ele[i], "displayname") == null ) {
							msglist += "- Sie müssen im Feld '"+Element.readAttribute(ele[i],"name")+"' etwas auswählen.\n";
						} else {
							msglist += "- Sie müssen im Feld '"+Element.readAttribute(ele[i],"displayname")+"' etwas auswählen.\n";
						}
					} else {
						msglist += Element.readAttribute(ele[i],"requiredmsg")+"\n";
					}			
				}	
				
						
				this.radioBoxary.push( Element.readAttribute(ele[i],"name") );
			}
		
			
		/* checkboxen */
		} else if ((ele[i].getAttribute("required") == "true") && (Element.readAttribute(ele[i],"type") == "checkbox")) {
			var found = -1;
			for (c=0; c < this.checkBoxary.length; c++ ) {
				if ( this.checkBoxary[c] == Element.readAttribute(ele[i],"name") ) {
					found = c;
					break;
				} 
			}
		
			if ( found == -1) {
				this.checkBoxary.push( Element.readAttribute(ele[i],"name") );
				this.checkBoxtest.push( ele[i].checked );

				if ( Element.readAttribute(ele[i],"requiredmsg") != null ) {
					this.checkBoxmsg.push( Element.readAttribute(ele[i],"requiredmsg") );
				} else {
					this.checkBoxmsg.push("");
				}
			} else {
				if ( (this.checkBoxtest[found] == false) && ele[i].checked ) {
					this.checkBoxtest[found] = true;
				}
			}
		} else {
			if ( Element.readAttribute(ele[i],"validateas") != null ) {
				var result = this.checkSpecialFields( ele[i], Element.readAttribute(ele[i], "validateas") );
				if ( !result ) { 
					if ( Element.readAttribute(ele[i], "displayname") == null ) {
						msglist += "- Bitte geben Sie in das Feld '"+Element.readAttribute(ele[i],"name")+"' einen korrekten Wert ein.\n";
					} else {
						msglist += "- Bitte geben Sie in das Feld '"+Element.readAttribute(ele[i],"displayname")+"' einen korrekten Wert ein.\n";
					}
					if ( !focusSet ) {
						focusSet = true;
						ele[i].focus();
					}
				}
				this.setFieldError( ele[i], !result );
			} else {
				/* Wenn vorher ein Fehler war roten Text wieder auf normal setzten*/
				this.setFieldError( ele[i], false );
			}
		}
	}

	
	for ( i=0; i < this.checkBoxary.length; i++ ) {
		if ( this.checkBoxtest[i] == false ) {
			if ( this.checkBoxmsg[i] != "" ) {
				msglist += "- "+this.checkBoxmsg[i]+"\n";	
			} else {
				msglist += "- Bitte wählen Sie unter '"+this.checkBoxary[i].replace("[]","")+"' etwas aus.\n";
			}
			if ( !focusSet ) {
				focusSet = true;
			}
		}
	}
	
	
	if ( focusSet ) alert( msglist );
	return !focusSet;
}


