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');
	var bIsInformationMessage = false;
	if (eMessage != null)
		if (eMessage.innerHTML != '')
			if (eMessage.className == 'InformationMessage')
				bIsInformationMessage = true;
			else
				alert(eMessage.innerHTML);
	
	// Redirect when page loaded.
	var eRedirect = document.getElementById('Redirect');
	if (eRedirect != null)
		if (eRedirect.value != '')
			if (window.navigate)
				setTimeout('window.navigate(\'' + eRedirect.value.replace('\'', '\\\'') + '\')', (bIsInformationMessage == true) ? 5000 : 0);
			else
				setTimeout('window.location = \'' + eRedirect.value.replace('\'', '\\\'') + '\'', (bIsInformationMessage == true) ? 5000 : 0);
}



function IsFormValid(eForm)
{
	for (var i = 0; i < eForm.elements.length; i++)
	{
		var eControl = eForm.elements[i];
		if (eControl.getAttribute('required') != null && eControl.getAttribute('required').toLowerCase() == 'true' && eControl.value == '')
		{
			alert('A value is required for ' + GetControlDisplayName(eControl.name) + '.');
			eControl.focus();
			return false;
		}
		if (eControl.value != '')
			if (eControl.getAttribute('valuetype') == 'EmailAddress')
			{
				if (IsEmailAddressValid(eControl.value) == false)
				{
					alert(GetControlDisplayName(eControl.name) + ' is invalid.');
					eControl.focus();
					return false;
				}
			}
	}
	var aDivs = document.getElementsByTagName('div');
	for (var i = 0; i < aDivs.length; i++)
	{
		var eDiv = aDivs[i];
		if (eDiv.className == 'FormLinkingForeignCollectionControl' && eDiv.getAttribute('required') != null && eDiv.getAttribute('required').toLowerCase() == 'true')
		{
			var bHasValueSelected = false;
			var aControls = eDiv.getElementsByTagName('input');
			for (var j = 0; j < aControls.length; j++)
			{
				bHasValueSelected = aControls[j].checked;
				if (bHasValueSelected == true)
					break;
			}
			if (bHasValueSelected == false)
			{
				alert('A value is required for ' + GetControlDisplayName(eDiv.id) + '.');
				eDiv.focus();
				return false;
			}
		}
	}
	
	// Launch the upload bar if required.
    return LaunchUploadBar(eForm);
}


function SetCookie(sName, sValue, iExpiryDays)
{
	var dExpiry = new Date();
	dExpiry.setDate(dExpiry.getDate() + iExpiryDays);
	document.cookie = sName + '=' + escape(sValue) + ((iExpiryDays == null) ? '' : ';expires=' + dExpiry.toGMTString());
}


function GetCookie(sName)
{
	if (document.cookie.length > 0)
	{
		iStartPosition = document.cookie.indexOf(sName + '=');
		if (iStartPosition != -1)
		{ 
			iStartPosition = iStartPosition + sName.length + 1;
			iEndPosition = document.cookie.indexOf(';', iStartPosition);
			if (iEndPosition == -1)
				iEndPosition = document.cookie.length;
			return unescape(document.cookie.substring(iStartPosition, iEndPosition));
		}
	}
	return '';
}


function IsEmailAddressValid(sEmailAddress)
{
	var rEmailFormat = /^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/;
	return rEmailFormat.test(sEmailAddress);
}


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;
}

function GetURLParameter(sName)
{
	var r = new RegExp('[\\?&]' + sName + '=([^&#]*)');
	var aResults = r.exec(window.location.href);
	if( aResults == null )
		return '';
	else
		return unescape(aResults[1]);
}

function GenerateShortUid()
{
    var result, i, j;
    result = '';
    for(j=0; j<8; j++)   {
        i = Math.floor(Math.random()*16).toString(16).toUpperCase();
        result = result + i;
    }
    return result
}

var meSubmitForm;
var msSubmitFormOrigAction;
var meAddedUploadDiv;

function LaunchUploadBar(eForm) {

// Look for all the File Input elements.

    var sFilenames = '';
    var aFileInputs = eForm.getElementsByTagName('input');
    var eBody = document.getElementsByTagName('body')[0];
   
    if (aFileInputs != null) {
        var HasFileInputs = 0;
	    for (var i = 0; i < aFileInputs.length; i++)   {
		    var eInput = aFileInputs[i];
		    if (eInput.type == 'file') {
		        if (eInput.value != '') {
		            HasFileInputs = 1;
		            if (sFilenames != '') {
		                sFilenames = sFilenames + ', ';
		            }
	                var nLastBackslash = eInput.value.lastIndexOf('\\');
	                var sNameOnly = eInput.value.substring(nLastBackslash+1);
	                sFilenames += escape(sNameOnly);
			    }
		    }
	    }
	    if (HasFileInputs) {
            meSubmitForm = eForm; // aForms[0];
            msSubmitFormOrigAction = meSubmitForm.action;
            var uid =  GenerateShortUid();
            meSubmitForm.action = msSubmitFormOrigAction + '&PageUid=' + uid;

            RemoveUploadDiv();
            var sOpenURL ='UploadStatus.aspx?PageUid=' + uid + '&Files=' + sFilenames;	 
            var aUploadDiv = document.createElement('div');
            aUploadDiv.setAttribute('id','UploadDisplay');
            // Use inner HTML since any other technique produces a inset frame in IE.
            aUploadDiv.innerHTML = '<iframe frameborder="0" scrolling="no" height="100%" width="100%" src="' + sOpenURL + '"/>';
            eBody.insertBefore(aUploadDiv, eBody.childNodes[0]);
            meAddedUploadDiv = document.getElementById('UploadDisplay');
         	// Don't submit now: submit in 300ms so the GUI has time to 
        	// draw the new elements.
            setTimeout('SubmitForm()',500);
            // return false so the form is not submitted by the Submit button, but by the 
            // SubmitForm() code instead.
            return false;
        } else {
            return true;
        }
	}
    return true;
}

function RemoveUploadDiv()
{
    if (meAddedUploadDiv != null) {
        meAddedUploadDiv.parentNode.removeChild(meAddedUploadDiv);
        meAddedUploadDiv = null;
    }
}
  
function SubmitForm() {
    meSubmitForm.submit();
	// Restore the URL.
	meSubmitForm.action = msSubmitFormOrigAction;
}	
