// Array-Helferchen
// ****************

// Ist elem Element von Array arr?
function is_in_array(arr, elem) {
	for (var i = 0; i < arr.length; i++) {
		if (arr[i] == elem) return true;
	}
	return false;
}

// Entfernt Element mit Index i aus Array arr
function array_element_entfernen_by_id(arr, ix) {
	var ret = new Array();
	for (var i = 0; i < arr.length; i++) {
		if (ix != i)
			ret[ret.length] = arr[i];
	}
	return ret;
}

// Entfernt Element x aus Array arr
function array_element_entfernen_by_value(arr, x) {
	var ret = new Array();
	for (var i = 0; i < arr.length; i++) {
		if (x != arr[i])
			ret[ret.length] = arr[i];
	}
	return ret;
}

// Gleicht zwei Arrays miteinander ab; uebrig bleiben alle die
// Elemente, die in beiden enthalten sind
function array_filter(arrAll, arrFilter) {
	var ret = new Array();
	for (var i = 0; i < arrAll.length; i++) {
		if (is_in_array(arrFilter, arrAll[i]))
			ret[ret.length] = arrAll[i];
	}
	return ret;
}


// Umformatierungen
// ****************

function zahlen_format(input, tausender, komma, nachkomma, einheit) {
	var ret = '';
	var ok = true;

	// zuerst ein paar Tests
	if (isNaN(input)) {
		// vielleicht ist die Eingabe schon "auf deutsch" formatiert?
		input = input.replace('.', '');
		input = input.replace(',', '.');
		if (isNaN(input)) {
			// ...scheinbar nicht, dann also Fehler
			ok = false;
		}
	}

	if (ok) {
		// zuerst in ordentliche Zahl, dann in einen String wandeln
		var str = Number(input).toFixed(nachkomma) + '';
		// Komma finden
		var p = str.indexOf(".");
		var gz = str.substr(0, p);
		var nk = str.substr(p+1);
	
		// Tausender-Trennzeichen erst ab 1000 interessant
		if (gz.length > 3) {
			var m = gz.length % 3;
	
			if (m > 0) {
				ret = gz.substr(0, m) + tausender;
			}
			// in Dreierbloecken Trennzeichen einfuegen
			for (var i = m; i < (gz.length - m); i+=3) {
				ret += gz.substr(i, 3) + tausender;
			}
			// letztes Trennzeichen am Ende entfernen
			ret = ret.substr(0, ret.length-tausender.length);
		} else {
			ret = gz;
		} // endif laenge
		return ret + komma + nk + einheit;
	} else {
		return false;
	}
} // endif function zahlen_format

// Gibt eine Zahl als Euro-Waehung (String) zurueck
function db_als_euro(preis) {
	if (preis.length > 0) {
		var temp = zahlen_format(preis, '.', ',', 2, '&nbsp;&euro;');
		if (temp) {
			return temp;
		} else {
			return '';
		}
	} else {
		return '';
	}
}




// Formular-Helferchen
// *******************

// Gibt zurueck, ob in einer Radio-Button-Gruppe ein Radio eingeschaltet ist
function get_radio_value(name) {
	var ret = -1
	for (i = 0; i < document.getElementsByName(name).length; i++) {
		if(document.getElementsByName(name)[i].checked == true) {
			ret = document.getElementsByName(name)[i].value;
			break;
		}
	}
	return ret;
}




// Variablen/Funktionen zur Base64 De-/Kodierung
// *********************************************

var doEscape = 0; // sollen Ein/Ausgabe zusaetzlich mit un-/escape() behandelt werden?
var base64s = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";

function Base64encode(decStr) {
	var bits = 0;
	var dual = 0;
	var i = 0;
	var encOut = '';

	if (doEscape)
		ecStr = escape(decStr);

	while(decStr.length >= i + 3) {
		bits =
			(decStr.charCodeAt(i++) & 0xff) <<16 |
			(decStr.charCodeAt(i++) & 0xff) <<8  |
			decStr.charCodeAt(i++) & 0xff;
		encOut +=
			base64s.charAt((bits & 0x00fc0000) >>18) +
			base64s.charAt((bits & 0x0003f000) >>12) +
			base64s.charAt((bits & 0x00000fc0) >> 6) +
			base64s.charAt((bits & 0x0000003f));
	}
	if(decStr.length -i > 0 && decStr.length -i < 3) {
		dual = Boolean(decStr.length -i -1);
		bits =
			((decStr.charCodeAt(i++) & 0xff) <<16) |
			(dual ? (decStr.charCodeAt(i) & 0xff) <<8 : 0);
		encOut +=
			base64s.charAt((bits & 0x00fc0000) >>18) +
			base64s.charAt((bits & 0x0003f000) >>12) +
			(dual ? base64s.charAt((bits & 0x00000fc0) >>6) : '=') + '=';
	}
	return encOut;
} // end function Base64encode

function Base64decode(encStr) {
	var bits = 0;
	var decOut = '';
	var i = 0;
	for(i; i<encStr.length; i += 4) {
		bits =
			(base64s.indexOf(encStr.charAt(i))    & 0xff) <<18 |
			(base64s.indexOf(encStr.charAt(i +1)) & 0xff) <<12 | 
			(base64s.indexOf(encStr.charAt(i +2)) & 0xff) << 6 |
			 base64s.indexOf(encStr.charAt(i +3)) & 0xff;
		decOut += String.fromCharCode((bits & 0xff0000) >>16, (bits & 0xff00) >>8, bits & 0xff);
	}
	if(encStr.charCodeAt(i -2) == 61)
		undecOut=decOut.substring(0, decOut.length -2);
	else if(encStr.charCodeAt(i -1) == 61)
		undecOut=decOut.substring(0, decOut.length -1);
	else undecOut=decOut;
	
	if (doEscape)
		undecOut = unescape(undecOut);

	return undecOut;
} // end function Base64decode




// Variablen/Funktionen zum Sperren der ENTER-Taste fuer Formulare
// ***************************************************************

var form_ok = true;
//var gesperrteTastenCodes = new Array(13, 65);

function Bestaetigung() {
	return form_ok;
}

function TasteGedrueckt (Ereignis) {
	if (!Ereignis)
		Ereignis = window.event;
	if (Ereignis.which) {
		Tastencode = Ereignis.which;
	} else if (Ereignis.keyCode) {
		Tastencode = Ereignis.keyCode;
	}
//	for (var i = 0; i < gesperrteTastenCodes.length; i++) {
// ## Falls hier umgesetzt, dann auch unten bei TasteLosgelassen nicht vergessen!
		if (Tastencode == 13) {
			form_ok = false;
		}
//	}
}

function TasteLosgelassen (Ereignis) {
	if (!Ereignis)
		Ereignis = window.event;
	if (Ereignis.which) {
		Tastencode = Ereignis.which;
	} else if (Ereignis.keyCode) {
		Tastencode = Ereignis.keyCode;
	}
	if (Tastencode == 13) {
		form_ok = true;
	}
}

