/*
schlund_formcheck_handler.js
version 1.0
25.01.2002
Software-Engineer Dieter Siebeck
talkabout communications
http://www.talkabout.de

Please leave this note, if you use this script on your webpage! thnxs!
*/


//vom User-definierbare Variablen/Funktionen (in der aufrufenden HTML-Seite definiert)
var global_strArray_Ausgabe = new Array();
//usage: Feldname ist "Firma_r", dann: Ausgabe["Firma"] = "die Firma,in der Sie arbeiten, leben und sterben";
//optional! standardmaessig wird zur Ausgabe des Fehlertextes der Feldname (minus _r) genommen

var global_bl_EmailCheck = true; //standardmaessig wird Email gecheckt, kann vom User auf false gesetzt werden
var global_str_EmailFeldName = "Email_r"; //default, kann vom User ueberschrieben werden

//globale Variablen
//Array,um sicherzustellen, dass eine Radio-Gruppe nur einmal getestet wird
var globalCheckedRadios = new Array();
var globalEmailErrorMessage = "Bitte achten Sie auf die korrekte Schreibweise der E-Mail-Adresse!";

//Dummy-Funktionen, die in der aufrufenden HTML-Seite &uuml;berschrieben werden koennen
//wenn diese false zurueckliefern, bricht der Formcheck ab

//before_check: wird aufgerufen, wenn checkForm() gestartet wird
function before_check(){return true}
//after_check: wird dann aufgerufen, wenn checkForm() ohne Fehler beendet wurde und bevor dasFormular abgeschickt wird
function after_check(){return true}
//after_errors(): wird dann aufgerufen, wenn Fehler entdeckt wurden, kann, wenn auf true gesetzt, dass Form dennoch abschicken
//Fehlertext wird in diesem Fall nicht ausgegeben
function after_errors(){return false}

function checkForm(form)
{
	if (typeof ( form ) == "undefined" ){
		form = document.forms[0];
	}
	
	var emailfield = form[global_str_EmailFeldName];
	if (global_bl_EmailCheck && typeof ( emailfield ) == "undefined"){
		alert ("CheckEmail: Kein Emailfeld namens " + global_str_EmailFeldName + " im Formular vorhanden.\n Setze entweder global_bl_EmailCheck auf false oder ueberschreibe global_str_EmailFeldName");
		return false;
	}
	
	var i,elem,blError;
	var fehlende_Felder = new Array();
	var blCheckIsOK = true;
	var Fehlertext = "Bitte machen Sie noch folgende Angaben: \n";
	
	//before_check aufrufen:
	if(!before_check()){
		return false;
	}
	
	//Fehlercheck
	for(i=0;i<form.length;i++){
		elem = form.elements[i];
		el_name = elem.name;
		if(el_name.lastIndexOf("_r")== el_name.length-2){
			if(!FieldIsOK(elem)){
				fehlende_Felder.push(el_name.substr(0,el_name.length-2));
			}
		}
	}
	
	//Ausgabestring der Fehlermeldung
	if(fehlende_Felder.length>0){
		for(i=0;i<fehlende_Felder.length;i++){
			feld = fehlende_Felder[i];
			if(global_strArray_Ausgabe[feld] != null){
				Fehlertext += " - "+global_strArray_Ausgabe[feld] + "\n";
			}else{
				Fehlertext += " - "+ feld + "\n";
			}
		}
		//after_errors() aufrufen, die (normalerweise) false zurueckgibt:
		blCheckIsOK = after_errors();
	}
	
	
	if( ! blCheckIsOK){
		//Fehler!
		alert(Fehlertext);
		return false;
	}else{
		//bis jetzt alles OK:
		
		//Emailcheck
		if(global_bl_EmailCheck && ! CheckEmail( emailfield )){
			return false;
		}
	
		//after_check - Funktion einbinden:
		if(!after_check()){
			return false;
		}
		
		//Abschicken
		document.title = "Anfrage in Bearbeitung ... bitte warten!";
		return true;
	}
}

function FieldIsOK(elem)
{
	switch(elem.type){
		case "radio":
			return check_radio(elem);
  		case "select-one":
  			return check_single_select(elem);
		case "select-multiple":
  			return check_multiple_select(elem);
  		case "text":
			return check_text(elem);
		case "hidden":
			return check_text(elem);
  		case "textarea":
			return check_text(elem);
  		case "checkbox":
			//checkbox kann nicht ueberprueft werden
  			return true;
  		default: 
  			//sollte eigentlich nicht vorkommen!!
			//alert(elem.type);
			return true;
  			
	}
}

function check_text(elem)
{
	if(elem.value=="" || elem.value	== null){
		return false;
	}else{
		return true;
	}
}

function check_single_select(selectbox)
{
	//die erste Option sollte die "Bitte auswaehlen"-Option sein:
	if(selectbox.selectedIndex == 0 ){
		return false;
	}else{
		return true;
	}
}
function check_multiple_select(selectbox)
{
	if(selectbox.selectedIndex == -1 ){
		return false;
	}else{
		return true;
	}
}
function check_radio(radio)
{
	var i;
	var ok = false;
	for(i=0; i<globalCheckedRadios.length;i++){
		if(globalCheckedRadios[i] == radio.name){
			//radio wurde schon gecheckt
			return true;
		}
	}
	//radio noch nicht getestet:
	globalCheckedRadios.push(radio.name);
	//testen: ist ein radiobutton der Gruppe gecheckt?
	for (i=0;i<radio.length;i++){
		if(radio[i].checked){
			ok = true;
		}
	}
	return ok;
}

function CheckEmail(emailfield){
	
	if(!StringIsEmailAdresse(emailfield.value)){
		alert(globalEmailErrorMessage);
		return false;
	}else{
		return true;
	}
}

function StringIsEmailAdresse(einString) {
	if (einString.indexOf('@') != -1 && einString.indexOf('.')!= -1) {
		return true;
	} else {
		return false;
	}
}