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

*/
if(!formAlert){
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['agb']='Bitten den AGBs zustimmen!';
	formAlert['pass']='Passwort ist Falsch!';
	formAlert['pass2']='Passwort ist Falsch!';
	formAlert['passshort']='Passwort ist zu kurz! Bitten mindestens [digit] Zeichen verwenden';
	formAlert['pass2simple']='Passwort ist zu einfach!';
	formAlert['image']='Bitte ein JPEG, PNG oder GIF auswählen!';
}
function validateForm(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)) {
				markLabel(labels[i]);
				if(!firstErrorElement)
					firstErrorElement=document.getElementById(labels[i].htmlFor);
			}else if(labels[i].className.indexOf('email') != -1){
				if (!isEmail(labels[i].htmlFor)) {
					markLabel(labels[i]);
					if(!firstErrorElement){
						firstErrorElement=document.getElementById(labels[i].htmlFor);
						errorType='email';
					}
				}
			}else if(labels[i].className.indexOf('date') != -1){
				if (!isDate(labels[i].htmlFor)) {
					markLabel(labels[i]);
					if(!firstErrorElement){
						firstErrorElement=document.getElementById(labels[i].htmlFor);
						errorType='date';
					}
				}else if(labels[i].className.indexOf('past') != -1){
					if (!checkPastDate(labels[i].htmlFor,1)) {
						markLabel(labels[i]);
						if(!firstErrorElement){
							firstErrorElement=document.getElementById(labels[i].htmlFor);
							errorType='past';
						}
					}
				}
			}else if(labels[i].className.indexOf('password') != -1){
				var minLength=6;
				if (document.getElementById(labels[i].htmlFor).value.length<minLength){
					markLabel(labels[i]);
					firstErrorElement=document.getElementById(labels[i].htmlFor);
					errorType='passshort';
					formAlert[errorType]=formAlert[errorType].replace(/\[digit\]/,minLength);
				}
			}else if(labels[i].className.indexOf('agb') != -1){
				if (!document.getElementById(labels[i].htmlFor).checked) {
					markLabel(labels[i]);
					if(!firstErrorElement){
						firstErrorElement=document.getElementById(labels[i].htmlFor);
						errorType='agb';
					}
				}
			}else if(labels[i].className.indexOf('image') != -1){
				if (!isImage(labels[i].htmlFor)) {
					markLabel(labels[i]);
					if(!firstErrorElement){
						firstErrorElement=document.getElementById(labels[i].htmlFor);
						errorType='image';
					}
				}
			}
		}
	}
	if(firstErrorElement){
		alert(formAlert[errorType].replace(/\[label\]/,getLabelValue(firstErrorElement.id)));
		if(firstErrorElement.nodeName.search(/fieldset/i)==-1)
			firstErrorElement.focus();
		return false;
	}
	//passwort
	var pattern= new RegExp(/[^a-z0-9\-_. \$!]/i);
	if(!document.getElementById('passwordcheck') || !document.getElementById('password')){
		return true;
	}else if (document.getElementById('passwordcheck').value==document.getElementById('password').value){
		if(document.getElementById('password').value.search(pattern)>-1){
			markLabel(getLabel('password'));
			markLabel(getLabel('passwordcheck'));
			alert(formAlert['pass2']);
			document.getElementById('password').focus();
			return false;
		}else{
			return true;
		}
	}else{
		markLabel(getLabel('password'));
		markLabel(getLabel('passwordcheck'));
		alert(formAlert['pass']);
		document.getElementById('password').focus();
		return false;
	}
}

/*function isFilled(fieldID) {
	var field=document.getElementById(fieldID);
	var value;
	value=trimString(field.value);
	if(value.length < 1 || value==-9){
		return false;
	}else{
		return true;
	}
}*/
function isFilled(fieldID) {
	var field=document.getElementById(fieldID);
	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].checked){
					return true;
				}
			}
			return false;
		}
		return true;
	}else{
		value=trimString(field.value);
		if(value.length < 1 || value==-9){
			return false;
		}else{
			return true;
		}
	}
}
function checkPastDate(fieldID,addYear){
	var field=document.getElementById(fieldID);
	var now=new Date();
	var error=false;
	if(!isDate(fieldID)){
		error=true;
	}else{
		if(!addYear)
			addYear=0;
		var date = field.value.replace(/\D/g,'.');
		var tempDate=date.split('.');
		var year=parseInt(tempDate[2],10);
		var month=parseInt(tempDate[1],10);
		var day=parseInt(tempDate[0],10);
		if(year>(now.getFullYear()-2000) && year<100)
			year+=1900;
		else if(year<=(now.getFullYear()-2000))
			year+=2000;
		date=new Date();
		date.setFullYear(year+addYear);
		date.setMonth(month-1);
		date.setDate(day);
		if(date>=now)
			error=true;
	}
	return !error;
}
function isEmail(fieldID){
	var field=document.getElementById(fieldID);
	if(field.value.indexOf("@") == -1 || field.value.indexOf(".") == -1){
		return false;
	}else{
		return true;
	}
}
function isDate(fieldID){
	var field=document.getElementById(fieldID);
	var pattern= new RegExp("^[0-9]{1,2}\\D[0-9]{1,2}\\D([0-9]{2}){1,2}$");
	if(field.value.search(pattern)==-1){
		return false;
	}else{
		var date = field.value.replace(/\D/g,'.');
		var tempDate=date.split('.');
		if(parseInt(tempDate[0],10)<1 || parseInt(tempDate[0],10)>31){
			return false;
		}else if(parseInt(tempDate[1],10)<1 || parseInt(tempDate[1],10)>12){
			return false;
		}else if((parseInt(tempDate[2],10)>99 && parseInt(tempDate[2],10)<1900) || parseInt(tempDate[2],10)>2100){
			return false;
		}else{
			return true;
		}
	}
}
function isImage(fieldID){
	var field=document.getElementById(fieldID);
	var extension=field.value.substr(field.value.lastIndexOf('.')+1).toLowerCase();
	if(extension=='jpeg' || extension=='jpg' || extension=='png' || extension=='gif'){
		return true;
	}else{
		return false;
	}
}
function prepareForms() {
	for(var i=0; i<document.forms.length; i++) {
		var thisform = document.forms[i];
		thisform.onsubmit = function(){
			return validateForm(this);
		}
	}
}

function markLabel(label){
	//var labels=whichform.getElementsByTagName('label');
	addClass(label,'error');
	//for(var i=0; i<labels.length; i++) {
	//	if(labels[i].htmlFor==label)
	//		addClass(labels[i],'error');
			//labels[i].className='error';
	//}
}
function cleanMarkLabel(whichform){
	var labels=whichform.getElementsByTagName('label');
	for(var i=0; i<labels.length; i++) {
		removeClass(labels[i],'error');
		//labels[i].className='';
	}
}
function getLabelValue(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;
}
function getLabel(inputID){
	var labels=document.getElementsByTagName('label');
	for(var i=0; i<labels.length; i++) {
		if(labels[i].htmlFor==inputID)
			return labels[i];
	}
	return false;
}
loadEvent.add(prepareForms);