//////////////////////////////////////////////////////////////////////// // XHR var xml=[]; var _proxyn=0; function XHR(url,c){ var d="_proxy"+_proxyn++; var h=document.getElementsByTagName("head").item(0); this.s=document.getElementById("scr"+d); if(this.s)h.removeChild(this.s); this.s=document.createElement("script"); this.s.setAttribute("src",url+((url.indexOf("?")>0)?"&":"?")+"proxyid="+d); this.s.setAttribute("id","scr"+d); eval(c); h.appendChild(this.s); this.completed=function(){return xml[d]!=undefined;}; this.content=function(){return xml[d];} function poll(){if(xml[d]!=undefined){window.clearTimeout(t);window.clearInterval(v);c(xml[d]);}} var v=window.setInterval(poll,100); function stop(){window.clearInterval(v);c(xml[_proxyn]);} var t=window.setTimeout(stop,30000); } // XHR //////////////////////////////////////////////////////////////////////// var iemsg = true; //////////////////////////////////////////////////////////////////////// // calcSun(lat,lng,zone,dst); // TBD: make local function fl(x){return Math.floor(x);} function sin(x){return Math.sin(x);}; function cos(x){return Math.cos(x);}; function ily(y){return(y%4==0&&y%100!=0)||y%400==0;} function isn(iv){var od=false;var is=""+iv;for(var i=0;i"9"){return false;}}return true;} function rd(a){return 180.0*a/Math.PI;} function dr(a){return Math.PI*a/180.0;} function dy(m,d,l){var k=(l?1:2);return fl((275*m)/9)-k*fl((m+9)/12)+d-30;} function cjd(y,m,d){if(m<=2){y-=1;m+=12;}var A=fl(y/100);var B=2-A+fl(A/4);return fl(365.25*(y+4716))+fl(30.6001*(m+1))+d+B-1524.5;} function cdjd(j){var z=fl(j+0.5);var f=(j+0.5)-z;if(z<2299161){var A=z;}else{var a=fl((z-1867216.25)/36524.25);var A=z+1+a-fl(a/4);}var B=A+1524;var C=fl((B-122.1)/365.25);var D=fl(365.25*C);var E=fl((B-D)/30.6001);var d=B-D-fl(30.6001*E)+f;var m=(E<14)?E-1:E-13; // TBD: only needed for other years, but unused so far: var y=(m>2)?C-4716:C-4715; return(m-1)+"/"+(d<10?"0":"")+d; // English // return(d<10?"0":"")+d+"."+(m-1); // Germam } function cjc(j){return(j-2451545.0)/36525.0;} function jdc(t){return t*36525.0+2451545.0;} function cgmls(t){var L=280.46646+t*(36000.76983+0.0003032*t);while(L>360.0)L-=360.0;while(L<0.0)L+=360.0;return L;} function cgmas(t){return 357.52911+t*(35999.05029-0.0001537*t);} function ceeo(t){return 0.016708634-t*(0.000042037+0.0000001267*t);} function cseoc(t){var m=cgmas(t);var mr=dr(m);var sinm=sin(mr);var sin2m=sin(mr+mr);var sin3m=sin(mr+mr+mr);return sinm*(1.914602-t*(0.004817+0.000014*t))+sin2m*(0.019993-0.000101*t)+sin3m*0.000289;} function cstl(t){return cgmls(t)+cseoc(t);} function csta(t){return cgmas(t)+cseoc(t);} function csrv(t){var v=csta(t);var e=ceeo(t);var R=(1.000001018*(1-e*e))/(1+e*cos(dr(v)));return R;} function csal(t){var o=cstl(t);var p=125.04-1934.136*t;return o-0.00569-0.00478*sin(dr(p));} function cmooe(t){var s=21.448-t*(46.8150+t*(0.00059-t*(0.001813)));return 23.0+(26.0+(s/60.0))/60.0;} function coc(t){var e=cmooe(t);var o=125.04-1934.136*t;return e+0.00256*cos(dr(o));} function csra(t){var e=coc(t);var l=csal(t);var t=(cos(dr(e))*sin(dr(l)));var u=(cos(dr(l)));return rd(Math.atan2(t,u));} function csd(t){var e=coc(t);var l=csal(t);var s=sin(dr(e))*sin(dr(l));return rd(Math.asin(s));} function ceot(t){var f=coc(t);var l0=cgmls(t);var e=ceeo(t);var m=cgmas(t);var y=Math.tan(dr(f)/2.0);y*= y;var l2=sin(2.0*dr(l0));var sm=sin(dr(m));var c2=cos(2.0*dr(l0));var l4=sin(4.0*dr(l0));var s2 =sin(2.0*dr(m));return rd(y*l2-2.0*e*sm+4.0*e*y*sm*c2-0.5*y*y*l4-1.25*e*e*s2)*4.0;} function chasr(lat,solarDec){var latRad=dr(lat);var s=dr(solarDec);var H=(cos(dr(90.833))/(cos(latRad)*cos(s))-Math.tan(latRad)*Math.tan(s));return Math.acos(cos(dr(90.833))/(cos(latRad)*cos(s))-Math.tan(latRad)*Math.tan(s));} function chass(lat,sD){var lR=dr(lat);var sR=dr(sD);var H=(cos(dr(90.833))/(cos(lR)*cos(sR))-Math.tan(lR)*Math.tan(sR));return-(Math.acos(cos(dr(90.833))/(cos(lR)*cos(sR))-Math.tan(lR)*Math.tan(sR)));} function csru(JD,lat,lng){var t=cjc(JD);var noonmin=csnu(t,lng);var tnoon=cjc(JD+noonmin/1440.0);var f=ceot(tnoon);var s=csd(tnoon);var A=chasr(lat,s);var d=lng-rd(A);var T=4*d;var U=720+T-f;var n=cjc(jdc(t)+U/1440.0);f=ceot(n);s=csd(n);A=chasr(lat,s);d=lng-rd(A);T=4*d;U=720+T-f;return U;} function csnu(t,lng){var t=cjc(jdc(t)+lng/360.0);var E=ceot(t);var U=720+(lng*4)-E;var n=cjc(jdc(t)-0.5+U/1440.0);E=ceot(n);return 720+(lng*4)-E;} function cssu(JD,lat,lng){var t=cjc(JD);var m=csnu(t,lng);var t=cjc(JD+m/1440.0);var T=ceot(t);var sD=csd(t);var A=chass(lat,sD);var d=lng-rd(A);var D=4*d;var U=720+D-T;var n=cjc(jdc(t)+U/1440.0);T=ceot(n);sD=csd(n);A=chass(lat,sD);d=lng-rd(A);D=4*d;return 720+D-T} function frsr(jd,lat,lng){var ju=jd;var t=csru(ju,lat,lng);while(!isn(t)){ju-=1.0;t=csru(ju,lat,lng);}return ju;} function frss(jd,lat,lng){var ju=jd;var t=cssu(ju,lat,lng);while(!isn(t)){ju -= 1.0;t=cssu(ju,lat,lng);}return ju;} function fnsr(jd,lat,lng){var ju=jd;var t=csru(ju,lat,lng);while(!isn(t)){ju+=1.0;t=csru(ju,lat,lng);}return ju;} function fnss(jd,lat,lng){var ju=jd;var t=cssu(ju,lat,lng);while(!isn(t)){ju+=1.0;t=cssu(ju,lat,lng);}return ju;} function timeString(ms){var fh=ms / 60.0;var h=fl(fh);var fm=60.0*(fh-fl(fh));var m=fl(fm);var fs=60.0*(fm-fl(fm));var s=fl(fs+0.5);var tS=h+":";if(m<10)tS+="0";tS+=m+":";if(s<10)tS+="0";tS+=s;return tS;} function timeStringShortAMPM(ms,JD){var julianday=JD;var fh=ms / 60.0;var h=fl(fh);var fm=60.0*(fh-fl(fh));var m=fl(fm);var fs=60.0*(fm-fl(fm));var s=fl(fs+0.5);var PM=false;m+=(s>=30)?1:0;if(m>=60){m-=60;h++;}var daychange=false;if(h>23){h-=24;daychange=true;julianday+=1.0;}if(h<0){h+=24;daychange=true;julianday-=1.0;}if(h>12){h-=12;PM=true;}if(h==12)PM=true;if(h==0){PM=false;h=12;}var timeStr=h+":";if(m<10)timeStr+="0";timeStr+=m+((PM)?"PM":"AM");if(daychange)return timeStr+" "+cdjd(julianday);return timeStr;} function timeStringAMPMDate(ms,JD){var julianday=JD;var fh=ms/60.0;var h=fl(fh);var fm=60.0*(fh-fl(fh));var m=fl(fm);var fs=60.0*(fm-fl(fm));var s=fl(fs+0.5);m+=(s>=30)?1:0;if(m>=60){m-=60;h++;}if(h>23){h-=24;julianday+=1.0;}if(h<0){h+=24;julianday-=1.0;}var PM=false;if(h>12){h-=12;PM=true;}if(h==12)PM=true;if(h==0){PM=false;h=12;}var timeStr=h+":";if(m<10)timeStr;timeStr+=m+((PM)?"PM":"AM");return timeStr+" "+cdjd(julianday);} function timeStringDate(ms,JD){var julianday=JD;var fh=ms/60.0;var h=fl(fh);var fm=60.0*(fh-fl(fh));var m=fl(fm);var fs=60.0*(fm-fl(fm));var s=fl(fs+0.5);m+=(s>=30)?1:0;if(m>=60){m-=60;h++;}var daychange=false;if(h>23){h-=24;julianday+=1.0;daychange=true;}if(h<0){h+=24;julianday-=1.0;daychange=true;}var timeStr=h+":";if(m<10)timeStr+="0";timeStr+=m;if(daychange)return timeStr+" "+cdjd(julianday);return timeStr;} function calcSun(lat,lng,z,dst,t){if(!t)t=new Date();lng=-lng;if((lat>=-90)&&(lat<-89))lat=-89;if((lat<=90)&&(lat>89))lat=89;var JD=cjd(t.getFullYear(),t.getMonth()+1,t.getDate());var d=dy(t.getMonth()+1,t.getDay(),ily(t.getFullYear()));var T=cjc(JD);var a=csra(T);var u=csd(T);var E=ceot(T);var eq=E;var sD=u;var nsr=false;var rG=csru(JD,lat,lng);if(!isn(rG))nsr=true;var nss=false;var sG=cssu(JD,lat,lng);if(!isn(sG))nss=true;var dV=dst?60:0;if(z>12||z<-12.5){alert("The offset must be between -12.5 and 12.\nSetting\"Off-Set\"=0");z="0";hrsToGMT=z;}if(!nsr){var riseTimeLST=rG-(60*z)+dV;var rS=timeStringShortAMPM(riseTimeLST,JD);var uR=timeStringDate(rG,JD);var sr=rS;var usr=uR;}if(!nss){var setTimeLST=sG-(60*z)+dV;var sS=timeStringShortAMPM(setTimeLST,JD);var uS=timeStringDate(sG,JD);var ss=sS;var uts=uS;}var nG=csnu(T,lng);var sNL=nG-(60*z)+dV;var solnStr=timeString(sNL);var uS=timeString(nG);var solnoon=solnStr;var usn=uS;var tsn=cjc(jdc(T)-0.5+nG/1440.0);eq=ceot(tsn);sD=csd(tsn);eq=(fl(100*eq))/100;sD=(fl(100*(sD)))/100;if(nsr){usr="";if(((lat>66.4)&&(d>79)&&(d<267))||((lat<-66.4)&&((d<83)||(d>263)))){newjd=frsr(JD,lat,lng);newtime=csru(newjd,lat,lng)-(60*z)+dV;if(newtime>1440){newtime-=1440;newjd+=1.0;}if(newtime<0){newtime+=1440;newjd-=1.0;}sr=timeStringAMPMDate(newtime,newjd);usr="prior sr";}else if(((lat>66.4)&&((d<83)||(d>263)))||((lat<-66.4)&&(d>79)&&(d<267))){newjd=fnsr(JD,lat,lng);newtime=csru(newjd,lat,lng)-(60*z)+dV;if(newtime>1440){newtime-=1440;newjd+=1.0;}if(newtime<0){newtime+=1440;newjd-=1.0;}sr=timeStringAMPMDate(newtime,newjd);usr="next sr";}else{alert("Cannot Find Sr!");}}if(nss){uts="";if(((lat>66.4)&&(d>79)&&(d<267))||((lat<-66.4)&&((d<83)||(d>263)))){newjd=fnss(JD,lat,lng);newtime=cssu(newjd,lat,lng)-(60*z)+dV;if(newtime>1440){newtime-=1440;newjd+=1.0;}if(newtime<0){newtime+=1440;newjd-=1.0;}ss=timeStringAMPMDate(newtime,newjd);uts="next ss";usn="";}else if(((lat>66.4)&&((d<83)||(d>263)))||((lat<-66.4)&&(d>79)&&(d<267))){newjd=frss(JD,lat,lng);newtime=cssu(newjd,lat,lng)-(60*z)+dV;if(newtime>1440){newtime-=1440;newjd+=1.0;}if(newtime<0){newtime+=1440;newjd-=1.0;}ss=timeStringAMPMDate(newtime,newjd);uts="prior ss";}else{alert ("Cannot Find Ss!");}}return[usr,sr,uts,ss];} // calcSun(lat, lng, zone, dst //////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////// // input: map GMap object function GMazetteer(map, icon) { var handleMoveend; var postShow = false; var markers=[]; var density = 1; var patchInfoWindow = false; this.setPostShow = function(p){postShow = p;} this.setPatchInfoWindow = function(p){patchInfoWindow = p;} // TBD: make global somehow var town; if(icon) { town=icon; } else { town=new GIcon(); town.image="http://gmazetteer.airspace-v.com/img/town.png"; town.shadow=""; town.iconSize=new GSize(9, 9); town.shadowSize=new GSize(9, 9); town.iconAnchor=new GPoint(4, 4); town.infoWindowAnchor=new GPoint(4, 4); } this.openInfoWindow=function(overlay) { if (!overlay) return; if (!overlay._gmazetteerName) return; var infotxt ='

'+overlay._gmazetteerName+'

'; infotxt += ''; if (overlay._gmazetteerSun) { infotxt += ''; } else { infotxt += ''; } infotxt += ''; infotxt += '
latitude: '+Math.round(overlay.getPoint().lat()*10000) / 10000+'longitude: '+Math.round(overlay.getPoint().lng()*10000) / 10000+'
sunrise: ' + overlay._gmazetteerSun[1] + 'sunset: ' + overlay._gmazetteerSun[3] + '
sunrise:sunset:
Wikipedia
'; var imgtxt = ''; // TBD - remove or change to flickr: imgtxt += '
No images found.'; imgtxt += ''; imgtxt += ''; imgtxt += ''; imgtxt += '
more...
'; var tabs = [['Info', infotxt], ['Images', imgtxt]]; if (patchInfoWindow) tabs = patchInfoWindow(overlay, tabs); var gtabs = []; for (var i = 0; i < tabs.length; i++) gtabs.push(new GInfoWindowTab(tabs[i][0], tabs[i][1])); if(overlay.openInfoWindowTabsHtml) overlay.openInfoWindowTabsHtml(gtabs); var pos=overlay.getPoint(); var sr = document.getElementById("sr"); var ss = document.getElementById("ss"); if (!overlay._gmazetteerSun) { /* TBD: activate, watch closing brace if (!overlay._gmazetteerSun) new XHR("http://gmazetteer.airspace-v.com/lib/tz.php4?idx=" + overlay._gmazetteerIdx, function(response) { if (((typeof response) != "string") || (response.length == 0)) { // no time zone info available -> UTC } */ var response = [0, "UTC"]; overlay._gmazetteerTz = response[0]; // TBD: think about it - do we need all info? var tz = 0; var tzn = "UTC"; if (response.length > 1) { tz = parseInt(response[0]); if ((tz > -24) && (tz <= -12)) tz += 24; if ((tz < 24) && (tz >= 12)) tz -= 24; tzn = response[1]; } overlay._gmazetteerSun = calcSun(pos.lat(), pos.lng(), -tz, false); // TBD - timezone: if (sr) sr.replaceChild(document.createTextNode("sunrise: " + overlay._gmazetteerSun[1] + " " + response[1]), sr.childNodes[0]); // TBD - timezone: if (ss) ss.replaceChild(document.createTextNode("sunset: " + overlay._gmazetteerSun[3] + " " + response[1]), ss.childNodes[0]); if (sr) sr.replaceChild(document.createTextNode("sunrise: " + overlay._gmazetteerSun[0] + " UTC"), sr.childNodes[0]); if (ss) ss.replaceChild(document.createTextNode("sunset: " + overlay._gmazetteerSun[2] + " UTC"), ss.childNodes[0]); }/* );*/ function showImgs(imgs) { if(imgs.length > 0) { // document.getElementById("noimg").style.display = 'none'; var j = 0; for (var i = 0; i < imgs.length; i += 3) { var imga = document.getElementById("imga" + j); if (imga) { imga.setAttribute('href', imgs[i + 2]); imga.title = imgs[i + 1]; } var img = document.getElementById('img' + j); if (img) { img.setAttribute('src', imgs[i]); imga.alt = imgs[i + 1]; } j++; } } else { // TBD - take care: document.getElementById("noimg").style.display = 'block'; } } if (!overlay._gmazetteerImgs) { new XHR("http://gmazetteer.airspace-v.com/lib/tnails.php4?name="+overlay._gmazetteerName, function(response) { if (!response) return; showImgs(response); overlay._gmazetteerImgs = response; }); } else { showImgs(overlay._gmazetteerImgs); } } showLocs=function() { var bounds=map.getBounds(); var level = map.getZoom() + density; if (level < 0) level = 0; var step=360 / (1 << level); for (var i in markers) map.removeOverlay(markers[i]); var sw = bounds.getSouthWest(); var ne = bounds.getNorthEast(); var url = "http://gmazetteer.airspace-v.com/lib/locs.php4?x0=" + sw.lng() +"&x1=" + ne.lng() + "&y0=" + sw.lat() +"&y1="+ ne.lat() +"&z=" + level; //alert(url); new XHR(url, function(response) { if (!response) return; for (var i = 0; i < response.length - 1; i += 4) { if (!response[0]) continue; var lat=parseInt(response[i + 2]) / 100; var lng=parseInt(response[i + 3]) / 100; var mrk=new GMarker(new GLatLng(lat, lng), {icon:town, title:response[i + 1]}); mrk._gmazetteerName=response[i + 1]; mrk._gmazetteerIdx =response[i]; mrk._gmazetteerClickHandler=clickHandler; // markers.push(mrk); markers[response[i]] = mrk; map.addOverlay(mrk); } if (postShow) postShow(); }); } this.getMarker=function(m){return markers[m];} this.show=function(){handleMoveend=GEvent.addListener(map,"moveend", showLocs);showLocs();} this.hide=function(){GEvent.removeEvent(handleMoveend);for (var i in markers) map.removeOverlay(markers[i]);} this.setIcon=function(icon){town=icon;} this.getIcon=function(){return town;} this.getDensity=function(){return density;} this.setDensity=function(p){if ((p<0)||(p>2))return density; // TBD: parseInt var t=density; density=p; showLocs(); return t;} /* TBD-NYI var onCreate=function(handler) { var onRemove=function(handler) { var onsShow=function(handler) { var onHide=function(handler) { */ // copyright message var wgt0=document.createTextNode('GMazetteer'); var wgt1=document.createTextNode(' - '); var wgt2=document.createTextNode('terms of use'); var wgl0=document.createElement ('a'); var wgl1=document.createElement ('a'); var c=document.createElement('div'); wgl0.appendChild(wgt0); wgl0.setAttribute('href', 'http://gmazetteer.airspace-v.com'); wgl1.appendChild(wgt2); wgl1.setAttribute('href', 'http://gmazetteer.airspace-v.com/tou.htm'); c.appendChild(wgl0); c.appendChild(wgt1); c.appendChild(wgl1); with(wgl0.style){color='white';fontFamily='Verdana,Tahoma,Arial,Helvetica';fontSize='11px';whiteSpace='nowrap';} with(wgl1.style){color='white';fontFamily='Verdana,Tahoma,Arial,Helvetica';fontSize='11px';whiteSpace='nowrap';} with(c.style){color='white';fontFamily='Verdana,Tahoma,Arial,Helvetica';fontSize='11px';whiteSpace='nowrap';position='absolute';right='3px';bottom='20px';} map.getContainer().appendChild(c); /* var wgtxt =document.createTextNode('about GMazetteer'); var wglink=document.createElement ('a'); wglink.appendChild(wgtxt); with (wglink.style) { color='white'; fontFamily='Verdana,Tahoma,Arial,Helvetica'; fontSize='11px'; whiteSpace='nowrap'; position='absolute'; right='3px'; bottom='20px'; } wglink.setAttribute('href', 'http://gmazetteer.airspace-v.com/about.htm'); map.getContainer().appendChild(wglink); */ var clickHandler=GEvent.addListener(map, "click", this.openInfoWindow); this.show(); }