/**
 * Javascriptlib mit allgemeinen Hilfsfunktionen
 * @created: 2006-01-09
 */

/**
 * Gibt ein Element in einem der Unterknoten mit uebergeben Attribute zurueck
 * @param: root : hmtl-element
 * @param: attribute-name : String
 * @param: attribute-value : String
 * @param: node : html-element
 */
function getElementBy(root, name, value) {
	var result;
	if (!root) {
		return result;
	}
	
	// Falls die aktuelle Node auf Name und Value match diese zurueckgeben
	if (root.nodeType == 1 && getNodeAttribute(root, name) == value) {
		result = root;
	// Anderenfalls in den Kindern suchen
	} else {
		// Alle Kinder durch gehen bis gefunden
		for (var i=0; i < root.childNodes.length && !result; ++i) {
			result = getElementBy(root.childNodes[i], name, value);
		}
	}

	return result;
}
/**
 * Gibt ein Element in einem der Knoten ueberhalb mit uebergeben Attribute zurueck
 * @param: root : hmtl-element
 * @param: attribute-name : String
 * @param: attribute-value : String
 * @param: node : html-element
 */
function getParentElementBy(root, name, value) {
	var result;
	if (!root) {
		return result;
	}
	// Falls die aktuelle Node auf Name und Value match diese zurueckgeben
	if (root.nodeType == 1 && getNodeAttribute(root, name) == value) {
		result = root;
	} else {
		result = getParentElementBy(root.parentNode, name, value);
	}
	return result;
}
/**
 * Gibt den Inhalt eines Tag zurueck
 * @param: node : html-element
 * @param: name des nodes : String
 */
function getValueByTagName(root, name) {
	var result = '';
	if (root) {
		var element = root.getElementsByTagName(name);
		if (element && element.length > 0 && element[0] && element[0].firstChild) {
			result = element[0].firstChild.nodeValue;
		}
	}
	return result;
}
/**
 * Gibt true zurueck falls der Browser Internet Explorer
 * @return: boolean
 */
function isIEX() {
	return navigator.appName == "Microsoft Internet Explorer" && navigator.userAgent.search(/opera/i)==-1;
}
/**
 * Setzt ein Attribute in den uebergeben Node
 * @param: node
 * @param: name : String
 * @param: value : String
 */
function setNodeAttribute(node, name, value) {
	if (isIEX()) {
		if (name == 'class') {
			node.className = value;
		} else {
			node[name] = value;
		}
	} else {
		node.setAttribute(name, value);
	}
}

function getNodeAttribute(node, name) {
	var result;
	if (isIEX()) {
		if (name == 'class') {
			result = node.className;
		} else {
			result = node[name];
		}
	} else {
		result = node.getAttribute(name);
	}
	return result;
}
/**
 * Funktion zum Unterbinden von Mehrfachausfuehrungen
 * @param: form
 */
var only_once_list = new Array();
function only_once(obj) {
	if(only_once_list[obj.name] == 1) {
		return false;
	}
	if(obj.href) {
		obj.disabled;
		if(obj.style) {
			obj.style.color = "#999999";
			obj.style.textDecoration = "none";
			obj.style.cursor = 'wait';
		}
		only_once_list[obj.name] = 1;
		return true;
	}
	for(var i = 0; ; i++) {
		if(!obj[i]) { break; }
		if(obj[i].type != 'button' && obj[i].type != 'submit') { continue; }
		if(obj[i].name == 'exec_once') {
			obj[i].disabled;
			if(obj[i].style) {
				obj[i].style.backgroundColor = "#CCCCCC";
				obj[i].style.color = "#999999";
				obj[i].style.border = "solid #999999 1px";
			}
		}
	}
	only_once_list[obj.name] = 1;
	return true;
}
/**
 * Erstellt eine Clone des uebergeben Objekts
 */
function clone(myObj) {
	if(typeof(myObj) != 'object') return myObj;
	if(myObj == null) return myObj;

	var myNewObj = new Object();

	for(var i in myObj)
		myNewObj[i] = clone(myObj[i]);

	return myNewObj;
}

