var fehlerfarbe = '#b30000';
var normfarbe = '#000';

/**
*	Validiert die Felder innerhalb des Blockelementes mit der Id cssId nach ihren Klassenattrbuten
*/
function check_form(cssId) {
	// geht alle Formularfelder durch und sucht nach bestimmten CSS-Klassen. In diesen steckt der gewünschte Validierungstyp:

	// welche Validierungstypen gibt es?
	// 1. required
	// 2. email

	//1.
	var fehler = false;
	//fehler zurücksetzen:
	Form.getElements(cssId).each(function(el){el.error=false});

	$A(document.getElementsByClassName("required", cssId)).each(function(el){
		if(el.disabled) {
			return;
		}
		if(el.tagName == "DIV" || el.tagName == "FIELDSET") {
			//dann gilt required für jedes Feld innerhalb dieses Div-Containers:
			Div.getElements(el).each(function(f){
				fehler |= checkRequiredField(f);
			});
		} else {
			fehler |= checkRequiredField(el);
		}

	});
	$A(document.getElementsByClassName("email", cssId)).each(function(el){
		if(el.disabled) {
			return;
		}
		//		var regexp = /^\w{2,}\.?\w{2,}@/;  // für username
		//		var regexp = /@\w{2,}\.(\w{2,}\.)?[a-zA-Z]{2,5})$
		if($F(el) != '' && !$F(el).match(/.*@.*/)) {
			red_label(el, "email_error");
			fehler = true;
		} else  if(!el.error){
			black_label(el, "email_error");
		}
	});


	$A(document.getElementsByClassName("day", cssId)).each(function(el){
		if(el.disabled) {
			return;
		}
		var value = $F(el);
		if(value != '' && (isNaN(value) || value < 1 || value > 31)) {
			red_label(el, "day_error");
			fehler = true;
		} else  if(!el.error){
			black_label(el, "day_error");
		}
	});

	$A(document.getElementsByClassName("month", cssId)).each(function(el){
		if(el.disabled) {
			return;
		}
		var value = $F(el);
		if(value != '' && (isNaN(value) || value < 1 || value > 12)) {
			red_label(el, "month_error");
			fehler = true;
		} else  if(!el.error){
			black_label(el, "month_error");
		}
	});

	$A(document.getElementsByClassName("year", cssId)).each(function(el){
		if(el.disabled) {
			return;
		}
		var value = $F(el);
		var actualYear = new Date().getFullYear();
		if(value != '' && (isNaN(value) || value < 1900 || value > actualYear+1)) {
			red_label(el, "year_error");
			fehler = true;
		} else  if(!el.error){
			black_label(el, "year_error");
		}
	});
	$A(document.getElementsByClassName("dependend", cssId)).each(function(el){

		var radio  = $(el).getAttribute("idref");
		if($(radio).checked) {
			if($F(el) == '') {
				red_label(el, "dependend_error");
				fehler = true;
			} else if(!el.error){
				black_label(el, "dependend_error");
			}
		}
	});
	$A(document.getElementsByClassName("number", cssId)).each(function(el){
		if(el.disabled) {
			return;
		}
		var value = $F(el).replace(",", ".");
		if(value != '' && isNaN(value)) {
			red_label(el, "number_error");
			fehler = true;
		} else if(!el.error){
			el.value= ((Math.floor(value * 100) / 100) + "").replace(".", ",");
			black_label(el, "number_error");
		}
	});

	if(fehler && $('success') != null) {
		$('success').hide();
	}
	return !fehler;
}



function red_label(el, errorid) {
	//	alert(el.id + "_" + errorid);
	if($(el.id + "_" + errorid) != null) {
		$(el.id + "_" + errorid).style.display="";
	}
	el.style.border="1px solid " + fehlerfarbe;
	if($(el.id + "_label") != null) {
		$(el.id + "_label").style.color=fehlerfarbe;
		new Effect.Highlight(el.id + "_label", {duration:8});
	}
	el.error=true;
}
function black_label(el, errorid) {
	if($(el.id + "_" + errorid) != null) {
		$(el.id + "_" + errorid).style.display="none";
	}
	if(el.tagName=='INPUT' && el.type=="text" || el.tagName=="SELECT" || el.tagName=="TEXTAREA") {
		el.style.border="1px solid #aaa";
	}
	if($(el.id + "_label") != null) {
		$(el.id + "_label").style.color=normfarbe;
	}
}



function checkRequiredField(el) {
	var fehler = false;
	if(el.tagName == "INPUT" && el.type=="radio") {
		var ok = false;
		var radios = $A(document.getElementsByName(el.name));
		radios.each(function(r){
			if(r.checked) {
				ok = true;
			}
		});
		//hm, irgendwie unbefriedigend, aber verschiedene Radio-Buttons haben auch unterschiedliche Ids, also geht der normale Ansatz nicht
		// also nehme ich den Namen,der allen gleich ist!
		var name = el.name.replace("[", "_").replace("]", "_");
		if(!ok) {
			$( name + "_required_error").style.display="";
			if($(el.id + "_label") != null) {
				$(el.id + "_label").style.color=fehlerfarbe;
				new Effect.Highlight(el.id + "_label", {duration:8});
			}
			fehler = true;
			radios.each(function(r) {r.style.backgroundColor=fehlerfarbe});
		} else {
			$(name + "_required_error").style.display="none";
			radios.each(function(r) {r.style.backgroundColor=normfarbe});
			if($(el.id + "_label") != null) {
				$(el.id + "_label").style.color=normfarbe;
			}
		}
	} else if(el.tagName == "INPUT" && el.type=="checkbox") {
		if(! el.checked) {
			red_label(el, "required_error");
			fehler = true;
		} else {
			black_label(el, "required_error");
		}
	} else
	if(el.tagName=='INPUT' && el.type=="text" || el.tagName=="SELECT" || el.tagName == 'TEXTAREA') {
		//			alert("value ist " + $F(el));
		if($F(el) == null || $F(el) == '' ||  $F(el) == 0 ) {
			red_label(el, "required_error");
			fehler = true;
		}
		else  if(!el.error){
			black_label(el, "required_error");
		}
	}
	return fehler;
}

function  check_plz() {
	var value = $F('tx_konotermine_pi1_plz');
	if(value) {
		if(isNaN(value)) {
			alert('Die PLZ muss eine fünfstellige Zahl sein.');
			return false;
		} else {
			if(new String(value).length != 5) {
				alert("Die PLZ muss aus genau fünf Zahlen bestehen.");
				return false;
			}
		}
	}
	// alles in Ordnung, nun die Map ausblenden und Meldung zeigen
	if($('gmap')) {
		$('gmap').hide();
		$('mapinfo').hide();
		$('right').hide();
		$('load_message_map').show();
}
	return true;
}

function removeNode(node) {
	if (typeof node == 'string') {
		node = $(node);
	}
	if (node && node.parentNode) {
		return node.parentNode.removeChild(node);
	}
	else {
		return false;
	}
}


function change_bundesland_ort(bundesland_id) {
	var url = 'typo3/ext/kono_termine/pi1/getOrte.php';
	new Ajax.Request(url, {parameters:'bundesland_id=' +bundesland_id,onComplete:fillOrteOptions,onFailur:fillOrteFailed} )

}

function fillOrteOptions(data) {
	var select = $('tx_konotermine_pi1_veranstaltungsorte_id');
	var children = $A(select.childNodes);
	children.each(function(c){
		removeNode(c);
	});

	var land =   data.responseXML.getElementsByTagName('root')[0].getAttribute('l');
	var options = $A(data.responseXML.getElementsByTagName('o'));
	var option = document.createElement("option");
	option.setAttribute("value", '');
	option.innerHTML = 'alle in ' + land;
	select.appendChild(option);
	options.each(function(o){
		var option = document.createElement("option");
		option.setAttribute("value", o.getAttribute("v"));
		option.innerHTML = o.getAttribute('n');
		select.appendChild(option);
	});

}

function fillOrteFailed(data) {
	alert("Failed! " + data.statusText);
}


function reservierungen_form_submit(event){
    this.getElements().invoke("setStyle",{backgroundColor:"#D5E9FD"});
    this.select("label").invoke("setStyle",{color:'#DCF2F5',backgroundColor:"#DCF2F5"});
    $$("input[type='submit']", "input[type='reset']").invoke('hide');
    this.submit();
}


function showDetailsForOrt(id) {
		 new Ajax.Updater('ort_detail', 
        'typo3/ext/kono_termine/pi1/detailsInfo.php', 
        {
             parameters:"id=" + id, 
             evalScripts:true,
         });
	}