//reset all elements in searchbox
function doReset() {
	var elems = document.getElementById('suchassistent').getElementsByTagName('select');
	for (var i = 0; i < elems.length; i++) {
		elems[i].selectedIndex = 0;
	}
}

// finds <element attname="attvalue">
// you can use your own attributes too
function getElementsByAttribute(attname, attvalue, case_sensitive) {
	var elems = new Array();
	var case_sensitive = case_sensitive ? true : false;
	var allelems = document.getElementsByTagName('*');
	for (var i = 0; i < allelems.length; i++) {
		if (case_sensitive) {
			if (allelems[i].getAttribute(attname) && (allelems[i].getAttribute(attname) == attvalue)) {
				elems.push(allelems[i]);
			}
		} else {
			if (allelems[i].getAttribute(attname) && (allelems[i].getAttribute(attname).toLowerCase() == attvalue.toLowerCase())) {
				elems.push(allelems[i]);
			}
		}
	}
	
	return elems;
}

// helper object for select elements
var Select = {
	hasOptionValue: function(sel, val) {
		var sel = $(sel);
		for (var i = 0; i < sel.options.length; i++) {
			if (sel.options[i].value == val) {
				return true;
			}
		}
		
		return false;
	},
	
	hasOptionText: function(sel, text) {
		var sel = $(sel);
		for (var i = 0; i < sel.options.length; i++) {
			if (sel.options[i].text == text) {
				return true;
			}
		}
		
		return false;
	},
	
	getValue: function(sel) {
		var sel = $(sel);
		var valAr = [];
		for (var i = 0; i < sel.options.length; i++) {
			if (sel.options[i].selected) {
				valAr.push(sel.options[i].value);
			}
		}
		
		if (!sel.multiple) {
			return valAr[0];
		}
		
		return valAr;
	},
	
	setValue: function(sel, valAr) {
		var sel = $(sel);
		var valAr = typeof(valAr) == 'string' ? [valAr] : valAr;
		for (var i = 0; i < sel.options.length; i++) {
			for (var j = 0; j < valAr.length; j++) {
				if (sel.options[i].value == valAr[j]) {
					sel.options[i].selected = true;
				}
			}
		}
	}
}

/**
 * Parameter:
 * form:      id des Formulars oder das Formularobjekt
 * i2methode: name der i2methode (zB. addArtikelToWK)
 * action:    Formular-Action (wie Formular-Attribut action="xy")
 * method:    Formular-Methode (wie Formular-Attribut method="GET")
 */
function submitForm(form, i2methode, action, target, method) {
	var form = $(form);
	var t_method = null;
	var inp = form.getElementsByTagName('input');
	for (var i = 0; i < inp.length; i++) {
		if (inp[i].name.toLowerCase() == 't_methode') {
			t_method = inp[i];
		}
	}

	var action    = (typeof(action) == 'undefined' || action === null)       ? form.getAttribute('action')         : action;
	var target    = (typeof(target) == 'undefined' || target === null)       ? (form.getAttribute('target') || '') : target;
	var method    = (typeof(method) == 'undefined' || method === null)       ? form.getAttribute('method')         : method;
	var i2methode = (typeof(i2methode) == 'undefined' || i2methode === null) ? t_method.value  : i2methode;
	
	if (i2methode == 'WKadd' && target != '') {
		method = 'POST';
	}

	var old_action    = form.getAttribute('action');
	var old_target    = form.getAttribute('target');
	var old_method    = form.getAttribute('method');
	var old_i2methode = t_method.value;
	
	form.setAttribute('action', action);
	form.setAttribute('target', target);
	form.setAttribute('method', method);
	t_method.value = i2methode;
	
	form.submit();
	
	form.setAttribute('action', old_action);
	form.setAttribute('target', old_target);
	form.setAttribute('method', old_method);
	t_method.value = old_i2methode;
}

/**
 * Wie document.getElementById(obj), es kann jedoch auch ein Objekt übergeben werden, 
 * wenn man nicht weiss, obs eins ist oder obs die ID ist.
 */
function $(obj) {
	if (typeof(obj) != 'object') {
		var obj = document.getElementById(obj);
	}
	
	return obj;
}

/**
 * Wie document.getElementById(obj).style.display = '';
 */
function showObj(obj) {
	var obj = $(obj);
	
	if (obj && obj.style) {
		obj.style.display = '';
	}
}

/**
 * Wie document.getElementById(obj).style.display = 'none';
 */
function hideObj(obj) {
	var obj = $(obj);
	
	if (obj && obj.style) {
		obj.style.display = 'none';
	}
}

/**
 * Falls display == 'none' dann showObj sonst hideObj
 */
function toggleObj(obj) {
	var obj = $(obj);
	
	if (obj && obj.style) {
		obj.style.display = obj.style.display == 'none' ? '' : 'none';
	}
}

/**
 * berechnet die absolute x-position zum dokument
 */
function getX(obj) {
	var obj = $(obj);
	if (!obj) {
		return 0;
	}
	
	if (obj.offsetParent) {
		return obj.offsetLeft + getX(obj.offsetParent);
	}
	
	return obj.offsetLeft;
}

/**
 * berechnet die absolute y-position zum dokument
 */
function getY(obj) {
	var obj = $(obj);
	if (!obj) {
		return 0;
	}
	
	if (obj.offsetParent) {
		return obj.offsetTop + getY(obj.offsetParent);
	}
	
	return obj.offsetTop;
}

/**
 * Falls die methode Array.push() nicht existiert (zB. in älteren Browsern), wird
 * diese hier noch definiert.
 */
if (!Array.prototype.push) {
	Array.prototype.push = function() {
		var startLength = this.length;
		for (var i = 0; i < arguments.length; i++) {
			this[startLength + i] = arguments[i];
		}
		
		return this.length;
	}
}

/**
 * Falls die methode Array.find() nicht existiert, wird
 * diese hier noch definiert.
 */
if (!Array.find) {
	Array.find = function(arr, val) {
		for (var i = 0; i < arr.length; i++) {
			if (arr[i] == val) {
				return i;
			}
		}
		
		return -1;
	}
}

/**
 * Funktion, um den markierten Text in einem Dokument zu erhalten. Sollte bis auf
 * IExplorer auf Mac überall funktionieren
 */
function getSelection() {
	if (window.getSelection) {
		return window.getSelection();
	}
	else if (document.getSelection) {
		return document.getSelection();
	}
	else if (document.selection) {
		return document.selection.createRange().text;
	}
	else return null;
}