/**
 * Legt einen Hover Effekt über eine Tabelle und verlinkt jede Zeile mit dem
 * ersten Link in der Zeile.
 * 
 * @param	string	table			Der Name der Tabelle.
 * @param	mixed	exclude			Eine einzelne Spalten Nr. oder ein Array mit
 * 									mehreren, die angeben welche Spalten nicht
 * 									verlinkt werden.
 * @param	mixed	excludeLink		String mit einem Link Typ oder Array mit
 * 									mehreren Link Typen die nicht verwendet
 * 									werden (z.B. http, javascript).
 * @param	RegEx	replaceClass	Regulärer Ausdruck anhand dessen bestimmt
 * 									wird welche CSS Klasse ersetzt wird.
 * @param	integer	linkCol			Spalte in der nach einem Link gesucht werden
 * 									soll.
 */
function tableHover(table, exclude, excludeLink, replaceClass, linkCol) {

	switch (typeof exclude) {
		case 'undefined':
			exclude = new Array();
			break;
		case 'object':
			break;
		default:
			exclude = new Array(exclude);
			break;
	}

	switch (typeof excludeLink) {
		case 'undefined':
			excludeLink = new Array();
			break;
		case 'object':
			break;
		default:
			excludeLink = new Array(excludeLink);
			break;
	}

	switch (typeof replaceClass) {
		case 'undefined':
			replaceClass = /^.*$/;
			break;
		default:
			try {
				replaceClass.test('');
			}
			catch (exception) {
				throw new Error('No valid RegExp Object!');
			}
			break;
	}

	var rows = document.getElementById(table).getElementsByTagName('tr');
	for (var i = 1; i < rows.length; i++) {
		rows[i].onmouseover = function () {
			this.temp = '';
			if (replaceClass.test(this.className)) {
				this.temp = this.className.match(replaceClass)[0];
				this.className = this.className.replace(replaceClass, ' hover ');
			}
		}
		rows[i].onmouseout = function () {
			this.className = this.className.replace(/(^|\s)hover(\s|$)/, ' ' + this.temp + ' ');
		};

		var j;
		var elementNumber = 0;
		if (linkCol == undefined) {
			for (j = 0; j < rows[i].getElementsByTagName('a').length; j++) {
				if (in_array(rows[i].getElementsByTagName('a')[j].href.split(':', 1)[0], excludeLink)) {
					elementNumber++;
				} else {
					break;
				}
			}
		} else {
			elementNumber = rows[i].getElementsByTagName('a').length;

			var cols = rows[i].getElementsByTagName('td');
			if (cols.length > linkCol) {
				var links = cols[linkCol].getElementsByTagName('a');
				if (links.length > 0 && !in_array(links[0].href.split(':', 1)[0], excludeLink)) {
					var link = links[0];
					for (j = 0; j < rows[i].getElementsByTagName('a').length; j++) {
						if (rows[i].getElementsByTagName('a')[j] == link) {
							elementNumber = j;
						}
					}
				}
			}
		}

		if (
            rows[i].getElementsByTagName('a').length == elementNumber ||
            rows[i].getElementsByTagName('a')[elementNumber].href == window.location.href || (
                rows[i].getElementsByTagName('a')[elementNumber].outerHTML != undefined && 
                !/href="?[^" >]/i.test(rows[i].getElementsByTagName('a')[elementNumber].outerHTML)
            )
        ) {
			rows[i].style.cursor = 'auto';
			continue;
		}

		rows[i].getElementsByTagName('a')[elementNumber].onclick = new Function('', 'return false;');
		var cells = rows[i].getElementsByTagName('td');
		for (j = 0; j < cells.length; j++) {
			if (in_array(j, exclude)) {
				cells[j].style.cursor = 'auto';
				continue;
			}
			if (rows[i].getElementsByTagName('a')[elementNumber].target == '') {
				cells[j].onclick = new Function('', 'location.href = this.parentNode.getElementsByTagName(\'a\')[' + elementNumber + '].href;');
			} else {
				cells[j].onclick = new Function('', 'window.open(this.parentNode.getElementsByTagName(\'a\')[' + elementNumber + '].href, this.parentNode.getElementsByTagName(\'a\')[' + elementNumber + '].target);');
			}
		}
	}
}


function confirm_delete(url, text) {
	if (confirm(text)) {
		document.location.href = url;
	}
}

//_node_name -> id eines divs, aus dem das erste div dupliziert wird
function add_node (_node_name, max_nodes) {
	
	var _node = document.getElementById(_node_name);
	
	if (typeof max_nodes != undefined && count_real_nodes(_node) >= max_nodes) {
		return;
	}

// text-nodes werden von IE ignoriert, von Opera und NS nicht
	for (var i = 0; i<_node.childNodes.length; i++) {
		if (_node.childNodes[i].nodeName != '#text') {
			break;
		}
	}
	var _node_clone = _node.childNodes[i].cloneNode(true);

// IE Workaround für selected
	var _selects = _node.childNodes[i].getElementsByTagName('select');
	var _clone_selects = _node_clone.getElementsByTagName('select');
	for (i = 0; i < _selects.length; i++) {
		_clone_selects[i].selectedIndex = _selects[i].selectedIndex;
	}

	_node.appendChild(_node_clone);
}

function del_node (_node_name) {
	_node = document.getElementById(_node_name)
// Länge ausrechnen (Text-Nodes nicht zählen)
	if (count_real_nodes(_node) <= 1) {
		return;
	}

	_node.removeChild(_node.lastChild);
}

function in_array(needle, haystack) {
	if (typeof haystack != 'object') {
		return false;
	}
	
	for (var i = 0; i < haystack.length; i++) {
		if (typeof haystack[i] != 'undefined' && haystack[i] == needle) {
			return true;
		}
	}
	
	return false;
}

function count_real_nodes(_node) {
	var node_count =0;
	for (var i = 0; i<_node.childNodes.length; i++) {
		if (_node.childNodes[i].nodeName != '#text') {
			node_count++;
		}
	}
	return node_count;
}	

function contactWindow(customer, tlg, lg, details) {
	if (typeof details == 'undefined') {
		details = '';
	} else {
		details = escape(details);
	}

	var window = open('http://www.city-map.de/city/kontakt?tlg=' + tlg + '&lg=' + lg + '&kundennummer=' + customer + '&details=' + details, 'contactwindow', 'width=580, height=540, scrollbars=yes');
}



function getPos(obj) {
	var myTarget;
	if (typeof obj == 'object') {
		myTarget = obj;
	} else {
		myTarget = document.getElementById(obj);
	}
	var top = 0;
	var left = 0;
	while(myTarget != document.getElementsByTagName('body')[0] && myTarget != document.getElementsByTagName('html')[0]) {
		top += myTarget.offsetTop;
		left += myTarget.offsetLeft;

		if (myTarget.style.position == 'absolute') {
			return Array(left, top);

			if (typeof myTarget.style.top != 'undefined') {
				top -= myTarget.style.top.replace(/[^\d]/g, '');
			}
			if (typeof myTarget.style.left != 'undefined') {
				left -= myTarget.style.left.replace(/[^\d]/g, '');
			}
		}

		myTarget = myTarget.offsetParent;
	}
	return Array(left, top);
}



function selectAll(element, check) {
	var inputs = document.getElementById(element).getElementsByTagName('input');
	for (var i = 0; i < inputs.length; i++) {
		if (inputs[i].type == 'checkbox') {
			inputs[i].checked = check;
		}
	}
}

/**
  trim Funktion
*/
function trim(str) {
	return str.replace(/(^\s+)|(\s+$)/, '');
}