var errorNo = 1;
function qf_errorHandler(element, _qfMsg) {
	div = element.parentNode;

	var elementName = element.name.replace(/\[/, "_____");
	var elementName = elementName.replace(/\]/, "_____");
	var errorDivInserted = false;

	if (_qfMsg != '') {
		span = document.createElement("span");
		span.className = "error";
		_qfMsg = _qfMsg.substring(4);
		span.appendChild(document.createTextNode(_qfMsg));
		br = document.createElement("br");
		var anchor = document.createElement("a");
		anchor.setAttribute("name", "error" + errorNo);
		anchor.setAttribute("id", "error" + errorNo);
		errorNo++;
		var errorDiv = document.getElementById(elementName + '_errorDiv');
		if (!errorDiv) {
			//
			var next = div.nextSibling;
			while (next != null && next.nodeName != "TD") {
				next = next.nextSibling;
			}

			if (next) {
				if (next.className = 'td3') {
					if (next.hasChildNodes()) {
						errorDivInserted = false;
						for ( var i = 0; i < next.childNodes.length; i++) {
							if (next.childNodes[i].nodeType == 1) {
								// Elementknoten
								var id = next.childNodes[i].getAttribute("id");
								if (id && id.indexOf("_errorDiv") != -1) {
									errorDiv = next.childNodes[i];
									errorDivInserted = true;
								}
							}
						}
					}
					if (errorDivInserted == false) {
						errorDiv = document.createElement("span");
						errorDiv.id = elementName + '_errorDiv';
						next.appendChild(errorDiv);
						errorDivInserted = true;
					}
				}
			}
		}

		if (!errorDiv) {
			errorDiv = document.createElement("span");
			errorDiv.id = elementName + '_errorDiv';
			errorDivInserted = false;
		} else {
			if (element.className != 'longarea') {
				if (div.firstChild.textContent == ''
						|| _qfMsg == div.firstChild.textContent) {
					return false;
				} else {
					errorDivInserted = true;
				}
			}
		}

		while (errorDiv.firstChild) {
			errorDiv.removeChild(errorDiv.firstChild);
		}
		errorDiv.insertBefore(br, errorDiv.firstChild);
		errorDiv.insertBefore(span, errorDiv.firstChild);
		errorDiv.insertBefore(anchor, errorDiv.firstChild);
		if (!errorDivInserted) {
			for ( var i = element.parentNode.childNodes.length - 1; i >= 0; i--) {
				j = i - 1;
				if (j >= 0
						&& element.parentNode.childNodes[j].nodeName == "DIV") {
					element.parentNode.insertBefore(errorDiv,
							element.parentNode.childNodes[i]);
					errorDivInserted = true;
					break;
				}
			}
			if (!errorDivInserted) {
				element.parentNode.insertBefore(errorDiv,
						element.parentNode.firstChild);
			}
		}
		if (div.className.substr(div.className.length - 6, 6) != " error"
				&& div.className != "error") {
			div.className += " error";
		}
		window.location.hash = "#" + document.anchors[0].id;
		// document.getElementById('error_form_msg').innerHTML = 'Fehler <a
		// href="#error">hin</a>';
		return false;
	} else {
		// Fehler aufheben
		var errorDiv = document.getElementById(elementName + '_errorDiv');
		if (!errorDiv) {
			//
			var next = div.nextSibling;
			while (next != null && next.nodeName != "TD") {
				next = next.nextSibling;
			}
			if (next) {
				if (next.className == 'td3' && next.hasChildNodes()) {
					for ( var i = 0; i < next.childNodes.length; i++) {
						if (next.childNodes[i].nodeType == 1) {
							// Elementknoten
							var id = next.childNodes[i].getAttribute("id");
							if (id && id.indexOf("_errorDiv") != -1) {
								errorDiv = next.childNodes[i];
							}
						}
					}
				}
			}
		}
		if (errorDiv) {
			errorDiv.parentNode.removeChild(errorDiv);
		}
		// do not remove the error style from the div tag if there is still an error
		// message
		if (div.firstChild.innerHTML != null) {
			//return true;
		}
		//alert(div.className);
		// div == td2
		if (div.className.substr(div.className.length - 6, 6) == " error") {
			div.className = div.className.substr(0, div.className.length - 6);
		} else if (div.className == "error") {
			div.className = "";
		}
		return true;
	}
}
