function Body_Onload()
{
	IncludeStyleSheet('JSCalendar/calendar-system.css');
	IncludeScript('JSCalendar/calendar.js');
	IncludeScript('JSCalendar/lang/calendar-en.js');
	IncludeScript('JSCalendar/calendar-setup.js');
	IncludeScript('FCKeditor/fckeditor.js');
	IncludeScript('Configuration.js');
	IncludeScript('LoadGUIControls.js');
	IncludeScript('LanguageConverter.js');
	
	// Set focus on first control.
	var eFirstControl = document.getElementById('FirstControl');
	if (eFirstControl != null)
		if (eFirstControl.value != '')
			document.getElementById(eFirstControl.value).focus();
	
	// Display message when page loaded.
	var eMessage = document.getElementById('Message');
	if (eMessage != null)
		if (eMessage.innerText != '' && eMessage.className != 'InformationMessage')
			alert(eMessage.innerText);
	
	// Redirect when page loaded.
	var eRedirect = document.getElementById('Redirect');
	if (eRedirect != null)
		if (eRedirect.value != '')
			if (window.navigate)
				window.navigate(eRedirect.value);
			else
				window.location = eRedirect.value;
}



function IsFormValid(eForm)
{
	for (var i = 0; i < eForm.elements.length; i++)
	{
		var eControl = eForm.elements[i];
		if (eControl.getAttribute('required') == 'true' && eControl.value == '')
		{
			alert('A value is required for ' + GetControlDisplayName(eControl.name) + '.');
			eControl.focus();
			return false;
		}
	}
	return true;
}


function GetControlDisplayName(sName)
{
	if (sName.substring(sName.length - 8, sName.length) == '_Control')
		return SpaceName(sName.substring(0, sName.length - 8));
	else
		return SpaceName(sName);
}


function SpaceName(sName)
{
	// to be written: put spaces before capitals
	return sName;
}


function ToggleRecordSelectors()
{
	var bChecked = document.getElementById('RecordSelectorToggler').checked;
	var aInputs = document.getElementsByTagName('input');
	for (var i = 0; i < aInputs.length; i++)
	{
		var oRecordSelector = aInputs[i];
		if (oRecordSelector.type == 'checkbox')
			if (oRecordSelector.id != null)
				if (oRecordSelector.id != 'RecordSelectorToggler')
					if (oRecordSelector.id.substring(0, 14) == 'RecordSelector')
						oRecordSelector.checked = bChecked;
	}
}


function SelectedRecords()
{
	var aInputs = document.getElementsByTagName('input');
	var sRecords = '';
	for (var i = 0; i < aInputs.length; i++)
	{
		var oRecordSelector = aInputs[i];
		if (oRecordSelector.type == 'checkbox')
			if (oRecordSelector.id != null)
				if (oRecordSelector.id != 'RecordSelectorToggler')
					if (oRecordSelector.id.substring(0, 14) == 'RecordSelector')
						if (oRecordSelector.checked == true)
						{
							if (sRecords != '')
								sRecords += ',';
							sRecords += oRecordSelector.id.substring(14);
						}
	}
	return sRecords;
}


function IncludeScript(sPath)
{
    var eHead = document.getElementsByTagName('head').item(0);
    var eScript = document.createElement('script');
    eScript.setAttribute('language', 'javascript');
    eScript.setAttribute('type', 'text/javascript');
    eScript.setAttribute('src', sPath);
    eHead.appendChild(eScript);
    return false;
}


function IncludeStyleSheet(sPath)
{
    var eHead = document.getElementsByTagName('head').item(0);
    var eLink = document.createElement('link');
    eLink.setAttribute('type', 'text/css');
    eLink.setAttribute('rel', 'stylesheet');
    eLink.setAttribute('href', sPath);
    eHead.appendChild(eLink);
    return false;
}


var sMSIE = 'Microsoft Internet Explorer';
var msTempControls = { };
function FilterSubList(oFilter)
{
	var sSubListName = oFilter.attributes.getNamedItem('sublistname').value;
	var oSubList = document.getElementById(sSubListName);
	
	if (oSubList.className == 'FormItemControl' && navigator.appName == sMSIE)
		if (msTempControls[sSubListName])
		{
			oSubList.outerHTML = msTempControls[sSubListName];
			oSubList = document.getElementById(sSubListName);
		}
		else
			msTempControls[sSubListName] = oSubList.outerHTML;
	
	if (oFilter.value != '')
	{
		var oLoaded = oFilter.options.item(oFilter.selectedIndex).attributes.getNamedItem('loaded');
		if (oLoaded != null && oLoaded.value == 'False')
		{
			var sFilterText = oFilter.options.item(oFilter.selectedIndex).text;
			var sSubListURL = oFilter.attributes.getNamedItem('sublisturl').value.replace('%5bValue%5d', oFilter.value)
			var oXML = LoadXML(sSubListURL);
			var oItems = oXML.documentElement.childNodes;
			for (var i = 0; i < oItems.length; i++)
			{
				var oItem = oItems.item(i);
				var sValue = oItem.attributes.getNamedItem('id').value;
				var sText = oItem.childNodes.item(0).nodeValue;
				if (sText.substring(0, sFilterText.length + 3) == sFilterText + ' - ')
					sText = sText.substring(sFilterText.length + 3);
				if (oSubList.className == 'FormItemControl')
				{
					var oOption = document.createElement('option');
					oOption.setAttribute('value', sValue);
					oOption.setAttribute('filtervalue', oFilter.value);
					var oText = document.createTextNode(sText);
					oOption.appendChild(oText);
					oSubList.appendChild(oOption);
				}
				else if (oSubList.className == 'FormLinkingForeignCollectionControl')
				{
					var oOption = document.createElement('div');
					oOption.setAttribute('filtervalue', oFilter.value);
					var sCheckboxName = sSubListName + sValue;
					var oCheckbox = document.createElement('input');
					oCheckbox.setAttribute('id', sCheckboxName);
					oCheckbox.setAttribute('name', sCheckboxName);
					oCheckbox.setAttribute('type', 'checkbox');
					oOption.appendChild(oCheckbox);
					var oLabel = document.createElement('span');
					oLabel.setAttribute('onclick', sCheckboxName + '.checked = !' + sCheckboxName + '.checked');
					var oText = document.createTextNode(sText);
					oLabel.appendChild(oText);
					oOption.appendChild(oLabel);
					oSubList.appendChild(oOption);
				}
			}
			oLoaded.value = 'True';
			if (oSubList.className == 'FormItemControl' && navigator.appName == sMSIE)
				msTempControls[sSubListName] = oSubList.outerHTML;
		}
	}
	
	if (oSubList.className == 'FormItemControl')
	{
		for (i = 1; i < oSubList.length; i++)
		{
			var oOption = oSubList.options.item(i);
			if (oFilter.selectedIndex != 0 && oOption.attributes.getNamedItem('filtervalue').value != oFilter.value)
				if (navigator.appName == sMSIE)
					oSubList.remove(i--);
				else
				{
					oOption.selected = false;
					oOption.style.display = 'none';
				}
			else
				if (navigator.appName != sMSIE)
					oOption.style.display = 'list-item';
		}
	}
	else if (oSubList.className == 'FormLinkingForeignCollectionControl')
		for (i = 0; i < oSubList.childNodes.length; i++)
		{
			var oOption = oSubList.childNodes.item(i);
			if ((oFilter.selectedIndex == 0 && oOption.childNodes.item(0).checked == true) || oOption.attributes.getNamedItem('FilterValue').value == oFilter.value)
				oOption.style.display = 'list-item';
			else
				oOption.style.display = 'none';
		}
}


function LoadXML(sURL)
{
	var oXML;
	if (window.ActiveXObject)
	{
		oXML = new ActiveXObject('Microsoft.XMLDOM');
		oXML.async = false;
		oXML.load(sURL);
	}
	else
	{
		var oXMLHttpRequest = GetXMLHttpRequest();
		if (oXMLHttpRequest != false)
		{
			oXMLHttpRequest.open('GET', sURL, false);
			oXMLHttpRequest.send('');
			if (oXMLHttpRequest.status == 200)
				if (oXMLHttpRequest.responseXML != null)
					oXML = oXMLHttpRequest.responseXML;
				else
					oXML = (new DOMParser()).parseFromString(oXMLHttpRequest.responseText, "text/xml");
		}
		else
			alert('Your browser cannot handle this script');
	}
	return(oXML);
}


function GetXMLHttpRequest()
{
	var oXMLHttpRequest = false;
	if (window.XMLHttpRequest)
	{
        try
        {
			oXMLHttpRequest = new XMLHttpRequest();
        }
        catch(e)
        {
            oXMLHttpRequest = false;
        }
    }
    else if(window.ActiveXObject)
    {
        try
        {
            oXMLHttpRequest = new ActiveXObject('Microsoft.XMLHTTP');
        }
        catch(e)
        {
            oXMLHttpRequest = false;
        }
    }
    return oXMLHttpRequest;
}


Array.find = function(ary, element)
{
	for (var i = 0; i < ary.length; i++)
		if (ary[i] == element)
			return i;
	return -1;
}
