validDomains = new Array("ag","at","be","biz","br","by","ch","cn","com","cz","cx","de","dk","es","eu","com","fr","gr","hk","hm","il","in","info","it","jp","li","lu","lv","mx","name","net","nl","nz","org","pl","ro","ru","sc","se","sg","sk","st","tk","tv","tw","uk","us","ws","za");

function isEmpty(value) {
	return (value == null || value.length == 0);
}

function isStandardString(value,title,maxlength,showMessage,needValue) {
	return validString(value,title,"<>;",maxlength,showMessage,needValue);
}

function validString(value,title,disallowed,maxlength,showMessage,needValue) {
	if (needValue && (value == null || value.length == 0)) {
		if (showMessage) alert("\"" + title + "\" darf nicht leer sein.");
		return false;
	}
	if (value.length > maxlength) {
		if (showMessage) alert("\"" + title + "\" darf höchstens " + maxlength + " Zeichen haben.");
		return false;
	}
	for (var i = 0; i < value.length; i++) {
		for (var j = 0; j < disallowed.length; j++) {
			if (value.charAt(i) == disallowed.charAt(j)) {
				if (showMessage) alert("\"" + title + "\" darf keines der Zeichen \"" + disallowed + "\" enthalten.");
				return false;
			}
		}
	}
	return true;
}

function validIntegerOrEmpty(value,min,max,text) {
	if (isEmpty(value)) return true;
	return validInteger(value,min,max,text);
}

function validInteger(value,min,max,text) {
	var showMessage = text != null && text.length > 0;
	if (value == null || value.length == 0) {
		if (showMessage) alert("\"" + text + "\" muss Wert enthalten.")
		return false;
	}
	var digits = "0123456789";
	for (var i = 0; i < value.length; i++) {
		if (digits.indexOf(value.charAt(i)) == -1) {
			if (showMessage) alert("\"" + text + "\" darf nur aus Zeichen \"" + digits + "\" bestehen.")
			return false;
		}
	}
	if (value < min || value > max) {
		if (showMessage) alert("\"" + text + "\" muss eine Zahl von " + min + " bis " + max + " sein.")
		return false;
	}
	return true;
}

function validEmail(email,title,maxlength,showMessage) {
	if (!validString(email,title,"<>;",maxlength,showMessage,true)) return false;
	var message = "\"" + title + "\" ist keine gültige E-Mail Adresse."
	if (email == null || email.length == 0 || (email.indexOf("@") == -1) || (email.indexOf(".") == -1)) {
		if (showMessage) alert(message);
		return false;
	}
	var country = email.substr(email.lastIndexOf(".")+1).toLowerCase();
	var withOutCountry = email.substring(0,email.lastIndexOf(".")).toLowerCase();
	var domain = withOutCountry.substr(withOutCountry.lastIndexOf("@")+1).toLowerCase();
	var name = withOutCountry.substring(0,withOutCountry.lastIndexOf("@")).toLowerCase();
	if (name == null || name.length < 3 || !validString(name,"","<>@ ",50,false,true)) {
		if (showMessage) alert(message);
		return false;
	}
	if (domain == null || domain.length < 2 || !validString(domain,"","<>;@ ",50,false,true)) {
		if (showMessage) alert(message);
		return false;
	}
	var foundCountry = false;
	for (var i = 0; i < validDomains.length; i++) {
		if (validDomains[i].toLowerCase() == country) {
			foundCountry = true;
			break;
		}
	}
	if (!foundCountry) {
		if (showMessage) alert(message);
		return false;
	}
	return true;
}

function validPassword(password,title,maxlength,showMessage,advises) {
	if (password == null || password.length == 0) {
		if (showMessage) alert("\"" + title + "\" darf nicht leer sein.");
		return false;
	}
	if (password.length > maxlength) {
		if (showMessage) alert("\"" + title + "\" darf höchstens " + maxlength + " Zeichen haben.");
		return false;
	}
	if (advises && password.length < 5) {
		if (showMessage) alert("\"" + title + "\" muss mindestens 5 Zeichen haben.");
		return false;
	}
	var bigCharacter = "ABCDEFGHIJKLMNOPQRSTUVWXYZÄÖÜ";
	var hasBigCharacter = false;
	var smallCharacter = "abcdefghijklmnopqrstuvwxyzäöü";
	var hasSmallCharacter = false;
	var digits = "0123456789";
	var hasDigit = false;
	var others = ".,-_!?()#";
	var hasOther = false;
	for (var i = 0; i < password.length; i++) {
		if (bigCharacter.indexOf(password.charAt(i)) != -1) hasBigCharacter = true;
		else if (smallCharacter.indexOf(password.charAt(i)) != -1) hasSmallCharacter = true;
		else if (digits.indexOf(password.charAt(i)) != -1) hasDigit = true;
		else if (others.indexOf(password.charAt(i)) != -1) hasOther = true;
		else {
			if (showMessage) alert("\"" + title + "\" darf nur Buchstaben, Zahlen oder die Zeichen \"" + others + "\" enthalten.");
			return false;
		}
	}
	if (advises && (password.length < 7) && showMessage && !confirm("\"" + title + "\" sollte mindestens 7 Zeichen haben.\nTrotzdem fortfahren?")) return false;
	if (advises && (!hasBigCharacter || !hasSmallCharacter || !hasDigit) && showMessage) {
		if (!confirm("\"" + title + "\" sollte aus Großbuchstaben, Kleinbuchstaben und Zahlen bestehen.\nTrotzdem fortfahren?")) return false;
	}
	return true;
}
