function HurricaneLayer(){}HurricaneLayer.prototype.initialize=function(C,B,D,A){this.map_=C;this.name_=B;this.sidebarPrefix_=D;this.options_=A||{};this.layer_=new Hurricane(this.name_,this.sidebarPrefix_,this.options_);this.streets_=this.options_.streets||null;GEvent.bind(this.layer_,"loadstart",this,function(){GEvent.trigger(this,"loadstart")});GEvent.bind(this.layer_,"loadend",this,function(){GEvent.trigger(this,"loadend")});GEvent.bind(this.layer_,"loaderror",this,function(E){GEvent.trigger(this,"loaderror",E)});GEvent.bind(this.layer_,"settingschanged",this,function(){GEvent.trigger(this,"settingschanged")})};HurricaneLayer.prototype.toggle=function(A){if(A){this.map_.addOverlay(this.layer_);this.layer_.rememberToggleState(true);this.layer_.toggle(A);this.layer_.redrawOnMoveEnd();if(this.streets_){this.streets_.attachTo(this.name_)}}else{this.layer_.toggle(A);if(this.streets_){this.streets_.detachFrom(this.name_)}this.layer_.rememberToggleState(false);this.map_.removeOverlay(this.layer_)}};HurricaneLayer.prototype.toQueryString=function(){return this.layer_.toQueryString()};HurricaneLayer.prototype.toPrefsObject=function(){return this.layer_.toPrefsObject()};Hurricane.prototype=new WUI_ImageLayer();function Hurricane(B,C,A){WUI_ImageLayer.call(this,B,C,A);this.loadingData_=false;this.requestedAnotherData_=false;this.markers_=[];this.listeners_=[];this.shapes_=[];this.products_=null;this.storms_={};this.skipStorms_=[];this.imgListeners=[];this.markers_hd=[];this.listeners_hd=[];this.shapes_mdl=[];this.modelsList=[];this.skipModels=[];this.modelsCache={};this.units_=this.options_.units||"english";this.mastersBlog_=this.options_.mastersBlog||null;this.displayAreaTab=this.options_.displayAreaTab||null;this.displayAreaDrawn=false;this.displayAreaModelsDrawn=false;this.hasData=false;this.display_=this.getDisplayProperties();this.decideImageVisibility(false);this.decideImageLegend()}Hurricane.prototype.copy=function(){if(this.debug_==1){GLog.write("Hurricane::copy")}return new Hurricane(this.name_,this.sidebarPrefix_,this.options_)};Hurricane.prototype.toggle=function(A){if(A){this.updateTimer_=this.requestData.periodical(600*1000,this);this.disabled_=false;this.requestData();if(this.mastersBlog_){this.mastersBlog_.grip(this.name_)}this.decideImageVisibility(true);if(this.canShowHd()){this.toggleHd(true)}if(this.canShowModels()){this.toggleModels(true)}}else{if(this.canShowHd()){this.toggleHd(false)}if(this.canShowModels()){this.toggleModels(false)}$clear(this.updateTimer_);this.removeOverlays();this.skipStorms_=[];this.skipModels=[];this.displayAreaDrawn=false;if(this.mastersBlog_){this.mastersBlog_.release(this.name_)}}};Hurricane.prototype.toggleHd=function(A){if(A){this.clearHd();if(this.hasData){for(var C in this.storms_){if(this.skipStorms_.contains(C)){continue}this.requestHd(C)}}var B=$(this.sidebarPrefix_+"_legend_hd");if(B){B.removeClass("none")}}else{this.clearHd();var B=$(this.sidebarPrefix_+"_legend_hd");if(B){B.addClass("none")}}};Hurricane.prototype.toggleModels=function(A){if(A){this.clearModels();this.modelsList.length=0;if(this.hasData){if(this.displayAreaTab&&(!this.displayAreaModels||!this.displayAreaModels.parentNode)){this.displayAreaModels=new Element("div");this.displayAreaTab.writeDom(this.displayAreaModels)}for(var C in this.storms_){if(this.skipStorms_.contains(C)){continue}this.requestModels(C)}}var B=$(this.sidebarPrefix_+"_legend_mdl");if(B){B.removeClass("none")}}else{this.clearModels();var B=$(this.sidebarPrefix_+"_legend_mdl");if(B){B.addClass("none")}if(this.displayAreaModels){this.displayAreaModels.empty()}this.displayAreaModelsDrawn=false}};Hurricane.prototype.getURL=function(){var I=this.map_.getSize();var K=I.width;var J=I.height;var H=Math.floor(K*this.extraImageLoadFactor_);var G=Math.floor(J*this.extraImageLoadFactor_);var L=Math.floor((H-K)/2);var O=Math.floor((G-J)/2);var R=this.map_.fromContainerPixelToLatLng(new GPoint(0-L,0-O));var D=this.map_.fromContainerPixelToLatLng(new GPoint(K+L,J+O));var E=R.lat();var C=D.lng();var P=D.lat();var N=R.lng();if(N>C){N-=360}var S=this.getImg();var Q="";if(S=="srg"){Q="HUR_LAYERS/dynamic/gmapSurge"}var B="http://wumaps.wunderground.com/cgi-bin/mapgen?theme="+Q+"&stdout=1&size="+H+"x"+G+"&minlat="+P+"&minlon="+N+"&maxlat="+E+"&maxlon="+C+"&proj=automerc&format=gif&alpha=1";var A=new Date();var F=A.getTime();var M=Math.floor(F/60000);B+="&rand="+M;return B};Hurricane.prototype.requestData=function(){if(this.loadingData_){this.requestedAnotherData_=true;return }this.loadingData_=true;this.requestedAnotherData_=false;GEvent.trigger(this,"loadstart");var A="/tropical/?json=TROPICAL_INDEX";var E="get";var C=this.getShowing();if(C!="current"){A="/stationmaps/hur/"+C+".js";E="get"}if(this.debug_>0){GLog.write(A)}var D=this.handleData.bind(this);var B=new XHR({method:E,onSuccess:D,onFailure:function(){var F="failed to load data file";if(this.debug_==1){F+=": "+A}GEvent.trigger(this,"loaderror",F);this.loadingData_=false}.bind(this)});B.setHeader("X-Request","JSON");B.send(A)};Hurricane.prototype.handleData=function(A){if(!A){this.loadingData_=false;GEvent.trigger(this,"loaderror","Request Failed (null response)");return }try{var B=Json.evaluate(A)}catch(C){this.loadingData_=false;GEvent.trigger(this,"loaderror","Failed to evaluate JSON response");return }if(B.PRODUCTS){this.products_=B.PRODUCTS;this.displayAreaDrawn=false;this.drawData();this.hasData=true;if(this.canShowHd()){this.toggleHd(true)}if(this.canShowModels()){this.toggleModels(true)}}else{GEvent.trigger(this,"loaderror","Unexpected response structure: first node must be 'PRODUCTS'")}if(this.requestedAnotherData_){this.requestedAnotherData_=false;this.loadingData_=false;this.requestData()}this.loadingData_=false;GEvent.trigger(this,"loadend")};Hurricane.prototype.drawData=function(){try{this.removeOverlays();if(this.displayAreaTab&&!this.displayAreaDrawn){this.displayAreaTab.empty()}for(var Q in this.products_){var K=this.products_[Q];if(K.storm){var p=K.region;var N=K.regioncode;var Y=this.display_.defaults[N];for(var m in K.storm){var h=K.storm[m];var M=h.name;M.trim();var b=h.prefix;var r=h.STORMHDF.STORM;this.storms_[b]={name:M};if(this.skipStorms_.contains(b)){continue}try{var V=parseFloat(r.lat.decimal);var E=parseFloat(r.lon.decimal);if(!$chk(V)||!$chk(E)){throw"error"}}catch(o){if(this.debug_==1){GEvent.trigger(this,"loaderror","missing lat/lon.decimal for current position on storm: "+M)}continue}var s="";if(r.WINDS){s=convertKnotsIntoWindString(this.units_,parseFloat(r.WINDS.node_0))}var R="";if(r.GUSTS){R=convertKnotsIntoWindString(this.units_,parseFloat(r.GUSTS.node_0))}var D="";if(r.PRESSURE){if(isValidMeasurement(r.PRESSURE.MB)){D=r.PRESSURE.MB+" mb"}}var B=parseInt(r.GMT.epoch)*1000;var J=r.TIMEZONE||"GMT";var q=r.LOCALTIME;var l="";if(q){l=q.WEEKDAY+", "+q.MONTH+" "+q.DAY+", "+q.YEAR+" "+fixHour(q.HOUR)+":00 "+J}var U=M;var a="";if(r.category){a=r.category.node_0}var u="";if(r.MOVEMENT){velocity=convertKnotsIntoWindString(this.units_,parseFloat(r.MOVEMENT.VELOCITY));u=r.MOVEMENT_VALUE+" ("+r.MOVEMENT.DEGREES+"&deg;) at "+velocity}var T=this.getBalloonContent(U,b,B,l,s,R,D,u,V,E,a,p);var f=this.getIconName(a,true,(V<0));var L=this.makeIcon(f);var X=new GLatLng(V,E);var t=new GMarker(X,{icon:L,title:U+"\n"+l});if(this.canShowWR()){var C=r.WINDRADIUS;for(var G in C){var g=parseFloat(C[G].NE.node_0);var W=parseFloat(C[G].NW.node_0);var v=parseFloat(C[G].SW.node_0);var I=parseFloat(C[G].SE.node_0);this.drawWindRadius(X,G,g,W,v,I)}}var k=(h.TRACKHDF_VALUE=="1");if(k&&this.canShowTrackObs()){var H=h.TRACKHDF.observations;this.drawTrackObs(H,V,E,M,b)}this.markers_.push(t);this.map_.addOverlay(t);var c=GEvent.callbackArgs(this,this.onClick,t,T);var S=GEvent.addListener(t,"click",c);this.listeners_.push(S);var j=r.FORECAST;if(j&&this.canShowForecast()){this.drawForecasts(j,V,E,M,b,J,Y)}if(this.displayAreaTab&&!this.displayAreaDrawn){var Z=new Element("div",{"class":this.sidebarPrefix_+"_box"});var F=new Element("input",{type:"checkbox",checked:"checked",events:{click:function(w,d){w=new Event(w);if(w.target.checked){this.skipStorms_.remove(d)}else{this.skipStorms_.push(d)}this.drawData();if(this.canShowHd()){this.toggleHd(true)}if(this.canShowModels()){this.toggleModels(true)}}.bindAsEventListener(this,[b])}});var i=new Element("a",{href:"",events:{click:function(y,d,w,x){y=new Event(y).stop();if(!x.checked){x.click()}if(this.map_.getZoom()>6){this.map_.setZoom(6)}this.map_.panTo(d);w()}.bindAsEventListener(this,[X,c,F])}});var n=this.getDisplayAreaBox(U,b,B,l,s,R,D,u,V,E,a,p,f);i.setHTML(n);var O=new Element("div");var P=this.getDisplayAreaExtra(U,b,B,l,s,R,D,u,V,E,a,p,f);O.setHTML(P);var A=new Element("div");this.storms_[b].hd=A;Z.adopt(F).adopt(i).adopt(O).adopt(A);this.displayAreaTab.writeDom(Z);F.checked=true}}}}this.displayAreaDrawn=true;this.hasData=true}catch(o){GEvent.trigger(this,"loaderror","JS Error ("+o.name+") "+o.message+" (line "+o.lineNumber+")");return false}};Hurricane.prototype.drawWindRadius=function(A,K,J,B,E,D){var L=false;for(var F in this.display_.windradius){if(K==F){L=true}}if(!L){if(this.debug_==1){GEvent.trigger(this,"loaderror","Unexpected type of windradius: "+K)}return }var M=this.display_.windradius[K].strokeColor;var G=this.display_.windradius[K].strokeWeight;var H=this.display_.windradius[K].strokeOpacity;var C=this.display_.windradius[K].fillColor;var I=this.display_.windradius[K].fillOpacity;if(J>0){this.drawCircleWedgeMiles(A,J,0,90,M,G,H,C,I)}if(B>0){this.drawCircleWedgeMiles(A,B,90,180,M,G,H,C,I)}if(E>0){this.drawCircleWedgeMiles(A,E,180,270,M,G,H,C,I)}if(D>0){this.drawCircleWedgeMiles(A,D,270,360,M,G,H,C,I)}};Hurricane.prototype.drawCircleWedge=function(P,A,Q,S,F,J,O,C,E,L,I){var M=[];var H=6;for(var N=S;N<=F;N+=H){var G=deg2rad(N);var B=A*Math.sin(G);var R=Q*Math.cos(G);var K=new GLatLng(P.lat()+B,P.lng()+R,true);M.push(K)}if(S>0||F<360){M.push(P);M.push(M[0])}var D=new GPolygon(M,J,O,C,E,L,I);this.shapes_.push(D);this.map_.addOverlay(D)};Hurricane.prototype.drawCircleWedgeMiles=function(B,H,E,F,O,G,J,C,L,A){var K=3963.19;var I=180/(K*Math.PI);var N=I/Math.cos(deg2rad(B.lat()));var M=H*I;var D=H*N;this.drawCircleWedge(B,M,D,E,F,O,G,J,C,L,A)};Hurricane.prototype.drawCircleWedgeKM=function(B,H,E,F,O,G,J,C,L,A){var K=6378.137;var I=180/(K*Math.PI);var N=I/Math.cos(deg2rad(B.lat()));var M=H*I;var D=H*N;this.drawCircleWedge(B,M,D,E,F,O,G,J,C,L,A)};Hurricane.prototype.drawTrackObs=function(I,W,S,Y,P){var B=getObjectNumChildren(I);var G=[];for(var Q=0;Q<B;Q++){var M=I["node_"+Q];try{var E=parseFloat(M.lat.decimal);var C=parseFloat(M.lon.decimal);if(!$chk(E)||!$chk(C)){throw"error"}else{if(E==0&&C==0){continue}}}catch(U){if(this.debug_==1){GEvent.trigger(this,"loaderror","missing lat/lon.decimal for track position on storm: "+Y)}continue}var R=M.mphwindspeed;if(R){winds=convertWindIntoUnits(this.units_,R);winds+=" "+getWindUnits(this.units_)}var J=isValidMeasurement(M.pressuremb)?M.pressuremb+" mb":"";var V=M.year+"-"+M.month+"-"+M.day+" "+fixHour(M.hour)+":00 UTC";var F=M.category;var X=Y;var L=this.getBalloonContent(X,P,null,V,winds,null,J,null,E,C,F,null);var D=this.getIconName(F,false,(E<0));var T=this.makeIcon(D);var O=new GLatLng(E,C);var H=new GMarker(O,{icon:T,title:X+"\n"+V});this.markers_.push(H);this.map_.addOverlay(H);var N=GEvent.callbackArgs(this,this.onClick,H,L);var A=GEvent.addListener(H,"click",N);this.listeners_.push(A);G.push(new GLatLng(E,C))}G.push(new GLatLng(W,S));var K=new GPolyline(G);this.shapes_.push(K);this.map_.addOverlay(K)};Hurricane.prototype.drawForecasts=function(x,a,A,L,n,J,k){var F=[12,24,36,48,72];var b=a;var C=A;var M=0;for(var w=0;w<F.length;w++){var W=F[w];var c=x["node_"+W+"HR"];if(!c){continue}try{var g=parseFloat(c.lat.decimal);var D=parseFloat(c.lon.decimal);if(!$chk(g)||!$chk(D)){throw"error"}}catch(z){if(this.debug_==1){GEvent.trigger(this,"loaderror","missing lat/lon.decimal for forecast position on storm: "+L)}continue}var AB=c.WINDS;var V=c.GUSTS;if(AB){AB=convertKnotsIntoWindString(this.units_,parseFloat(AB))}if(V){V=convertKnotsIntoWindString(this.units_,parseFloat(V))}var AA=c.LOCALTIME;var y=AA.weekday_abbrev+", "+AA.mon_abbrev+" "+AA.mday+", "+AA.year+" "+zeroPad(AA.hour,2)+":"+zeroPad(AA.min,2)+" "+J;var l=c.category;var f=L;var Y=this.getBalloonContent(f,n,null,y,AB,V,null,null,g,D,l,null);var r=this.getIconName(l,false,(g<0));var K=this.makeIcon(r);var j=new GLatLng(g,D);var AC=new GMarker(j,{icon:K,title:f+"\n"+y});this.markers_.push(AC);this.map_.addOverlay(AC);var p=GEvent.callbackArgs(this,this.onClick,AC,Y);var X=GEvent.addListener(AC,"click",p);this.listeners_.push(X);if(this.canShowWR()){var B=c.WINDRADIUS;for(var E in B){var s=parseFloat(B[E].NE);var h=parseFloat(B[E].NW);var AE=parseFloat(B[E].SW);var G=parseFloat(B[E].SE);this.drawWindRadius(j,E,s,h,AE,G)}}if(this.canShowCOD()&&k){try{var q=parseFloat(k.error["node_"+w]);this.drawCircleWedge(j,q,q,0,360,"#E3AA22",1,1,"#E3DF35",0.4)}catch(z){if(this.debug_==1){GEvent.trigger(this,"loaderror","cannot draw cone of death due to missing defaults error for hour: "+W+"HR")}continue}var I=g-b;var m=D-C;if(m<-180){m+=360}if(m>180){m=360-m}var AD=Math.atan(I/m);if(this.debug_==1){GLog.write("tilt = "+AD+",  deltaLon = "+m)}if(m<0){AD+=Math.PI}var o=Math.sqrt(m*m+I*I);var T=q-M;var O=Math.asin(T/o);var P=O+Math.PI/2;var Z=[];Z[0]=P+AD;Z[1]=(-1)*P+AD;for(var t=0;t<Z.length;t++){var N=Z[t];var v=M*Math.sin(N);var S=M*Math.cos(N);var u=q*Math.sin(N);var Q=q*Math.cos(N);var U=new GLatLng(b+v,C+S,true);var R=new GLatLng(g+u,D+Q,true);var H=new GPolyline([U,R],"#E3AA22",2,1);this.shapes_.push(H);this.map_.addOverlay(H)}b=g;C=D;M=q}}};Hurricane.prototype.onClick=function(A,B){var C=new GInfoWindowTab("Info",B);A.openInfoWindowTabsHtml([C])};Hurricane.prototype.onClickPoint=function(A,B){var C=new GInfoWindowTab("Info",B);this.map_.openInfoWindowTabsHtml(A,[C])};Hurricane.prototype.getIconName=function(A,C,D){var B="";switch(A){case"1":B="c1";break;case"2":B="c2";break;case"3":B="c3";break;case"4":B="c4";break;case"5":B="c5";break;case"ts":B="ts";break;case"td":B="td";break;case"invest":B="invest";break;default:B="invest"}var E="ico_"+B;if(B=="invest"){E+="-active.png"}else{if(C&&D){E+="-active-s.png"}else{if(C&&!D){E+="-active.png"}else{if(!C&&D){E+="-blank-s.png"}else{E+="-text.png"}}}}return E};Hurricane.prototype.makeIcon=function(E){if(this.display_.iconcache[E]){return this.display_.iconcache[E]}else{var C=new GIcon();var B=22;var A=21;var D="http://"+this.iconserve_+"."+this.icondomain_+"/i/t/";C.image=D+E;C.iconSize=new GSize(B,A);C.iconAnchor=new GPoint(B/2-2,A/2+2);C.infoWindowAnchor=new GPoint(B/2-2,A/2+2);C.printImage=D+E;C.mozPrintImage=D+E;C.transparent=D+"ico_transparent.png";C.imageMap=[0,0,0,B,B,A,A,0];this.display_.iconcache[E]=C;return C}};Hurricane.prototype.makeIconHd=function(A,D,B,C){if(!this.iconHd){this.iconHd=new GIcon();this.iconHd.iconSize=new GSize(64,64);this.iconHd.shadowSize=new GSize(64,64);this.iconHd.shadow="http://stationicon.wunderground.com/gmapshadow.png";this.iconHd.infoShadowAnchor=new GPoint(32,32);this.iconHd.imageMap=new Array(22,22,38,22,38,38,22,38,22,22);this.iconHd.transparent="http://stationicon.wunderground.com/gmapicon.png";this.iconHd.iconAnchor=new GPoint(32,32);this.iconHd.infoWindowAnchor=new GPoint(32,32)}icon=new GIcon(this.iconHd);icon.image="http://stationicon.wunderground.com/cgi-bin/gmapicon?mode=hd&shemi="+C+"&ws="+A+"&wsu="+D+"&wd="+B+"&format=.png";icon.printImage=icon.image;icon.mozPrintImage=icon.image;return icon};Hurricane.prototype.removeOverlays=function(){while(this.markers_.length>0){this.map_.removeOverlay(this.markers_.pop())}while(this.listeners_.length>0){GEvent.removeListener(this.listeners_.pop())}while(this.shapes_.length>0){this.map_.removeOverlay(this.shapes_.pop())}for(var A in this.storms_){delete this.storms_[A]}this.hasData=false};Hurricane.prototype.requestHd=function(B){GEvent.trigger(this,"loadstart");var C=this.handleHd.bindAndAppendArgs(this,[B]);var A="/stationmaps/gmap_hd_obs.asp?storm="+B;if(this.debug_>0){GLog.write(A)}GDownloadUrl(A,C)};Hurricane.prototype.handleHd=function(responseText,status,prefix){if(responseText==null||status<0){this.loadingData_=false;GEvent.trigger(this,"loaderror","Request Timed Out (status code: "+status+")");return }else{if(status<200||status>=300){this.loadingData_=false;GEvent.trigger(this,"loaderror","Request Failed (status code: "+status+")");return }}try{var data=eval("("+responseText+")")}catch(e){GEvent.trigger(this,"loaderror","Failed to evaluate JSON response");return }if(data.HD){this.drawHd(data.HD,prefix)}else{}GEvent.trigger(this,"loadend")};Hurricane.prototype.drawHd=function(y,l){var A=y;var w=0;var b=0;var p=0;for(var u in A.OBS){var c=A.OBS[u];var d=parseFloat(c.lat.decimal);var J=parseFloat(c.lon.decimal);var e=new GLatLng(d,J);b++;if(w>=200){continue}w++;var F=parseInt(c.UTCDATE.epoch)*1000;var M=this.epochToString(F);if(F>p){p=F}var H=(c.static_pressure&&c.static_pressure.mb)?c.static_pressure.mb:null;var B=(c.MSLP&&c.MSLP.metric)?c.MSLP.metric:null;var N=(c.TEMP&&c.TEMP.metric)?c.TEMP.metric:null;var P=(c.DP&&c.DP.metric)?c.DP.metric:null;var o=(c.WDIR)?c.WDIR:0;var x=(c.WSPD&&c.WSPD.knots)?c.WSPD.knots:0;var V=(c.MAXWSPD&&c.MAXWSPD.knots)?c.MAXWSPD.knots:null;var m=(c.SFCWSPD&&c.SFCWSPD.knots)?c.SFCWSPD.knots:null;var Y=(c.SFCRR&&c.SFCRR.mm)?c.SFCRR.mm:null;var G=(c.QC)?c.QC:null;if(m>900){m=null}if(G!="00"){continue}if(B=="99999.9"){B=null}if(Y=="999"){Y=null}var L="mb";var v=($chk(H))?H+" "+L:"";var O="mb";var I=($chk(B))?B+" "+O:"";var K=($chk(N))?(parseFloat(N)*1.8+32):-999;var j=convertTempIntoUnits(this.units_,K,1);var E=getTempUnits(this.units_);var g=j+" &deg;"+E;var f=($chk(P))?(parseFloat(N)*1.8+32):-999;var C=convertTempIntoUnits(this.units_,f,1);var k=getTempUnits(this.units_);var r=($chk(P))?C+" &deg;"+k:"";var h=($chk(x))?(knotsToMph(parseFloat(x),3)):0;if(x){x=convertWindIntoUnits(this.units_,h)}var Q=getWindUnits(this.units_);var D=lookupWindString(o)+" at "+x+" "+Q;var s=($chk(V))?(knotsToMph(parseFloat(V),3)):0;if($chk(V)){V=convertWindIntoUnits(this.units_,s)}var Z=($chk(V))?V+" "+Q:"";var U=($chk(m))?(knotsToMph(parseFloat(m),3)):0;if($chk(m)){m=convertWindIntoUnits(this.units_,U)}var S=($chk(m))?m+" "+Q:"";var t="mm/hr";if($chk(Y)){Y=parseInt(Y)}var X=($chk(Y))?(Y)+" "+t:"";var q=(d<0)?1:0;var R=this.makeIconHd(U,m,o,q);var z=new GMarker(e,{icon:R,title:M});this.markers_hd.push(z);this.map_.addOverlay(z);var T=this.lookupStormName(l);var a=this.getBalloonContentHd(d,J,l,T,F,this.units_,H,v,B,I,N,g,P,r,o,x,D,V,Z,m,S,Y,X,G);var n=GEvent.callbackArgs(this,this.onClick,z,a);var W=GEvent.addListener(z,"click",n);this.listeners_hd.push(W)}if(p>0){this.showTimestampTitle(l,p)}if(w<b){GLog.write("Too many Hurricane Hunter observations to display at once for this storm. Showing "+w+" of "+b)}};Hurricane.prototype.clearHd=function(){while(this.markers_hd.length>0){this.map_.removeOverlay(this.markers_hd.pop())}while(this.listeners_hd.length>0){GEvent.removeListener(this.listeners_hd.pop())}for(var B in this.storms_){var A=this.storms_[B].hd;if(A){A.empty()}}};Hurricane.prototype.requestModels=function(B){GEvent.trigger(this,"loadstart");var C=this.handleModels.bindAndAppendArgs(this,[B]);var A="/stationmaps/gmap_hur_models.asp?storm="+B;if(this.debug_>0){GLog.write(A)}GDownloadUrl(A,C)};Hurricane.prototype.handleModels=function(responseText,status,prefix){if(responseText==null||status<0){this.loadingData_=false;GEvent.trigger(this,"loaderror","Request Timed Out (status code: "+status+")");return }else{if(status<200||status>=300){this.loadingData_=false;GEvent.trigger(this,"loaderror","Request Failed (status code: "+status+")");return }}try{var data=eval("("+responseText+")")}catch(e){GEvent.trigger(this,"loaderror","Failed to evaluate JSON response");return }if(data.MODEL){this.displayAreaModelsDrawn=false;this.drawModels(data.MODEL,prefix)}else{}GEvent.trigger(this,"loadend")};Hurricane.prototype.drawModels=function(k,V){var M=this.lookupStormName(V);for(var D in k){if(!this.modelsCache[D]){this.modelsCache[D]=[]}var B=k[D];var U=[];var N=$RGB($random(0,255),$random(0,255),$random(0,255)).rgbToHex();var Y=2;var f=1;if(this.display_.models[D]){N=this.display_.models[D].color;Y=this.display_.models[D].weight;f=this.display_.models[D].opacity}var K=0;var Z=null;for(var d in B){var P=B[d];try{var R=parseFloat(P.lat.decimal);var E=parseFloat(P.lon.decimal);if(!R||!E){throw"error"}}catch(j){continue}var S=new GLatLng(R,E);U.push(S);var K=parseInt(P.time.initialized)*1000;var C=parseInt(P.time.epoch)*1000;var I=this.epochToString(C);if(P.color){N=P.color}var g=P.vmax;var A=P.mslp;var W=P.radp;var L=P.rrp;var b=P.ty;var l=P.dir;var a=P.speed;var F=P.mrd;var Q=D+" "+I;if(g){g=parseFloat(g);if(g<=0){g="-"}else{g=convertWindIntoUnits(this.units_,g)}g+=" "+getWindUnits(this.units_)}if(A){if(parseFloat(A)<=0){A="-"}A+=" mb"}if(!Z){Z=this.getMarkerContentModels(N)}var H=Z.clone();var m=new HTMLOverlay(S,H,{mouseable:true,title:Q});this.map_.addOverlay(m);this.shapes_mdl.push(m);this.modelsCache[D].push(m);if(this.skipModels.contains(D)){m.hide()}var O=this.getBalloonContentModels(R,E,V,M,C,K,D,g,A,W,L,b,l,a,F);var X=GEvent.callbackArgs(this,this.onClickPoint,S,O);GEvent.addListener(m,"click",X);GEvent.bind(m,"mouseover",H,function(){this.setStyles({margin:"2px",width:"11px",height:"11px"})});GEvent.bind(m,"mouseout",H,function(){this.setStyles({margin:"5px",width:"5px",height:"5px"})})}var J=new GPolyline(U,N,Y,f);this.shapes_mdl.push(J);this.map_.addOverlay(J);this.modelsCache[D].push(J);if(this.skipModels.contains(D)){J.hide()}if(this.displayAreaTab&&!this.modelsList.contains(D)){var T=new Element("div",{"class":this.sidebarPrefix_+"_box"});var G=new Element("input",{type:"checkbox",checked:"checked",events:{click:function(q,n){q=new Event(q);var o=this.modelsCache[n];if(q.target.checked){this.skipModels.remove(n);for(var p=0;p<o.length;p++){o[p].show()}}else{this.skipModels.push(n);for(var p=0;p<o.length;p++){o[p].hide()}}}.bindAsEventListener(this,[D])}});var c=new Element("span",{events:{click:function(p,i,n,o){p=new Event(p).stop();if(!o.checked){o.click()}}.bindAsEventListener(this,[S,X,G])}});var h=this.getDisplayAreaModels(V,K,D,N);c.setHTML(h);T.adopt(G).adopt(c);this.displayAreaModels.adopt(T);if(this.skipModels.contains(D)){G.checked=false}else{G.checked=true}this.modelsList.push(D)}}this.displayAreaModelsDrawn=true};Hurricane.prototype.clearModels=function(){while(this.shapes_mdl.length>0){var C=this.shapes_mdl.pop();GEvent.clearInstanceListeners(C);this.map_.removeOverlay(C)}for(var A in this.modelsCache){var B=this.modelsCache[A];B.length=0}};Hurricane.prototype.getMarkerContentModels=function(A){var B=new Element("div",{"class":"hur_mdl_box",styles:{"background-color":A,width:"5px",height:"5px",margin:"5px"}});return B};Hurricane.prototype.lookupStormName=function(B){var A=this.storms_[B];if(A&&A.name){return A.name}else{return B}};Hurricane.prototype.epochToString=function(C){var E=new Date(C);var A=getDayAbbr(E.getUTCDay());var D=getMonthAbbr(E.getUTCMonth());var B=zeroPad(A+", "+D+" "+E.getUTCDate(),2)+", "+E.getUTCFullYear()+" "+zeroPad(E.getUTCHours(),2)+":"+zeroPad(E.getUTCMinutes(),2)+" GMT";return B};Hurricane.prototype.showTimestampTitle=function(C,D){var A=this.storms_[C].hd;if(A){var B=this.getDisplayAreaHd(C,D);A.setHTML(B)}};Hurricane.prototype.addSidebarListeners=function(){try{this.wrListener=GEvent.bindDom($(this.sidebarPrefix_+"_wr"),"click",this,function(){GEvent.trigger(this,"settingschanged");this.drawData()})}catch(D){}try{this.codListener=GEvent.bindDom($(this.sidebarPrefix_+"_cod"),"click",this,function(){GEvent.trigger(this,"settingschanged");this.drawData()})}catch(D){}try{this.fxListener=GEvent.bindDom($(this.sidebarPrefix_+"_fx"),"click",this,function(){GEvent.trigger(this,"settingschanged");this.drawData()})}catch(D){}try{this.obsListener=GEvent.bindDom($(this.sidebarPrefix_+"_obs"),"click",this,function(){GEvent.trigger(this,"settingschanged");this.drawData()})}catch(D){}try{this.hdListener=GEvent.bindDom($(this.sidebarPrefix_+"_hd"),"click",this,function(){GEvent.trigger(this,"settingschanged");var E=this.canShowHd();this.toggleHd(E)})}catch(D){}try{this.mdlListener=GEvent.bindDom($(this.sidebarPrefix_+"_mdl"),"click",this,function(){GEvent.trigger(this,"settingschanged");var E=this.canShowModels();this.toggleModels(E)})}catch(D){}try{this.showListener=GEvent.bindDom($(this.sidebarPrefix_+"_show"),"change",this,function(){GEvent.trigger(this,"settingschanged");this.requestData()})}catch(D){}var C=document.getElementsByName(this.sidebarPrefix_+"_img");for(var A=0;A<C.length;A++){var B=GEvent.bindDom(C[A],"click",this,function(){GEvent.trigger(this,"settingschanged");this.decideImageVisibility(true);this.decideImageLegend()});this.imgListeners.push(B)}};Hurricane.prototype.removeSidebarListeners=function(){try{GEvent.removeListener(this.wrListener)}catch(B){}try{GEvent.removeListener(this.codListener)}catch(B){}try{GEvent.removeListener(this.fxListener)}catch(B){}try{GEvent.removeListener(this.obsListener)}catch(B){}try{GEvent.removeListener(this.hdListener)}catch(B){}try{GEvent.removeListener(this.mdlListener)}catch(B){}try{GEvent.removeListener(this.showListener)}catch(B){}for(var A=0;A<this.imgListeners.length;A++){GEvent.removeListener(this.imgListeners[A])}};Hurricane.prototype.toQueryString=function(){var B=this.name_;var H=this.canShowWR()?"1":"0";var G=this.canShowCOD()?"1":"0";var D=this.canShowForecast()?"1":"0";var A=this.canShowTrackObs()?"1":"0";var F=this.canShowHd()?"1":"0";var C=this.canShowModels()?"1":"0";var I=this.getOpacity();var E=this.getImg();return B+".wr="+H+"&"+B+".cod="+G+"&"+B+".fx="+D+"&"+B+".obs="+A+"&"+B+".hd="+F+"&"+B+".mdl="+C+"&"+B+".opa="+I+"&"+B+".img="+E};Hurricane.prototype.toPrefsObject=function(){var A={};var B=this.name_.toUpperCase();A[B+"WR"]=this.canShowWR();A[B+"COD"]=this.canShowCOD();A[B+"FX"]=this.canShowForecast();A[B+"OBS"]=this.canShowTrackObs();A[B+"HD"]=this.canShowHd();A[B+"MDL"]=this.canShowModels();A[B+"OPA"]=this.getOpacity();A[B+"IMG"]=this.getImg();return A};Hurricane.prototype.canShowWR=function(){try{return $(this.sidebarPrefix_+"_wr").checked?true:false}catch(A){return false}};Hurricane.prototype.canShowCOD=function(){try{return $(this.sidebarPrefix_+"_cod").checked?true:false}catch(A){return true}};Hurricane.prototype.canShowForecast=function(){try{return $(this.sidebarPrefix_+"_fx").checked?true:false}catch(A){return true}};Hurricane.prototype.canShowTrackObs=function(){try{return $(this.sidebarPrefix_+"_obs").checked?true:false}catch(A){return true}};Hurricane.prototype.canShowHd=function(){try{return $(this.sidebarPrefix_+"_hd").checked?true:false}catch(A){return false}};Hurricane.prototype.canShowModels=function(){try{return $(this.sidebarPrefix_+"_mdl").checked?true:false}catch(A){return false}};Hurricane.prototype.getShowing=function(){try{return $(this.sidebarPrefix_+"_show").getValue()}catch(A){return"current"}};Hurricane.prototype.getImg=function(){var A=getRadioValue(this.sidebarPrefix_+"_img");if(A){return A}else{return"0"}};Hurricane.prototype.decideImageVisibility=function(B){var A=this.getImg();if(A=="0"){this.disabled_=true;this.hideImage()}else{this.disabled_=false;if(B){this.redrawOnMoveEnd()}}};Hurricane.prototype.decideImageLegend=function(){var B=this.getImg();var F=["srg"];var A={};for(var D=0;D<F.length;D++){var C=F[D];var E=$(this.sidebarPrefix_+"_legend_"+C);if(E){A[C]=E}}for(var C in A){var E=A[C];if(C==B){E.removeClass("none")}else{E.addClass("none")}}};Hurricane.prototype.getDisplayProperties=function(){return{windradius:{node_34:{strokeColor:"#000000",strokeOpacity:1,strokeWeight:1,fillColor:"#7AFE00",fillOpacity:0.9},node_50:{strokeColor:"#000000",strokeOpacity:1,strokeWeight:1,fillColor:"#CAFF69",fillOpacity:0.9},node_64:{strokeColor:"#000000",strokeOpacity:1,strokeWeight:1,fillColor:"#FFFF00",fillOpacity:0.9},node_100:{strokeColor:"#000000",strokeOpacity:1,strokeWeight:1,fillColor:"#FF0000",fillOpacity:0.9}},iconcache:{},defaults:{wp:{error:{node_0:"0.6",node_1:"1.2",node_2:"1.7",node_3:"2.2",node_4:"3.2",node_5:"4.2",node_6:"5.2",node_7:"5.2",node_8:"5.2",node_9:"5.2"}},at:{error:{node_0:"0.60",node_1:"1.03",node_2:"1.48",node_3:"1.85",node_4:"2.8",node_5:"2.8",node_6:"3.8",node_7:"3.8",node_8:"5.0",node_9:"5.0"}},ep:{error:{node_0:"0.6",node_1:"1.0",node_2:"1.4",node_3:"1.75",node_4:"2.5",node_5:"2.5",node_6:"3.1",node_7:"3.1",node_8:"3.8",node_9:"3.8"}}},models:{}}};