<!-- hide
Date.$VERSION = 1.02;Date.LZ = function(x){return(x<0||x>9?"":"0")+x};Date.monthNames = new Array('January','February','March','April','May','June','July','August','September','October','November','December');
Date.monthAbbreviations = new Array('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec');Date.dayNames = new Array('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday');
Date.dayAbbreviations = new Array('Sun','Mon','Tue','Wed','Thu','Fri','Sat');Date.preferAmericanFormat = true;if(!Date.prototype.getFullYear){Date.prototype.getFullYear = function(){var yy=this.getYear();return(yy<1900?yy+1900:yy);}}
Date.parseString = function(val, format){if(typeof(format)=="undefined" || format==null || format==""){var generalFormats=new Array('y-M-d','MMM d, y','MMM d,y','y-MMM-d','d-MMM-y','MMM d','MMM-d','d-MMM');
var monthFirst=new Array('M/d/y','M-d-y','M.d.y','M/d','M-d');var dateFirst =new Array('d/M/y','d-M-y','d.M.y','d/M','d-M');
var checkList=new Array(generalFormats,Date.preferAmericanFormat?monthFirst:dateFirst,Date.preferAmericanFormat?dateFirst:monthFirst);for(var i=0;
i<checkList.length;i++){var l=checkList[i];for(var j=0;j<l.length;j++){var d=Date.parseString(val,l[j]);if(d!=null){return d;}}}return null;}
this.isInteger = function(val){for(var i=0;i < val.length;i++){if("1234567890".indexOf(val.charAt(i))==-1){return false;}}return true;};
this.getInt = function(str,i,minlength,maxlength){for(var x=maxlength;x>=minlength;x--){var token=str.substring(i,i+x);if(token.length < minlength){return null;}if(this.isInteger(token)){return token;}}return null;};val=val+"";format=format+"";
var i_val=0;var i_format=0;var c="";var token="";var token2="";var x,y;var year=new Date().getFullYear();var month=1;
var date=1;var hh=0;var mm=0;var ss=0;var ampm="";while(i_format < format.length){c=format.charAt(i_format);token="";while((format.charAt(i_format)==c) &&(i_format < format.length)){token += format.charAt(i_format++);}if(token=="yyyy" || token=="yy" || token=="y"){if(token=="yyyy"){x=4;y=4;
}if(token=="yy"){x=2;y=2;}if(token=="y"){x=2;y=4;}year=this.getInt(val,i_val,x,y);if(year==null){return null;}i_val += year.length;if(year.length==2){if(year > 70){year=1900+(year-0);
}else{year=2000+(year-0);}}}else if(token=="MMM" || token=="NNN"){month=0;var names =(token=="MMM"?(Date.monthNames.concat(Date.monthAbbreviations)):Date.monthAbbreviations);for(var i=0;i<names.length;i++){var month_name=names[i];
if(val.substring(i_val,i_val+month_name.length).toLowerCase()==month_name.toLowerCase()){month=(i%12)+1;i_val += month_name.length;break;}}if((month < 1)||(month>12)){return null;
}}else if(token=="EE"||token=="E"){var names =(token=="EE"?Date.dayNames:Date.dayAbbreviations);for(var i=0;
i<names.length;i++){var day_name=names[i];if(val.substring(i_val,i_val+day_name.length).toLowerCase()==day_name.toLowerCase()){i_val += day_name.length;break;}}}else if(token=="MM"||token=="M"){month=this.getInt(val,i_val,token.length,2);
if(month==null||(month<1)||(month>12)){return null;}i_val+=month.length;}else if(token=="dd"||token=="d"){date=this.getInt(val,i_val,token.length,2);if(date==null||(date<1)||(date>31)){return null;}i_val+=date.length;}else if(token=="hh"||token=="h"){hh=this.getInt(val,i_val,token.length,2);if(hh==null||(hh<1)||(hh>12)){return null;}i_val+=hh.length;}else if(token=="HH"||token=="H"){hh=this.getInt(val,i_val,token.length,2);if(hh==null||(hh<0)||(hh>23)){return null;}i_val+=hh.length;}else if(token=="KK"||token=="K"){hh=this.getInt(val,i_val,token.length,2);if(hh==null||(hh<0)||(hh>11)){return null;}i_val+=hh.length;hh++;}else if(token=="kk"||token=="k"){hh=this.getInt(val,i_val,token.length,2);if(hh==null||(hh<1)||(hh>24)){return null;}i_val+=hh.length;hh--;}else if(token=="mm"||token=="m"){mm=this.getInt(val,i_val,token.length,2);if(mm==null||(mm<0)||(mm>59)){return null;}i_val+=mm.length;}else if(token=="ss"||token=="s"){ss=this.getInt(val,i_val,token.length,2);if(ss==null||(ss<0)||(ss>59)){return null;}i_val+=ss.length;}else if(token=="a"){if(val.substring(i_val,i_val+2).toLowerCase()=="am"){ampm="AM";}else if(val.substring(i_val,i_val+2).toLowerCase()=="pm"){ampm="PM";}else{return null;}i_val+=2;}else{if(val.substring(i_val,i_val+token.length)!=token){return null;}else{i_val+=token.length;}}}if(i_val != val.length){return null;}if(month==2){if( ((year%4==0)&&(year%100 != 0) ) ||(year%400==0) ){if(date > 29){return null;}}else{if(date > 28){return null;}}}if((month==4)||(month==6)||(month==9)||(month==11)){if(date > 30){return null;}}if(hh<12 && ampm=="PM"){hh=hh-0+12;}else if(hh>11 && ampm=="AM"){hh-=12;}return new Date(year,month-1,date,hh,mm,ss);}

var PI = Math.PI;
var DR = PI/180;
var K1 = 15*DR*1.0027379

var Sunrise = false;
var Sunset  = false;

var Rise_time = [0, 0];
var Set_time  = [0, 0];
var Rise_az = 0.0;
var Set_az  = 0.0;

var Sky = [0.0, 0.0];
var RAn = [0.0, 0.0, 0.0];
var Dec = [0.0, 0.0, 0.0];
var VHz = [0.0, 0.0, 0.0];

var Now;
var Cookie_name = "script_sun_moon_rise_set";

// initialize date
function setDay(){ // Setter dagen i dag ved onLoad()
	//load_latlon();
	Idag = new Date();
    ukedag = Idag.getDate();
	maaned = (Idag.getMonth() + 1);
    aar = Idag.getFullYear();
	document.getElementById('ukedag').value = ukedag;
	document.getElementById('maaned').value = maaned;
	document.getElementById('aar').value = aar;
	Now = new Date();
	compute();
}


function setData(){
plassData = document.getElementById('select_city').options[document.getElementById('select_city').selectedIndex].value;
newtown = document.getElementById('select_city').options[document.getElementById('select_city').selectedIndex].text;
if ((plassData != 0)&(plassData != 1)&(plassData != 2)&(plassData != 3)&(plassData != 4)&(plassData != 5)&(plassData != 6)&(plassData != 7)){
plassData_array = plassData.split(".");
document.getElementById('lat_degrees').value = plassData_array[0];
document.getElementById('lat_minutes').value = plassData_array[1];
document.getElementById('lon_degrees').value = plassData_array[2];
document.getElementById('lon_minutes').value = plassData_array[3];
if (plassData_array[4] == "n") {document.getElementById('north').checked = true;}else{document.getElementById('north').checked = false;};
if (plassData_array[4] == "s") {document.getElementById('south').checked = true;}else{document.getElementById('south').checked = false;};
if (plassData_array[5] == "w") {document.getElementById('west').checked = true;}else{document.getElementById('west').checked = false;};
if (plassData_array[5] == "o") {document.getElementById('east').checked = true;}else{document.getElementById('east').checked = false;};
document.getElementById('localtime').value = plassData_array[8];
document.getElementById('town').value = newtown;
inpuDate();
  }
}

function inpuDate(custom)
{

	inputDag = document.getElementById('ukedag').options[document.getElementById('ukedag').selectedIndex].value;
	inputMnd = document.getElementById('maaned').options[document.getElementById('maaned').selectedIndex].value;
	inputAar = document.getElementById('aar').options[document.getElementById('aar').selectedIndex].value;
	if (inputMnd == 2 & inputDag > 28) { inputDag = 28}
	if (inputMnd == 4 & inputDag > 30) { inputDag = 30}
	if (inputMnd == 6 & inputDag > 30) { inputDag = 30}
	if (inputMnd == 9 & inputDag > 30) { inputDag = 30}
	if (inputMnd == 11 & inputDag > 30) { inputDag = 30}
	Now = Date.parseString(inputMnd+'/'+inputDag+'/'+inputAar)
	showdate(Now);
	compute();
	if (custom == "1") {
		document.getElementById('town').value = "";
		//document.getElementById('select_city').value = 0;
		}
	document.getElementById('select_city').blur();
}



//function initdate()
//{
//    Now = new Date();
//    showdate(Now);
//    load_latlon();
//}

function viskart() {
	thelon = document.getElementById('thelon').value;
	thelat = document.getElementById('thelat').value;
	window.open('http://www.mapquest.com/maps/map.adp?latlongtype=decimal&latitude='+thelat+'&longitude='+thelon);
                   
}


// display the date
function showdate(d)
{
    var winter = new Date(2001, 11, 30);       // for northern hemisphere
    var summer = new Date(2001,  5, 30);

    var summer_tz = summer.getTimezoneOffset();
    var winter_tz = winter.getTimezoneOffset();
    var local_dst = (summer_tz == winter_tz) ? false : true;

    if (summer_tz > winter_tz)                 // in southern hemisphere
    {
        var tz = summer_tz;                    // swap
        summer_tz = winter_tz;
        winter_tz = tz;
    }

    var thisday =  d.getDate()+ "/";
    thisday    +=  (d.getMonth() + 1)+ "-";
    thisday    += d.getFullYear();

    //if ((local_dst == true)&&(summer_tz == d.getTimezoneOffset()))
        //thisday += " [DST]";

    document.getElementById('thisday').value = thisday;

    maaned = (d.getMonth() + 1);
    ukedag    = d.getDate();
    aar    = d.getFullYear();
	document.getElementById('ukedag').value = ukedag;
	document.getElementById('maaned').value = maaned;
	document.getElementById('aar').value = aar;
}


function load_latlon()
{
    var latlon = getCookie(Cookie_name);
    if (!latlon) return;                       // no cookie
       
    s = latlon.substr( 0, 8);
    lat_deg = parseInt(s);

    s = latlon.substr( 8, 8);
    lat_min = parseInt(s);

    s = latlon.substr(16, 8);
    lon_deg = parseInt(s);

    s = latlon.substr(24, 8);
    lon_min = parseInt(s);

    if (lat_deg < 0)                           // south
    {
		document.getElementById('south').checked = true;
		document.getElementById('north').checked = false;
        lat_deg = -lat_deg;
    }
    else
    {
        document.getElementById('south').checked = false;
        document.getElementById('north').checked = true;
    }
 
    if (lon_deg < 0)                           // west
    {
        document.getElementById('west').checked = true;
        document.getElementById('east').checked = false;
        lon_deg = -lon_deg;
    }
    else
    {
        document.getElementById('west').checked = false;
        document.getElementById('east').checked = true;
    }
 
	document.getElementById('lat_degrees').value = lat_deg;
    document.getElementById('lat_minutes').value = lat_min;
    document.getElementById('lon_degrees').value = lon_deg;
    document.getElementById('lon_minutes').value = lon_min;
}

// save to cookie after checking for valid data
function save_latlon()
{
    var lat_deg = parseInt(document.getElementById('lat_degrees').value, 10);
    var lat_min = parseInt(document.getElementById('lat_minutes').value, 10);
    var lon_deg = parseInt(document.getElementById('lon_degrees').value, 10);
    var lon_min = parseInt(document.getElementById('lon_minutes').value, 10);

    if (isNaN(lat_deg)||(lat_deg < 0)||(lat_deg >=  90)||
        isNaN(lat_min)||(lat_min < 0)||(lat_min >=  60)||
        isNaN(lon_deg)||(lon_deg < 0)||(lon_deg >= 180)||
        isNaN(lon_min)||(lon_min < 0)||(lon_min >=  60))
    {
        return;
    }

    if (document.getElementById('south').checked == true) lat_deg = -lat_deg;
    if (document.getElementById('west').checked  == true) lon_deg = -lon_deg;  
    var latlon = cintstr(lat_deg, 8) + cintstr(lat_min, 8) 
               + cintstr(lon_deg, 8) + cintstr(lon_min, 8);

    setCookie(Cookie_name, latlon, 365);
}

// compute ...
function compute()
{
    var lat_degrees = parseInt(document.getElementById('lat_degrees').value, 10);
    var lat_minutes = parseInt(document.getElementById('lat_minutes').value, 10);
    var lon_degrees = parseInt(document.getElementById('lon_degrees').value, 10);
    var lon_minutes = parseInt(document.getElementById('lon_minutes').value, 10);

    if (isNaN(lat_degrees)||(lat_degrees < 0)||(lat_degrees >=  90)||
        isNaN(lat_minutes)||(lat_minutes < 0)||(lat_minutes >=  60)||
        isNaN(lon_degrees)||(lon_degrees < 0)||(lon_degrees >= 180)||
        isNaN(lon_minutes)||(lon_minutes < 0)||(lon_minutes >=  60))
    {
        window.alert("Ugyldig verdi!");
        return;
    }

    var lat = lat_degrees + lat_minutes/60.0;
    var lon = lon_degrees + lon_minutes/60.0;

    if (document.getElementById('south').checked == true) lat = -lat;
    if (document.getElementById('west').checked  == true) lon = -lon;
	document.getElementById('thelat').value = lat;
	document.getElementById('thelon').value = lon;
    showdate(Now);

    document.getElementById('sun').value  = "";
    document.getElementById('moon').value  = "";
    riseset(lat, lon);
	riseset_moon(lat, lon);
    save_latlon();
}

// do next day
function advance()
{
    //var date = Now.getDate();
    //Now.setDate(date + 1);
	//compute();
	inputDag = Math.round(document.getElementById('ukedag').options[document.getElementById('ukedag').selectedIndex].value) + 1;
	inputMnd = Math.round(document.getElementById('maaned').options[document.getElementById('maaned').selectedIndex].value);
	inputAar = Math.round(document.getElementById('aar').options[document.getElementById('aar').selectedIndex].value);
	if (inputMnd == 2 & inputDag > 28) { 
		inputDag = 1;
		inputMnd = inputMnd + 1;
		}else{
			if (inputMnd == 4 & inputDag > 30) { 
			inputDag = 1;
			inputMnd = inputMnd + 1;
			}else{
				if (inputMnd == 6 & inputDag > 30) {
					inputDag = 1;
					inputMnd = inputMnd + 1;
					}else{
						if (inputMnd == 9 & inputDag > 30) { 
							inputDag = 1;
							inputMnd = inputMnd + 1;
							}else{
								if (inputMnd == 11 & inputDag > 30) { 
								inputDag = 1;
								inputMnd = inputMnd + 1;
								}else{
									if (inputDag > 31){
										inputDag = 1;
										inputMnd = inputMnd + 1;
	}}}}}}
	if (inputMnd > 12){	
	inputMnd = 1;
	inputAar = inputAar + 1;
	}
	Now = Date.parseString(inputMnd+'/'+inputDag+'/'+inputAar)
	showdate(Now);
	compute();
}

// do previous day
function backup()
{
	inputDag = Math.round(document.getElementById('ukedag').options[document.getElementById('ukedag').selectedIndex].value) - 1;
	inputMnd = Math.round(document.getElementById('maaned').options[document.getElementById('maaned').selectedIndex].value);
	inputAar = Math.round(document.getElementById('aar').options[document.getElementById('aar').selectedIndex].value);
	if (inputMnd == 3 & inputDag < 1) { 
		inputDag = 28;
		inputMnd = inputMnd - 1;
		}else{
			if (inputMnd == 5 & inputDag < 1) { 
			inputDag = 30;
			inputMnd = inputMnd - 1;
			}else{
				if (inputMnd == 7 & inputDag < 1) {
					inputDag = 30;
					inputMnd = inputMnd - 1;
					}else{
						if (inputMnd == 10 & inputDag < 1) { 
							inputDag = 30;
							inputMnd = inputMnd - 1;
							}else{
								if (inputMnd == 12 & inputDag < 1) { 
								inputDag = 30;
								inputMnd = inputMnd - 1;
								}else{
									if (inputDag < 1){
										inputDag = 31;
										inputMnd = inputMnd - 1;
	}}}}}}
	if (inputMnd < 1){	
	inputMnd = 12;
	inputAar = inputAar - 1;
	}
	Now = Date.parseString(inputMnd+'/'+inputDag+'/'+inputAar)
	showdate(Now);
	compute();
}


function change_tlocal()
{
    if (document.getElementById('tyour').checked == true) 
        document.getElementById('tyour').checked = false;
		document.getElementById('tlocal').checked = true;
		inpuDate()
}


function change_tyour()
{
    if (document.getElementById('tlocal').checked == true) 
        document.getElementById('tlocal').checked = false;
		document.getElementById('tyour').checked = true;
		inpuDate()
}

// change N/S flags
function north_lat()
{
    if (document.getElementById('south').checked == true) 
        document.getElementById('south').checked = false;
		document.getElementById('north').checked = true;
}

// change N/S flags
function south_lat()
{
    if (document.getElementById('north').checked == true) 
        document.getElementById('north').checked = false;
		document.getElementById('south').checked = true;
}

// change E/W flags
function east_lon()
{
    if (document.getElementById('west').checked == true)
        document.getElementById('west').checked = false;
		document.getElementById('east').checked = true;
}

// change E/W flags
function west_lon()
{
    if (document.getElementById('east').checked == true) 
        document.getElementById('east').checked = false;
		document.getElementById('west').checked = true;
}

// calculate sunrise and sunset times
function riseset( lat, lon )
{
    var k;
	var zone = document.getElementById('localtime').value;
	if (document.getElementById('tlocal').checked == true){
		var zone = document.getElementById('localtime').value;
	}
	if (document.getElementById('tyour').checked == true){
		var zone = document.getElementById('yourtime').value;
	}
    
	var jd = julian_day() - 2451545;           // Julian day relative to Jan 1.5, 2000
    
    //if ((sgn(zone) == sgn(lon))&&(zone != 0))
        //window.alert("ADVARSEL: Tidssone og breddegrad er uforenlig!");
    
    lon = lon/360;
    var tz  = zone/24;
    var ct  = jd/36525 + 1;                    // centuries since 1900.0
    var t0 = lst(lon, jd, tz);                 // local sidereal time

    jd = jd + tz;                              // get sun position at start of day
    sun(jd, ct);
    var ra0  = Sky[0];
    var dec0 = Sky[1];

    jd = jd + 1;                               // get sun position at end of day
    sun(jd, ct);
    var ra1  = Sky[0];
    var dec1 = Sky[1];

    if (ra1 < ra0)                             // make continuous 
        ra1 = ra1 + 2*PI;

    Sunrise = false;                           // initialize
    Sunset  = false;
    RAn[0]   = ra0;
    Dec[0]  = dec0;
    
    for (k = 0; k < 24; k++)                   // check each hour of this day
    {
        ph = (k + 1)/24;
        
        RAn[2] = ra0  + (k + 1)*(ra1  - ra0)/24;
        Dec[2] = dec0 + (k + 1)*(dec1 - dec0)/24;
        VHz[2] = test_sun(k, zone, t0, lat);
        
        RAn[0] = RAn[2];                       // advance to next hour
        Dec[0] = Dec[2];
        VHz[0] = VHz[2];
    }

    // display results
	//SOL:
	solopp = zintstr(Rise_time[0], 2) + zintstr(Rise_time[1], 2)
	soloppTxt = zintstr(Rise_time[0], 2) + ":" + zintstr(Rise_time[1], 2)
	solned = zintstr( Set_time[0], 2) + zintstr( Set_time[1], 2)
	solnedTxt = zintstr( Set_time[0], 2) + ":" + zintstr( Set_time[1], 2)

	solinputTxt = "";
	if (solopp>solned) {
		solinputTxt = "Oppe siden i går       Ned: " + solnedTxt;
		}else{
		solinputTxt = "Opp: " + soloppTxt + "       Ned: " + solnedTxt;
	}
	
	
	
	if ((!Sunrise)&&(!Sunset))                 // neither sunrise nor sunset
    {
        if (VHz[2] < 0)
            solinputTxt  = "Sol nede hele dagen";
        else
            solinputTxt = "Sol oppe hele dagen";
    }
    else                                       // sunrise or sunset
    {
        if (!Sunrise & Sunset){
            solinputTxt = "Oppe siden i går      ";
			if (Sunset){ solinputTxt = solinputTxt + "Ned: " + solnedTxt}
		alert("2");
		}
        else if (!Sunset)
            solinputTxt  = "Opp: " + soloppTxt + "       Ingen nedgang";
    }




document.getElementById('sun').value = solinputTxt;



//special_message();
}

// calculate moonrise and moonset times
function riseset_moon( lat, lon )
{
    var i, j, k;

	var zone = document.getElementById('localtime').value;
	if (document.getElementById('tlocal').checked == true){
		var zone = document.getElementById('localtime').value;
	}
	if (document.getElementById('tyour').checked == true){
		var zone = document.getElementById('yourtime').value;
	}
	
    var jd = julian_day() - 2451545;           // Julian day relative to Jan 1.5, 2000
    
    //if ((sgn(zone) == sgn(lon))&&(zone != 0))
        //window.alert("ADVARSEL: Tidssone og breddegrad er uforenlig!");

    var mp = new Array(3);                     // create a 3x3 array
    for (i = 0; i < 3; i++)
    {
        mp[i] = new Array(3);
        for (j = 0; j < 3; j++)
            mp[i][j] = 0.0;
    }

    lon = lon/360;
    var tz = zone/24;
    var t0 = lst(lon, jd, tz);                 // local sidereal time

    jd = jd + tz;                              // get moon position at start of day

    for (k = 0; k < 3; k++)
    {
        moon(jd);
        mp[k][0] = Sky[0];
        mp[k][1] = Sky[1];
        mp[k][2] = Sky[2];
        jd = jd + 0.5;    
    }   

    if (mp[1][0] <= mp[0][0])
        mp[1][0] = mp[1][0] + 2*PI;

    if (mp[2][0] <= mp[1][0])
        mp[2][0] = mp[2][0] + 2*PI;

    RAn[0] = mp[0][0];
    Dec[0] = mp[0][1];

    Moonrise = false;                          // initialize
    Moonset  = false;
    
    for (k = 0; k < 24; k++)                   // check each hour of this day
    {
        ph = (k + 1)/24;
        
        RAn[2] = interpolate(mp[0][0], mp[1][0], mp[2][0], ph);
        Dec[2] = interpolate(mp[0][1], mp[1][1], mp[2][1], ph);
        
        VHz[2] = test_moon(k, zone, t0, lat, mp[1][2]);

        RAn[0] = RAn[2];                       // advance to next hour
        Dec[0] = Dec[2];
        VHz[0] = VHz[2];
    }

// display results
//MÅNE:
    //document.getElementById('moonrise').value = zintstr(Rise_time[0], 2) + ":" + zintstr(Rise_time[1], 2) 
                       //+ ", az = " + frealstr(Rise_az, 5, 1) + "°";
	
	//document.getElementById('moon').value = zintstr( Set_time[0], 2) + ":" + zintstr( Set_time[1], 2)
                       //+ ", az = " + frealstr(Set_az, 5, 1) + "°";
	
	opp = zintstr(Rise_time[0], 2) + zintstr(Rise_time[1], 2)
	oppTxt = zintstr(Rise_time[0], 2) + ":" + zintstr(Rise_time[1], 2)
	ned = zintstr(Set_time[0], 2) + zintstr( Set_time[1], 2)
	nedTxt = zintstr( Set_time[0], 2) + ":" + zintstr( Set_time[1], 2)
	
	inputTxt = "";
	if (opp>ned) {
		inputTxt = "Ned: " + nedTxt + "       Opp: " + oppTxt;
		}else{
		inputTxt = "Opp: " + oppTxt + "       Ned: " + nedTxt;
	}

	
	

	if ((!Moonrise)&&(!Moonset))               // neither moonrise nor moonset
    {
        if (VHz[2] < 0)
            inputTxt = "Måne nede hele dagen";
        else
            inputTxt = "Måne oppe hele dagen";
    }
    else                                       // moonrise or moonset
    {
        if (!Moonrise & Moonset){
            inputTxt = "Oppe siden i går      ";
			if (Moonset){ inputTxt = inputTxt + "Ned: " + nedTxt}
		}
        else if (!Moonset)
            inputTxt  = "Opp: " + oppTxt + "       Ingen nedgang";
    }
	document.getElementById('moon').value = inputTxt;
	
	
	
	
//special_message_moon();
}

// 3-point interpolation
function interpolate( f0, f1, f2, p )
{
    var a = f1 - f0;
    var b = f2 - f1 - a;
    var f = f0 + p*(2*a + b*(2*p - 1));

    return f;
}

// Local Sidereal Time for zone
function lst( lon, jd, z )
{
    var s = 24110.5 + 8640184.812999999*jd/36525 + 86636.6*z + 86400*lon;
    s = s/86400;
    s = s - Math.floor(s);
    return s*360*DR;
}

// test an hour for an event
function test_sun( k, zone, t0, lat )
{
    var ha = new Array(3);
    var a, b, c, d, e, s, z;
    var hr, min, time;
    var az, dz, hz, nz;
    
    ha[0] = t0 - RAn[0] + k*K1; 
    ha[2] = t0 - RAn[2] + k*K1 + K1; 

    ha[1]  = (ha[2]  + ha[0])/2;               // hour angle at half hour
    Dec[1] = (Dec[2] + Dec[0])/2 ;             // declination at half hour
    
    s = Math.sin(lat*DR);
    c = Math.cos(lat*DR);
    z = Math.cos(90.833*DR);                   // refraction + sun semidiameter at horizon

    if (k <= 0)
        VHz[0] = s*Math.sin(Dec[0]) + c*Math.cos(Dec[0])*Math.cos(ha[0]) - z;

    VHz[2] = s*Math.sin(Dec[2]) + c*Math.cos(Dec[2])*Math.cos(ha[2]) - z;
    
    if (sgn(VHz[0]) == sgn(VHz[2])) 
        return VHz[2];                         // no event this hour
    
    VHz[1] = s*Math.sin(Dec[1]) + c*Math.cos(Dec[1])*Math.cos(ha[1]) - z;
    
    a =  2* VHz[0] - 4*VHz[1] + 2*VHz[2]; 
    b = -3* VHz[0] + 4*VHz[1] - VHz[2];   
    d = b*b - 4*a*VHz[0];

    if (d < 0) 
        return VHz[2];                         // no event this hour
    
    d = Math.sqrt(d);    
    e = (-b + d)/(2 * a);
    
    if ((e > 1)||(e < 0))
        e = (-b - d)/(2*a);

    time = k + e + 1/120;                      // time of an event
    
    hr = Math.floor(time);
    min = Math.floor((time - hr)*60);

    hz = ha[0] + e*(ha[2] - ha[0]);            // azimuth of the sun at the event
    nz = -Math.cos(Dec[1])*Math.sin(hz);
    dz = c*Math.sin(Dec[1]) - s*Math.cos(Dec[1])*Math.cos(hz);
    az = Math.atan2(nz, dz)/DR;
    if (az < 0) az = az + 360;
    
    if ((VHz[0] < 0)&&(VHz[2] > 0))
    {
        Rise_time[0] = hr;
        Rise_time[1] = min;
        Rise_az = az;
        Sunrise = true;
    }
    
    if ((VHz[0] > 0)&&(VHz[2] < 0))
    {
        Set_time[0] = hr;
        Set_time[1] = min;
        Set_az = az;
        Sunset = true;
    }

    return VHz[2];
}


// test an hour for an event
function test_moon( k, zone, t0, lat, plx )
{
    var ha = [0.0, 0.0, 0.0];
    var a, b, c, d, e, s, z;
    var hr, min, time;
    var az, hz, nz, dz;

    if (RAn[2] < RAn[0])
        RAn[2] = RAn[2] + 2*PI;
    
    ha[0] = t0 - RAn[0] + k*K1;
    ha[2] = t0 - RAn[2] + k*K1 + K1;
    
    ha[1]  = (ha[2] + ha[0])/2;                // hour angle at half hour
    Dec[1] = (Dec[2] + Dec[0])/2;              // declination at half hour

    s = Math.sin(DR*lat);
    c = Math.cos(DR*lat);

    // refraction + sun semidiameter at horizon + parallax correction
    z = Math.cos(DR*(90.567 - 41.685/plx));

    if (k <= 0)                                // first call of function
        VHz[0] = s*Math.sin(Dec[0]) + c*Math.cos(Dec[0])*Math.cos(ha[0]) - z;

    VHz[2] = s*Math.sin(Dec[2]) + c*Math.cos(Dec[2])*Math.cos(ha[2]) - z;
    
    if (sgn(VHz[0]) == sgn(VHz[2]))
        return VHz[2];                         // no event this hour
    
    VHz[1] = s*Math.sin(Dec[1]) + c*Math.cos(Dec[1])*Math.cos(ha[1]) - z;

    a = 2*VHz[2] - 4*VHz[1] + 2*VHz[0];
    b = 4*VHz[1] - 3*VHz[0] - VHz[2];
    d = b*b - 4*a*VHz[0];

    if (d < 0)
        return VHz[2];                         // no event this hour
    
    d = Math.sqrt(d);
    e = (-b + d)/(2*a);

    if (( e > 1 )||( e < 0 ))
        e = (-b - d)/(2*a);

    time = k + e + 1/120;                      // time of an event + round up
    hr   = Math.floor(time);
    min  = Math.floor((time - hr)*60);

    hz = ha[0] + e*(ha[2] - ha[0]);            // azimuth of the moon at the event
    nz = -Math.cos(Dec[1])*Math.sin(hz);
    dz = c*Math.sin(Dec[1]) - s*Math.cos(Dec[1])*Math.cos(hz);
    az = Math.atan2(nz, dz)/DR;
    if (az < 0) az = az + 360;
    
    if ((VHz[0] < 0)&&(VHz[2] > 0))
    {
        Rise_time[0] = hr;
        Rise_time[1] = min;
        Rise_az = az;
        Moonrise = true;
    }
    
    if ((VHz[0] > 0)&&(VHz[2] < 0))
    {
        Set_time[0] = hr;
        Set_time[1] = min;
        Set_az = az;
        Moonset = true;
    }

    return VHz[2];
}


// check for no sunrise and/or no sunset
function special_message()
{

}

// sun's position using fundamental arguments 
// (Van Flandern & Pulkkinen, 1979)
function sun( jd, ct )
{
    var g, lo, s, u, v, w;
    
    lo = 0.779072 + 0.00273790931*jd;
    lo = lo - Math.floor(lo);
    lo = lo*2*PI;

    g = 0.993126 + 0.0027377785*jd;
    g = g - Math.floor(g);
    g = g*2*PI;
    
    v = 0.39785*Math.sin(lo);
    v = v - 0.01*Math.sin(lo - g);
    v = v + 0.00333*Math.sin(lo + g);
    v = v - 0.00021*ct * Math.sin(lo);
    
    u = 1 - 0.03349*Math.cos(g);
    u = u - 0.00014*Math.cos(2*lo);
    u = u + 0.00008*Math.cos(lo);
    
    w = -0.0001 - 0.04129*Math.sin(2*lo);
    w = w + 0.03211*Math.sin(g );
    w = w + 0.00104*Math.sin(2*lo - g);
    w = w - 0.00035*Math.sin(2*lo + g);
    w = w - 0.00008*ct*Math.sin(g);
    
    s = w/Math.sqrt(u - v*v);                  // compute sun's right ascension  
    Sky[0] = lo + Math.atan(s/Math.sqrt(1 - s*s));

    s = v/Math.sqrt(u);                        // ...and declination 
    Sky[1] = Math.atan(s/Math.sqrt(1 - s*s));
}

// check for no moonrise and/or no moonset
function special_message_moon(){

}

// moon's position using fundamental arguments 
// (Van Flandern & Pulkkinen, 1979)
function moon( jd )
{
    var d, f, g, h, m, n, s, u, v, w;

    h = 0.606434 + 0.03660110129*jd;
    m = 0.374897 + 0.03629164709*jd;
    f = 0.259091 + 0.0367481952 *jd;
    d = 0.827362 + 0.03386319198*jd;
    n = 0.347343 - 0.00014709391*jd;
    g = 0.993126 + 0.0027377785 *jd;

    h = h - Math.floor(h);
    m = m - Math.floor(m);
    f = f - Math.floor(f);
    d = d - Math.floor(d);
    n = n - Math.floor(n);
    g = g - Math.floor(g);

    h = h*2*PI;
    m = m*2*PI;
    f = f*2*PI;
    d = d*2*PI;
    n = n*2*PI;
    g = g*2*PI;

    v = 0.39558*Math.sin(f + n);
    v = v + 0.082  *Math.sin(f);
    v = v + 0.03257*Math.sin(m - f - n);
    v = v + 0.01092*Math.sin(m + f + n);
    v = v + 0.00666*Math.sin(m - f);
    v = v - 0.00644*Math.sin(m + f - 2*d + n);
    v = v - 0.00331*Math.sin(f - 2*d + n);
    v = v - 0.00304*Math.sin(f - 2*d);
    v = v - 0.0024 *Math.sin(m - f - 2*d - n);
    v = v + 0.00226*Math.sin(m + f);
    v = v - 0.00108*Math.sin(m + f - 2*d);
    v = v - 0.00079*Math.sin(f - n);
    v = v + 0.00078*Math.sin(f + 2*d + n);
    
    u = 1 - 0.10828*Math.cos(m);
    u = u - 0.0188 *Math.cos(m - 2*d);
    u = u - 0.01479*Math.cos(2*d);
    u = u + 0.00181*Math.cos(2*m - 2*d);
    u = u - 0.00147*Math.cos(2*m);
    u = u - 0.00105*Math.cos(2*d - g);
    u = u - 0.00075*Math.cos(m - 2*d + g);
    
    w = 0.10478*Math.sin(m);
    w = w - 0.04105*Math.sin(2*f + 2*n);
    w = w - 0.0213 *Math.sin(m - 2*d);
    w = w - 0.01779*Math.sin(2*f + n);
    w = w + 0.01774*Math.sin(n);
    w = w + 0.00987*Math.sin(2*d);
    w = w - 0.00338*Math.sin(m - 2*f - 2*n);
    w = w - 0.00309*Math.sin(g);
    w = w - 0.0019 *Math.sin(2*f);
    w = w - 0.00144*Math.sin(m + n);
    w = w - 0.00144*Math.sin(m - 2*f - n);
    w = w - 0.00113*Math.sin(m + 2*f + 2*n);
    w = w - 0.00094*Math.sin(m - 2*d + g);
    w = w - 0.00092*Math.sin(2*m - 2*d);

    s = w/Math.sqrt(u - v*v);                  // compute moon's right ascension ...  
    Sky[0] = h + Math.atan(s/Math.sqrt(1 - s*s));

    s = v/Math.sqrt(u);                        // declination ...
    Sky[1] = Math.atan(s/Math.sqrt(1 - s*s));

    Sky[2] = 60.40974*Math.sqrt( u );          // and parallax
}


// determine Julian day from calendar date
// (Jean Meeus, "Astronomical Algorithms", Willmann-Bell, 1991)
function julian_day()
{
    var a, b, jd;
    var gregorian;

    var month = Now.getMonth() + 1;
    var day   = Now.getDate();
    var year  = Now.getFullYear();

    gregorian = (year < 1583) ? false : true;
    
    if ((month == 1)||(month == 2))
    {
        year  = year  - 1;
        month = month + 12;
    }

    a = Math.floor(year/100);
    if (gregorian) b = 2 - a + Math.floor(a/4);
    else           b = 0.0;

    jd = Math.floor(365.25*(year + 4716)) 
       + Math.floor(30.6001*(month + 1)) 
       + day + b - 1524.5;
    
    return jd;
}

// returns value for sign of argument
function sgn( x )
{
    var rv;
    if (x > 0.0)      rv =  1;
    else if (x < 0.0) rv = -1;
    else              rv =  0;
    return rv;
}

// format a positive integer with leading zeroes
function zintstr( num, width )
{
    var str = num.toString(10);
    var len = str.length;
    var intgr = "";
    var i;

    for (i = 0; i < width - len; i++)          // append leading zeroes
        intgr += '0';

    for (i = 0; i < len; i++)                  // append digits
        intgr += str.charAt(i);

    return intgr;
}

// format an integer
function cintstr( num, width )
{
    var str = num.toString(10);
    var len = str.length;
    var intgr = "";
    var i;

    for (i = 0; i < width - len; i++)          // append leading spaces
        intgr += ' ';

    for (i = 0; i < len; i++)                  // append digits
        intgr += str.charAt(i);

    return intgr;
}

// format a real number
function frealstr( num, width, fract )
{
    var str = num.toFixed(fract);
    var len = str.length;
    var real = "";
    var i;

    for (i = 0; i < width - len; i++)          // append leading spaces
        real += ' ';

    for (i = 0; i < len; i++)                  // append digits
        real += str.charAt(i);

    return real;
}

// read data from cookie
function getCookie( name )
{
    if (document.cookie.length > 0) 
    { 
        begin = document.cookie.indexOf(name+"="); 
        if (begin != -1) // Note: != means "is not equal to"
        { 
            begin += name.length + 1; 
            end = document.cookie.indexOf(";", begin);
            if (end == -1) end = document.cookie.length;

            return unescape(document.cookie.substring(begin, end)); 
        } 
    }
    return null; 
}

// write data to cookie
function setCookie( name, value, expiredays ) 
{
    var ExpireDate = new Date();
    ExpireDate.setTime(ExpireDate.getTime() + (expiredays*24*3600*1000));

    document.cookie = name 
                    + "=" + escape(value) 
                    + ((expiredays == null) ? "" : "; expires=" + ExpireDate.toGMTString());
}
// unhide -->