function mCustomize() {
	if(window.location.href.indexOf("showpage.aspx") != -1) {
		url = "admin.aspx" + window.location.search;
	}
	else {
		//URL-Rewriting ist im Einsatz
		if(window.location.search != '') url = window.location.href + "&pagetype=admin";
		else url = window.location.href + "?pagetype=admin";
	}
	frmCust = window.open(url,"","scrollbars=yes,status=yes,locationbar=no,menubar=no,resizable=yes,scrollbars=yes");
	frmCust.moveTo(0,0);
	frmCust.resizeTo(screen.availWidth,screen.availHeight);
}

function mHelp() {
	if(window.location.href.indexOf("showpage.aspx") != -1) {
		url = "help.aspx" + window.location.search;
	}
	else {
		//URL-Rewriting ist im Einsatz
		if(window.location.search != '') url = window.location.href + "&pagetype=help";
		else url = window.location.href + "?pagetype=help";
	}
	window.open(url,"","top=100,left=100,height=400,width=600,scrollbars=yes,locationbar=no,menubar=no,resizable=yes,scrollbars=yes")
}

function PageQuery(q) {
	if(q.length > 1) this.q = q.substring(1, q.length);
	else this.q = null;
	this.keyValuePairs = new Array();
	if(q) {
		for(var i=0; i < this.q.split("&").length; i++) {
			this.keyValuePairs[i] = this.q.split("&")[i];
		}
	}
	this.getKeyValuePairs = function() { return this.keyValuePairs; }
	this.getValue = function(s) {
	for(var j=0; j < this.keyValuePairs.length; j++) {
		if(this.keyValuePairs[j].split("=")[0] == s)
			return this.keyValuePairs[j].split("=")[1];
		}
		return false;
	}
	this.getParameters = function() {
		var a = new Array(this.getLength());
		for(var j=0; j < this.keyValuePairs.length; j++) {
			a[j] = this.keyValuePairs[j].split("=")[0];
		}
		return a;
	}
	this.getLength = function() { return this.keyValuePairs.length; }
}

function QueryString(key){
	var page = new PageQuery(window.location.search);
	return unescape(page.getValue(key));
}

//String Html-codieren
function htmlEncode(str){
   return str.toString().replace(/&/g,"&amp;").replace(/"/g,"&quot;").replace(/</g,"&lt;").replace(/>/g,"&gt;");
}

//Html-codiert die übergebenen Felder
function htmlEncodeFields(formName,fieldNamesArray) {
	for(a=0;a<fieldNamesArray.length;a++) {
		for(b=0;b<this.document.forms[formName].elements.length;b++) {
			element = this.document.forms[formName].elements[b];
			if (typeof element.name != 'undefined') {
				if (fieldNamesArray[a] != '') {
					if (element.name.substr(0, fieldNamesArray[a].length) === fieldNamesArray[a]) {
						if (typeof tinyMCE != 'undefined') {
							if (typeof tinyMCE.get != 'undefined') {
								var editor = tinyMCE.get(element.name);
								if (typeof editor != 'undefined') {
									if (editor.settings.encoding == "xml") {
										//TinyMCE erzeugt Html-codierten Code, falls in der Methode "init" folgendes gesetzt wird: encoding : "xml"
									}
									else {
										//Setze im TinyMCE Html-codierten Text. Damit dies funktioniert muss in der Methode "init" folgendes gesetzt werden: forced_root_block : false
										editor.setContent(htmlEncode(editor.getContent()));
									}
								}
								else {
									element.value = htmlEncode(element.value);
								}
							}
							else {
								element.value = htmlEncode(element.value);
							}
						}
						else {
							element.value = htmlEncode(element.value);
						}
					}
				}
			}
		}
	}
}

// Wird zum Initialisieren des Kalenders aufgerufen.
function calendarInit(configfile, container) {
	$.get('Calendar.aspx?Init=1&Config=' + configfile + '&Container=' + container, function(data){$('#'+container).html(data);});
}

// Wird ausgeführt, wenn auf dem Kalender der Monat geändert wird.
function calendarChangeMonth(configfile, container, monthOffset, prefix, suffix) {
	$.get('Calendar.aspx?Config=' + configfile + '&Container=' + container + '&MonthOffset=' + monthOffset + '&SelectedDate=' + document.getElementById(prefix + 'SelectedDate' + suffix).value, function(data){$('#'+container).html(data); if (typeof calendarChangeMonthCallback != 'undefined') { calendarChangeMonthCallback(prefix, suffix); }});
}

// Wird ausgeführt, wenn auf dem Kalender der selektierte Tag geändert wird.
function calendarChangeDay(configfile, container, element, currentday, prefix, suffix) {
	$('#' + container + ' .Calendar_Day').removeClass('Calendar_Day_Selected');
	$(element).addClass('Calendar_Day_Selected');
	document.getElementById(prefix + 'SelectedDate' + suffix).value = currentday;
	if (typeof calendarChangeDayCallback != 'undefined') {
		calendarChangeDayCallback(configfile, container, element, currentday, prefix, suffix);
	}
}

// Verschiebt Meldungen aus dem originContainerName in errorContainerName, warningContainerName und infoContainerName
function moveMessages(originContainerName, errorContainerName, warningContainerName, infoContainerName, debugContainerName, errorClass, warningClass, infoClass, debugClass) {
	var originContainer = document.getElementById(originContainerName);
	var errorContainer = document.getElementById(errorContainerName);
	var warningContainer = document.getElementById(warningContainerName);
	var infoContainer = document.getElementById(infoContainerName);
	var debugContainer = document.getElementById(debugContainerName);
	var container;
	
	for (var i = 0; i < originContainer.childNodes.length; i++) {
		var element = originContainer.childNodes[i];
		if (typeof element.innerHTML != 'undefined') {
			if (element.getAttribute('class') == errorClass) {
				container = errorContainer;
			}
			if (element.getAttribute('class') == warningClass) {
				container = warningContainer;
			}
			if (element.getAttribute('class') == infoClass) {
				container = infoContainer;
			}
			
			if (element.getAttribute('class') == debugClass) {
				container = debugContainer;
			}
			
			if (container != null) {
				container.appendChild(element);
				i--; //weil das Element verschoben wurde
			}
		}
	}
}

// Original-Daten abfüllen als Vorbereitung für die Formularspeicherung
function prepareSaveCheckFields(fieldContainer, ocId) {

	var bSaveKey = 'bSave';
	var txtOVKey = 'txtOriginalValues';
	var txtOVCBKey = 'txtOriginalValuesCheckbox';
	var txtDCBKey = 'txtDisabledCheckbox';
	var txtSFKey = 'txtSaveFields';
	var txtRDNKey = 'txtRDName';
	var txtAVKey = 'txtAllowedValues';
	var txtTLKey = 'txtTargetLevel';
	var txtFUKey = 'txtFormURL';
	
	var iterationBase = "";
	var objtxtOV = "";
	var objtxtOVCB = "";
	var objtxtDCB = "";
	
	if (ocId != null) {
		bSaveKey = (bSaveKey + '_' + ocId); 
		txtOVKey = (txtOVKey + '_' + ocId); 
		txtOVCBKey = (txtOVCBKey + '_' + ocId);
		txtDCBKey = (txtDCBKey + '_' + ocId);
		txtSFKey = (txtSFKey + '_' + ocId);
		txtRDNKey = (txtRDNKey + '_' + ocId);
		txtAVKey = (txtAVKey + '_' + ocId);
		iterationBase = "#" + ocId;
		objtxtOV = $(iterationBase + " input[name*='" + txtOVKey + "']");
		objtxtOVCB = $(iterationBase + " input[name*='" + txtOVCBKey + "']");
		objtxtDCB = $(iterationBase + " input[name*='" + txtDCBKey + "']");
	}
	else
	{
		iterationBase = "#OCForm";
		objtxtOV = $(iterationBase + " input[name='" + txtOVKey + "']");
		objtxtOVCB = $(iterationBase  + " input[name='" + txtOVCBKey + "']");
		objtxtDCB = $(iterationBase  + " input[name='" + txtDCBKey + "']");
	}
	
	$(iterationBase+" input, "+iterationBase+" select, "+iterationBase + " textarea").each(function (index, element) {

		var elId = (element.name ? element.name : element.id);
		
		if(elId != bSaveKey && elId != txtOVKey && elId != txtOVCBKey && elId != txtDCBKey && elId != txtSFKey && elId != txtRDNKey && elId != txtAVKey && elId != txtTLKey && elId != txtFUKey) {
			switch(element.type) {
				case 'radio':
					if(element.checked) {
						objtxtOV.val(objtxtOV.val() + elId + '=' + element.value + '|');
					}
					break;
				case 'checkbox':
					if(element.checked) {
						if(element.disabled==false) { objtxtOVCB.val(objtxtOVCB.val() + elId + '/=/' + element.value + '|'); }
					} else {
						if(element.disabled==false) { objtxtOVCB.val(objtxtOVCB.val() + elId + '/=/0|'); }
					}
					if(element.disabled) { objtxtDCB.val(objtxtDCB.val() + elId + '|'); }
					break;
				default:
					objtxtOV.val(objtxtOV.val() + elId + '=' + element.value + '|');
					break;					
			}
		}

	});
	
}

function getFormByName(name) {
	return $("form[name='" + name + "']");
}

function getFormById(id) {
	return $("form[id='" + id + "']");
}	

function getFormByIdOrName(name) {
	var form = getFormByName(name);
	if(form.length > 0) {
		return form[0];
	}
	else {
		return getFormById(name)[0];
	}
}

function setFormFieldValue(formName, fieldName, newValue) {
	var form = getFormByIdOrName(formName);
	if(!form) {
		return false;
	}
	
	if(form.elements[fieldName]) {
		form.elements[fieldName].value = newValue;
	}
	
	return true;
}

function fireFormSubmitByNameOrId(formName) {
	var form = getFormByIdOrName(formName);
	if(form) {
		form.submit();
	}
}

function setFocusToInputFieldByNameOrId(id) {
	var regEx = /[\.\(\)]/;

	if(regEx.test(id)) {
		return;
	}

	if($('input[name=' + id + ']').length > 0) {
		setFocusToInputFieldByName(id);
	}
	else if($('#' + id).length > 0) {
		setFocusToInputFieldById(id);
	}
}

function setFocusToInputFieldById(id) {	
	$('#' + id).focus();
}

function setFocusToInputFieldByName(name) {
	$("input[name='" + name + "']").focus();
}			

function setFocusToInputFieldByValue(value) {
	$("input[value='" + value + "']").focus();
}

// Liefert den Wert des Base-Tags zurück - falls vorhanden
//Wird benötigt, da Internet Explorer in Javascript-Aufrufen das Base-Tag nicht berücksichtigt.
function getBaseTag() {
	var result = '';
	var baseTags = document.getElementsByTagName("base");
	if (baseTags.length > 0) {
		result = baseTags[0].getAttribute("href");
	}
	
	if (result == null) {
		result = '';
	}
	
	return result;
}
