﻿// holds an instance of XMLHttpRequest
var xmlHttp = createXmlHttpRequestObject();
// holds the remote server address 
var serverAddress = "validate.php";
// initialize the validation requests cache 
var cache = new Array();

// creates an XMLHttpRequest instance
function createXmlHttpRequestObject() {
	// will store the reference to the XMLHttpRequest object
	var xmlHttp;
	// this should work for all browsers except IE6 and older
	try {
		// try to create XMLHttpRequest object
		xmlHttp = new XMLHttpRequest();
	} catch(e) {
		// assume IE6 or older
		var XmlHttpVersions = new Array(
				"MSXML2.XMLHTTP.6.0",
				"MSXML2.XMLHTTP.5.0",
				"MSXML2.XMLHTTP.4.0",
				"MSXML2.XMLHTTP.3.0",
				"MSXML2.XMLHTTP",
				"Microsoft.XMLHTTP"
			);
		// try every id until one works
		for (var i=0; i<XmlHttpVersions.length && !xmlHttp; i++)  {
			try {
				// try to create XMLHttpRequest object
				xmlHttp = new ActiveXObject(XmlHttpVersions[i]);
			} catch (e) {} // ignore potential error
		}
	}
	
	// return the created object or display an error message
	if (!xmlHttp)
		displayError( "Error creating the XMLHttpRequest object." );
	else 
		return xmlHttp;
}

// the function handles the validation for any form field
function validate(inputValue, fieldID) {
	// only continue if xmlHttp isn't void
	if (xmlHttp) {
		// if we received non-null parameters, we add them to cache in the
		// form of the query string to be sent to the server for validation
		if (fieldID) {
			// encode values for safely adding them to an HTTP request query string
			inputValue = encodeURIComponent(inputValue);
			fieldID = encodeURIComponent(fieldID);
			// add the values to the queue
			cache.push("inputValue=" + inputValue + "&fieldID=" + fieldID);
		}
		// try to connect to the server
		try {
			// continue only if the XMLHttpRequest object isn't busy
			// and the cache is not empty
			if ((xmlHttp.readyState == 4 || xmlHttp.readyState == 0) && cache.length > 0) {
				// get a new set of parameters from the cache
				var cacheEntry = cache.shift();
				// make a server request to validate the extracted data
				xmlHttp.open("POST", serverAddress, true);
				xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
				xmlHttp.onreadystatechange = handleRequestStateChange;
				xmlHttp.send(cacheEntry);
			}
		} catch (e) {
			// display an error when failing to connect to the server
			displayError( e.toString() );
		}
	}
}

// function that handles the HTTP response
function handleRequestStateChange() {
	// when readyState is 4, we read the server response
	if (xmlHttp.readyState == 4) {
		// continue only if HTTP status is "OK"
		if (xmlHttp.status == 200) {
			try {
				// read the response from the server
				readResponse();
			} catch(e) {
				// display error message
				//mf no errors displayed for now
				displayError( e.toString() );
			}
		} else {
			// display error message
			displayError( xmlHttp.statusText );
		}
	}
}

// read server's response 
function readResponse() {
	// retrieve the server's response 
	var response = xmlHttp.responseText;
	// server error?
	if (response.indexOf("ERRNO") >= 0 || response.indexOf("error:") >= 0 || response.length == 0)
		throw(response.length == 0 ? "Server error." : response);
	
	// get response in XML format (assume the response is valid XML)
	responseXml = xmlHttp.responseXML;
	// get the document element
	xmlDoc = responseXml.documentElement;
	result = xmlDoc.getElementsByTagName("result")[0].firstChild.data;
	fieldID = xmlDoc.getElementsByTagName("fieldid")[0].firstChild.data;
	// find the HTML element that displays the error
	message = document.getElementById(fieldID + "Failed");
	// show the error or hide the error
	message.className = (result == "0") ? "error" : "hidden";
	// call validate() again, in case there are values left in the cache
	setTimeout("validate();", 500);
}

// sets focus on the first field of the form
function setFocus() {
	document.getElementById("username").focus();
}

//mf
function formSend( register ) {
	// register: called from the register page? (or edit profile)
	var reg_username = /^[a-zA-Z0-9_]{2,}$/;
	var reg_password = /^[a-zA-Z0-9_]{6,}$/;
	
	if (!reg_username.test( document.getElementById("username").value )) {
		alert( "Für den Benutzernamen sind nur die Zeichen (mind. 2) a-z, A-Z, 0-9 und _ erlaubt." );
		return;
	}
	
	if (document.getElementById("password").value != '') {
		if (!reg_password.test( document.getElementById("password").value )) {
			alert( "Für das Passwort sind nur die Zeichen (mind. 6) a-z, A-Z, o-9 und _ erlaubt." );
			return;
		}
	} else if (register) {
			alert( "Sie müssen ein Kennwort eingeben." );
			return;
	}
	
	if (!document.getElementById("accept_disclaimer").checked) {
		alert( "Sie müssen den Nutzungsbedingungen zustimmen" );
		return;
	}
	
	document.getElementById("formRegistration").submit();
}

function deleteProfile() {
	if (confirm("Wollen Sie wirklich Ihr Profil entfernen?"))
		if (confirm(
				"Wenn Sie ihr Profil löschen, werden alle Einträge, "+
				"Kommentare und Bilder gelöscht, die sie zum Unortkataster beigesteuert haben. "+
				"Außerdem werden alle Bilder und Kommentare gelöscht, "+
				"die andere Teilnehmer zu Ihren Unorten ergänzt haben. "+
				"\nWir empfehlen deshalb nicht, ein Profil endgültig zu löschen. "+
				"\nWollen Sie trotzdem ihr Profil löschen?"
			)) {
			location.href = "./delete_profile.php";
		}
}





