/*
         ___                         _____       __
        /  /\        ________       /    /\     / /\
(-----//  /  \//----/_____/__\\--) /____/  \___/_/ //--------------------------)
      /  /   /      \     | //     \    \  /    /\/    this code was created by
     /__/   /        \    |///-----\\____\/____/  \                       sigea
(---\\  \  /   (-----\\___|/        /    /\    \  /       
      \__\/                        /____/ /\____\/            __       sigea.ch
                                   \____\/  \  /             /\_\--------------)
                                         \___\//-------------\/_/  

*/
var formAlert= new Object();
formAlert['default']='Bitte "[label]" eingeben!';
formAlert['email']='Bitte im Feld "[label]" eine korrekte E-Mail-Adresse eingeben!';
formAlert['date']='Bitte im Feld "[label]" eine korrektes Datum (TT.MM.JJJJ) eingeben!';
formAlert['time']='Bitte im Feld "[label]" eine korrekte Zeit (hh:mm) eingeben!';
formAlert['anzahl']='Bitte im Feld "[label]" einen gültige Wert eingeben!';
formAlert['wochentag']='Bitte Datum und/oder Wochentag anpassen!';
formAlert['vonbis']='Bitte Zeit von/bis überprüfen!';
formAlert['vonbis2']=formAlert['vonbis'];
formAlert['agb']='Bitte den AGBs zustimmen!';

var checkForm;
function CheckForm(){
	var addErrorElement=new Object();
	addErrorElement['wochentag']=false;
	addErrorElement['vonbis']=false;
	addErrorElement['vonbis2']=false;
	this.prepare=function(){
		for(var i=0; i<document.forms.length; i++) {
			var thisform = document.forms[i];
			thisform.onsubmit = function(){
				return checkForm.validate(this);
			}
		}
	}
	this.validate=function(whichform){
		var firstErrorElement=false;
		var errorType='default';
		cleanMarkLabel(whichform);
		var labels=whichform.getElementsByTagName('label');
		for(var i=0; i<labels.length; i++) {
			//var element = whichform.elements[i];
			if(labels[i].className.indexOf("required") != -1) {
				if (!isFilled(labels[i].htmlFor)) {
					addClass(labels[i],'error');
					if(!firstErrorElement){
						firstErrorElement=document.getElementById(labels[i].htmlFor);
					}
				}else if(labels[i].className.indexOf("email") != -1){
					if (!isEmail(labels[i].htmlFor)) {
						addClass(labels[i],'error');
						if(!firstErrorElement){
							firstErrorElement=document.getElementById(labels[i].htmlFor);
							errorType='email';
						}
					}
				}else if(labels[i].className.indexOf("date") != -1){
					if (!isDate(labels[i].htmlFor)) {
						addClass(labels[i],'error');
						if(!firstErrorElement){
							firstErrorElement=document.getElementById(labels[i].htmlFor);
							errorType='date';
						}
					}
				}else if(labels[i].className.indexOf("time") != -1){
					if (!isTime(labels[i].htmlFor)) {
						addClass(labels[i],'error');
						if(!firstErrorElement){
							firstErrorElement=document.getElementById(labels[i].htmlFor);
							errorType='time';
						}
					}
				}else if(labels[i].className.indexOf("anzahl") != -1){
					if (!isAnzahl(labels[i].htmlFor)) {
						addClass(labels[i],'error');
						if(!firstErrorElement){
							firstErrorElement=document.getElementById(labels[i].htmlFor);
							errorType='anzahl';
						}
					}
				}else if(labels[i].className.indexOf('agb') != -1){
					if (!document.getElementById(labels[i].htmlFor).checked) {
						addClass(labels[i],'error');
						if(!firstErrorElement){
							firstErrorElement=document.getElementById(labels[i].htmlFor);
							errorType='agb';
						}
					}
				}
			}
		}
		if(firstErrorElement){
			alert(formAlert[errorType].replace(/\[label\]/,getLabelText(firstErrorElement.id)));
			//alert(formAlert);
			if(firstErrorElement.nodeName.search(/fieldset/i)==-1)
				firstErrorElement.focus();
			return false;
		}else if(addErrorElement['wochentag'] || addErrorElement['vonbis']){
			var addErrorType;
			if(addErrorElement['wochentag'])
				addErrorType='wochentag';
			else if(addErrorElement['vonbis'])
				addErrorType='vonbis';
			else
				addErrorType='vonbis2';
			alert(formAlert[addErrorType].replace(/\[label\]/,getLabelText(addErrorElement[addErrorType].id)));
			//alert(formAlert);
			if(addErrorElement[addErrorType].nodeName.search(/fieldset/i)==-1)
				addErrorElement[addErrorType].focus();
			return false;
		}
		return true;
	}
	var isFilled=function(fieldID){
		var field=document.getElementById(fieldID);
		if(field.disabled) return true;
		var value;
		if(field.nodeName.search(/fieldset/i)>-1){
			var select=field.getElementsByTagName('select');
			if(select.length>0){
				for(var i=0; i<select.length; i++){
					value=trimString(select[i].value);
					if(value.length > 0 && value!=-9){
						return true;
					}
				}
				return false;
			}
			var input=field.getElementsByTagName('input');
			if(input.length>0){
				for(var i=0; i<input.length; i++){
					if(input[i].type.toLowerCase()=='text'){
						value=trimString(input[i].value);
						if(value.length>0){
							return true;
						}
					}else if(input[i].checked){
						return true;
					}
				}
				return false;
			}
			return true;
		}else{
			value=trimString(field.value);
			if(value.length < 1 || value==-9){
				return false;
			}else{
				return true;
			}
		}
	}
	var isEmail=function(fieldID){
		var field=document.getElementById(fieldID);
		if(field.value.indexOf("@") == -1 || field.value.indexOf(".") == -1){
			return false;
		}else{
			return true;
		}
	}
	var isDate=function(fieldID){
		var field=document.getElementById(fieldID);
		if(field.disabled) return true;
		return checkDate(trimString(field.value));
	}
	var isTime=function(fieldID){
		var field=document.getElementById(trimString(fieldID));
		return checkTime(field.value);
	}
	var isAnzahl=function(fieldID){
		var value=trimString(document.getElementById(fieldID).value);
		var pattern= new RegExp("^((ca)|(max)|(min))*(\\.){0,1}( ){0,1}(\\d)*( ){0,1}((-)|(bis)|<|>)*( ){0,1}(\\d)+(\\+){0,1}$");
		if(value.search(pattern)==-1)
			return false;
		else
			return true;
	}
	var cleanMarkLabel=function(whichform){
		var labels=whichform.getElementsByTagName('label');
		for(var i=0; i<labels.length; i++) {
			removeClass(labels[i],'error');
			//labels[i].className='';
		}
	}
	var getLabelText=function(id){
		var labels=document.getElementsByTagName('label');
		for(var i=0; i<labels.length; i++) {
			if(labels[i].htmlFor==id)
				return labels[i].firstChild.nodeValue;
		}
		return false;
	}
	this.setError=function(errorElement,type){
		addErrorElement[type]=errorElement;
	}
	this.removeError=function(type){
		addErrorElement[type]=false;
	}
}

function prepareCheckForm(){
	checkForm=new CheckForm();
}
addLoadEvent(prepareCheckForm);