/***Formular abschicken an angegebene adresse ***/
function submitForm(formName, /*optional*/ formAction, formMethod, targetWin)
{
	var formDefaultMethod = "post";
	if(!formMethod)
	{
		formMethod = formDefaultMethod;
	}
	else
	{
		if(formMethod != "get" || formMethod != "post")
		{
			formMethod = formDefaultMethod;
		}
	}
	var f = document.forms[formName];
	if(targetWin) f = targetWin.document.forms[formName]; 

	if(formAction)
		f.action = formAction;
	if(f.method)
	{
		try{
		f.method = formMethod;
		}
		catch(e)
		{}
	}
	if(document.getElementsByTagName('body') && document.getElementsByTagName('body')[0].style)
		document.getElementsByTagName('body')[0].style.cursor = 'wait';
	f.submit();
}

/***Formular loeschen***/
function resetForm(formName, /*optional*/targetWin)
{
	var f = document.forms[formName];
	if(targetWin) f = targetWin.document.forms[formName]; 
	f.reset();
	return false;
}

/***Funktionen fuer multiPageForm (mpf)***/
function multiPageForm(formName, /*optional*/ formAction, formMethod, targetWin)
{
	this.formName = formName;
	this.formAction = formAction;
	this.formMethod = formMethod;
	this.targetWin = targetWin;
	this.pageIdFieldName = "page_id";
	this.nextPageIdFieldName = "next_page_id";
	this.formObj = document.forms[formName];
	this.formElements = this.formObj.elements;

	this.submitForm = function()
	{
		var formMethod = "post";
		if(this.formMethod && (this.formMethod == "get" || this.formMethod == "post")) 
			formMethod = this.formMethod;
		var f = this.formObj;
		if(this.targetWin && this.targetWin != "") f = this.targetWin.document.forms[this.formName]; 
	
		if(this.formAction)
			f.action = this.formAction;
		if(f.method)
		{
			try{
			f.method = formMethod;
			}
			catch(e){}
		}
		f.submit();
	}

	this.goTo = function(pageId, nextPageId, /*optional*/ fieldValues)
	{
		if(!pageId) pageId = "";
		if(!nextPageId) nextPageId = "";
		/*if(nextPageId == "" && pageId != "")
		{
			nextPageId = pageId;
			pageId = "";
		}*/
		this.formElements[this.pageIdFieldName].value = pageId;
		this.formElements[this.nextPageIdFieldName].value = nextPageId;
		if(fieldValues && fieldValues.match(/(.*?\=.*?\&?)+/))
		{
			var fields = new Array();
			var parts = fieldValues.split("&");
			for(i=0;i<parts.length;i++)
			{
				var valKeyPair = parts[i].split("=");
				fields[valKeyPair[0]] = valKeyPair[1];
			}
			for(var key in fields)
			{
				this.formElements[key].value = fields[key];
			}
		}
		this.submitForm();
	}
}

/***Formular abschicken an angegebene adresse u. unbegr. Anzahl von Field-Values setzten***/
function setFieldValuesAndSubmitForm(formName, fieldNames, fieldValues, /*optional*/ formAction, formMethod, targetWin)
{
	var f = document.forms[formName];
	if(fieldNames && fieldValues)
	{
		if(typeof(fieldNames) != "string" && typeof(fieldValues) != "string")
		{
			for(var i=0;i<fieldNames.length;i++)
			{
				if(fieldValues[i]) f.elements[fieldNames[i]].value = fieldValues[i];
			}
		}
		else
		{
			f.elements[fieldNames].value = fieldValues;
		}
	}
	submitForm(formName, formAction, formMethod, targetWin);
}

/***Klasse u. Inhalt von Formularfeldern ändern (in Verbindung mit onFocus/onBlur)***/
function setCondition(formName, formElement, elementClassName, origValue)
{
	var path = document.forms[formName].elements[formElement];
	var val = path.value;
	var isEmpty = true;
	if(val != origValue)
	{
		for(i=0;i<val.length;i++)
		{
			if(val.charAt(i) != " ")
			{
				isEmpty = false;
			}
		}
		if(isEmpty)
		{
			path.value = origValue;
		}
	}
	else
	{
		path.value = "";
	}
	path.className = elementClassName;
}

/***Funktion, um die Referenz auf einen submit-button mit dem type=image zu bekommen***/

function getImageSubmitButton(/*String*/ formName)
{
	var f = document.forms[formName];
	var c = f.childNodes;
	var imageInputElement = null;
	search:
	for(var i1 in c)
	{
		if(c[i1].nodeName == "INPUT")
		{
			var a = c[i1].attributes;
			for(var i2 in a)
			{
				try{var n = a[i2].name;}
				catch(e){n = "type";}
				try
				{
					var av = a[i2].nodeValue;
					if(n == "type" && av == "image")
					{
						//image input element gefunden
						imageInputElement = c[i1];
						break search;
					}
				}
				catch(e){break search;}
			}
		}
	}
	return imageInputElement;
}

/**
 * loesche schon vorgegebene Felder eines Formulars
 * @name: resetInitalizedFields
 * @param String formName: name of the target-form
 * @param Array arrFieldNames: all field-names of the form
 * @param Boolean excludeFields: wether arrFieldNames should be an exclude oder include list (default: included in reset)
 */

function resetInitalizedFields(formName, arrFieldNames, excludeFields)
{
	var f = document.forms[formName];
	var els = f.elements;
	if(!arrFieldNames) arrFieldNames = new Array();
	if(typeof(arrFieldNames) != "object") arrFieldNames = new Array(arrFieldNames);
	var arrFieldNamesLen = arrFieldNames.length;
	if(!excludeFields) excludeFields = false;
	
	for(var i=0;i<els.length;i++)
	{
		trunc = excludeFields;
		var el = els[i];
		for(ii=0;ii<arrFieldNamesLen;ii++)
			if(el.name == arrFieldNames[ii])
				trunc = !excludeFields;
		if(trunc || arrFieldNamesLen == 0)
		{
			if(el.type && (el.type == "radio" || el.type == "checkbox"))
			{	 //to do...
				var checkboxGroup = el;
				if(checkboxGroup.value)
					checkboxGroup = new Array(checkboxGroup);
				for(iii=0;iii<checkboxGroup.length;iii++)
					checkboxGroup[iii].checked = false;
			}
			else
			{
				el.value = "";
			}
		}
	}
}

/***Ueberpruefung ob Eingabestring eine gueltige Datumsangabe ist [aktuell: datum darf nur in der vergangenheit liegen!]***/
function checkDate(str_date)
{
	var preg_date_format = /^[0-9]{2}\.[0-9]{2}\.[0-9]{4}$/;
	if(!str_date.match(preg_date_format))
	{
		//fehler im aufbau des date-strings
		return false;
	}
	else
	{
		//Ueberpruefe validen string weiter
		var date = new Date();
		var day_now = date.getDate();
		var month_now = (date.getMonth()+1);
		var year_now = date.getFullYear();
		
		var day = str_date.substr(0,2);
		var month = str_date.substr(3,2);
		var year = str_date.substr(6,4);
		day.charAt(0) == "0" ? day =  parseInt(day.charAt(1)) : parseInt(day);
		month.charAt(0) == "0" ? month = parseInt(month.charAt(1)) : parseInt(month);
		if((day > 31 || day < 1) || (month > 12 || month < 1) || (year < 1970))
		{
			return false;
		}
		else
		{
			var ts_now = Date.UTC(year_now,(month_now-1),day_now,00,00,00);
			var ts = Date.UTC(year,(month-1),day,00,00,00);
			if(ts > ts_now)
			{
				return false;
			}
			else
			{
				return true;
			}
		}
	}
}

/***Ueberpruefung ob Eingabestring eine gueltige Zeitangabe ist [erlaubt: HH:MM oder HH:MM:SS]**/

function checkTime(strTime)
{
	var pregTimeFormat = /^([0-9]{2}\:[0-9]{2}){1}(\:[0-9]{2})?$/;
	if(!strTime.match(pregTimeFormat))
	{
		//fehler im aufbau des date-strings
		return false;
	}
	else
	{
		var strTimeLen = strTime.length;
		var timeFormat = "short";
		if(strTimeLen == 8)
		{ 
			timeFormat = "long";
		}
		var h = "";
		var m = "";
		var s = "";
		strTime.charAt(0) == "0" ? h = parseInt(strTime.substr(1,1)) : h = parseInt(strTime.substr(0,2));
		strTime.charAt(3) == "0" ? m = parseInt(strTime.substr(4,1)) : m = parseInt(strTime.substr(3,2));
		if(timeFormat == "long")
		{
			s = strTime.substr(6,2);
			strTime.charAt(6) == "0" ? s = parseInt(strTime.substr(7,1)) : h = parseInt(strTime.substr(6,2));
		}
		if((h >= 0 && h <= 23) && (m >= 0 && m <= 59))
		{
			if((timeFormat == "long") && !(s >= 0 && s <= 59))
			{
				return false;
			}
			return true;
		}
	}
}


//check if a time period is valid
function checkPeriod(str_period_start, str_period_end)
{
	var preg_date_format = /^[0-9]{2}\.[0-9]{2}\.[0-9]{4}$/;
	if(!str_period_start.match(preg_date_format) || !str_period_end.match(preg_date_format))
	{
		//fehler im aufbau des date-strings
		return false;
	}
	else
	{
		var day_start = str_period_start.substr(0,2);
		var month_start = str_period_start.substr(3,2);
		var year_start = str_period_start.substr(6,4);
		day_start.charAt(0) == "0" ? day_start =  parseInt(day_start.charAt(1)) : parseInt(day_start);
		month_start.charAt(0) == "0" ? month_start = parseInt(month_start.charAt(1)) : parseInt(month_start);
		
		var day_end = str_period_end.substr(0,2);
		var month_end = str_period_end.substr(3,2);
		var year_end = str_period_end.substr(6,4);
		day_end.charAt(0) == "0" ? day_end =  parseInt(day_end.charAt(1)) : parseInt(day_end);
		month_end.charAt(0) == "0" ? month_end = parseInt(month_end.charAt(1)) : parseInt(month_end);
		
		var ts_start = Date.UTC(year_start,(month_start-1),day_start,00,00,00);
		var ts_end = Date.UTC(year_end,(month_end-1),day_end,00,00,00);
		
		if(ts_start > ts_end)
		{
			return false;
		}
		else
		{
			return true;
		}
	}
}

//validate formular time intervall
function validateTimeInterval(form, ePeriodStart, ePeriodEnd)
{
	if(!ePeriodStart) ePeriodStart = "period_start";
	if(!ePeriodEnd) ePeriodEnd = "period_end";
	
	var f = form;
	var period_start = f.elements[ePeriodStart].value;
	var period_end = f.elements[ePeriodEnd].value;
	
	if(period_start == "TT.MM.JJJJ")
	{
		period_start = "01.01.1970";
	}
	if(period_end == "TT.MM.JJJJ")
	{
		period_end = get_time("date");
	}
	
	var period_ok = false;
	var period_start_ok = checkDate(period_start); 
	var period_end_ok = checkDate(period_end);
	
	if(period_start_ok == true && period_end_ok == true)
	{
		if(checkPeriod(period_start, period_end))
		{
			period_ok = true;
		}
	}
	
	if(!period_start_ok || !period_end_ok || !period_ok)
	{
		var msg = "Bitte Überprüfen Sie Ihre Angaben in den Datums-Feldern!\n\n";
		msg += "Ihre Angabe: "+period_start+" - "+period_end+"\n\n";
		msg += "Sie haben entweder ein Datum in ungueltigem Format eingeben\n";
		msg += "oder der angegebene Zeitraum ist ungueltig oder überschreitet das gueltige Zeitfenster\n";
		msg += "(Zeitfenster: 01.01.1970 - heute)";
		alert(msg);
		f.elements[ePeriodStart].focus();
		return false;
	}
}

//manage custom button

function activateCustomButton(idButtonLeft, idButtonMiddle, idButtonRight)
{
	var bLeft = document.getElementById(idButtonLeft);
	var bMiddle = document.getElementById(idButtonMiddle);
	var bRight = document.getElementById(idButtonRight);
	bLeft.src = "img/button_left_over.gif";
	bMiddle.className = "customButtonOver";
	bRight.src = "img/button_right_over.gif";
}

function deactivateCustomButton(idButtonLeft, idButtonMiddle, idButtonRight)
{
	var bLeft = document.getElementById(idButtonLeft);
	var bMiddle = document.getElementById(idButtonMiddle);
	var bRight = document.getElementById(idButtonRight);
	bLeft.src = "img/button_left.gif";
	bMiddle.className = "customButton";
	bRight.src = "img/button_right.gif";
}

//check fields

function switchFieldsCondition(formName, fieldArray, condition)
{
	if(!condition) condition = true;
	var f = document.forms[formName];
	if(fieldArray && typeof(fieldArray) == "string") fieldArray = new Array(fieldArray);
	if(fieldArray)
	{
		for(i=0;i<fieldArray.length;i++)
		{
			var currFieldObj = f.elements[fieldArray[i]];
			currFieldObj.checked = condition;
		}
	}
}

//get select object

function getSelectObject(formName, selectName)
{
	var selectObj = null;
	var f = document.forms[formName];
	if(f) selectObj = f.elements[selectName];
	return selectObj;
}

//get selected index

function getSelectedIndex(selectObj)
{
	var selectObjIndex = -1;
	if(selectObj) selectObjIndex = selectObj.selectedIndex;
	return selectObjIndex;
}

//get selected value of a select-list

function getSelectValue(formName, selectName)
{
	var selectObjValue = null;
	var selectObj = getSelectObject(formName, selectName)
	var selectObjIndex = getSelectedIndex(selectObj);
	if(selectObjIndex != -1) selectObjValue = selectObj[selectObjIndex].value;
	return selectObjValue;
}

//get selected text of a select-list

function getSelectText(formName, selectName)
{
	var selectObjText = null;
	var selectObj = getSelectObject(formName, selectName)
	var selectObjIndex = getSelectedIndex(selectObj);
	if(selectObjIndex != -1) selectObjText = selectObj[selectObjIndex].text;
	return selectObjText;
}

//move an selected option of a select list to another select list

function move_option(formName, selectNameFrom, selectNameTo)
{
	var f = document.forms[formName];
	var selectFrom = f.elements[selectNameFrom];
	var selectTo = f.elements[selectNameTo];
	var fromIndex = selectFrom.selectedIndex;
	if(fromIndex != -1)
	{
		var option = new Option(selectFrom[fromIndex].text, selectFrom[fromIndex].value);
		var title = (selectFrom[fromIndex].title) ? selectFrom[fromIndex].title : "";
		option.setAttribute("title", title);
		selectFrom[fromIndex] = null;
		selectTo[selectTo.length] = option;
	}
}

//add an option to a select list

function addSelectOption(formName, selectName, optionText, optionValue, newPosition, selectedValue)
{
	if(!newPosition) newPosition = 0;
	var f = document.forms[formName];
	var selectObj= f.elements[selectName];
	var objIndex = selectObj.selectedIndex;
	if(objIndex != -1)
	{
		var option = new Option(optionText, optionValue);
		var selectObjLen = selectObj.length;
		var i=0;
		var tmpOption = false;
		while(i<=selectObjLen && !tmpOption)
		{
			if(i==newPosition)
			{
				tmpOption = selectObj[i];
				selectObj[i] = option;
			}
			i++;
		}
		if(tmpOption)
		{
			var tmp = new Object();
			for(i; i<=selectObjLen; i++)
			{
				tmp = selectObj[i];
				selectObj[i] = tmpOption;
				tmpOption = tmp;
			}
		}
	}
	
	if(selectedValue)
	for(var i=0; i<selectObj.length; i++)
	{
		if(selectObj[i].value == selectedValue) selectObj[i].selected = true;
	}
}

//get number of options
function getOptionsNum(formName, selectName)
{
	var result = false;
	var f = document.forms[formName];
	var selObj = f.elements[selectName];
	result = selObj.options.length;
	return result;
}

// add an option to a select list
function addSelectOption(formName, selectName, optionName, optionValue)
{
	var f = document.forms[formName];
	var selObj = f.elements[selectName];
	var selOptions = selObj.options;
	var selOptionsLen = selOptions.length;
	
	if(!optionValue) optionValue = "";
	var optionObj = new Option(optionName, optionValue);
	selOptions[selOptionsLen] = optionObj;
}

//remove an option of a select list

function removeSelectOption(formName, selectName, optionIdentifier, identifierType, selected)
{
	if(!identifierType) identifierType = "value";
	if(selected != false)
		selected = true;
		
	var f = document.forms[formName];
	var selectObj= f.elements[selectName];
	var objIndex = true;
	if(selected) objIndex = selectObj.selectedIndex;
	if(objIndex != -1)
		for(var i=0; i<selectObj.length; i++)
		{
			if(selectObj[i][identifierType] == optionIdentifier)
				selectObj[i] = null;
		}
}

//get all selected options from a multiple select.

/*function getSelectedOptions(formName, selectName, deselect)
{
	if(deselect != false) deselect = false;
	var selectedOptions = new Array();
	var formObj = document.forms[formName];
	var selObj = formObj.elements[selectName];
	while (selObj.selectedIndex != -1)
	{
		selectedOptions[selectedOptions.length] = selObj.options[selObj.selectedIndex];
		selObj.options[selObj.selectedIndex].selected = false; 
	}
	//reselect options
	if(!deselect)
	{
		selectedOptionsLen = selectedOptions.length;
		for(var i=0;i<selectedOptionsLen;i++)
			selectedOptions[i].selected = true;
	}
	return selectedOptions;
}*/

function getSelectedOptions(formName, selectName)
{
    var selectedOptions = new Array();
    var formObj = document.forms[formName];
	var selObj = formObj.elements[selectName];
	var optionsLen = selObj.options.length
    for (var i=0; i<optionsLen; i++) 
	      if (selObj.options[i].selected) selectedOptions[selectedOptions.length] = selObj.options[i];
    return selectedOptions;
}

//check if an option exists
function selectOptionExists(formName, selectName, optionIdentifier, identifierType)
{
	exists = false;
	if(!identifierType) identifierType = "value";
	var f = document.forms[formName];
	var selObj = f.elements[selectName];
	var selOptions = selObj.options;
	var selOptionsLen = selOptions.length;
	for(var i=0;i<selOptionsLen;i++)
		if(selOptions[i][identifierType] == optionIdentifier)
			exists = true;
	return exists;
}

//select options of different select-lists (usefull if values should be sent with request)
function selectExistingOptions(formName, selectNames)
{
	var f = document.forms[formName];
	if(!selectNames[0]) selectNames = new Array(selectNames);
	var selectNamesLen = selectNames.length;
	for(var i1=0;i1<selectNamesLen;i1++)
	{
		var selObj = f.elements[selectNames[i1]];
		for(var i2=0;i2<selObj.options.length;i2++)
			selObj.options[i2].selected = "selected";
	}
}

/***moveSelectOptions()***
* @purpose: move selected Options of a Select to another Select.
* default behaviour is, that all selected options are moved.
* you can also specify optionKeys (values or texts - specified by optionKeyType) 
* that should be moved, selected are ignored in this case.
* @access: public
* @param: string formName
* @param: string fromSelectName
* @param: string toSelectName
* [@param: array optionKeys]
* [@param: string optionKeyType ('value'|'text'); default: 'value']
* [@param: string fromEmptyNoteValue (Hinweis in Form einer Option (value-wert), wenn keine Option mehr vorhanden)]
* [@param: string fromEmptyNoteText (Hinweis in Form einer Option (text-wert), wenn keine Option mehr vorhanden)]
* [@param: string toEmptyNoteValue (Hinweis in Form einer Option (value-wert), wenn in to-Select-Feld keine Option mehr vorhanden)]
* [@param: string toEmptyNoteText (Hinweis in Form einer Option (text-wert), wenn in to-Select-Feld keine Option mehr vorhanden)]
*/

function moveSelectOptions(formName, fromSelectName, toSelectName, /*optional*/optionKeys, optionKeyType, fromEmptyNoteValue, fromEmptyNoteText, toEmptyNoteValue, toEmptyNoteText)
{
	var confirmLimitStep = 3000;
	if(!optionKeyType) optionKeyType = "value";
	var formObj = document.forms[formName];
	var fromSelObj = formObj.elements[fromSelectName];
	var toSelObj = formObj.elements[toSelectName];
	var toSelObjOptions = toSelObj.options;
	var	selOptions = new Array();
	var fromSelObjOptions = fromSelObj.options;
	var fromSelObjOptionsLen = fromSelObjOptions.length;
	//if optionKeys not given, search for selected options
	if(!optionKeys) selOptions = getSelectedOptions(formName, fromSelectName);
	else
	{
		var optionKeysLen = optionKeys.length;
		for(var i1=0; i1<fromSelObjOptionsLen; i1++)
			for(var i2=0; i2<optionKeysLen; i2++)
				if(fromSelObjOptions[i1][optionKeyType] == optionKeys[i2])
					selOptions[selOptions.length] = fromSelObjOptions[i1][optionKeyType];
	}
	//copy each selected option to its new location
	var selOption;
	var nextMaxValue = confirmLimitStep;
	for(var i1=0; i1<selOptions.length; i1++)
	{
		selOption = new Option(selOptions[i1].text, selOptions[i1].value);
		if(!fromEmptyNoteText || (fromEmptyNoteText && (fromEmptyNoteText != selOption.text)))
		{
			//delete option from fromSelect
			selOptions[i1] = null;
			for(var i2=0; i2<fromSelObjOptions.length; i2++)
				if(fromSelObjOptions[i2][optionKeyType] == selOption[optionKeyType])
				{
					//delete option from select
					fromSelObjOptions[i2] = null;
					break;
				}
			//if option was last option in from-Select and fromEmptyNoteText is given, then add option with fromEmptyNoteText
			if(fromEmptyNoteText && fromEmptyNoteValue && fromSelObjOptions.length == 0)
				fromSelObjOptions[fromSelObjOptions.length] = new Option(fromEmptyNoteText, fromEmptyNoteValue);
			//if only one toSel-option and toSel-option equals toEmptyNoteText, then delete this option
			if(toEmptyNoteText && toEmptyNoteValue && toSelObjOptions.length == 1 && toSelObjOptions[0].text == toEmptyNoteText && toSelObjOptions[0].value == toEmptyNoteValue)
				toSelObj[0] = null;
			//add option to toSelect
			toSelObjOptions[toSelObjOptions.length] = selOption;
		}
		if(nextMaxValue != -1 && i1 >= nextMaxValue)
			if(!confirm(nextMaxValue+" Empfänger wurden bereits verschoben.\nSoll der Vorgang fortgesetzt werden?")) 
				break;
			else 
				nextMaxValue = nextMaxValue + confirmLimitStep;
	}
}

/***moveSelectOptionsToMultipleSelects()***
* @purpose: move selected Options of a Select to multiple Selects by specifying 
* multiple toSelectNames and corresponding Regular Expressions (using array position) in optionMatches.
* If a Regular Expression matches the value or text (specified by optionMatchType) the appropriate
* option will be moved to the corresponding toSelect-Object
*
* @access: public
* @param: string formName
* @param: string fromSelectName
* @param: array toSelectNames
* @param: RegExp Array optionMatches: an array of regular expressions
* [@param: string optionKeyType: ('value'|'text'); default: 'value']
* [@param: string fromEmptyNoteValue (Hinweis in Form einer Option (value-wert), wenn keine Option mehr vorhanden)]
* [@param: string fromEmptyNoteText (Hinweis in Form einer Option (text-wert), wenn keine Option mehr vorhanden)]
* [@param: array toEmptyNoteValues (Hinweis pro toSelect-Feld jeweils in Form einer Option (value-werte), wenn in entsprechendem to-Select-Feld keine Option mehr vorhanden)]
* [@param: array toEmptyNoteTexts (Hinweis pro toSelect-Feld jeweils in Form einer Option (text-werte), wenn in entsprechendem to-Select-Feld keine Option mehr vorhanden)]
*/


function moveSelectOptionsToMultipleSelects(formName, fromSelectName, toSelectNames, optionMatches, optionKeyType, fromEmptyNoteValue, fromEmptyNoteText, toEmptyNoteValues, toEmptyNoteTexts)
{
	var confirmLimitStep = 3000;
	if(!optionKeyType) optionKeyType = "value";
	if(!toSelectNames[0]) toSelectNames = new Array(toSelectNames);
	var formObj = document.forms[formName];
	var fromSelObj = formObj.elements[fromSelectName];
	var fromSelObjOptions = fromSelObj.options;
	var toSelObjs = new Array();	
	var toSelectNamesLen = toSelectNames.length;
	for(var i1=0; i1<toSelectNamesLen; i1++)
		if(formObj.elements[toSelectNames[i1]])
			toSelObjs[toSelObjs.length] = formObj.elements[toSelectNames[i1]];
	var toSelObjsLen = toSelObjs.length;
	
	selOptions = getSelectedOptions(formName, fromSelectName, optionKeyType);
	//copy each selected option to its new location
	var selOption;
	var nextMaxValue = confirmLimitStep;
	for(var i1=0; i1<selOptions.length; i1++)
	{
		selOption = new Option(selOptions[i1].text, selOptions[i1].value);
		//add option to matching toSelect
		for(var i2=0; i2<toSelObjsLen; i2++)
		{
			var toSelObj = toSelObjs[i2];
			var regExp = new RegExp(optionMatches[i2]);
			if(regExp.exec(selOption[optionKeyType]) != null && (!fromEmptyNoteText || (fromEmptyNoteText && (fromEmptyNoteText != selOption.text))))
			{
				//delete option from fromSelect
				selOptions[i1] = null;
				for(var i3=0; i3<fromSelObjOptions.length; i3++)
					if(fromSelObjOptions[i3][optionKeyType] == selOption[optionKeyType])
					{	//delete option from select
						fromSelObjOptions[i3] = null;
						break;
					}
				//if fromEmptyNoteText is given and option was last option in from-Select-List, then add option with fromEmptyNoteText
				if(fromEmptyNoteValue && fromEmptyNoteText && fromSelObjOptions.length == 0)
					fromSelObjOptions[fromSelObjOptions.length] = new Option(fromEmptyNoteText, fromEmptyNoteValue);
				//if only one toSel-option and toSel-option equals toEmptyNoteTexts[i], then delete this option
				if(toEmptyNoteTexts && toEmptyNoteValues && toSelObj.options.length == 1 && toSelObj[0].text == toEmptyNoteTexts[i2] && toSelObj[0].value == toEmptyNoteValues[i2])
					toSelObj[0] = null;
				toSelObj.options[toSelObj.options.length] = selOption;
				break;
			}
		}
		if(nextMaxValue != -1 && i1 >= nextMaxValue)
			if(!confirm(nextMaxValue+" Empfänger wurden bereits verschoben.\nSoll der Vorgang fortgesetzt werden?")) 
				break;
			else 
				nextMaxValue = nextMaxValue + confirmLimitStep;
	}
}

/**
 * kopiere einen selektierten Wert eines Select-Felds in ein Hidden-Field
 * @param string selectName
 * @param string hiddenFieldName
 * @return boolean
 */

function copySelectedValueIntoHiddenField(formName, selectName, hiddenFieldName, errorOnEmptySelValue)
{
	var result = false;
	var f = document.forms[formName];
	var selValue = getSelectValue(formName, selectName);
	if((selValue != null && selValue != "undefined") && !(errorOnEmptySelValue == true && selValue == ""))
	{
		f[hiddenFieldName].value = selValue;
		result = true;
	}
	return result;
}

/**
 * kopiere einen Wert eines Felds in ein Hidden-Field
 * @param string formName
 * @param string fieldName
 * @param string hiddenFieldName
 * @param boolean errorOnEmptyFieldValue = false
 * @param string errorMsgOnEmptyFieldValue = ""
 * @param boolean submitForm = false
 * @param string formAction = null
 * @param string formMethod = null
 * @param string targetWin = null
 * @return boolean
 */
 
function copyInputValueIntoHiddenField(formName, fieldName, hiddenFieldName/*optional*/, errorOnEmptyFieldValue, errorMsgOnEmptyFieldValue, doSubmitForm, formAction, formMethod, targetWin)
{
	var result = false;
	var f;
	var field;
	var hiddenField;
	
	if(!document.forms[formName])
	{
		alert("function copyInputValueIntoHiddenField: Das Formular '"+formName+"' existiert nicht.");
		return false;
	}
	else
		f = document.forms[formName];
	
	if(!f.elements[fieldName])
	{
		alert("function copyInputValueIntoHiddenField: Das Feld '"+fieldName+"' im Formular '"+formName+"' existiert nicht.");
		return false;
	}
	else
		field = f.elements[fieldName];
		
	if(!f.elements[hiddenFieldName])
	{
		alert("function copyInputValueIntoHiddenField: Das Feld '"+hiddenFieldName+"' im Formular '"+formName+"' existiert nicht.");
		return false;
	}
	else
		hiddenField = f.elements[hiddenFieldName];
	
	hiddenField.value = field.value;
	if((field.value != "") || (errorOnEmptyFieldValue == false && field.value == ""))
	{
		f[hiddenFieldName].value = field.value;
		result = true;
		if(doSubmitForm)
		{
			submitForm(formName, formAction, formMethod, targetWin);
		}
	}
	if(!result && errorOnEmptyFieldValue && errorMsgOnEmptyFieldValue)
		alert(errorMsgOnEmptyFieldValue);
	return result;
}


/**
 * implode a select list to a string and put it into a specified (hidden) field
 * @param formName
 * @param selectName
 * @param targetFieldName
 * @param [optional] separator default:,
 * @param [optional] ignoreValues default: array()
 * @param [optional] selectedOnly default: false
 */

function implodeSelectToHiddenField(formName, selectName, targetFieldName,/*optional*/seperator,/*optional*/ignoreValues,/*optional*/selectedOnly)
{
	if(!seperator) seperator = ",";
	if(typeof(ignoreValues) == "string")
		ignoreValues = new Array(ignoreValues);
	var f = document.forms[formName].elements;
	var options = f[selectName].options;
	var options_len = options.length;
	var str = "";
	if(options_len > 0)
	{
		for(var i=0;i<options_len;i++)
		{
			var ignore = false;
			if(ignoreValues)
			{
				for(var i2=0;i2<ignoreValues.length;i2++)
					if(ignoreValues[i2] == options[i].value)
					{
						ignore = true;
						break;
					}
			}
			if(selectedOnly && !options[i].selected)
				ignore = true;
			if(!ignore) str += options[i].value + ",";
		}
	}
	if(str != "") str = str.substr(0,str.length-1);
	f[targetFieldName].value = str;
}

//implode multiple select lists to strings and put them into specified (hidden) fields

function implodeSelectsToHiddenFields(formName, selectNamePrefix, targetFieldNamePrefix, /*optional*/seperator,/*optional*/ignoreValues,/*optional*/selectedOnly)
{
	if(!seperator) seperator = ",";
	var f = document.forms[formName];
	
	//find checkboxes and targets
	var select_names = new Array();
	var field_names = new Array();
	var selects = new Array();
	var fields = new Array();
	
	var regexp_selects = new RegExp("^"+selectNamePrefix+".*$");
	var regexp_fields = new RegExp("^"+targetFieldNamePrefix+".*$");
	//first use assoc. arrays to prevent double entries
	for(i=0;i<f.length;i++)
	{
		var element = f[i];
		if(element.name.match(regexp_selects))
			select_names[element.name] = element.name;
		if(element.name.match(regexp_fields))
			field_names[element.name] = element.name;
	}

	for(k in select_names)
		selects[selects.length] = f.elements[k];
	for(k in field_names)
		fields[fields.length] = f.elements[k];
	
	//implode all checkboxes to their hidden fields	
	selectNamePrefixLen = selectNamePrefix.length;
	fieldNamePrefixLen = targetFieldNamePrefix.length;

	for(sn in select_names)
	{
		for(fn in field_names)
		{	//use regexp to compare the names, if e.g. one name is 'arrayed',like name[]
			var sn_substr = sn.substr(selectNamePrefixLen);
			var fn_substr = fn.substr(fieldNamePrefixLen);
			(sn_substr.length < fn_substr.length) ? substr_regexp_part = sn_substr : substr_regexp_part = fn_substr;
				regexp_names = new RegExp("^.*"+substr_regexp_part+".*$");
			if(sn.match(regexp_names) && fn.match(regexp_names))
			{
				var curr_select = f.elements[sn];
				var options = f.elements[sn].options;
				var options_len = options.length;
				var str = "";
				if(options_len > 0)
				{
					for(i=0;i<options_len;i++)
					{
						var ignore = false;
						if(ignoreValues)
						{
							for(var i2=0;i2<ignoreValues.length;i2++)
								if(ignoreValues[i2] == options[i].value)
								{
									ignore = true;
									break;
								}
						}
						if(selectedOnly && !options[i].selected)
							ignore = true;
						if(!ignore)
						{
							str+= options[i].value;
							if(i != options_len-1 && !(selectedOnly && options[i+1] && !options[i+1].selected)) 
								str+= ",";
						}
					}
				}
				f.elements[fn].value = str;
			}
		}
	}
}

//implode checkboxes to (hidden) field 
function implodeCheckboxGroupToHiddenField(formName, checkboxGroupName, targetFieldName,/*optional*/selectedOnly, notSelectedOnly, targetWin)
{
	var f = document.forms[formName];
	if(targetWin) f = targetWin.document.forms[formName];
	if(!selectedOnly) selectedOnly = false;
	if(selectedOnly != true) selectedOnly = false;
	if(!notSelectedOnly) notSelectedOnly = false;
	if(notSelectedOnly != true) notSelectedOnly = false;
	var checkboxGroup = f.elements[checkboxGroupName];
	if(checkboxGroup)
	{
		var checkedValues = new Array();
		if(checkboxGroup.value)
		{
			checkboxGroup = new Array(checkboxGroup);
		}
		for(i=0;i<checkboxGroup.length;i++)
		{
			if((!selectedOnly && !notSelectedOnly) || (selectedOnly && checkboxGroup[i].checked) || (notSelectedOnly && !checkboxGroup[i].checked))
				checkedValues[checkedValues.length] = checkboxGroup[i].value;
		}
		checkedValuesStr = checkedValues.join(",");

		f.elements[targetFieldName].value = checkedValuesStr;
	}
}

//implode multiple checkboxes to multiple (hidden) fields by prefix
function implodeCheckboxGroupsToHiddenFields(formName, checkboxGroupNamePrefix, targetFieldNamePrefix,/*optional*/selectedOnly, notSelectedOnly, targetWin)
{
	var f = document.forms[formName];
	if(targetWin) f = targetWin.document.forms[formName];
	if(!selectedOnly) selectedOnly = false;
	if(selectedOnly != true) selectedOnly = false;
	if(!notSelectedOnly) notSelectedOnly = false;
	if(notSelectedOnly != true) notSelectedOnly = false;
	
	//find checkboxes and targets
	var checkboxes_names = new Array();
	var field_names = new Array();
	var checkboxes = new Array();
	var fields = new Array();
	
	var regexp_checkboxes = new RegExp("^"+checkboxGroupNamePrefix+".*$");
	var regexp_fields = new RegExp("^"+targetFieldNamePrefix+".*$");
	//first use assoc. arrays to prevent double entries
	for(i=0;i<f.length;i++)
	{
		var element = f[i];
		if(element.name.match(regexp_checkboxes))
			checkboxes_names[element.name] = element.name;
		if(element.name.match(regexp_fields))
			field_names[element.name] = element.name;
	}
	
	for(k in checkboxes_names)
		checkboxes[checkboxes.length] = f.elements[k];
	for(k in field_names)
		fields[fields.length] = f.elements[k];

	//implode all checkboxes to their hidden fields	
	checkboxGroupNamePrefixLen = checkboxGroupNamePrefix.length;
	targetFieldNamePrefixLen = targetFieldNamePrefix.length;

	for(cn in checkboxes_names)
	{
		for(fn in field_names)
		{	//use regexp to compare the names, if e.g. one name is 'arrayed',like name[]
			var cn_substr = cn.substr(checkboxGroupNamePrefixLen);
			var fn_substr = fn.substr(targetFieldNamePrefixLen);
			(cn_substr.length < fn_substr.length) ? substr_regexp_part = cn_substr : substr_regexp_part = fn_substr;
				regexp_names = new RegExp("^.*"+substr_regexp_part+".*$");
			if(cn.match(regexp_names) && fn.match(regexp_names))
			{
				var values = new Array();
				var curr_checkboxes = f.elements[cn];
				if(curr_checkboxes.value)
				{
					curr_checkboxes = new Array(curr_checkboxes);
				}
				for(i=0;i<curr_checkboxes.length;i++)
				{
					if((!selectedOnly && !notSelectedOnly) || (selectedOnly && curr_checkboxes.checked) || (notSelectedOnly && !curr_checkboxes.checked))
						values[values.length] = curr_checkboxes[i].value;
				}
				valuesStr = values.join(",");
				f.elements[fn].value = valuesStr;
			}
		}
	}
}


//return all checked checkboxes of a checkbox group as object-array
function getChecked(formName, checkboxGroupName)
{
	var f = document.forms[formName];
	var checkboxGroup = f.elements[checkboxGroupName];
	var checkedBoxes = new Array();
	for(i=0;i<checkboxGroup.length;i++)
	{
		if(checkboxGroup[i].checked)
		{
			checkedBoxes[checkedBoxes.length] = checkboxGroup[i];
		}
	}
	return checkedBoxes;
}

//return all checked checkbox values of a checkbox group as string-array
function getCheckedValues(formName, checkboxGroupName)
{
	var f = document.forms[formName];
	var checkboxGroup = f.elements[checkboxGroupName];
	if(checkboxGroup)
	{
		var checkedValues = new Array();
		for(i=0;i<checkboxGroup.length;i++)
		{
			if(checkboxGroup[i].checked)
				checkedValues[checkedValues.length] = checkboxGroup[i].value;
		}
	}
	return checkedValues;
}

//remark a group of checkboxes
function remarkCheckboxes(formName, checkboxGroupName, checkboxValues)
{
	var f = document.forms[formName];
	var checkboxGroup = f.elements[checkboxGroupName];
	for(i=0;i<checkboxGroup.length;i++)
	{
		for(ii=0; ii<checkboxValues.length; ii++)
		{	
			if(checkboxGroup[i].value == checkboxValues[ii])
			{
				checkboxGroup[i].checked = true;
			}
		}
	}
}

//switch the condition of (a) group(s) of checkboxes, released by triggerCheckbox
function switchCheckboxCondition(formName, triggerCheckboxName, checkboxGroupNames, forceCondition)
{
	var f = document.forms[formName];
	var trigger = f.elements[triggerCheckboxName];
	var newCondition = false;
	if(!checkboxGroupNames[0]) checkboxGroupNames = new Array(checkboxGroupNames);
	var checkboxGroupNamesLen = checkboxGroupNames.length;
	for(var i=0;i<checkboxGroupNamesLen;i++)
	{
		var checkboxGroup = f.elements[checkboxGroupNames[i]];
		if(typeof(forceCondition) == undefined)
			if(trigger.checked == true) newCondition = true;
		else
			newCondition = forceCondition;
		if(checkboxGroup.value) checkboxGroup = new Array(checkboxGroup);
		for(var ii=0;ii<checkboxGroup.length;ii++) 
			checkboxGroup[ii].checked = newCondition;
	}
}

/****
 * swapCheck()
 * purpose: swap the check of 2 checkboxes
 * @access public
 * @param string formName
 * @param string checkboxGroupName
 * @return object
 *
 */

function swapCheck(formName, checkboxName1, checkboxName2, forceCheck)
{
	var f = document.forms[formName];
	f.elements[checkboxName1].checked ? f.elements[checkboxName1].checked = true : f.elements[checkboxName1].checked = false;
	f.elements[checkboxName2].checked = false;
}

/****
 * getGroupValues()
 * purpose: return all values of a checkbox- or radiogroup
 * @access public
 * @param string formName
 * @param string checkboxGroupName
 * @return object
 *
 */

function getGroupValues(formName,checkboxGroupName)
{
	var checkboxValues = new Array();
	var f = document.forms[formName];
	var checkboxGroup = f.elements[checkboxGroupName];
	if(!checkboxGroup[0]) checkboxGroup = new Array(checkboxGroup);
	checkboxGroupLen = checkboxGroup.length;
	for(var i=0;i<checkboxGroupLen;i++)
	{
		checkboxValues[checkboxValues.length] = checkboxGroup[i].value;
	}
	return checkboxValues;
}

/****
 * getChecked(formName,checkboxGroupName)
 * purpose: return the checked object of a checkbox- or radiogroup
 * @access public
 * @param string formName
 * @param string checkboxGroupName
 * @return object
 *
 */

function getChecked(formName,checkboxGroupName)
{
	var checkedBox = false;
	var f = document.forms[formName];
	var checkboxGroup = f.elements[checkboxGroupName];
	if(!checkboxGroup[0]) checkboxGroup = new Array(checkboxGroup);
	checkboxGroupLen = checkboxGroup.length;
	for(var i=0;i<checkboxGroupLen;i++)
	{
		if(checkboxGroup[i].checked) checkedBox = checkboxGroup[i];
	}
	return checkedBox;
}

/****
 * getUnchecked(formName,checkboxGroupName)
 * purpose: return all checkbox- or radio buttons that are not checked within a checkbox group
 * @access public
 * @param string formName
 * @param string checkboxGroupName
 * @return object-array
 *
 */

function getUnchecked(formName,checkboxGroupName)
{
	var uncheckedBoxes = new Array();
	var f = document.forms[formName];
	var checkboxGroup = f.elements[checkboxGroupName];
	if(!checkboxGroup[0]) checkboxGroup = new Array(checkboxGroup);
	checkboxGroupLen = checkboxGroup.length;
	for(var i=0;i<checkboxGroupLen;i++)
	{
		if(!checkboxGroup[i].checked) uncheckedBoxes[uncheckedBoxes.length] = checkboxGroup[i];
	}
	return uncheckedBoxes;
}

/****
 * getUncheckedValues(formName,checkboxGroupName)
 * purpose: return all checkbox- or radio button - values that are not checked within a checkbox group
 * @access public
 * @param string formName
 * @param string checkboxGroupName
 * @return string-array
 *
 */

function getUncheckedValues(formName,checkboxGroupName)
{
	var uncheckedBoxesValues = new Array();
	var f = document.forms[formName];
	var checkboxGroup = f.elements[checkboxGroupName];
	if(!checkboxGroup[0]) checkboxGroup = new Array(checkboxGroup);
	checkboxGroupLen = checkboxGroup.length;
	for(var i=0;i<checkboxGroupLen;i++)
	{
		if(!checkboxGroup[i].checked) uncheckedBoxesValues[uncheckedBoxesValues.length] = checkboxGroup[i].value;
	}
	return uncheckedBoxesValues;
}

//validate isin / wkn
function isValidIsin(isin)
{
	var result = false;
	var regexp_isin = new RegExp("^[A-Za-z]{2}[A-Za-z0-9]{10}$");
	if(isin.match(regexp_isin))
	{
		result = true;
	}
	return result;
}

function isValidWkn(wkn)
{
	var result = false;
	regexp_wkn = new RegExp("^[0-9A-Za-z]{6}$");
	if(wkn.match(regexp_wkn))
	{
		result = true;
	}
	return result;
}

//parse an integer but note decimal places
function parseIntNoteDec(str, seperator)
{
	var result = 0;
	if(!seperator) seperator = ".";
	var numParts = str.split(seperator);
	var add = 0;
	if(numParts.length > 1)
	{
		var numDecPlaces = numParts[1].length;
		var fullNumStr = numParts[0]+numParts[1];
		var newFullNumStr = "";
		var i=0;
		while(fullNumStr.charAt(i) == "0")
		{
			i++;
			newFullNumStr = fullNumStr.substr(i);
		}
		var fullNum = parseInt(newFullNumStr);
		var quotient = "1";
		for(i=0;i<numDecPlaces;i++)
			quotient += "0";
		quotient = parseInt(quotient);
		result = parseInt(fullNum)/quotient;
	}
	else
	{
		result = parseInt(str);
	}
	return result;
}

//calculate total size of different values switched by checkboxes
function calculateTotalSize(formName, checkboxGroupName, rootIdPrefix, targetId, seperator, roundPrecision, startValue)
{
	if(!startValue || startValue == "") startValue = "0";
	var totalSize = parseIntNoteDec(startValue, seperator);
	var f = document.forms[formName];
	if(!roundPrecision || roundPrecision < 0 || roundPrecision > 10) roundPrecision = 2;
	if(!seperator) seperator = ".";
	var checkboxGroup = f.elements[checkboxGroupName];
	var idValues = new Array();
	if(checkboxGroup.value)
	{
		checkboxGroup = new Array(checkboxGroup);
	}
	for(var i=0;i<checkboxGroup.length;i++)
	{
		var currNode = document.getElementById(rootIdPrefix+checkboxGroup[i].value);
		var currNodeValue = "0";
		if(currNode.firstChild && currNode.firstChild.nodeValue) 
			currNodeValue = currNode.firstChild.nodeValue;
		currNodeValue = parseIntNoteDec(currNodeValue, seperator);
		if(checkboxGroup[i].checked)
		{
			totalSize += currNodeValue;
		}
	}
	var vStr = "1";
	for(var i=0;i<parseInt(roundPrecision);i++)
		vStr += "0";
	var v = parseInt(vStr);
	totalSize = Math.round(totalSize*v)/v;
	var numParts = String(totalSize).split(".");
	if(numParts[1])
	{
		totalSize = numParts[0]+seperator+numParts[1];
		var rest = roundPrecision - numParts[1].length;
		if(rest != 0)
		{
			for(i=0; i<rest; i++)
			totalSize += "0";
		}
	}
	if(totalSize == "0") totalSize="0"+seperator+vStr.substr(1);
	if(targetId)
	{
		document.getElementById(targetId).firstChild.nodeValue = totalSize;
	}
	else
	{
		return totalSize;
	}
}

//switch display of an object.
function switchExtensionView(id, /*optional*/formName, /*optional*/checkboxName)
{
	var obj = document.getElementById(id);
	var newVal = 'none';
	if(formName && checkboxName)
	{
		var f = document.forms[formName];
		var checkboxChecked = f.elements[checkboxName].checked;
		if(checkboxChecked)
		newVal = '';
	}
	else
	{
		var oldVal = obj.style.display;
		if(oldVal == 'none') newVal = '';
	}
	obj.style.display = newVal;
}

/**
 * switch display of one ore more objects on check
 * @obj radioButtonObj: Radio-Button-Objekt
 * @array displayStates: Anzeigestatus. Aufbau: Array{<objId>:<displayStatus>,[<objId>:displayStatus, ...]}
 *
 * @example: switchDisplayOnCheck(this, {'A':'block','B':'none'});
 */
function switchDisplayOnCheck(radioButtonObj, displayStates)
{
	if(!(radioButtonObj instanceof Array))
		radioButtonObj = new Array(radioButtonObj);
	for(var i in radioButtonObj)
		if(radioButtonObj[i].checked)
			for(var displayStateObjId in displayStates)
				document.getElementById(displayStateObjId).style.display = displayStates[displayStateObjId];
}

//show ids if one checkbox of some checkboxes or a checkbox-group is activated
function showIdsIfCheckboxTrue(formName, checkboxNames, objIds)
{
	f = document.forms[formName];
	checkboxObjects = new Array;
	for(i=0;i<checkboxNames.length;i++)
	{
		var checkboxName = checkboxNames[i];
		var checkboxObj = f.elements[checkboxName];
		if(checkboxObj.value)
		{
			checkboxObjects[checkboxObjects.length] = checkboxObj;
		}
		else
		{
			for(ii=0;ii<checkboxObj.length;ii++)
			{
				checkboxObjects[checkboxObjects.length] = checkboxObj[ii];
			}
		}
	}

	var checkboxChecked = false;
	for(i=0;i<checkboxObjects.length;i++)
	{
		if(checkboxObjects[i].checked)
		{
			checkboxChecked = true;
		}
	}
	var displ = "";

	for(i=0;i<objIds.length;i++)
	{
		checkboxChecked ? displ="" : displ="none";
		document.getElementById(objIds[i]).style.display = displ;
	}
}

//check one checkbox within a checkbox group, if all are deactivated
function checkboxGroupMinCheck(formName, checkboxGroupName, minCheckedCheckboxPos)
{
	var result = false;
	var f = document.forms[formName];
	var checkboxGroup = f.elements[checkboxGroupName];
	if(checkboxGroup.value)
	{
		checkboxGroup = new Array(checkboxGroup);
	}
	var oneChecked = false;
	for(var i=0;i<checkboxGroup.length;i++)
	{
		var currCheckbox = checkboxGroup[i];
		if(currCheckbox.checked && i != minCheckedCheckboxPos)
			oneChecked = true;
	}
	if(!oneChecked)
	{
		checkboxGroup[minCheckedCheckboxPos].checked = true;
		result = true;
	}
	return result;
}

	/**
	 * Es gibt eine Checkbox-Gruppe. Eine Checkbox soll mindestens angeklickt sein. Jede aktive Checkbox besitzt ein zugeh�riges Element,
	 * welches sichtbar ist, wenn die zugehörige Checkbox aktiv ist, und unsichtbar ist, wenn die zugehörige Checkbox inaktiv ist.
	 * 
	 * required functions: checkboxGroupMinCheck(), switchDisplay()
	 *
	 * @param string 	formName [name des formulars]
	 * @param string 	switchId [in seiner sichtbarkeit zu switchendes objekt]
	 * @param string 	checkboxGroupName [name der checkbox-Gruppe]
	 * @param int		minCheckedCheckboxPos [position der checkbox in der checkbox-Gruppe, die mindestens aktiv sein soll]
	 * @param string	minCheckedTargetId [target-id des elements, welches sichtbar sein soll, wenn die mindest aktive checkbox aktiv ist]
	 * @param object	das aufrufende Objekt selbst
	 */
	function switchDisplay_CheckboxGroupMinCheck_PreserveDisplayStatus(formName, switchId, checkboxGroupName, minCheckedCheckboxPos, minCheckedTargetId, obj)
	{
		var f = document.forms[formName];
		var checkboxGroup = f.elements[checkboxGroupName];
		if(checkboxGroup.value) checkboxGroup = new Array(checkboxGroup);
		var checkboxGroupLen = checkboxGroup.length;
		var checkDone = checkboxGroupMinCheck(formName, checkboxGroupName, minCheckedCheckboxPos);

		if(checkDone)
		{
			switchDisplay(minCheckedTargetId, null, '');
		}
		var doSwitch = false;
		for(var i=1;i<checkboxGroupLen;i++)
			if(checkboxGroup[i].checked)
			{
				doSwitch = true;
				break;
			}	
		if(doSwitch || obj != f.elements[checkboxGroupName][minCheckedCheckboxPos])
			switchDisplay(switchId);
	}

/*** formFillFields() ***
 * @purpose: fill out multiple fields in a form
 * @access: public
 * @param string formName
 * @param array fields
 * @param array values
 * @return void
 */
function formFillFields(formName, fields, values)
{ 
	if(fields[0] && values[0])
	{
		var f = document.forms[formName];
		for(var i=0;i<fields.length;i++)
		{
			if(values[i]) f.elements[fields[i]].value = values[i];
		}
	}
}

/*** checkRadioSetFieldValues() ***
 * @purpose: set values of multiple fields if a specific radio button of a radio-group is checked
 * @access: public
 * @param string formName
 * @param string radioGroupName
 * @param string radioValue
 * @param array fields
 * @param array values
 * @return void
 */
function checkRadioSetFieldValues(formName, radioGroupName, radioValue, fields, values)
{
	if(fields[0] && values[0])
	{
		var f = document.forms[formName];
		var radioGroup = f.elements[radioGroupName];
		var radioGroupLen = radioGroup.length;
		var radio = false;
		for(var i=0; i<radioGroupLen; i++)
		{
			if(radioGroup[i].value == radioValue)
				radio = radioGroup[i];
		}
		if(radio && radio.checked)
		{
			var fieldsLen = fields.length;
			for(i=0; i<fieldsLen; i++)
			{
				if(f.elements[fields[i]])
				{
					if(values[i]) f.elements[fields[i]].value = values[i];
				}
			}
		}
	}
}

/*** makeFullPrice() ***
 * @purpose: return a full price declaration
 * @access: public
 * @param string|int [numeric] price
 * @param string seperator
 * @param string [optional] postfix
 * @param array fields
 * @param array values
 * @return string
 */

function makeFullPrice(price, seperator, postfix)
{
	var result = price;
	if(!seperator) seperator = ",";
	if(!postfix) postfix = "";
	var price = String(price);
	var priceRegExp = new RegExp("^\\d+?[\\"+seperator+"\\,]?\\d*$");
	if(price.match(priceRegExp))
	{
		price = String(parseFloat(price.replace(/,/,".")));
		var parts = new Array();
		if(price.indexOf(".") != -1) var parts = String(price).split("."); 
		if(parts[1]) 
		{
			if(parts[1].length > 2)
				parts[1] = String(parseInt(parseFloat(parts[1].substr(0,2)+"."+parts[1].substr(2))));
			if(parts[1].length == 1)
			{
				parts[1] = parts[1]+"0";
			}
		}
		else if(!parts[1])
		{
			parts[0] = price;
			parts[1] = "00";
		}
			
		result = parts[0]+seperator+parts[1]+postfix;
	}
	return result;
}
