function is_filled(elm, errorclass, errorcond, bsetFocus, debugName)
{
	//errorcond gibt an welche werte bei einer selectbox als invalid gelten, wird als komma separierter string angegeben
	//errorcond kann aber auch angeben welcher string nicht in einem text feld stehen darf
	var ret = true;
	
	if(elm == null || typeof elm.type == "undefined") return true;

	if(typeof debugName == "undefined")
		debugName = elm.name;

	if(elm != null && !elm.length)//kein Array
	{
		switch (elm.type)
		{
			case "textarea":
			case "password":
			case "text":
			{
				if (is_filled.arguments.length < 3)
					errorcond = "";

				if (elm.value.length == 0 || (errorcond != "" && elm.value == errorcond))
				{
					elm.className = errorclass;

					if(bsetFocus == true)
						elm.focus();

					return false;
				}
			}
			break;
			case "select-one":
			{
				if (!(elm.value >= 0))
				{
					elm.className = errorclass;

					if(bsetFocus == true)
						elm.focus();

					return false;
				}
			}
			break;
			case "checkbox":
			{
				if (!elm.checked)
				{
					elm.className = errorclass;

					if(bsetFocus == true)
						elm.focus();

					return false;
				}
			}
			break;
			default:
			{
				if(!isEmpty(elm))
					alert("Dieses "+elm.type+" - "+debugName+" - Element wird noch nicht behandelt! -> validate.js");
			}
		}
	}
	else if(elm != null)//Array
	{
		var tagname = elm.tagName;

		if (tagname)
		{
			if (elm.tagName.toLowerCase() == "select" || elm.tagName.toLowerCase() == "select-one")
			{
				if (is_filled.arguments.length < 3)
					errorcond = "0";

				var list = errorcond.split(",");

				for(var i = 0; i < list.length; i++)
				{
					if(elm.value == list[i])
					{
						if(elm.style.background.length > 0)
							elm.style.background = '#FF8080';
						else
							elm.className = errorclass;

						if(bsetFocus == true)
							elm.focus();

						return false;
					}
				}
			}
		}
		else
		{
			var len = elm.length;

			for (i = 0; i < len; i++)
			{
				var t_elm = elm[i];

				switch (t_elm.type)
				{
					case "radio":
					{
						if (t_elm.checked)
							return true;

						elm.className = errorclass;
						ret = false;

						if(i+1 == len && ret == false)
							elm[0].className = errorclass;

						if(bsetFocus == true)
							elm[0].focus();

						break;
					}
					default:
					{
						alert("Dieses "+debugName+" - "+t_elm.type+"-Array-Element wird noch nicht behandelt! -> validate.js");
					}
				}
			}
		}
	}

	return ret;
}

function validate_name(elm, errorclass)
{
	if (is_filled(elm, errorclass) && elm.value.match(/\w{2,50}/) != null)
		return true;
	else
	{
		elm.className = errorclass

		return false;
	}
}

function validate_passwort(elm, errorclass)
{
	if (is_filled(elm, errorclass) && elm.value.match(/^\S{5,50}$/) != null && elm.value.match(/(.*\W.*){2,}/) != null)
		return true;
	else
	{
		elm.className = errorclass

		return false;
	}
}

function validate_email(elm, errorclass)
{
	if(elm.value.match(/^([a-zA-Z0-9_äöüÄÖÜß]|\-|\.)+@(([a-zA-Z0-9_äöüÄÖÜß]|\-){2,128}\.)+[a-z]{2,4}$/) != null)
		return true;
	
	return false;
}

function validate_webseite(elm, errorclass)
{
	if (is_filled(elm, errorclass) && elm.value.match(/^http:\/\/\w+\.[a-zA-Z0-9_äöüÄÖÜß]+/) != null)
		return true;
	else
	{
		elm.className = errorclass

		return false;
	}
}

function validate_adresszeile(elm, errorclass, use_regex)
{
	ret	= false

	if (validate_adresszeile.arguments.length <= 2)
		use_regex = true;
	else
		use_regex = false;

	if (is_filled(elm, errorclass))
	{
		if (!use_regex)
			ret = true;
		else if(elm.value.match(/[\w-\.\/\\_].{3,100}/) == elm.value)
			ret = true;
	}

	if (!ret)
		elm.className = errorclass;

	return ret;
}

function validate_telefonnr(elm, errorclass, use_regex)
{
	ret	= false

	if (validate_telefonnr.arguments.length <= 2)
		use_regex = true;
	else
		use_regex = false;

	if (is_filled(elm, errorclass))
	{
		if (!use_regex)
			ret = true;
		else if(elm.value.match(/[0-9\/\+\-\ \(\)\.].{3,50}/) == elm.value)
			ret = true;
	}

	if (!ret)
		elm.className = errorclass;

	return ret;
}

//wenn max = -1 -> keine obere Schranke
function validate_block(div_id, ignore, min, max)
{
	var m_parent = document.getElementById(div_id);
	var counter = 0;
	var ret = true;

	if(m_parent == null) return true;

	if (m_parent.hasChildNodes())
	{
		counter = _walk(m_parent.firstChild, ignore, 0);
	}
	else
		alert(language_array["Keine Elemente gefunden!"]);

	if (counter < min || (counter > max && max != -1))
		ret = false;

	return ret;
}

function _walk(element, ignore, counter)
{
	var elm = element;
	var tagname = "";
	var c_checked = counter;

	while (elm != null)
	{
		tagname = elm.tagName;

		if (tagname)
		{
			if (tagname.toLowerCase() == "input")
			{
				switch (elm.type.toLowerCase())
				{
					case "checkbox":
					{
						if (elm.checked)
							c_checked++;

						break;
					}
					default:
					{
						alert(language_array["Element wird in der walk-Fumktion nicht behandelt!"]);
					}
				}
			}
		}

		if (elm.hasChildNodes())
		{
			var child = elm.firstChild;

			if (elm.tagName.toLowerCase() != ignore || ignore == "")
				c_checked = _walk(child, ignore, c_checked);
		}

		if (elm)
			elm = elm.nextSibling;
	}

	return c_checked;
}