var glbKey					= '';
var glbClose				= true;
var glbDebug				= false;
//////////
document.onkeydown			= FlightFormKeyDown
var bIsTabKey				= false;
function FlightFormKeyDown(e)
{
	bIsTabKey				= false;

	if(!e)
		var e				= window.event;

    if(e.keyCode == 9) // tab key
    {
    	bIsTabKey			= true;

    	if(document.getElementById('aerodromeSearch'))
    		CloseAerodromeSearch();

    	if(document.getElementById('aircraftSearch'))
    		CloseAircraftSearch();

    	if(document.getElementById('capacitySearch'))
    		CloseCapacitySearch();
    }
}
//////////
//////////
//////////
function Get(pID)
{
	if(document.getElementById(pID))
	{
		return(document.getElementById(pID));
	}
	else
	{
//		alert('document.getElementById(\'' + pID + '\') does not exist.');
	}
}
function GetForm(pForm)
{
	if(pForm == null)
	{
		if(document.forms[0])
		{
			return(document.forms[0]);
		}
		else
		{
//			alert('document.forms[0] does not exist.');
		}
	}
	else
	{
		if(document.forms[pForm])
		{
			return(document.forms[pForm]);
		}
		else
		{
//			alert('document.forms[\'' + pForm + '\'] does not exist.');
		}
	}
}
function ReplaceAll(pStr,pFind,pReplace)
{
	if(pStr.indexOf(pFind) > -1)
	{
		pStr		= pStr.replace(pFind,pReplace);
		return(ReplaceAll(pStr,pFind,pReplace));
	}
	else
	{
		return(pStr);
	}
}
function GetPosTop(obj)
{
	var iTopThis	= 0;
	var iLeftThis	= 0;

	if(obj.offsetParent)
	{
		iTopThis	= obj.offsetTop;
		iLeftThis	= obj.offsetLeft;

		while(obj = obj.offsetParent)
		{
			iTopThis	+= obj.offsetTop;
			iLeftThis	+= obj.offsetLeft;
		}
	}

	return(iTopThis);
}
function GetPosLeft(obj)
{
	var iTopThis	= 0;
	var iLeftThis	= 0;

	if(obj.offsetParent)
	{
		iTopThis	= obj.offsetTop;
		iLeftThis	= obj.offsetLeft;

		while(obj = obj.offsetParent)
		{
			iTopThis	+= obj.offsetTop;
			iLeftThis	+= obj.offsetLeft;
		}
	}

	return(iLeftThis);
}
//////////
//////////
//////////
function KeyPage(pPage)
{
	glbClose				= false;
	document.location = pPage + (pPage.indexOf('?') == -1 ? '?' : '&') + 'k=' + glbKey;
}
function KeyLogout(pMobile)
{
	glbClose				= false;
	document.location = '/logbook/logout.asp?k=' + glbKey + '&logout=true' + (pMobile ? '&m=t' : '');
}
function KeyClose()
{
//	if(glbClose)
//	{
//		var oAJAX			= new sack();
//		oAJAX.requestFile	= KeyLogout(false);
//		oAJAX.onCompletion 	= function()
//		{
//			// do nothing
//		}
//
//		oAJAX.runAJAX();
//	}
}
//////////
//////////
//////////
function AjaxFormCheck(src,pSuppress,pFieldType)
{
    var bValid 				= true;
    var ii;
    var oInput;
    var iElements 			= src.elements.length;
    var bFieldType 			= false;

    for(ii = 0;ii < iElements; ii++)
    {
        oInput 				= src.elements[ii];

        bFieldType 			= false;

        if(pFieldType)
        {
        	if(oInput.type == pFieldType)
        	{
        		bFieldType 	= true;
        	}
        }

        if(oInput.type == 'text' || oInput.type == 'password' || oInput.type == 'file' || oInput.type == 'select-one' || oInput.type == 'select-multiple' || oInput.type == 'textarea' || bFieldType)
        {
            if(oInput.dir == 'ltr')
            {
                if(oInput.type=='select-one' || oInput.type=='select-multiple')
                {
                	if (oInput.value == '' || oInput.value == '0')
                	{
                		bValid = false;
                	}
                }
                else
                {
                	if(oInput.value == '')
	                {
	                	bValid = false;
					}
                }
            }
        }
    }
    if(!bValid)
    {
        if(!pSuppress)
        {
        	alert('Please complete all mandatory fields.');
        }
    }

    return(bValid);
}
function AjaxFormSave(pForm,pFunction)
{
	var oForm				= GetForm(pForm);

	if(AjaxFormCheck(GetForm(pForm),false,null))
	{
		AjaxLoad();

		var sForm			= '';

		for(var ii = 0;ii < oForm.elements.length;ii++)
		{
			if(oForm.elements[ii].type == 'checkbox' || oForm.elements[ii].type == 'radio')
			{
				sForm		+= oForm.elements[ii].name + '=';

				if(oForm.elements[ii].checked)
				{
					sForm	+= 'on';
				}
			}
			else
			{
				sForm		+= oForm.elements[ii].name + '=';
				sForm		+= encodeURIComponent(oForm.elements[ii].value);
			}

			sForm			+= '&'	;
		}

		if(sForm.substring(sForm.length - 1) == '&')
		{
			sForm			= sForm.substring(0,sForm.length - 1);
		}

		var oAJAX			= new sack();
		oAJAX.method		= 'POST';
		oAJAX.requestFile	= oForm.action;
		oAJAX.onCompletion 	= function()
		{
			oAJAX.logoff();

			var arrResponse	= oAJAX.response.split('|');
			var iRecordID	= 0;
			var sThisKey	= '';
			var sMessage	= '';

			if(arrResponse[0].indexOf(',') == -1)
			{
				iRecordID	= parseInt(arrResponse[0]);
			}
			else
			{
				iRecordID	= parseInt(arrResponse[0].split(',')[0]);
				sThisKey	= arrResponse[0].split(',')[1];
			}

			if(arrResponse.length > 1)
			{
				for(var ii = 1;ii < arrResponse.length;ii++)
				{
					sMessage += arrResponse[ii];

					if(ii < (arrResponse.length - 1))
					{
						sMessage += '\n';
					}
				}
			}

			if(sMessage == '')
			{
				if(pFunction != '')
				{
					eval(ReplaceAll(ReplaceAll(pFunction,'{ID}',iRecordID),'{glbKey}',sThisKey));
				}
				else
				{
					AjaxLoadClear();
				}
			}
			else
			{
				AjaxLoadClear();
				alert(sMessage);
			}
		}

		oAJAX.runAJAX(sForm + '&k=' + glbKey + '&ajax=ForLogout');
	}
}
//////////
//////////
//////////
var sSummaryTable			= 'All';

function SummaryCheckboxTable(pName,pAircraftID,pType)
{
	var oTable				= Get('SummaryCheckboxTable');
	var oBoxes				= oTable.getElementsByTagName('input');
	var oBox				= null;
	var bBox				= false;

	for(var ii = 0;ii < oBoxes.length;ii++)
	{
		oBox				= oBoxes[ii];

		if(oBox.name == pName)
		{
			oBox.checked	= true;
			sSummaryTable	= oBox.name
			bBox			= true;
		}
		else
		{
			oBox.checked 	= false;
		}
	}

	if(!bBox)
	{
		sSummaryTable		= '';

		if(document.getElementById('SummaryCheckboxTableSelect'))
		{
			sSummaryTable	= Get('SummaryCheckboxTableSelect').value;
		}
	}
	else
	{
		if(document.getElementById('SummaryCheckboxTableSelect'))
		{
			Get('SummaryCheckboxTableSelect').value = '';
		}
	}

	SummaryTable(pAircraftID,pType);
}

function SummaryTable(pAircraftID,pType)
{
	AjaxLoad();

	var oAJAX				= new sack();
	oAJAX.requestFile		= 'summary.asp?k=' + glbKey + '&ajax=OutputLogbookSummaryTable&Type=' + sSummaryTable + '&AircraftID=' + pAircraftID + '&AircraftType=' + pType;
	oAJAX.onCompletion 		= function()
	{
		oAJAX.logoff();
		Get('OutputLogbookSummaryContainer').innerHTML = oAJAX.response;
		AjaxLoadClear();
	}

	oAJAX.runAJAX();
}

var sSummaryPie				= 'Hours';

function SummaryCheckboxPie(pName)
{
	var oTable				= Get('SummaryCheckboxPie');
	var oBoxes				= oTable.getElementsByTagName('input');
	var oBox				= null;

	for(var ii = 0;ii < oBoxes.length;ii++)
	{
		oBox				= oBoxes[ii];

		if(oBox.name == pName)
		{
			oBox.checked	= true;
			sSummaryPie		= oBox.name
		}
		else
		{
			oBox.checked 	= false;
		}
	}

	SummaryPie();
}

function SummaryPie()
{
	AjaxLoad();

	var oAJAX				= new sack();
	oAJAX.requestFile		= 'summary.asp?k=' + glbKey + '&ajax=OutputLogbookSummaryPie&Type=' + sSummaryPie;
	oAJAX.onCompletion 		= function()
	{
		oAJAX.logoff();
		oPie.setDataXML(oAJAX.response);
		AjaxLoadClear();
	}

	oAJAX.runAJAX();
}

var iSummaryMonth			= 0;

function SummaryMonth(pYear,pMonth) // pYear & pMonth not always supplied
{
	if(iSummaryMonth > 0)
	{
		iSummaryMonth		= 0;
		return;
	}

	AjaxLoad();

	var oAJAX				= new sack();
	oAJAX.requestFile		= 'summary.asp?k=' + glbKey + '&ajax=OutputLogbookMonthBar&id=' + iSummaryMonth + '&year=' + pYear + '&month=' + pMonth;
	oAJAX.onCompletion 		= function()
	{
		oAJAX.logoff();
		Get('SummaryMonthTitle').innerHTML = oAJAX.response.split('|')[0];
		oBar2.setDataXML(oAJAX.response.split('|')[1]);

		// reset iSummaryMonth for when pYear & pMonth are used
		iSummaryMonth		= parseInt(oAJAX.response.split('|')[2]);

		if(isNaN(iSummaryMonth))
			iSummaryMonth	= 0;

		AjaxLoadClear();
	}

	oAJAX.runAJAX();
}

var iSummaryYear			= new Date().getFullYear();
var iSummaryYearOld			= iSummaryYear;

function SummaryYear()
{
	if(iSummaryYear > new Date().getFullYear())
	{
		iSummaryYear		= new Date().getFullYear();
		Get('SummaryYearTitle').value = iSummaryYear;
	}

	if(iSummaryYear == iSummaryYearOld)
		return;

	AjaxLoad();

	var oAJAX				= new sack();
	oAJAX.requestFile		= 'summary.asp?k=' + glbKey + '&ajax=OutputLogbookYearBar&id=' + iSummaryYear;
	oAJAX.onCompletion 		= function()
	{
		oAJAX.logoff();
		iSummaryYearOld		= oAJAX.response.split('|')[0]
		Get('SummaryYearTitle').value = iSummaryYearOld;
		oBar.setDataXML(oAJAX.response.split('|')[1]);
		AjaxLoadClear();
	}

	oAJAX.runAJAX();
}
function SummaryYearTitleSet()
{
	var oo					= Get('SummaryYearTitle');
	iSummaryYear			= parseInt(oo.value);

	if(isNaN(oo.value))
		iSummaryYear		= new Date().getFullYear();

	oo.value				= iSummaryYear;
}
//////////
//////////
//////////
var iFlightListView_Page	= 0;
var iFlightListView_Order	= '';
var bFlightListView_Desc	= false;

function FlightListView(pLoad,pPage,pOrder,pDesc)
{
	iFlightListView_Page	= pPage;
	iFlightListView_Order	= pOrder;
	bFlightListView_Desc	= pDesc;

	if(pLoad)
	{
		AjaxLoad();
	}

	var oForm				= GetForm('FlightListViewColumn');

	var oAJAX				= new sack();
	oAJAX.requestFile		= 'flights.asp?k=' + glbKey + '&ajax=OutputFlights&Page=' + pPage + '&Order=' + pOrder + '&Desc=' + pDesc + '&Hobbs=' + oForm.Hobbs.checked + '&Nav=' + oForm.Nav.checked + '&Instrument=' + oForm.Instrument.checked + '&Night=' + oForm.Night.checked + '&Instructor=' + oForm.Instructor.checked + '&Distance=' + oForm.Distance.checked + '&Cost=' + oForm.Cost.checked + '&TOL=' + oForm.TOL.checked + '&Notes=' + oForm.Notes.checked + '&Custom1=' + oForm.Custom1.checked + '&Custom2=' + oForm.Custom2.checked + '&Custom3=' + oForm.Custom3.checked;
	oAJAX.onCompletion 		= function()
	{
		var arrResponse		= oAJAX.response.split('{SplitOutputFlights}');

		oAJAX.logoff();
		Get('lvContainer').innerHTML = arrResponse[0];
		Get('UserFlightCount').innerHTML = arrResponse[1];

		if(document.getElementById('AnalysisForm'))
		{
			GetForm('AnalysisForm').DateFrom.value = Get('analysisDates').innerHTML.split('|')[0];
			GetForm('AnalysisForm').DateTo.value = Get('analysisDates').innerHTML.split('|')[1];
		}

		AjaxLoadClear();
	}

	oAJAX.runAJAX();
}
function FlightListViewStd()
{
	FlightListView(true,iFlightListView_Page,iFlightListView_Order,bFlightListView_Desc);
}
function DeleteFlight(pID)
{
	if(!confirm('Confirm delete?\n\nLogbook entries should only be deleted if an error has been made.\nRemember that a record can be modified by clicking on the entry.'))
		return;

	HidePropertyForm();

	AjaxLoad();

	var oAJAX				= new sack();
	oAJAX.requestFile		= 'flights.asp?k=' + glbKey + '&ajax=DeleteFlight&id=' + pID;
	oAJAX.onCompletion 		= function()
	{
		oAJAX.logoff();

		/////////////////////

		var oCell			= Get('l' + pID);
		var oBody			= Get('LogTableBody');
		oBody.removeChild(oCell.parentNode);

		var oRows			= oBody.getElementsByTagName('tr');
		var oRow			= null;
		var iClass			= 1;

		for(var ii = 0;ii < oRows.length;ii++)
		{
			oRow			= oRows[ii];

			if(iClass == 1)
			{
				oRow.className = 'rowOdd';
			}
			else
			{
				oRow.className = 'rowEven';
			}

			oRow.onmouseover = (function(pRow)
			{
				return(function()
				{
					pRow.className = 'rowOn';

				});
			})(oRow);

			oRow.onmouseout = (function(pRow,pClass)
			{
				return(function()
				{
					pRow.className = pClass;

				});
			})(oRow,oRow.className);

			iClass			= iClass * -1;
		}

		if(document.getElementById('LogTableFoot'))
			Get('LogTableFoot').style.display = 'none';

		Get('UserFlightCount').innerHTML = (parseInt(Get('UserFlightCount').innerHTML) - 1);

		/////////////////////

		AjaxLoadClear();
	}

	oAJAX.runAJAX();
}

var oSearchAerodrome		= null;

function WaitSearchAerodrome(pForm,pField,pValue)
{
	if((pValue.length > 1) && (!bIsTabKey))
		oSearchAerodrome	= setTimeout('SearchAerodrome(\'' + pForm + '\',\'' + pField + '\',1,\'' + ReplaceAll(pValue,"'","") + '\')',500);
}
function ClearSearchAerodrome()
{
	clearTimeout(oSearchAerodrome);
}
function SearchAerodrome(pForm,pField,pPage,pValue)
{
//	AjaxLoad();

	var oAJAX				= new sack();
	oAJAX.requestFile		= 'flights.asp?k=' + glbKey + '&ajax=OutputAerodromeSearch&Form=' + pForm + '&Field=' + pField + '&Page=' + pPage + '&Search=' + pValue;
	oAJAX.onCompletion 		= function()
	{
		oAJAX.logoff();
		Get('aerodromeSearchContainer').innerHTML = oAJAX.response;
		AjaxLoadClear();
		Get('aerodromeSearch').style.display = 'block';
	}

	oAJAX.runAJAX();
}
function GetAerodrome(pForm,pField)
{
	var oForm				= GetForm(pForm);
	var sSearch				= oForm[pField + 'Search'].value;

	if(sSearch == '')
	{
		SetAerodrome(pForm,pField,0,'','','');
	}
	else
	{
		AjaxLoad();

		var oAJAX			= new sack();
		oAJAX.requestFile	= 'flights.asp?k=' + glbKey + '&ajax=GetAerodrome&Search=' + sSearch;
		oAJAX.onCompletion 	= function()
		{
			oAJAX.logoff();
			var arrResponse	= oAJAX.response.split('|');
			SetAerodrome(pForm,pField,arrResponse[0],ReplaceAll(arrResponse[1],'{pipe}','|'),ReplaceAll(arrResponse[2],'{pipe}','|'),ReplaceAll(arrResponse[3],'{pipe}','|'));
			AjaxLoadClear();
		}

		oAJAX.runAJAX();
	}
}
function SetAerodrome(pForm,pField,pAerodromeID,pName,pIcao,pIata)
{
	var oForm				= GetForm(pForm);
	oForm[pField + 'ID'].value 		= pAerodromeID;
	oForm[pField + 'Search'].value	= pName;
	oForm[pField].value				= pName;
	oForm[pField + 'Icao'].value 	= pIcao;
	oForm[pField + 'Iata'].value 	= pIata;

	CloseAerodromeSearch();
}
function CloseAerodromeSearch()
{
	Get('aerodromeSearch').style.display = 'none';
}

var oSearchAircraft			= null;

function WaitSearchAircraft(pForm,pValue)
{
	if((pValue.length > 1) && (!bIsTabKey))
		oSearchAircraft		= setTimeout('SearchAircraft(\'' + pForm + '\',1,\'' + ReplaceAll(pValue,"'","") + '\')',500);
}
function ClearSearchAircraft()
{
	clearTimeout(oSearchAircraft);
}
function SearchAircraft(pForm,pPage,pValue)
{
//	AjaxLoad();

	var oAJAX				= new sack();
	oAJAX.requestFile		= 'flights.asp?k=' + glbKey + '&ajax=OutputAircraftSearch&Form=' + pForm + '&Page=' + pPage + '&Search=' + pValue;
	oAJAX.onCompletion 		= function()
	{
		oAJAX.logoff();
		Get('aircraftSearchContainer').innerHTML = oAJAX.response;
		AjaxLoadClear();
		Get('aircraftSearch').style.display = 'block';
	}

	oAJAX.runAJAX();
}
function GetAircraft(pForm)
{
	var oForm				= GetForm(pForm);
	var sSearch				= oForm['AircraftSearch'].value;

	if(sSearch == '')
	{
		SetAircraft(pForm,0,'','');
	}
	else
	{
		AjaxLoad();

		var oAJAX			= new sack();
		oAJAX.requestFile	= 'flights.asp?k=' + glbKey + '&ajax=GetAircraft&Search=' + sSearch;
		oAJAX.onCompletion 	= function()
		{
			oAJAX.logoff();
			var arrResponse	= oAJAX.response.split('|');
			SetAircraft(pForm,arrResponse[0],ReplaceAll(arrResponse[1],'{pipe}','|'),ReplaceAll(arrResponse[2],'{pipe}','|'));
			AjaxLoadClear();
		}

		oAJAX.runAJAX();
	}
}
function SetAircraft(pForm,pAircraftID,pRegistration,pShortName)
{
	var oForm				= GetForm(pForm);
	oForm['AircraftID'].value 		= pAircraftID;
	oForm['AircraftSearch'].value	= pRegistration
	oForm['Registration'].value 	= pRegistration;
	oForm['Type'].value				= pShortName

	CloseAircraftSearch();
}
function CloseAircraftSearch()
{
	Get('aircraftSearch').style.display = 'none';
}
/* Unused
function GetCapacity(pForm)
{
	var oForm				= GetForm(pForm);
	var sSearch				= oForm['Capacity'].value;

	if(sSearch == '')
	{
		SetCapacity(pForm,0,'');
	}
	else
	{
		AjaxLoad();

		var oAJAX			= new sack();
		oAJAX.requestFile	= 'flights.asp?k=' + glbKey + '&ajax=GetCapacity&Search=' + sSearch;
		oAJAX.onCompletion 	= function()
		{
			oAJAX.logoff();
			var arrResponse	= oAJAX.response.split('|');
			SetCapacity(pForm,arrResponse[0],ReplaceAll(arrResponse[1],'{pipe}','|'));
			AjaxLoadClear();
		}

		oAJAX.runAJAX();
	}
}
*/
function SetCapacity(pForm,pCapacityID,pName)
{
	var oForm				= GetForm(pForm);
	oForm['CapacityID'].value 		= pCapacityID;
	oForm['Capacity'].value 		= pName;

	CloseCapacitySearch();
}
function CloseCapacitySearch()
{
	Get('capacitySearch').style.display = 'none';
}
function CapacitySelect()
{
	if((Get('capacitySearch').style.display == '') || (Get('capacitySearch').style.display == 'none'))
	{
		Get('capacitySearch').style.display = 'block';
	}
	else
	{
		CloseCapacitySearch();
	}
}
//////////
//////////
//////////
var iAdListView_Page		= 0;
var iAdListView_Order		= '';
var bAdListView_Desc		= false;

function AerodromeListView(pLoad,pPage,pOrder,pDesc,pSearch)
{
	iAdListView_Page		= pPage;
	iAdListView_Order		= pOrder;
	bAdListView_Desc		= pDesc;

	if(pLoad)
	{
		AjaxLoad();
	}

	var oAJAX				= new sack();
	oAJAX.requestFile		= 'aerodromes.asp?k=' + glbKey + '&ajax=OutputAerodromes&Page=' + pPage + '&Order=' + pOrder + '&Desc=' + pDesc + '&Search=' + pSearch;
	oAJAX.onCompletion 		= function()
	{
		oAJAX.logoff();
		Get('lvContainer').innerHTML = oAJAX.response;
		AjaxLoadClear();
	}

	oAJAX.runAJAX();
}

var oAerodromeListView		= null;

function WaitAerodromeListView()
{
//	if(Get('AerodromeSearchBox').value.length > 1)
		oAerodromeListView	= setTimeout('WaitAerodromeListView2()',500)
}
function WaitAerodromeListView2()
{
	AerodromeListView(true,1,iAdListView_Order,bAdListView_Desc,Get('AerodromeSearchBox').value);
}
function ClearAerodromeListView()
{
	clearTimeout(oAerodromeListView);
}
//////////
//////////
//////////
var iAircraftListView_Page	= 0;
var iAircraftListView_Order	= '';
var bAircraftListView_Desc	= false;

function AircraftListView(pLoad,pPage,pOrder,pDesc,pSearch)
{
	iAircraftListView_Page	= pPage;
	iAircraftListView_Order	= pOrder;
	bAircraftListView_Desc	= pDesc;

	if(pLoad)
	{
		AjaxLoad();
	}

	var oAJAX				= new sack();
	oAJAX.requestFile		= 'aircraft.asp?k=' + glbKey + '&ajax=OutputAircraft&Page=' + pPage + '&Order=' + pOrder + '&Desc=' + pDesc + '&Search=' + pSearch;
	oAJAX.onCompletion 		= function()
	{
		oAJAX.logoff();
		Get('lvContainer').innerHTML = oAJAX.response;
		AjaxLoadClear();
	}

	oAJAX.runAJAX();
}

var oAircraftListView		= null;

function WaitAircraftListView()
{
//	if(Get('AircraftSearch').value.length > 1)
		oAircraftListView	= setTimeout('WaitAircraftListView2()',500);
}
function WaitAircraftListView2()
{
	AircraftListView(true,1,iAircraftListView_Order,bAircraftListView_Desc,Get('AircraftSearchBox').value);
}
function ClearAircraftListView()
{
	clearTimeout(oAircraftListView);
}
//////////
//////////
//////////
var iExpiryListView_Page	= 0;
var iExpiryListView_Order	= '';
var bExpiryListView_Desc	= false;

function ExpiryListView(pLoad,pPage,pOrder,pDesc,pSearch)
{
	iExpiryListView_Page	= pPage;
	iExpiryListView_Order	= pOrder;
	bExpiryListView_Desc	= pDesc;

	if(pLoad)
	{
		AjaxLoad();
	}

	var oAJAX				= new sack();
	oAJAX.requestFile		= 'expiry.asp?k=' + glbKey + '&ajax=OutputExpiry&Page=' + pPage + '&Order=' + pOrder + '&Desc=' + pDesc;
	oAJAX.onCompletion 		= function()
	{
		oAJAX.logoff();
		Get('lvContainer').innerHTML = oAJAX.response;
		AjaxLoadClear();
	}

	oAJAX.runAJAX();
}
function DeleteExpiry(pID)
{
	if(!confirm('Confirm delete?'))
		return;

	HidePropertyForm();

	AjaxLoad();

	var oAJAX				= new sack();
	oAJAX.requestFile		= 'expiry.asp?k=' + glbKey + '&ajax=DeleteExpiry&id=' + pID;
	oAJAX.onCompletion 		= function()
	{
		oAJAX.logoff();

		/////////////////////

		var oCell			= Get('e' + pID);
		var oBody			= Get('LogTableBody');
		oBody.removeChild(oCell.parentNode);

		var oRows			= oBody.getElementsByTagName('tr');
		var oRow			= null;
		var iClass			= 1;

		for(var ii = 0;ii < oRows.length;ii++)
		{
			oRow			= oRows[ii];

			if(iClass == 1)
			{
				oRow.className = 'rowOdd';
			}
			else
			{
				oRow.className = 'rowEven';
			}

			oRow.onmouseover = (function(pRow)
			{
				return(function()
				{
					pRow.className = 'rowOn';

				});
			})(oRow);

			oRow.onmouseout = (function(pRow,pClass)
			{
				return(function()
				{
					pRow.className = pClass;

				});
			})(oRow,oRow.className);

			iClass			= iClass * -1;
		}

		/////////////////////

		AjaxLoadClear();
	}

	oAJAX.runAJAX();
}
//////////
//////////
//////////
function CurrencyListView(pLoad)
{
	if(pLoad)
		AjaxLoad();

	var oAJAX				= new sack();
	oAJAX.requestFile		= 'expiry.asp?k=' + glbKey + '&ajax=OutputCurrency';
	oAJAX.onCompletion 		= function()
	{
		oAJAX.logoff();
		Get('lvCurrency').innerHTML = oAJAX.response;
		AjaxLoadClear();
	}

	oAJAX.runAJAX();
}
function DeleteCurrency(pID)
{
	if(!confirm('Confirm delete?'))
		return;

	HidePropertyForm();

	AjaxLoad();

	var oAJAX				= new sack();
	oAJAX.requestFile		= 'expiry.asp?k=' + glbKey + '&ajax=DeleteCurrency&id=' + pID;
	oAJAX.onCompletion 		= function()
	{
		oAJAX.logoff();
		CurrencyListView(false);
		ExpiryListView(false,1,iExpiryListView_Order,bExpiryListView_Desc);
	}

	oAJAX.runAJAX();
}
function SaveCurrency(pCurrencyID)
{
	var oForm				= GetForm('CurrencyForm');
	oForm.id.value			= pCurrencyID;
	oForm.Type.value		= Get('Type_' + pCurrencyID).value;
	oForm.OtherType.value	= Get('OtherType_' + pCurrencyID).value;

	var iDays				= parseInt(Get('Days_' + pCurrencyID).value);
	if(isNaN(iDays)){iDays = 0;}
	oForm.Days.value		= iDays;

	AjaxFormSave('CurrencyForm','ShowMessage(\'Your currency has been saved\',\'msg_tick.png\');CurrencyListView(false);ExpiryListView(false,1,iExpiryListView_Order,bExpiryListView_Desc)')
}
//////////
//////////
//////////
function DeleteAnalysis(pID)
{
	if(!confirm('Confirm delete?'))
		return;

	AjaxLoad();

	var oAJAX				= new sack();
	oAJAX.requestFile		= 'analysis.asp?k=' + glbKey + '&ajax=DeleteAnalysis&id=' + pID;
	oAJAX.onCompletion 		= function()
	{
		oAJAX.logoff();
		OpenForm('field_pf.asp','FieldForm','Name',0,true);
	}

	oAJAX.runAJAX();
}
//////////
//////////
//////////
var iUserListView_Page		= 0;
var iUserListView_Order		= '';
var bUserListView_Desc		= false;

function UserListView(pLoad,pPage,pOrder,pDesc,pSearch)
{
	iUserListView_Page		= pPage;
	iUserListView_Order		= pOrder;
	bUserListView_Desc		= pDesc;

	if(pLoad)
	{
		AjaxLoad();
	}

	var oAJAX				= new sack();
	oAJAX.requestFile		= 'admin.asp?k=' + glbKey + '&ajax=OutputUser&Page=' + pPage + '&Order=' + pOrder + '&Desc=' + pDesc + '&Search=' + pSearch;
	oAJAX.onCompletion 		= function()
	{
		oAJAX.logoff();
		Get('lvContainer').innerHTML = oAJAX.response;
		AjaxLoadClear();
	}

	oAJAX.runAJAX();
}

var oUserListView			= null;

function WaitUserListView()
{
	oUserListView			= setTimeout('WaitUserListView2()',500)
}
function WaitUserListView2()
{
	UserListView(true,1,iUserListView_Order,bUserListView_Desc,Get('UserSearchBox').value);
}
function ClearUserListView()
{
	clearTimeout(oUserListView);
}
//////////
//////////
//////////
function OpenForm(pPage,pForm,pField,pRecordID,pNoLoad) // pRecordID can also be used for additional arguments, see AircraftSummaryForm, CHANGED, pPage now accepts args
{
	HideMessage()

	if(!pNoLoad)
		AjaxLoad();

	var oAJAX				= new sack();
	oAJAX.requestFile		= '/logbook/ajax/' + pPage + (pPage.indexOf('?') == -1 ? '?' : '&') + 'k=' + glbKey + '&ajax=ForLogout' + (pRecordID ? '&id=' + pRecordID : '');
	oAJAX.onCompletion 		= function()
	{
		if(oAJAX.response == 'SystemLock')
		{
			AjaxLoadClear();
			alert('online pilot logbook is closed for maintenance');
			return;
		}

		oAJAX.logoff();
		Get('pf').innerHTML	= oAJAX.response;
		ShowPropertyForm();

		if(document.getElementById(pForm))
			GetForm(pForm)[pField].focus();

		AjaxLoadClear();
	}

	oAJAX.runAJAX();
}
function ContactForm()
{
	OpenForm('contact_pf.asp','ContactForm','Name');
}
function RegisterForm()
{
	OpenForm('register_pf.asp','RegisterForm','Email');
}
function UserForm()
{
	OpenForm('user_pf.asp','UserForm','Email');
}
function PasswordForm()
{
	OpenForm('password_pf.asp','PasswordForm','OldPassword');
}
function FlightForm(pID)
{
	OpenForm('flight_pf.asp','FlightForm','AircraftSearch',pID);
}
function TemplateForm()
{
	OpenForm('template_pf.asp','TemplateForm','AircraftSearch');
}
function PreviousForm()
{
	OpenForm('previous_pf.asp','PreviousForm','DaySinglePic');
}
function AnalysisForm()
{
	HideMessage();

	AjaxLoad();

	var oAJAX				= new sack();
	oAJAX.requestFile		= 'ajax/analysis_pf.asp?k=' + glbKey + '&ajax=ForLogout';

	if(document.getElementById('analysisDates'))
		oAJAX.requestFile	+= '&DateFrom=' + Get('analysisDates').innerHTML.split('|')[0] + '&DateTo=' + Get('analysisDates').innerHTML.split('|')[1];

	oAJAX.onCompletion 		= function()
	{
		oAJAX.logoff();
		Get('pf').innerHTML	= oAJAX.response;
		ShowPropertyForm();
		AjaxLoadClear();
	}

	oAJAX.runAJAX();
}
function FeedbackForm()
{
	OpenForm('feedback_pf.asp','FeedbackForm','Message');
}
function AerodromeForm(pID,pEdit)
{
	if(pEdit)
	{
		if(pEdit == 'N')
		{
			ShowMessage('This aerodrome has been checked for accuracy and released to the wider user community.  It cannot be modified','msg_warning.png');
			return;
		}
	}

	OpenForm('aerodrome_pf.asp','AerodromeForm','Name',pID);
}
function AircraftForm(pID,pEdit)
{
	if(pEdit)
	{
		if(pEdit == 'N')
		{
			ShowMessage('This aircraft has been checked for accuracy and released to the wider user community.  It cannot be modified','msg_warning.png');
			return;
		}
	}

	OpenForm('aircraft_pf.asp','AircraftForm','Registration',pID);
}
function AircraftSummaryForm(pID,pType)
{
	if(!pType)
		pType				= '';

	OpenForm('aircraft_summary_pf.asp?Type=' + pType,'','',pID);
}
function ExpiryForm(pID,pEdit)
{
	if(pEdit)
	{
		if(pEdit == 'N')
		{
			ShowMessage('This record cannot be modified','msg_warning.png');
			return;
		}
	}

	OpenForm('expiry_pf.asp','ExpiryForm','Name',pID);
}
function ShowPropertyForm()
{
	Get('pf').style.display	= 'block';
}
function HidePropertyForm()
{
	Get('pf').style.display	= 'none';
}
//////////
//////////
//////////
function ShowMessage(pTxt,pImg)
{
	Get('messageTxt').innerHTML		= pTxt;
	Get('messageImg').setAttribute('src','/logbook/images/' + pImg);
	Get('message').style.display 	= 'block';
	setTimeout('HideMessage()',2500);
}
function HideMessage()
{
	if(document.getElementById('message'))
		Get('message').style.display = 'none';
}
//////////
//////////
//////////
var hwmImg					= '';
var hmwText					= '';
var hmwContent				= '';

function hmwOn(pDiv,pDemo)
{
	var oImg				= pDiv.getElementsByTagName('div')[1];
	var oText				= pDiv.getElementsByTagName('div')[2];
	var oContent			= pDiv.getElementsByTagName('div')[3];
	var oLink				= pDiv.getElementsByTagName('div')[4];
	var oAnchor				= oLink.getElementsByTagName('a')[0];

	hwmImg					= oImg.className;
	hmwText					= oText.innerHTML;
	hmwContent				= oContent.innerHTML;

	pDiv.className			= 'hmwOn';
	oImg.className			= 'hmwIn';
//	oText.innerHTML			= (pDemo ? 'click here to activate the unique online pilot logbook demo' : 'click here to create an online pilot logbook account');
//	oContent.innerHTML		= (pDemo ? 'enjoy all the features of online pilot logbook within the demo' : 'get started and add your flights');
//	oLink.innerHTML			= '<a href="/" style="color:#666666">more &raquo;</a>';
	oAnchor.style.color		= '#666666';
}
function hmwOff(pDiv)
{
	var oImg				= pDiv.getElementsByTagName('div')[1];
	var oText				= pDiv.getElementsByTagName('div')[2];
	var oContent			= pDiv.getElementsByTagName('div')[3];
	var oLink				= pDiv.getElementsByTagName('div')[4];
	var oAnchor				= oLink.getElementsByTagName('a')[0];

	pDiv.className			= 'hmw';
	oImg.className			= hwmImg;
	oText.innerHTML			= hmwText;
	oContent.innerHTML		= hmwContent;
//	oLink.innerHTML			= '<a href="/">more &raquo;</a>';
	oAnchor.style.color		= 'blue';
}
//////////
//////////
//////////
var oHideHelp				= null;
var bHelpMsg				= false;
var bHelpMsgOver			= false;

function ShowHelp(pSrc,pText)
{
	if(!bHelpMsg && !bHelpMsgOver)
		return;

	clearTimeout(oHideHelp)

	var oHelp				= Get('helpTxt');
	oHelp.style.top 		= (GetPosTop(pSrc) + 35) + 'px';

	var iLeft				= (GetPosLeft(pSrc) + 20);

	if(iLeft > 900)
		iLeft				= (iLeft - 150);

	oHelp.style.left 		= iLeft + 'px';
	oHelp.innerHTML = pText;
	oHelp.style.display = 'block';
}
function HideHelp()
{
	if(!bHelpMsg && !bHelpMsgOver)
		return;

//	oHideHelp				= setTimeout('HideHelp2()',1000);
	HideHelp2();
}
function HideHelp2()
{
	if(document.getElementById('helpTxt'))
	{
		Get('helpTxt').innerHTML = '';
		Get('helpTxt').style.display = 'none';
		bHelpMsgOver		= false;
	}
}
//////////
//////////
//////////
function CloseGuestMessage()
{
	AjaxLoad();

	var oAJAX				= new sack();
	oAJAX.requestFile		= 'ajax/guest_close.asp?ajax=ForLogout';
	oAJAX.onCompletion 		= function()
	{
		oAJAX.logoff();
		Get('guestClose').style.display = 'none';
		AjaxLoadClear();
	}

	oAJAX.runAJAX();
}
//////////
//////////
//////////
var bDpAddWarning			= true;

function DpAdd(pForm,pField,pAdd)
{
	AjaxLoad();

	var oAJAX				= new sack();
	oAJAX.requestFile		= '/logbook/common/dp/add.asp?Date=' + GetForm(pForm)[pField].value + '&Add=' + (pAdd ? 'true' : '');
	oAJAX.onCompletion 		= function()
	{
		oAJAX.logoff();
		AjaxLoadClear();

		var sDate			= oAJAX.response.split('|')[0];
		var bFuture			= (oAJAX.response.split('|')[1] == 'True');

		if((bFuture) && (bDpAddWarning))
		{
			bDpAddWarning	= false;
			alert('You have selected a date in the future');
		}

		if(GetForm(pForm)['DateToDate'])
			if(GetForm(pForm)[pField].value == GetForm(pForm)['DateToDate'].value)
				GetForm(pForm)['DateToDate'].value = sDate;

		GetForm(pForm)[pField].value = sDate;
	}

	oAJAX.runAJAX();
}

var sDpLoadOld				= '';

function DpLoad(pForm,pField,pFunction,pTop,pLeft)
{
	var sID					= 'Dp' + pForm + pField;

	if((document.getElementById(sDpLoadOld)) && (sDpLoadOld != sID))
		Get(sDpLoadOld).style.display = 'none';

	var oDP					= Get(sID);
	var bVisible			= (oDP.style.display == 'block');
	var sFunction			= '';

	sDpLoadOld				= oDP.id

	if(bVisible)
	{
		oDP.style.display 	= 'none';
	}
	else
	{
		oDP.style.top 		= pTop + 'px';
		oDP.style.left 		= pLeft + 'px';

		oDP.src				= '/logbook/common/dp/dp.asp?Form=' + pForm + '&Field=' + pField + '&Date=' + document.forms[pForm][pField].value + '&Function=' + escape(pFunction);
		oDP.style.display	= 'block';
	}
}
function DpSetTo(pForm)
{
	GetForm(pForm)['DateToDate'].value = GetForm(pForm)['DateFromDate'].value;
}
//////////
//////////
//////////
function SetParam(pName,pValue,pFunction)
{
	AjaxLoad();

	var oAJAX				= new sack();
	oAJAX.requestFile		= '/logbook/ajax/param.asp?k=' + glbKey + '&ajax=ForLogout&Name=' + pName + '&Value=' + pValue;
	oAJAX.onCompletion 		= function()
	{
		oAJAX.logoff();

		if(pFunction)
		{
			eval(pFunction);
		}
		else
		{
			AjaxLoadClear();
		}
	}

	oAJAX.runAJAX();
}

function demo()
{
	if(Get('demoTo').value != '')
	{
		GetForm('DemoForm').submit();
	}
	else
	{
		alert('Please enter the code');
	}
}
//////////
//////////
//////////
function MobileSetDate(pField)
{
	GetForm()[pField + 'Date'].value = GetForm()[pField + 'Day'].value + '/' + GetForm()[pField + 'Month'].value + '/' + GetForm()[pField + 'Year'].value;
}
function MobileSetTime(pField)
{
	GetForm()[pField + 'Time'].value = GetForm()[pField + 'Hour'].value + ':' + GetForm()[pField + 'Minute'].value;
}
function MobTab(pTab,pText)
{
	var sID					= (document.getElementById('mobHeadAdd') ? 'mobHeadAdd' : 'mobHeadEdit');
	var sTitle				= (document.getElementById('mobHeadAdd') ? 'Add Flight - ' : 'Edit Flight - ');

	for(var ii = 1;ii < 6;ii++)
	{
		Get('mobTab' + ii).style.display = 'none';

		if(pTab == ii)
		{
			Get('mobTab' + ii).style.display = 'block';
			Get(sID).innerHTML = sTitle + pText;
		}
	}

	MobHide();
}
function MobShowAircraft()
{
	Get('mobAircraftSearchSelect').value = 0;
	Get('mobAircraft').style.display = 'block';
	Get('mobAerodrome').style.display = 'none';
}

var sMobShowAerodrome = '';

function MobShowAerodrome(pFromTo)
{
	Get('mobAerodromeSearchSelect').value = 0;
	Get('mobAircraft').style.display = 'none';
	Get('mobAerodrome').style.display = 'block';
	sMobShowAerodrome		= pFromTo;
}
function MobHide()
{
	Get('mobAircraft').style.display = 'none';
	Get('mobAerodrome').style.display = 'none';
}
function MobSetAircraft(pAircraftID)
{
	var oInput				= GetForm().AircraftID;
	selectClear(oInput);
	selectAdd(oInput,0,'',0);
	selectAdd(oInput,pAircraftID,Get('mobAircraftSearchSelect').options[Get('mobAircraftSearchSelect').selectedIndex].text,pAircraftID);
	MobHide();
}
function MobSetAerodrome(pAerodromeID)
{
	var oInput				= GetForm()[sMobShowAerodrome];
	selectClear(oInput);
	selectAdd(oInput,0,'',0);
	selectAdd(oInput,pAerodromeID,Get('mobAerodromeSearchSelect').options[Get('mobAerodromeSearchSelect').selectedIndex].text,pAerodromeID);
	MobHide();
}
function MobSearchAircraft()
{
	AjaxLoad();

	var oAJAX				= new sack();
	oAJAX.requestFile		= 'flight_pf.asp?k=' + glbKey + '&ajax=OutputMobileAircraftSearch&Search=' + Get('mobAircraftSearchText').value;
	oAJAX.onCompletion 		= function()
	{
		oAJAX.logoff();

		var oInput			= Get('mobAircraftSearchSelect');
		selectClear(oInput);
		selectAdd(oInput,0,'',0);

		var arr				= oAJAX.response.split('|');

		for(var ii = 0;ii < arr.length;ii++)
			selectAdd(oInput,arr[ii].split(',')[0],arr[ii].split(',')[1],0);

		AjaxLoadClear();
	}

	oAJAX.runAJAX();
}
function MobSearchAerodrome()
{
	AjaxLoad();

	var oAJAX				= new sack();
	oAJAX.requestFile		= 'flight_pf.asp?k=' + glbKey + '&ajax=OutputMobileAerodromeSearch&Search=' + Get('mobAerodromeSearchText').value;
	oAJAX.onCompletion 		= function()
	{
		oAJAX.logoff();

		var oInput			= Get('mobAerodromeSearchSelect');
		selectClear(oInput);
		selectAdd(oInput,0,'',0);

		var arr				= oAJAX.response.split('|');

		for(var ii = 0;ii < arr.length;ii++)
			selectAdd(oInput,arr[ii].split(',')[0],ReplaceAll(ReplaceAll(arr[ii].split(',')[1],'{comma}',','),'{pipe}','|'),0);

		AjaxLoadClear();
	}

	oAJAX.runAJAX();
}
function MobFlightBack(pPage)
{
	if(Get('mobTab1').style.display == 'block' || Get('mobTab1').style.display == '')
	{
		MobPage(true,pPage);
	}
	else
	{
		MobTab(1,'General');
	}
}
function MobPage(pLoad,pPage)
{
	if(pLoad)
		AjaxLoad();

	var oAJAX				= new sack();
	oAJAX.requestFile		= '/mobile/' + pPage + (pPage.indexOf('?') == -1 ? '?' : '&') + 'mobPage=true&k=' + glbKey;
	oAJAX.onCompletion 		= function()
	{
		oAJAX.logoff();

		if(oAJAX.response.indexOf('mobHead') == -1)
		{
			document.location = '/logbook/logout.asp?m=t';
			return;
		}
		else
		{
			Get('mobBody').innerHTML = oAJAX.response;
		}

		AjaxLoadClear();
	}

	oAJAX.runAJAX();
}
function MobSendLink(pReset)
{
	if(!confirm('Please confirm?'))
		return;

	AjaxLoad();

	var oAJAX				= new sack();
	oAJAX.requestFile		= '/logbook/ajax/anon.asp?k=' + glbKey + '&ajax=ForLogout&Reset=' + pReset;
	oAJAX.onCompletion 		= function()
	{
		oAJAX.logoff();
		AjaxLoadClear();

		if(oAJAX.response == 'Done')
			alert('Your link has been emailed to you');
	}

	oAJAX.runAJAX();
}
//////////
//////////
//////////
function selectClear(pBox)
{
    var iOptions			= pBox.options.length;

    for(var ii = iOptions;ii >= 0;ii--)
    {
        pBox.options[ii] 	= null;
    }
}
function selectAdd(pBox,pOptionValue,pOptionText,pSelected)
{
    var iOptions			= pBox.options.length;
    pBox.options[iOptions] 	= new Option(pOptionText,pOptionValue);

    if(pOptionValue == pSelected)
    	pBox.options[iOptions].selected = true;
}
//////////
//////////
//////////
function LoginUsernameIn(pInput)
{
	if(pInput.value == 'Email Address')
	{
		pInput.value = '';
		pInput.className = 'login';
	}
}
function LoginUsernameOut(pInput)
{
	if(pInput.value == '')
	{
		pInput.value = 'Email Address';
		pInput.className = 'login ro';
	}
}
function LoginPasswordIn(pInput)
{
	if(pInput.value == 'Password')
	{
		pInput.value = '';
		pInput.className = 'login';
	}
}
function LoginPasswordOut(pInput)
{
	if(pInput.value == '')
	{
		pInput.value = 'Password';
		pInput.className = 'login ro';
	}
}
//////////
//////////
//////////
// http://code.google.com/apis/maps/documentation/javascript/reference.html#Marker
// http://stackoverflow.com/questions/1556921/google-map-api-v3-set-bounds-and-center

function mapInit()
{
	var oOptions 		= {
    	zoom: 10,
    	center: new google.maps.LatLng(0,0),
    	mapTypeId: google.maps.MapTypeId.TERRAIN
  	}

	var oMap 			= new google.maps.Map(
		document.getElementById('mapContainer'),
    	oOptions);

    mapMarker(oMap,oAero);
}
function mapMarker(pMap,pAero)
{
	var oBounds			= new google.maps.LatLngBounds();

	for(var ii = 0;ii < pAero.length;ii++)
	{
		var oInd		= pAero[ii];
		var oLatLong 	= new google.maps.LatLng(oInd[1],oInd[2]);
		var oMarker 	= new google.maps.Marker({
			position: oLatLong,
			map: pMap,
//			shadow: shadow,
//			icon: image,
//			shape: shape,
			title: oInd[0],
			zIndex: oInd[3]
			});

		oBounds.extend(oLatLong);
		pMap.fitBounds(oBounds);
	}
}
//////////
//////////
//////////
function GetReportExportQueryString(pForm)
{
	var oForm			= GetForm(pForm);
	var ss				= '?k=' + glbKey;

	for(var ii = 0;ii < oForm.elements.length;ii++)
	{
		ss				+= '&' + oForm.elements[ii].name + '=';

		if(oForm.elements[ii].type == 'checkbox')
		{
			ss			+= (oForm.elements[ii].checked ? 'true' : '');
		}
		else
		{
			ss			+= encodeURIComponent(oForm.elements[ii].value);
		}
	}

	return(ss);
}

var oReportWin;

function RunReport(pForm,pPage)
{
	if(oReportWin)
		oReportWin.close();

	var oForm			= GetForm(pForm);
	oForm.action		= pPage;
	oReportWin			= window.open('about:blank','ReportWin');
	oForm.target		= 'ReportWin';
	oForm.submit();
}
function RunExport(pForm,pPage)
{
	var oForm			= GetForm(pForm);
	oForm.action		= pPage;
	oForm.submit();
//	document.location = oForm.action + GetReportExportQueryString();
}
