function ajax(){
	var res = null;
	try {
		res = new ActiveXObject("Microsoft.XMLHTTP");
	}
	catch(Error){
		try {
			res = new ActiveXObject("MSXML2.XMLHTTP");
		}
		catch(Error){
			try {
				res = new XMLHttpRequest();
			}
			catch(Error){
				alert("AJAX geht nicht.");
			}
		}
	}
	return res;
}

var res = ajax();

function fieldQuery(field){
	query = "";
	with (field){
		if (name!=""){
			if ((type!="checkbox" && type!="radio") || (checked)){
				query += "&"+name+"="+encodeURIComponent(value);
			} else {
				query += "&"+name+"=";
			}
		}
	}
	return query;
}
function formQuery(form){
	var query="";
	for (i=0;i<form.elements.length;i++){
		query += fieldQuery(form.elements[i]);
	}
	return query;
}
function formcheck(form){
	var query=formQuery(form);
	res.open('get','javascript/formcheck.php?t='+Math.random()+"&form="+form.name+query+"&formcheck=1",true);
	res.onreadystatechange = handleFormcheck;
	res.send(null);
}

function fieldcheck(field){
	var query="";
	if (field.form.elements[field.name].value){
		tmp = field.name.split("|");
		tmp = tmp[0]
		tmp = tmp.split(":");
		if (tmp.length == 4){
			query += fieldQuery(field.form.elements["_"+tmp[3]]);
		}
		query += fieldQuery(field);
	} else {
		for (i=0;i<field.form.elements[field.name].length; i++){
			query += fieldQuery(field.form.elements[field.name][i]);
		}
	}
	res.open('get','javascript/formcheck.php?t='+Math.random()+"&form="+field.form.name+query,true);
	res.onreadystatechange = handleFormcheck;
	res.send(null);
}

function do_action(url){
	res.open('get',url+"&t="+Math.random(),true);
	res.send(null)
}

function handleFormcheck(){
	if (res.readyState == 4){
		var response = eval("("+res.responseText+")");
		error = false;	
		for (key in response.fields){
			var field = response.fields[key];
			
			if (field.type == "checkbox" || field.type=="radio"){
				if (field.error != ""){
					document.getElementById(key+"_error").innerHTML = "<img src='images/error.png' title='"+field.error+"'>";
					error = true;
				} else {
					document.getElementById(key+"_error").innerHTML = "";
				}
			} else {
				with (document.forms[response.form].elements[field.name]){
					if (field.error){
						className += " error";
					} else {
						className = className.replace(/ error/g,"");
					}
					
					vars = field.error.match(/%\S+%/g);
					if (vars){
						for (i=0;i<vars.length;i++){
							labelID     = vars[i].replace(/%/g,"");
							labelText   = getElementById(labelID+"_label").innerHTML;
							alert(labelID + ", " + labelText + ", " + vars[i]);
							field.error = field.error.replace(vars[i],labelText);
						}
					}
					if (field.error != ""){
						document.getElementById(key+"_error").innerHTML = "<img src='images/error.png' title='"+field.error+"'>";
						error = true;
					} else {
						document.getElementById(key+"_error").innerHTML = "";
					}
					//value = field.value;
				}
			}				
		}
		if (error && response.formcheck=="1"){
			alert("Nicht alle Felder wurden korrekt ausgefüllt. Bitte überprüfe Deine Eingaben.");
		}
		if (response.error!="1" && response.formcheck=="1"){
			if (response.onFormcheckSuccess!=""){
				eval("("+response.onFormcheckSuccess+"('"+response.form+"'))");
			} else {
				document.forms[response.form].submit();
			}
		}
	}
}
