///////////////////////////////////////////////////////////////////	Calculates airmass.////	Copyright (C) 2008 Michael V. Newberry. All Rights Reserved.////	This copyright notice must be included in any portion of this source//	code that is used in any form and for any purpose.//var Site ={	'KPNO'	:	'111,35,55,31,57,32',	'Tucson'	:	'110,56,51,32,14,0',	'WYNN'	:	'111,36,2,31,57,27',	'MMTO'	:	'110,53,8,31,41,20',	'SAO12'	:	'110,52,43.5,31,40,51',	'Apache'	:	'105,49,14.1,32,46,50',	'Cloudcroft'	:	'105,44,26,32,57,16.6',	'Calar'	:	'2,32,56,37,13,19',	'Boston'	:	'71,03,25,42,21,34',	'NYC'		:	'73,58,12,49,46,34',	'Arbor'	:	'83,44,24,42,16,36',	'Chicaco'	:	'87,37,30,41,52,47',	'Yerkes'	:	'88,33,22.5,42,34,13.2',	'Denver'	:	'104,59,23,39,45,22',	'Albuquerque' :	'106,37,40,35,4,58',	'Angeles' 	:	'118,14,40,34,3,38',	'Diego'	:	'117,9,50,32,43,8',	'Francisco' :	'122,24,20,37,46,43',	'Vegas'	:	'115,15,0,36,14,0',	'Austin'	:	'97,45,10,30,17,15',	'Atlanta'	:	'84,23,50,33,45,10',	'Toronto'	:	'79,23,21,43,40,07',	'Montreal'	:	'73,38,25,45,32,57',	'Winnipeg'	:	'97,8,19,49,53,45',	'Edmonton'	:	'113,29,38,53,32,27',	'Vancouver'	:	'123,8,19,49,15,49',	'Flagstaff'	:	'111,39,6,35,11,58',	'Phoenix'	:	'112,4,27,33,26,56',	'Kansas'	:	'94,37,34,39,6,10',	'Paris'		:	'-2,21,4,48,51,24',	'London'	:	'0,7,35,51,30,0',	'Frankfurt'	:	'-8,40,50,50,6,42',	'Amsterdam':	'-4,53,44,52,22,22',	'Madrid'	:	'3,42,12,40,25,0',	'Seoul'	:	'-126,58,57,37,30,55',	'Sydney'	:	'-151,12,26,-33,52,2',	'Stromlo'	:	'-149,0,25,-35,19,14',	'Cape'	:	'-18,25,18,-33,54,58',	'Gamsberg'	:	'-16,13,27.9,-23,20,34',	'Munich'	:	'-11,34,49,48,8,21',	'Rome'	:	'-12,28,56,41,53,44',	'LaPalma'	:	'17,52,52,28,45,36',	'Campanas'	:	'70,41,32,-29,0,51',	'Tololo'	:	'70,48,23,-30,10,9',	'McDonald'	:	'104,1,23,30,40,17',	'Siding'	:	'-149,4,3,-31,16,27',	'Perth'	:	'-115,51,30,-31,57,20',	'Tokyo'	:	'-139,40,56,35,40,43',	'Silla'		:	'70,44,19,-29,15,20',	'PicMidi'	:	'-0,8,27.5,42,56,14',	'Sutherland'	:	'-20,48,39,-32,22,41',	'John'		:	'-170,27,50,-43,59,10',	'Pachon'	:	'70,44,11.8,-30,14,26.3',	'Haleakala'	:	'156,15,25,20,42,30',	'Ottawa'	:	'75,41,28,45,25,26',	'Baltimore'	:	'76,36,52,39,17,41',	'undef'	:	',,,,,'};var _airmass = 1.0;var _hour_angle = 0.0;var g_dAngleFuzz = 1.e-8;var g_dTimeFuzz = 1.e-6;var g_nDegreeDigits = 2;var g_nTimeDigits = 1;var _PT_cSign = '';var _PT_tSec = 0.0;var _PT_tHr = 0.0;var _PT_tMin = 0.0;var _PD_sSign = '';var _PD_nYr = 2000.0;var _PD_nMo = 1.0;var _PD_nDay = 1.0;var _PH_cSign = '';var _PH_tHr = 0.0;var _PH_tMin = 0.0;var _PH_tSec = 0.0;var _PA_cSign = '';var _PA_tDeg = 0.0;var _PA_tMin = 0.0;var _PA_tSec = 0.0;var _JD_nYr = 0;var _JD_nMo = 0;var _JD_nDay = 0;var _JD_nHr = 0;var _JD_nMin = 0;var _JD_dSec = 0.0;////////////////////////////////////////////////////////////////function ChooseSite( form ){	try	{		var sSiteName = Site[ form.SITE.value ];		sSite = new Array();		sSite = sSiteName.split(',');				form.LONGD.value = sSite[0];		form.LONGM.value = sSite[1];		form.LONGS.value = sSite[2];		form.LATD.value = sSite[3];		form.LATM.value = sSite[4];		form.LATS.value = sSite[5];	}	catch( error )	{		form.LONGD.value = '';		form.LONGM.value = '';		form.LONGS.value = '';		form.LATD.value = '';		form.LATM.value = '';		form.LATS.value = '';	}}////////////////////////////////////////////////////////////////function FormatDateStr( syr, smo, sday ){	var yr = Math.floor( Number(syr) );	if ( yr < 10 )	{		if ( yr != 0 )			yr += 2000;		else			yr = 2000;	}	return sprintf( '%04d-%02d-%02d', yr, Number(smo), Number(sday) );}////////////////////////////////////////////////////////////////function FormatTimeStr( h, m, s ){	var sh = '';	if ( h == 0 )		sh = '0';	else		sh = String(h);	var sign = '';	if ( sh.charAt(0) == '-' )		sign = '-';	var nh = Number(sh);	var nm = Number(m)	var ds = Number(s);		var sTimeFmt = sprintf('%%s%%02d:%%02d:%%0%d.%df', g_nTimeDigits+3, g_nTimeDigits );	var dRound = Math.pow( 10.0, -g_nTimeDigits ) / 2.0;	// seconds	return sprintf( sTimeFmt, sign, Math.abs(nh), nm, Math.floor(ds+dRound) );}////////////////////////////////////////////////////////////////function FormatDateTimeStr( syr, smo, sday, sh, sm, ss ){	var yr = Math.floor( Number(syr) );	if ( yr < 10 )	{		if ( yr != 0 )			yr += 2000;		else			yr = 2000;	}		var sDateTimeFmt = sprintf('%%04d-%%02d-%%02dT%%02d:%%02d:%%0%d.%df', g_nTimeDigits+3, g_nTimeDigits );	var dRound = Math.pow( 10.0, -g_nTimeDigits ) / 2.0;	// seconds	return sprintf( sDateTimeFmt, yr, smo, sday, sh, sm, Math.floor( Number(ss) + dRound ) );}////////////////////////////////////////////////////////////////function FormatDegreeStr( d, m, s ){	var sd = '';	if ( d == 0 )		sd = '0';	else		sd = String(d);	var sign = '';	if ( sd.charAt(0) == '-' )		sign = '-';	var nd = Number(sd);	var nm = Number(m)	var ds = Number(s);	var sDegreeFmt = sprintf( '%%s%%02d:%%02d:%%0%d.%df', g_nDegreeDigits+3, g_nDegreeDigits );	var dRound = Math.pow( 10.0, -g_nTimeDigits ) / 2.0;	// seconds	return sprintf( sDegreeFmt, sign, Math.abs(nd), nm, Math.floor( ds + dRound ) );}/////////////////////////////////////////////////////////////////////////function Airmass( sRa, sDec, sLong, sLat, sDate, sTime  ){	_airmass = 0;	var dRa = ParseHours( sRa );	var dDec = ParseDegrees( sDec );	var dLat = ParseDegrees( sLat );	var dHa = 15.0 * ( (CalcLocalSiderealTime( sDate, sTime, sLong ) - dRa + 24) % 24 );	_hour_angle = dHa;		var dCosZ = ( Math.sin(ToRadians(dLat)) * Math.sin(ToRadians(dDec)) ) + ( Math.cos(ToRadians(dLat)) * Math.cos(ToRadians(dDec)) * Math.cos(ToRadians(dHa)) );	if ( dCosZ > 0.0 && dCosZ <= 1.0 )	{		var dSecZ = 1.0 / dCosZ;		var dZ = ToDegrees( Math.acos( dCosZ ) );		_airmass = 1.0 / (dCosZ + 0.50572 * Math.pow( 96.07995 - dZ, -1.6364 ));	}	else		_airmass = 0.0;	return _airmass;}/////////////////////////////////////////////////////////////////////////function CalcLocalSiderealTime( sDate, sTime, sLong ){	ParseDate( sDate );	var dTime = ParseHours( sTime );	var dA = 0.0657098;	var dC = 1.00273790935;	var dD = 0.997270;	var sYear0 = sprintf( '%04d-01-01', _PD_nYr );	var dJdJan0 = JulianDay( sYear0, '00:00:00.0' ) - 1;	var s = dJdJan0 - 2415020.0;	var t = s / 36525.0;	var r = 6.6460656 + (2400.051262 * t) + (0.00002581 * t * t);	var u = r - (24 * (_PD_nYr - 1900));	var dB = 24.0 - u;	var dJd = JulianDay( sDate, '00:00:00.0' );	var dDays = dJd - dJdJan0;	var dT0 = dA * dDays - dB;	var dGST = ((ParseHours( sTime ) * dC) + dT0 + 48) % 24;	var dLongHrs = ParseDegrees( sLong ) / 15.0;	return (dGST - dLongHrs + 48) % 24;}///////////////////////////////////////////////////////////////////////////////function JulianDay( sDate, sTime ){	ParseDate( sDate );	var y = Math.floor( (_PD_nMo > 2) ? _PD_nYr : _PD_nYr - 1 );	var j = Math.floor( (_PD_nMo > 2) ? _PD_nMo - 3 : _PD_nMo + 9 );	var a = Math.floor( 146097.0 * Math.floor( (y + 2000) / 100 ) / 4 ) + 990634.0;	var b = Math.floor( 1461.0 * ((y + 2000) % 100) / 4 );	var c = Math.floor((153 * j + 2) / 5) + _PD_nDay;	ParseTime( sTime );	return (a + b + c + _PT_tHr/24.0 + _PT_tMin/1440.0 + _PT_tSec/86400.0 - 0.5);}///////////////////////////////////////////////////////////////////////////////function ParseJulianDay( dJulianDay ){	var dRound = Math.pow( 10.0, -g_nTimeDigits ) / 2.0;	// seconds		var dSecRounded = 0.0;	var nCounter = 1;	var nMaxLoops = 3;		_JD_nYr = 0;	_JD_nMo = 0;	_JD_nDay = 0;	_JD_nHr = 0;	_JD_nMin = 0;	_JD_dSec = 0.0;	do	{		var dJD = dJulianDay + 0.5;		var dI = Math.floor( dJD );		var dF = dJD - dI;			var dA = 0.0;		var dB = 0.0;			if ( dI > 2299160.0 )		{			dA = Math.floor( (dI - 1867216.25) / 36524.25 );			dB = dI + 1.0 + dA - Math.floor( dA / 4.0 );		}		else		{			dA = dI;			dB = 0.0;		}			var dC = dB + 1524.0;				var dD = Math.floor( (dC - 122.1) / 365.25 );		var dE = Math.floor( 365.25 * dD );		var dG = Math.floor( (dC - dE) / 30.6001 );			var dDay = dC - dE + dF - Math.floor( 30.6001 * dG );		_JD_nDay = Math.floor( dDay );			var dM = 0.0;		if ( dG < 13.5 )			dM = dG - 1.0;		else			dM = dG - 13.0;		_JD_nMo = Math.floor( dM );	// month			var dY = 0.0;		if ( dM > 2.5 )			dY = dD - 4716.0;		else			dY = dD - 4715.0;		_JD_nYr = Math.floor( dY );	// year		var dHr = (dDay - _JD_nDay) * 24.0;		_JD_nHr = Math.floor( dHr );	// hour		var dMin = (dHr - _JD_nHr) * 60.0;		_JD_nMin = Math.floor( dMin );	// minute		_JD_dSec = (dMin - _JD_nMin) * 60.0;	// second			dSecRounded = _JD_dSec + dRound;		if ( dSecRounded >= 60.0 )			dJulianDay += (60.0 - _JD_dSec + g_dTimeFuzz) / 86400.0;				} while ( nCounter++ < nMaxLoops && dSecRounded >= 60.0 );}///////////////////////////////////////////////////////////////////////////////function ToRadians( degrees ){	return degrees * Math.PI / 180.0;}///////////////////////////////////////////////////////////////////////////////function ToDegrees( radians ){	return radians * 180.0 / Math.PI;}////////////////////////////////////////////////////////////////////////////// converts sHours to hours, minutes, seconds.// returns the number of decimal hoursfunction ParseHours( sHours ){	_PH_cSign = '';	_PH_tHr = 0;	_PH_tMin = 0;	_PH_tSec = 0;	if ( sHours.length < 1 )		return 0;	var d = new Array();	d[0] = 0;	d[1] = 0;	d[2] = 0;	var bNegative = false;	if ( sHours.charAt(0) == '-' )		bNegative = true;	var tok = new strtok( sHours, '/-:, HhMmSs\"\'' );	var substr = '';	var i = 0;	while ( (substr = tok.next()) != '' )		d[i++] = Math.abs( Number(substr) ) ;	var dHours = d[0] + (d[1] + d[2]/60.0) / 60.0;	var dMin = 0;		if ( bNegative == true )	{		dHours = -dHours;		_PH_tHr  = Math.ceil( dHours );		dMin = (dHours - _PH_tHr) * 60.0 + g_dAngleFuzz;		_PH_tMin = Math.ceil( dMin );		_PH_tSec = (dMin - _PH_tMin) * 60.0 + g_dAngleFuzz;		_PH_cSign = '-';	}	else	{		_PH_tHr  = Math.floor( dHours );		dMin = (dHours - _PH_tHr) * 60.0 + g_dAngleFuzz;		_PH_tMin = Math.floor( dMin );		_PH_tSec = (dMin - _PH_tMin) * 60.0 + g_dAngleFuzz;		_PH_cSign = '+';	}	return dHours;}////////////////////////////////////////////////////////////////////////////function ParseDate( sDate ){	_PD_sSign = '';	_PD_nYr = 2000.0;	_PD_nMo = 1.0;	_PD_nDay = 1.0;	var d = new Array();	d[0] = 2000.0;	d[1] = 1.0;	d[2] = 1.0;	if ( sDate.charAt(0) == '-' )		_PD_sSign = '-';	var tok = new strtok( sDate, 'T/-:, YyMmDd' );	var substr = '';	var i = 0;	while ( (substr = tok.next()) != '' )		d[i++] = Number(substr);	if ( d[0] >= 1000.0 )	{		_PD_nYr = d[0];		_PD_nMo = d[1];		_PD_nDay = d[2];	}	else if ( d[2] >= 1000.0 )	{		_PD_nYr = d[2];		_PD_nMo = d[1];		_PD_nDay = d[0];	}	else	{		_PD_nYr = 1900.0+ d[2];		_PD_nMo = d[1];		_PD_nDay = d[0];	}}/////////////////////////////////////////////////////////////////////////////// returns secondsfunction ParseTime( sTime0 ){	_PT_cSign = '';	_PT_tHr = 0;	_PT_tMin = 0;	_PT_tSec = 0;		var sTime = sTime0;	var ss = new Array();	ss = sTime0.split( 'T' );		if ( ss.length > 1 )		sTime = ss[1];	if ( sTime.length < 1 )		return 0;	var d = new Array();	d[0] = 0;	d[1] = 0;	d[2] = 0;	var bNegative = false;	if ( sTime.charAt(0) == '-' )		bNegative = true;	var tok = new strtok( sTime, '/-:, HhMmSs\"\'' );	var substr = '';	var i = 0;	while ( (substr = tok.next()) != '' )		d[i++] = Math.abs( Number(substr) ) ;	var dHours = d[0] + (d[1] + d[2]/60.0) / 60.0;	var dMin = 0;		if ( bNegative == true )	{		dHours = -dHours;		_PT_tHr  = Math.ceil( dHours );		dMin = (dHours - _PT_tHr) * 60.0 + g_dAngleFuzz;		_PT_tMin = Math.ceil( dMin );		_PT_tSec = (dMin - _PT_tMin) * 60.0 + g_dAngleFuzz;		_PT_cSign = '-';	}	else	{		_PT_tHr  = Math.floor( dHours );		dMin = (dHours - _PT_tHr) * 60.0 + g_dAngleFuzz;		_PT_tMin = Math.floor( dMin );		_PT_tSec = (dMin - _PT_tMin) * 60.0 + g_dAngleFuzz;		_PT_cSign = '+';	}	return dHours;}////////////////////////////////////////////////////////////////////////////// converts an angle string to degrees, minutes, seconds, and decimal degreesfunction ParseDegrees( sDeg ){	_PA_cSign = '+';	_PA_tDeg = 0;	_PA_tMin = 0;	_PA_tSec = 0.0;		var d = new Array();	d[0] = 0;	d[1] = 0;	d[2] = 0;	var bNegative = false;	if ( sDeg.charAt(0) == '-' )		bNegative = true;		var tok = new strtok( sDeg, '/-:, DdMmSs\"\'\xb0' );	var substr = '';	var i = 0;	while ( (substr = tok.next()) != '' )		d[i++] = Math.abs( Number(substr) );	var dDegrees = d[0] + (d[1] + d[2] / 60.0) / 60.0;	var dMin = 0;		if ( bNegative == true )	{		dDegrees = -dDegrees;		_PA_tDeg  = Math.ceil( dDegrees );		dMin = (dDegrees - _PA_tDeg) * 60.0 + g_dAngleFuzz;		_PA_tMin = Math.ceil( dMin );		_PA_tSec = (dMin - _PA_tMin) * 60.0 + g_dAngleFuzz;		_PA_cSign = '-';	}	else	{		_PA_tDeg  = Math.floor( dDegrees );		dMin = (dDegrees - _PA_tDeg) * 60.0 + g_dAngleFuzz;		_PA_tMin = Math.floor( dMin );		_PA_tSec = (dMin - _PA_tMin) * 60.0 + g_dAngleFuzz;		_PA_cSign = '+';	}	return dDegrees;}////////////////////////////////////////////////////////////////////////////function TimeToStr( time_val ){	var positive = '+';	if ( time_val < 0 )	{		positive = '-';		time_val = -time_val;	}	var n0 = Math.floor( time_val );	var d1 = (time_val - n0) * 60.0 + g_dAngleFuzz;	var n2 = Math.floor( d1 );	var d3 = (d1 - n2) * 60.0 + g_dAngleFuzz;	var sTimeFmt = sprintf('%%s%%02d:%%02d:%%0%d.%df', g_nTimeDigits+3, g_nTimeDigits );	var str = sprintf( sTimeFmt, positive, n0, n2, d3 );	return str;}////////////////////////////////////////////////////////////////////function Message( msg, form ){	var w = 400;	var h = 150;	var pos = sprintf( 'left=%d,top=%d,width=%d,height=%d', window.event.screenX-w/2, window.event.screenY-h/2, w, h );	var generator=window.open( '', 'MsgWin', pos );	generator.document.write( '<html><head><title>Airmass Planner Message</title>' );	generator.document.write( '<link rel="stylesheet" href="styles/mirametrics.css">' );	generator.document.write( '</head><body>' );	generator.document.write( '<br><p class="norm150">' );	generator.document.write( msg );	generator.document.write( '</p>' );	generator.document.write( '</body></html>' );	generator.document.close();}////////////////////////////////////////////////////////////////////function CalcAirmassTable( form ){	form.result.value = '';	var sRa = FormatTimeStr( form.RAH.value, form.RAM.value, form.RAS.value );	var sDec = FormatDegreeStr( form.DECD.value, form.DECM.value, form.DECS.value );	var sLong = FormatDegreeStr( form.LONGD.value, form.LONGM.value, form.LONGS.value );	// assume West longitude > 0	var sLat = FormatDegreeStr( form.LATD.value, form.LATM.value, form.LATS.value );	var sDateStart = FormatDateStr( form.DATESY.value, form.DATESM.value, form.DATESD.value );	var sTimeStart = FormatTimeStr( form.TIMESH.value, form.TIMESM.value, form.TIMESS.value );	var sDateEnd = FormatDateStr( form.DATEEY.value, form.DATEEM.value, form.DATEED.value );	var sTimeEnd = FormatTimeStr( form.TIMEEH.value, form.TIMEEM.value, form.TIMEES.value );	var sTimeInt = FormatTimeStr( form.TIMEIH.value, form.TIMEIM.value, form.TIMEIS.value );		var SEP = String(form.SEP.value);	var sSep = ' ';	if ( SEP.length > 0 )		sSep = SEP.charAt(0);	var sObject = form.OBJECT.value;	var sFmtObj = '%s';	var sObj = '';	var sObjTitle = '';	if ( sObject.length > 0 )	{		var len = Math.min( Math.max( 7, sObject.length ), 19 );		var sFmtName = sprintf( '%%-%d.%ds%%s', len, len );		sObjTitle = sprintf( sFmtName, 'Object', sSep );		sObj = sprintf( sFmtName, sObject, sSep );	}			var dJdStart = JulianDay( sDateStart, sTimeStart );	var dJdEnd = JulianDay( sDateEnd, sTimeEnd );	if ( dJdEnd < dJdStart )	{		dJdEnd += 1.0;	}	dJdEnd -= dJdStart;	var dStep = Math.max( ParseHours( sTimeInt ), 0 ) / 24.0;	if ( dStep < 1.0 / (24*60*60) )		dStep = dJdEnd;	if ( dJdEnd < 1.e-5 )		dStep = 1.0;	var sFmtStr0 = '%%s %%-10.10s%%s %%-%d.%ds%%s %%-9s%%s %%-%d.%ds\n';	var sFmtStr = sprintf(sFmtStr0, g_nTimeDigits+9, g_nTimeDigits+9, g_nTimeDigits+10, g_nTimeDigits+10 );		var sHdr = sprintf( sFmtStr, sObjTitle, 'Date (UT)', sSep, 'Time (UT)', sSep, 'Airmass', sSep, 'Hour Angle' );	var out = sHdr;	for ( var t = 0.0; t <= dJdEnd + g_dTimeFuzz; t+=dStep )	{		ParseJulianDay( t + dJdStart );		var sDate = FormatDateStr( _JD_nYr, _JD_nMo, _JD_nDay );		var sTime = FormatTimeStr( _JD_nHr, _JD_nMin, _JD_dSec );		var dAirmass = Airmass( sRa, sDec, sLong, sLat, sDate, sTime );		var sHa = TimeToStr( (_hour_angle / 15.0 + 12.0) % 24.0 - 12.0 );		var sX = '';		if ( dAirmass >= 0.5 )		{			if ( dAirmass >= 20.0 )				sX = sprintf( '%-8.8s', '@Horizon' );			else if ( dAirmass >= 1.0 )				sX = sprintf( '%-8.4f', dAirmass );			else				sX = sprintf( '%-8.4f', 1.0 );		}		else			sX = sprintf( '%-8.8s', '<Horizon' );		str = sprintf( sFmtStr, sObj, sDate, sSep, sTime, sSep, sX, sSep, sHa );		out += str;	}	form.result.value = out;}////////////////////////////////////////////////////////////////////function ClearInputsTable( form ){	form.RAH.value= '';	form.RAM.value= '';	form.RAS.value= '';	form.DECD.value= '';	form.DECM.value= '';	form.DECS.value= '';	form.OBJECT.value = '';	if ( form.SITE.value == 'undefined' )	{		form.LONGD.value='';		form.LONGM.value='';		form.LONGS.value='';		form.LATD.value='';		form.LATM.value='';		form.LATS.value='';	}	form.DATESY.value = '';	form.DATESM.value = '';	form.DATESD.value = '';	form.DATEEY.value = '';	form.DATEEM.value = '';	form.DATEED.value = '';		form.TIMESH.value = '';	form.TIMESM.value = '';	form.TIMESS.value = '';	form.TIMEEH.value = '';	form.TIMEEM.value = '';	form.TIMEES.value = '';	form.TIMEIH.value = '';	form.TIMEIM.value = '';	form.TIMEIS.value = '';}////////////////////////////////////////////////////////////////function GetDateTimeNowTable( form ){	var dt = new Date();	form.DATESY.value = dt.getUTCFullYear();	form.DATESM.value = dt.getUTCMonth() + 1;	form.DATESD.value = dt.getUTCDate();	form.DATEEY.value = dt.getUTCFullYear();	form.DATEEM.value = dt.getUTCMonth() + 1;	form.DATEED.value = dt.getUTCDate();		form.TIMESH.value = dt.getUTCHours();	form.TIMESM.value = dt.getUTCMinutes();	form.TIMESS.value = dt.getUTCSeconds();	form.TIMEEH.value = dt.getUTCHours();	form.TIMEEM.value = dt.getUTCMinutes();	form.TIMEES.value = dt.getUTCSeconds();}////////////////////////////////////////////////////////////////function GetDateTimeTonight( form ){	var dStep = 5 / 24.0;	// days before and after midnight		var dt = new Date();	var sDate = FormatDateStr( dt.getUTCFullYear(), dt.getUTCMonth() + 1, dt.getUTCDate() );	var sTime = FormatTimeStr( dt.getUTCHours(), dt.getUTCMinutes(), dt.getUTCSeconds() );	var dJd = Math.floor( JulianDay( sDate, sTime ) ) + 0.5;			var sLong = FormatDegreeStr( form.LONGD.value, form.LONGM.value, form.LONGS.value );	var dLongHrs = Math.floor( ParseDegrees( sLong ) / 15.0 );	var dUTDiff = ((dLongHrs + 24) % 24) / 24.0;	var dJdBefore = dJd + dUTDiff  - dStep;	ParseJulianDay( dJdBefore );	form.DATESY.value = _JD_nYr;	form.DATESM.value = _JD_nMo;	form.DATESD.value = _JD_nDay;	form.TIMESH.value = _JD_nHr;	form.TIMESM.value = 0;	form.TIMESS.value = 0;		var dJdAfter = dJd + dUTDiff + dStep;	ParseJulianDay( dJdAfter );	form.DATEEY.value = _JD_nYr;	form.DATEEM.value = _JD_nMo;	form.DATEED.value = _JD_nDay;	form.TIMEEH.value = _JD_nHr;	form.TIMEEM.value = 0;	form.TIMEES.value = 0;		form.TIMEIH.value = 1;	form.TIMEIM.value = 0;	form.TIMEIS.value = 0;}/////////////////////////////////////////////////////////////////////////function SaveCookie(){	var form = document.forms['airmass'];	if ( form == null )		return;		var dt = new Date();	expires = sprintf( '%d,%d,%d', dt.getUTCFullYear() + 10, dt.getUTCMonth(), dt.getUTCDate() );	var str = 	form.elements['RAH'].value + '^' +	form.elements['RAM'].value + '^' +	form.elements['RAS'].value + '^' +	form.elements['DECD'].value + '^' +	form.elements['DECM'].value + '^' +	form.elements['DECS'].value + '^' +		form.elements['OBJECT'].value + '^' +	form.elements['SITE'].value + '^' +		form.elements['LONGD'].value + '^' +	form.elements['LONGM'].value + '^' +	form.elements['LONGS'].value + '^' +	form.elements['LATD'].value + '^' +	form.elements['LATM'].value + '^' +	form.elements['LATS'].value + '^' +	form.elements['DATESY'].value + '^' +	form.elements['DATESM'].value + '^' +	form.elements['DATESD'].value + '^' +	form.elements['TIMESH'].value + '^' +	form.elements['TIMESM'].value + '^' +	form.elements['TIMESS'].value + '^' +	form.elements['DATEEY'].value + '^' +	form.elements['DATEEM'].value + '^' +	form.elements['DATEED'].value + '^' +	form.elements['TIMEEH'].value + '^' +	form.elements['TIMEEM'].value + '^' +	form.elements['TIMEES'].value + '^' +	form.elements['TIMEIH'].value + '^' +	form.elements['TIMEIM'].value + '^' +	form.elements['TIMEIS'].value + '^' +	form.elements['SEP'].value;	var sCookieName = window.location.pathname;	_delete_cookie( sCookieName );	_set_cookie( sCookieName, str, expires );}/////////////////////////////////////////////////////////////////////////function LoadCookie(){	var form = document.forms['airmass'];	if ( form == null )		return;	var sCookieName = window.location.pathname;			var sCookie = _get_cookie( sCookieName );	if ( sCookie )	{		var ca = sCookie.split('^');		if ( ca.length == 30 )		{			form.elements['RAH'].value = ca[0];			form.elements['RAM'].value = ca[1];			form.elements['RAS'].value = ca[2];			form.elements['DECD'].value = ca[3];			form.elements['DECM'].value = ca[4];			form.elements['DECS'].value = ca[5];						form.elements['OBJECT'].value = ca[6];			form.elements['SITE'].value = ca[7];						form.elements['LONGD'].value = ca[8];			form.elements['LONGM'].value = ca[9];			form.elements['LONGS'].value = ca[10];			form.elements['LATD'].value = ca[11];			form.elements['LATM'].value = ca[12];			form.elements['LATS'].value = ca[13];					form.elements['DATESY'].value = ca[14];			form.elements['DATESM'].value = ca[15];			form.elements['DATESD'].value = ca[16];			form.elements['TIMESH'].value = ca[17];			form.elements['TIMESM'].value = ca[18];			form.elements['TIMESS'].value = ca[19];					form.elements['DATEEY'].value = ca[20];			form.elements['DATEEM'].value = ca[21];			form.elements['DATEED'].value = ca[22];			form.elements['TIMEEH'].value = ca[23];			form.elements['TIMEEM'].value = ca[24];			form.elements['TIMEES'].value = ca[25];						form.elements['TIMEIH'].value = ca[26];			form.elements['TIMEIM'].value = ca[27];			form.elements['TIMEIS'].value = ca[28];				form.elements['SEP'].value = ca[29];						//window.status="Your default settings were loaded";			return;		}	}	form.elements['RAH'].value = '';	form.elements['RAM'].value = '';	form.elements['RAS'].value = '';	form.elements['DECD'].value = '';	form.elements['DECM'].value = '';	form.elements['DECS'].value = '';		form.elements['OBJECT'].value = '';	form.elements['SITE'].value = 'undef';		form.elements['LONGD'].value = '';	form.elements['LONGM'].value = '';	form.elements['LONGS'].value = '';	form.elements['LATD'].value = '';	form.elements['LATM'].value = '';	form.elements['LATS'].value = '';	form.elements['DATESY'].value = '';	form.elements['DATESM'].value = '';	form.elements['DATESD'].value = '';	form.elements['TIMESH'].value = '';	form.elements['TIMESM'].value = '';	form.elements['TIMESS'].value = '';	form.elements['DATEEY'].value = '';	form.elements['DATEEM'].value = '';	form.elements['DATEED'].value = '';	form.elements['TIMEEH'].value = '';	form.elements['TIMEEM'].value = '';	form.elements['TIMEES'].value = '';		form.elements['TIMEIH'].value = '';	form.elements['TIMEIM'].value = '';	form.elements['TIMEIS'].value = '';	form.elements['SEP'].value = '';}