var damap;function r2d(r){return r*180/Math.PI;}
function adj(n){n%=360;if(n>180)n-=360;else if(n<-180)n+=360;return n;}
function quad(aa){if(aa<-90)return 4;else if(aa<0)return 1;else if(aa<90)return 2;return 8;}
var ptgrp={wst:0,est:0,wi:0,ei:0,sprd:function(ba){wst=0;est=0;for(var i=0;i<ba.length;i++){if(ba[i].lng()<wst)wst=ba[i].lng();if(ba[i].lng()>est)est=ba[i].lng();}
return est-wst;},wgap:function(lb,rb,p){wi=lb;for(i=0;i<p.length;i++)if(p.lng()<rb&&p.lng()>wi)wi=p.lng();return wi;},egap:function(lb,rb,p){ei=rb;for(i=0;i<p.length;i++)if(p.lng()>lb&&p.lng()<ei)ei=p.lng();return ei;},gap:function(q,p){switch(q){case 6:case 14:return egap(0,90,p)-wgap(-180,-90,p);case 9:case 13:return egap(90,180,p)-wgap(-90,0,p);default:throw "err";}}};function xform(q,ca){switch(q){case 4:case 5:for(var i=0;i<ca.length;i++)ca[i]=new GLatLng(ca[i].lat(),ca[i].lng()+90);break;case 8:case 10:for(var i=0;i<ca.length;i++)ca[i]=new GLatLng(ca[i].lat(),ca[i].lng()-90);break;case 12:for(var i=0;i<ca.length;i++)ca[i]=new GLatLng(ca[i].lat(),adj(ca[i].lng()+180));break;case 6:case 7:if(ptgrp.sprd(ca)<180)for(var i=0;i<ca.length;i++)ca[i]=new GLatLng(ca[i].lat(),ca[i].lng()+(-90-ptgrp.wst));else throw "err";break;case 9:case 11:if(ptgrp.sprd(ca)<180)for(var i=0;i<ca.length;i++)ca[i]=new GLatLng(ca[i].lat(),ca[i].lng()-(ptgrp.wst+90));else throw "err";break;case 13:throw "err";case 14:throw "err";case 15:throw "err";default:break;}}
function rstr(q,p){switch(q){case 4:case 5:return new GLatLng(p.lat(),p.lng()-90);case 8:case 10:return new GLatLng(p.lat(),p.lng()+90);case 12:return new GLatLng(p.lat(),adj(p.lng()-180));case 6:case 7:return new GLatLng(p.lat(),p.lng()-(-90-wst));case 9:case 11:return new GLatLng(p.lat(),p.lng()+(wst+90));default:return p;break;}}
function denom(p,q){return Math.sqrt(1-Math.pow(Math.cos(p.latRadians())*Math.cos(q.latRadians())*Math.cos(q.lngRadians()-p.lngRadians())+Math.sin(p.latRadians())*Math.sin(q.latRadians()),2));}
function wdenom(p,q,w){return w/denom(p,q);}
var adrcookiename="addrs";function load(){if(GBrowserIsCompatible()){damap=new GMap2(document.getElementById("map"));damap.addControl(new GLargeMapControl());damap.addControl(new GMapTypeControl());damap.addControl(new google.maps.LocalSearch(),new GControlPosition(G_ANCHOR_BOTTOM_RIGHT,new GSize(10,20)));damap.setCenter(new GLatLng(41.899751,-87.630498),15);}
var da=unescape(document.cookie);var ea=da.indexOf(adrcookiename+"=");if(ea==-1)return;var fa=da.indexOf(";",ea);if(fa==-1)fa=da.length;document.AddressInputForm.AddressText.value=da.substring(ea+6,fa);}
function unload(){GUnload();var ga=new Date();var mo=ga.getMonth();var yr=ga.getFullYear();if(mo<11)ga.setMonth(++mo);else{ga.setMonth(0);ga.setFullYear(++yr);}
document.cookie=adrcookiename+"="+escape(document.AddressInputForm.AddressText.value)+"; expires="+ga.toGMTString();}
function Torricelli(ha){var q=0;for(var h=0;h<ha.length;h++)q|=quad(ha[h].lng());var ia=new Array();for(var k=0;k<ha.length;k++)ia[k]=new GLatLng(ha[k].lat(),ha[k].lng());xform(q,ia);var ja=0,clg=0,plt=0,plg=0;for(var j=0;j<ia.length;j++){ja+=ia[j].lat();clg+=ia[j].lng();}
if(ia.length!=0){ja/=ia.length;clg/=ia.length;}
var xn=0,xd=0,yn=0,yd=0;var ka=0.000001;var it=0;do{for(var i=0;i<ia.length;i++){var la=new GLatLng(ja,clg);var wd=wdenom(ia[i],la,1);xn+=wd*Math.sin(ia[i].latRadians());xd+=wd*Math.cos(ia[i].latRadians())*Math.cos(ia[i].lngRadians()-la.lngRadians());yn+=wd*Math.cos(ia[i].latRadians())*Math.sin(ia[i].lngRadians());yd+=wd*Math.cos(ia[i].latRadians())*Math.cos(ia[i].lngRadians());}
plt=ja;plg=clg;ja=r2d(Math.atan(xn/xd));clg=r2d(Math.atan(yn/yd));it++;}
while(it<500&&(isFinite(ja)&&isFinite(clg)&&plt*ja>=0&&plg*clg>=0)&&(Math.abs(plt-ja)>ka&&Math.abs(plg-clg)>ka));if(isFinite(ja)&&isFinite(clg)&&plt*ja>=0&&plg*clg>=0)if((Math.abs(plt)-Math.abs(ja)>=0)&&(Math.abs(plg)-Math.abs(clg)>=0))npt=new GLatLng(ja,clg);else npt=new GLatLng(plt,plg);else npt=new GLatLng(plt,plg);return rstr(q,npt);}
function update(){var ma=document.AddressInputForm.AddressText.value.split('\n');var i=0;while(i<ma.length){if(ma[i].length==0)ma.splice(i,1);else i++;}
if(ma.length==0){alert("Please enter some addresses.");return;}
var na=new GClientGeocoder();if(ma.length==1){na.getLatLng(ma[0],function(oa){damap.clearOverlays();damap.addOverlay(new GMarker(oa));damap.setCenter(oa,13);});return;}
var pa=Array();var qa=0;for(var i=0;i<ma.length;i++)na.getLatLng(ma[i],function(ra){if(ra)pa.push(ra);else alert(ma[i]+" not found");qa++;if(qa==ma.length){if(pa.length<2){alert("Please enter at least two recognizable addresses.");return;}
try{mtpt=Torricelli(pa);}
catch(e){alert("The distances between the addresses you've entered are currently unsupported.");return;}
damap.clearOverlays();for(var j=0;j<pa.length;j++)damap.addOverlay(new GMarker(pa[j]));var sa=new GIcon(G_DEFAULT_ICON);sa.image="green-dot.png";markerOptions={icon:sa};var ta=new GMarker(mtpt,markerOptions);var at="";na.getLocations(mtpt,function(ua){at=(ua&&ua.Status.code==200)?ua.Placemark[0].address:"Unable to identify address";});GEvent.addListener(ta,"click",function(){ta.openInfoWindowHtml(at);});damap.addOverlay(ta);damap.setCenter(mtpt,13);}});}