﻿
﻿
var homesSearchPopUp=null;var homesResultsPopUp=null;var sheltersPopUp=null;var homeSearchMarker=null;function getHomesSearch(){trackStats("homesDash","Searched Homes");if(homeSearchMarker!=null)map.removeOverlay(homeSearchMarker);$("homesDashResultsTarget").innerHTML="";var addy=$F("homesSearchLocation");var city=$F("homesSearchCity");var state=$F("homesSearchState");if(state!="FL")Windows.close("uniqueDashhomesDash");var zip=$F("homesSearchZip");var location=addy+" "+city+", "+state+" "+zip;geocoder.getLocations(location,function(result)
{if(result.Status.code==G_GEO_SUCCESS){var p=result.Placemark[0].Point.coordinates;var addy=result.Placemark[0].address;map.setCenter(new GLatLng(p[1],p[0]),17);if(state!="FL"){var home=new SuperHome(p[1],p[0],addy);homeSearchMarker=home.marker;}else{var icon=new GIcon;icon.image="images/icons/wind/r5_180.png";icon.iconSize=new GSize(31,32);icon.iconAnchor=new GPoint(15,16);icon.infoWindowAnchor=new GPoint(15,16);homeSearchMarker=new GMarker(new GLatLng(p[1],p[0]),icon);}
map.addOverlay(homeSearchMarker);}else{var reason="Code "+result.Status.code;if(geocodingReasons[result.Status.code]){reason=geocodingReasons[result.Status.code]}
alert('Could not find "'+location+'" '+reason);}});}
function addHomeToResults(home){var d=home.data;var html="<div style='width:92%;clear:both; float:left; margin-bottom:8px;'><a class='homeLink' style='display:block; color:#333333; margin:5px 0 0 10px;' href='javascript:;' "+"onclick='loadHomeFromDash(\""+d.index+"\")'>"+"<div style='float:left; margin-right:3px;'>"+"<img src='images/icons/properties/"+d.icon+"' border='0' alt='"+d.buildCat+"' title='"+d.buildCat+"' />"+"</div>"+"<div>"+"<h5 class='georgia blue'>"+d.addy+"</h5>"+"<span style='color:#33AA33;'>"+formatCurrency(d.just)+"</span><br />";if(d.damage!=0){html+="<span class='red'>Damaged</span>";}
html+="</div></a></div>";new Insertion.Bottom("homesDashResultsTarget",html);}
function addShelterToResults(shelter){var d=shelter.data;var image=shelter.image;var html="<div style='width:95%; float:left; clear:both; margin-bottom:8px;'><a class='homeLink' style='display:block; color:#333333; margin:5px 0 0 10px;' href='javascript:;' "+"onclick='loadShelterFromDash(\""+d.index+"\")'>"+"<div style='float:left; margin-right:3px;'>"+"<img src='"+image+"' border='0'>"+"</div><div>"+"<h5 class='georgia blue'>"+d.name+"</h5>"+"<span>Distance: <b>"+d.distance+" miles</b></span><br />"+"<span>"+d.status+"</span>"+"</div>";html+="</a></div>";new Insertion.Bottom("homesDashSheltersTarget",html);}
function loadHomeFromDash(i){var h=homesManager.homeArray[i];h.marker.openInfoWindowTabsHtml(h.html,{suppressMapPan:true});h.panToMarker();Windows.close("uniqueDashhomesDash");}
function loadShelterFromDash(i){var s=shelterManager.shelterArray[i];s.marker.openInfoWindowTabsHtml(s.html,{suppressMapPan:true});s.panToMarker();Windows.close("uniqueDashhomesDash");}
function undockHomesDash(){undockWindow(homesSearchPopUp,'homesDashSearchDock','Search Homes',['homesDashResultsDock','homesDashSheltersDock']);undockWindow(homesResultsPopUp,'homesDashResultsDock','Homes results',['homesDashSearchDock','homesDashSheltersDock']);undockWindow(sheltersPopUp,'homesDashShelterssDock','Shelters',['homesDashSearchDock','homesDashResultsDock'])
Windows.close("uniqueDashhomesDash");}
var SuperHome=Class.create();SuperHome.prototype={initialize:function(lat,lng,addy){this.addy=addy?addy:"Unknown Address";this.data=new Hash();this.data.id=lat+"^"+lng;this.data.lat=lat;this.data.lng=lng;this.data.addy=this.addy;this.icon=this.getIcon();this.html=new Array();this.html.push(new GInfoWindowTab("Info","<div class='homesBubbleSizer'><div id='homeInfoTarget'></div></div>"));this.html.push(new GInfoWindowTab("Report","<div id='damageReportFormTarget'>"+genInputForm(this.data)+"</div>"));this.html.push(new GInfoWindowTab("Subscribe","<div id='subscribeFormTarget'>"+genSubscribeForm(this.data)+"</div>"));this.point=new GLatLng(lat,lng);this.marker=this.createMarker(this.point,this.html,this.icon);this.isOpened=false;},buildBubble:function(){return'<div>'+'<b>Latitude: </b>'+this.data.lat+'<br />'+'<b>Longitude: </b>'+this.data.lng+'<br /><br />'+'<b>Address:</b><br />'+'<p>'+this.data.addy+'</p><br />'+'<span style="font-size:14px; display:block; width:250px; margin-left:20px;"><i>If the above address is missing or incorrect, please fix it within the damage report form before submitting a damage report on the "Report" tab.</i></span>'+'</div>';},getIcon:function(){var icon=new GIcon();icon.image="images/icons/homeLookupIcon.png";icon.iconSize=new GSize(34,33);icon.iconAnchor=new GPoint(17,16);icon.infoWindowAnchor=new GPoint(17,16);return icon;},createMarker:function(point,html,ic){var marker=new GMarker(point,{draggable:true,icon:ic});marker.tooltip="<div class='tooltip'>Drag marker to place, click to report damage</div>";GEvent.addListener(marker,"click",function(){marker.openInfoWindowTabsHtml(html,{suppressMapPan:true});var markerLocation=marker.getPoint();var pixels=map.fromLatLngToDivPixel(markerLocation);var center=map.getCenter();var centerPixels=map.fromLatLngToDivPixel(center);var y=pixels.y;y=y-100;var newLatLng=map.fromDivPixelToLatLng(new GPoint(pixels.x,y));map.panTo(newLatLng);this.isOpened=true;}.bind(this));GEvent.addListener(marker,"infowindowopen",function(){var markerPosition=marker.getPoint();this.data.lat=markerPosition.lat();this.data.lng=markerPosition.lng();this.data.id=this.data.lat+"^"+this.data.lng;$("parcelLat").value=this.data.lat;$("parcelLng").value=this.data.lng;$("parcel_id").value=this.data.id;$("homeInfoTarget").innerHTML=this.buildBubble();if(!allowDamageReport)$("damageReportForm").disable();homesManager.removeMoveListener();servicesManager.removeMoveListener();}.bind(this));GEvent.addListener(marker,"infowindowclose",function(){this.isOpened=false;homesManager.addMoveListener();servicesManager.addMoveListener();}.bind(this));GEvent.addListener(marker,"mouseover",function(){showTooltip(marker,map);});GEvent.addListener(marker,"mouseout",function(){tooltip.style.visibility="hidden"});return marker;},addToMap:function(){this.isMapped=true;map.addOverlay(this.marker);},removeFromMap:function(){this.isMapped=false;map.removeOverlay(this.marker);},destroy:function(){if(this.isOpened)return false;this.removeFromMap();this.marker=null;this.icon=null;this.point=null;this.html=null;return true;}}
function toggleShowShelters(){var show=$F("showSheltersCB");show=show?$("showSheltersCB").value:"false";if(show=="true"){shelterManager.showShelters();}else{shelterManager.hideShelters();}}
﻿
var homesManager;var currentParcel;var currentMarker=null;var allowDamageReport=false;var HomesManager=Class.create();var homesMarkerManager=null;HomesManager.prototype={initialize:function(){this.homeArray=new Array();this.oosHomeArray=new Array();this.firstTime=true;this.areHomesShown=false;this.infoWindowOpened=false;GEvent.addListener(map,"zoomend",function(oldLevel,newLevel){if(newLevel>=17){this.showHomes();}else{this.hideHomes();this.firstTime=false;if(homeSearchMarker!=null)map.removeOverlay(homeSearchMarker);}}.bind(this));},getHomes:function(){if(this.infoWindowOpened)return;showLoading();var bounds=map.getBounds();var sw=bounds.getSouthWest();var ne=bounds.getNorthEast();var swlat=sw.lat();var swlng=sw.lng();var nelat=ne.lat();var nelng=ne.lng();$("homesDashResultsTarget").innerHTML="loading...";ibiseye.srvGetParcels(""+swlat,""+swlng,""+nelat,""+nelng,this.getHomes_result.bind(this));},getHomes_result:function(r){var ds=r.value;if(ds==null)return;var rows=ds.Tables[0].Rows.length;var rows2=ds.Tables[1].Rows.length;this.clearOutHomes();if((rows==0)&&(rows2==0)){hideLoading();$("homesDashResultsTarget").innerHTML="no results found";return;}
$("homesDashResultsTarget").innerHTML="";for(var i=0;i<rows;i++){var row=ds.Tables[0].Rows[i];var data=this.buildData(row,i);var newHome=new Home(data);this.homeArray.push(newHome);}
if((rows2!=0)){for(var j=0;j<rows2;j++){var row=ds.Tables[1].Rows[j];var data=this.buildData(row,j);var newHome=new Home(data);this.oosHomeArray.push(newHome);}}
this.addHomesToDash();hideLoading();},buildData:function(row,index){var data=new Hash();data.id=row.PARCEL_NO;data.addy=row.PARCEL_ADD;data.addyType=row.ADD_TYPE;data.buildValue=row.PARCEL_BLG;data.just=row.PARCEL_JUST;data.landOnly=row.PARCEL_LAND;data.buildClass=row.PARCEL_CLASS;data.county=row.PARCEL_CNTY;data.buildCat=row.PARCEL_CAT;data.buildType=row.PARCEL_TYPE;data.nb=row.PARCEL_NB;data.buildYear=row.PARCEL_BYEAR;data.countyNum=row.COUNTYNO;data.lat=row.LAT;data.lng=row.LON;data.ddl=row.DDL;data.damage=row.DAMAGE;data.index=index;data.icon=row.PARCEL_TYPE_ICON;return data;},addHomesToDash:function(){this.homeArray.each(function(home,index){addHomeToResults(home);});},showHomes:function(){this.areHomesShown=true;this.getHomes();this.tempMoveListener=GEvent.addListener(map,"moveend",function(){GEvent.removeListener(this.tempMoveListener);this.addMoveListener();}.bind(this));},hideHomes:function(){this.removeMoveListener();this.areHomesShown=false;this.clearOutHomes();},addMoveListener:function(){if(this.mapListener==null){this.mapListener=GEvent.addListener(map,"moveend",function(){this.getHomes();}.bind(this));}},removeMoveListener:function(){if(this.mapListener)
GEvent.removeListener(this.mapListener);this.mapListener=null;},clearOutHomes:function(){var survived=null;this.homeArray.each(function(home,index){var destroyed=home.destroy();});this.homeArray=new Array();this.oosHomeArray.each(function(home,index){var destroyed=home.destroy();});this.oosHomeArray=new Array();}}
var Home=Class.create();Home.prototype={initialize:function(data){this.data=data;this.icon=this.getIcon(data.icon,data.damage);this.html=new Array();var infoHtml=this.buildBubble(data);this.html.push(new GInfoWindowTab("Info","<div class='homesBubbleSizer'>"+infoHtml+"</div>"));this.html.push(new GInfoWindowTab("Report","<div id='damageReportFormTarget'>"+genInputForm(data)+"</div>"));this.html.push(new GInfoWindowTab("Damage","<div id='damageTarget'><span class='georgia red' style=font-size:18px;'>No Damage Reported</span></div>"));this.html.push(new GInfoWindowTab("Subscribe","<div id='subscribeFormTarget'>"+genSubscribeForm(data)+"</div>"));this.point=new GLatLng(data.lat,data.lng);this.marker=this.createMarker(this.point,this.html,this.icon,data.addy,data);this.isOpened=false;this.addToMap();},buildBubble:function(data){var html='<div class="bubbleElementContainer" style="background-color:#FFFFFF; float:left"> '+'<h3 class="stormBubbleStormName" style="margin-bottom:5px;">'+data.addy+'</h3>'+'   <span class="bubbleLeft">address type: </span><span class="bubbleRight">'+data.addyType+'</span>'+'<div class="bubbleElementContainer">'+'   <span class="bubbleLeft">Total Value: </span><span class="bubbleRight">'+formatCurrency(data.just)+'</span>'+'</div><div class="bubbleElementContainer" style="color:#666666;">'+'   <span class="bubbleLeft" style="color:#999999;">Structure Value: </span><span class="bubbleRight">'+formatCurrency(data.buildValue)+'</span>'+'</div><div class="bubbleElementContainer" style="color:#666666;">'+'   <span class="bubbleLeft" style="color:#999999;">Land Value: </span><span class="bubbleRight">'+formatCurrency(data.landOnly)+'</span>'+'</div><div class="bubbleElementContainer">'+'   <span class="bubbleLeft">County:</span><span class="bubbleRight">'+data.county+'</span>'+'</div><div class="bubbleElementContainer">'+'   <span class="bubbleLeft">Building Category:</span><span class="bubbleRight">'+data.buildCat+'</span>'+'</div><div class="bubbleElementContainer">'+'   <span class="bubbleLeft">Building Type:</span><span class="bubbleRight">'+data.buildType+'</span>'+'</div><div class="bubbleElementContainer">'+'   <span class="bubbleLeft">Year Constructed:</span><span class="bubbleRight">'+data.buildYear+'</span>'+'</div><div class="bubbleElementContainer">'+'   <span class="bubbleLeft">Lat:</span><span class="bubbleRight">'+data.lat+'</span>'+'</div><div class="bubbleElementContainer">'+'   <span class="bubbleLeft">Lng:</span><span class="bubbleRight">'+data.lng+'</span>'+'</div>';if(shelterManager.sheltersShown){html+='<div class="bubbleElementContainer" style="margin-top:10px;">'+'   <span><a href="javascript:;" onclick="getDirectionsFromHome(\''+data.index+'\')">Get Directions to nearest shelter</a></span>'+'</div>';}
html+='</div>';return html;},getIcon:function(type,damaged){var icon=new GIcon();icon.image="images/icons/properties/"+type;icon.iconSize=new GSize(30,30);icon.iconAnchor=new GPoint(15,15);icon.infoWindowAnchor=new GPoint(15,15);return icon;},createMarker:function(point,html,ic,toolText,data){var marker=new GMarker(point,ic);marker.data=data;marker.tooltip="<div class='tooltip'>"+toolText+"</div>";GEvent.addListener(marker,"click",function(){homesManager.removeMoveListener();marker.openInfoWindowTabsHtml(html,{suppressMapPan:true});this.panToMarker();}.bind(this));GEvent.addListener(marker,"infowindowopen",function(){homesManager.removeMoveListener();servicesManager.removeMoveListener();currentMarker=marker;this.isOpened=true;homesManager.infoWindowOpened=true;getDamage(marker.data.id);if(!allowDamageReport)$("damageReportForm").disable();trackStats("homesDash","Viewed Home%20"+marker.data.id);}.bind(this));GEvent.addListener(marker,"infowindowclose",function(){this.isOpened=false;homesManager.infoWindowOpened=false;currentMarker=null;homesManager.addMoveListener();servicesManager.addMoveListener();}.bind(this));GEvent.addListener(marker,"mouseover",function(){showTooltip(marker,map);});GEvent.addListener(marker,"mouseout",function(){tooltip.style.visibility="hidden"});return marker;},panToMarker:function(){var markerLocation=this.marker.getPoint();var pixels=map.fromLatLngToDivPixel(markerLocation);var center=map.getCenter();var centerPixels=map.fromLatLngToDivPixel(center);var y=pixels.y;y=y-100;var newLatLng=map.fromDivPixelToLatLng(new GPoint(pixels.x,y));map.panTo(newLatLng);},addToMap:function(){this.isMapped=true;map.addOverlay(this.marker);},removeFromMap:function(){this.isMapped=false;map.removeOverlay(this.marker);},destroy:function(){this.removeFromMap();this.marker=null;this.data=null;this.icon=null;this.point=null;this.html=null;return true;}}
function getDamage(parcelID){ibiseye.srvGetDamage(parcelID,getDamage_result);}
function getDamage_result(r){var ds=r.value;var rows=ds.Tables[0].Rows.length;if(rows==0){return;}
var html='<div style="background-color:#FFFFFF; float:left; overflow:scroll; height:280px; width:500px;"> '
for(var i=0,j=rows;i<rows;i++,j--){var count=j;var row=ds.Tables[0].Rows[i];var data=new Hash();html+='<div style="margin-bottom:10px; border-bottom:1px solid black; float:left; padding-bottom:8px; ">'+'<h3 class="stormBubbleStormName" style="margin-bottom:5px;">Report #'+count+'</h3>'+'<div class="bubbleElementContainer">'+'   <span class="bubbleLeft">Submitted on: </span><span class="bubbleRight">'+row.SUBMITED+'</span>'+'</div><div class="bubbleElementContainer">'+'   <span class="bubbleLeft">General Damage: </span><span class="bubbleRight">'+row.DAMAGE_GENERAL+'</span>'+'</div><div class="bubbleElementContainer">'+'   <span class="bubbleLeft">Electric: </span><span class="bubbleRight">'+row.UTILS_ELECTRIC+'</span>'+'</div><div class="bubbleElementContainer">'+'   <span class="bubbleLeft">Water: </span><span class="bubbleRight">'+row.UTILS_WATER+'</span>'+'</div><div class="bubbleElementContainer">'+'   <span class="bubbleLeft">Gas: </span><span class="bubbleRight">'+row.UTILS_GAS+'</span>'+'</div><div class="bubbleElementContainer">'+'   <span class="bubbleLeft">Phone: </span><span class="bubbleRight">'+row.UTILS_PHONE+'</span>'+'</div><div class="bubbleElementContainer">'+'   <span class="bubbleLeft">Sources: </span><span class="bubbleRight red">'+row.SOURCE.replace(/;/g,"<br>")+'</span>'+'</div><div class="bubbleElementContainer">'+'   <span class="bubbleLeft">Flooding: </span><span class="bubbleRight">'+row.FLOODING+'</span>'+'</div><div class="bubbleElementContainer">'+'   <span class="bubbleLeft">Roof: </span><span class="bubbleRight">'+row.ROOF+'</span>'+'</div><div class="bubbleElementContainer">'+'   <span class="bubbleLeft">Structure: </span><span class="bubbleRight">'+row.STRUCTURE+'</span>'+'</div><div class="bubbleElementContainer">'+'   <span class="bubbleLeft">Comments: </span><span class="bubbleRight">'+row.COMMENTS+'</span>'+'</div></div>'}
html+="</div>";$("damageTarget").innerHTML=html;}
function genInputForm(data){var html="";html+='<form style="width:500px;height:275px;overflow:auto;" name="damageReportForm" id="damageReportForm" >'+'<input type="hidden" name="parcel_id" id="parcel_id" value="'+data.id+'" />'+'<input type="hidden" name="parcelLat" id="parcelLat" value="'+data.lat+'" />'+'<input type="hidden" name="parcelLng" id="parcelLng" value="'+data.lng+'" />'+'<div id="formContainer">'+'<center><big><strong>New Damage Report</strong></big><br>'+'<span id="faddress"></span></center><br>'+'<label class="smallLabel">Name: </label><input type="text" name="name" id="name" /><br>'+'<label>Email: </label><input type="text" name="email" id="email" class="formItem required validate-email"><br>'+'<span class="custom-advice errorMessage" style="display:none;width:90%; font-style:italic; margin:1px 0 0 100px;" id="advice-email">Please enter a valid E-mail address</span>'+'<label>Phone: </label><input type="text" name="phone" id="phone"><br>';if(data.addy){html+='<label>Street Address: </label><input type="text" name="streetAddress" id="streetAddress" value="'+data.addy+'" ><br>';}else{html+='<label>Street Address: </label><input type="text" name="streetAddress" id="streetAddress"><br>';}
html+='<label><strong>Relation: </strong></label>'+'<select name="relation" id="relation">'+'<option selected value="Owner">Owner</option>'+'<option value="Tenant">Tenant</option>'+'<option value="Neighbor">Neighbor</option>'+'<option value="Other">Other</option>'+'</select><br>'+'<label><strong>Storm: </strong></label>'+'<select name="stormDoingDamage" id="stormDoingDamage">'+'<option selected value="">Choose A Storm</option>'+'</select><br>'+'<div id="utilDiv">'+'<label class="bigLabel" style="width:200px"><strong>Utility Details</strong></label>'+'<label class="otherLabel"><strong>Electric: </strong></label>'+'<select name="electricity" id="electricity">'+'<option value="unknown">Unknown</option>'+'<option value="Available" selected>Available</option>'+'<option value="Restored">Restored</option>'+'<option value="No Service">No Service</option>'+'</select>'+'<label class="otherLabel"><strong>Water: </strong></label>'+'<select name="water" id="water">'+'<option value="unknown">Unknown</option>'+'<option value="Available" selected>Available</option>'+'<option value="Restored">Restored</option>'+'<option value="No Service">No Service</option>'+'</select>'+'<label class="otherLabel"><strong>Gas: </strong></label>'+'<select name="gas" id="gas">'+'<option value="unknown">Unknown</option>'+'<option value="Available" selected>Available</option>'+'<option value="Restored">Restored</option>'+'<option value="No Service">No Service</option>'+'</select>'+'<label class="otherLabel"><strong>Phone: </strong></label>'+'<select name="phoneline" id="phoneline">'+'<option value="unknown">Unknown</option>'+'<option value="Available" selected>Available</option>'+'<option value="Restored">Restored</option>'+'<option value="No Service">No Service</option>'+'</select>'+'</div>'+''+'<label class="otherLabel"><strong>Damage: </strong></label>'+'<select style="float:left; clear:both;" name="damage" id="damage" onchange="checkDamage(this);">'+'<option selected value="No Damage">No Damage</option>'+'<option value="Cosmetic Damage Only">Cosmetic Damage Only</option>'+'<option value="Some Structural Damage">Some Structural Damage</option>'+'<option value="Substantial Structural Damage">Substantial Structural Damage</option>'+'<option value="Destroyed/Collapsed">Destoryed/Collapsed</option>'+'</select>'+'<div id="showDamage">'+'<label class="bigLabel"><strong>Source of damage</strong></label>'+'<div>'+'<div><input type="checkbox" disabled="true" name="fromTrees" id="fromTrees" value="Falling trees and limbs" onchange="checkStructure(this);"><label>Falling trees and limbs</label></div>'+'<div><input type="checkbox" disabled="true" name="fromDebris" id="fromDebris" value="Flying debris" onchange="checkStructure(this);"><label>Flying debris</label></div>'+'<div><input type="checkbox" disabled="true" name="fromSurge" id="fromSurge" value="Storm surge" onchange="checkFlooding(this);"><label>Storm surge</label></div>'+'<div><input type="checkbox" disabled="true" name="fromFlooding" id="fromFlooding" value="Inland flooding" onchange="checkFlooding(this);"><label>Inland flooding</label></div>'+'<div><input type="checkbox" disabled="true" name="fromWind" id="fromWind" value="Wind" onchange="checkStructure(this);"><label>Wind</label></div>'+'</div>'+'<div id="showFlooding">'+'<label class="bigLabel" style="clear:both;"><strong>Flooding: </strong></label>'+'<select disabled="true" name="flooding" id="flooding">'+'<option selected value="None">None</option>'+'<option value="Less than a foot">Less than a foot</option>'+'<option value="Between 1 and 3 feet">Between 1 and 3 feet</option>'+'<option value="Between 3 and 6 feet">Between 3 and 6 feet</option>'+'<option value="Between 6 and 8 feet">Between 6 and 8 feet</option>'+'<option value="More than 1 story">More than 1 story</option>'+'</select>'+'</div>'+'<div id="showStructure">'+'<label class="bigLabel"><strong>Roof: </strong></label>'+'<select disabled="true" name="roof" id="roof">'+'<option selected value="None">None</option>'+'<option value="Minor cosmetic damage">Minor cosmetic damage</option>'+'<option value="Substantial csometic damage">Substantial cosmetic damage</option>'+'<option value="Some loss of roof">Some loss of roof</option>'+'<option value=Substantial loss of roof">Substantial loss of roof</option>'+'</select><br>'+'<label class="bigLabel"><strong>Structure: </strong></label>'+'<select disabled="true" name="structure" id="structure">'+'<option selected value="None">None</option>'+'<option value="Minor cosmetic damage">Minor cosmetic damage</option>'+'<option value="Substantial cosmetic damagee">Substantial cosmetic damage</option>'+'<option value="Some collapse">Some collapse</option>'+'<option value="Substantial collapse">Substantial collapse</option>'+'</select>'+'</div>'+'</div>'+'<div id="commentDiv">'+'<label class="bigLabel"><strong>Comments</strong></label>'+'<textarea rows="4" cols="40" name="comments" id="comments"></textarea>'+'<label class="commentLabel">Make my email and comments public</label><input class="commentCheck" type="checkbox" name="isPublic" id="isPublic" value="1" checked >'+'<input style="float:left; clear:both; text-align:center;" type="button" onclick="sendDamageReport()" value="Send Damage Report">'+'</div>'+'</div>'+'</form>';return html;}
function sendDamageReport(){var v=new Validation("damageReportForm",{stopOnFirst:false,immediate:true});if(!v.validate())return;var passer=$("damageReportForm").serialize(true);passer.fromTrees=passer.fromTrees?$("fromTrees").value:"";passer.fromDebris=passer.fromDebris?$("fromDebris").value:"";passer.fromSurge=passer.fromSurge?$("fromSurge").value:"";passer.fromFlooding=passer.fromFlooding?$("fromFlooding").value:"";passer.fromWind=passer.fromWind?$("fromWind").value:"";var fullSource=passer.fromTrees+";"+passer.fromDebris+";"+passer.fromSurge+";"+passer.fromFlooding+";"+
passer.fromWind;passString=passer.parcelLat+"|"+passer.parcelLng+"|"+passer.parcel_id+"|"+passer.name+"|"+passer.email+"|"+passer.isPublic+"|"+passer.relation+"|"+
passer.electricity+"|"+passer.water+"|"+passer.gas+"|"+passer.phoneline+"|"+
passer.damage+"|"+fullSource+"|"+passer.flooding+"|"+passer.roof+"|"+
passer.structure+"|"+passer.streetAddress+"|"+passer.comments+"|"+passer.stormDoingDamage;if($("outOfStateAddy")!=null){var addy=$F("outOfStateAddy");passString+="|"+addy;}
currentParcel=passer.parcel_id;trackStats("homesDash","Sent%20Damage%20Report%20"+passer.parcel_id);ibiseye.srvSaveDamage(passString,saveDamage_result);}
function saveDamage_result(r){$("damageReportFormTarget").innerHTML=r.value;getDamage(currentParcel);if(currentMarker){currentMarker.setImage("images/icons/damagedHomeIcon.png");}}
function checkDamage(elem){if($F("damage")!="No Damage"){Form.Element.enable("fromTrees");Form.Element.enable("fromDebris");Form.Element.enable("fromSurge");Form.Element.enable("fromFlooding");Form.Element.enable("fromWind");}else{Form.Element.disable("fromTrees");Form.Element.disable("fromDebris");Form.Element.disable("fromSurge");Form.Element.disable("fromFlooding");Form.Element.disable("fromWind");Form.Element.disable("flooding");Form.Element.disable("roof");Form.Element.disable("structure");}}
function checkStructure(elem){if($F("fromTrees")||$F("fromDebris")||$F("fromWind")){Form.Element.enable("structure");Form.Element.enable("roof");}else{Form.Element.disable("structure");Form.Element.disable("roof");}}
function checkFlooding(elem){if($F("fromSurge")||$F("fromFlooding")){Form.Element.enable("flooding");}else{Form.Element.disable("flooding");}}
function genSubscribeForm(data){return'<form style="width:500px;height:275px;overflow:auto;" name="alertSubscribeForm" id="alertSubscribeForm" >'+'<h4> Subscribe to weather alerts and damage reports</h4><br /><br />'+'<input type="hidden" value="'+data.lat+'" id="subLat" name="subLat" />'+'<input type="hidden" value="'+data.lng+'" id="subLng" name="subLng" />'+'<label>Local Hurricane Statement: </label><input type="checkbox" value="HUR" id="subHUR" name="subHUR" /><br />'+'<label>Flood Watch: </label><input type="checkbox" value="WAT" id="subWAT" name="subWAT" /><br />'+'<label>Flood Warning: </label><input type="checkbox" value="FLO" id="subFLO" name="subFLO" /><br />'+'<label>Tornado Watch: </label><input type="checkbox" value="TOW" id="subTOW" name="subTOW" /><br />'+'<label>Tornado Warning: </label><input type="checkbox" value="TOR" id="subTOR" name="subTOR" /><br />'+'<label>Severe Thunderstorm Watch: </label><input type="checkbox" value="SEW" id="subSEW" name="subSEW" /><br />'+'<label>Severe Thunderstorm Warning: </label><input type="checkbox" value="WRN" id="subWRN" name="subWRN" /><br />'+'<label>Severe Weather Statement: </label><input type="checkbox" value="SVR" id="subSVR" name="subSVR" /><br />'+'<label>All: </label><input type="checkbox" value="ALL" id="subALL" name="subALL" checked /><br />'+'<label>Your Name: </label><input type="text" size="30" id="subName" name="subName" /><br />'+'<label>Your Email Address: </label><input type="text" size="30" id="subEmail" name="subEmail" class="required validate-email" /><br />'+'<span class="custom-advice errorMessage" style="display:none;width:90%; font-style:italic; margin:1px 0 0 100px;" id="advice-subEmail">Please enter a valid E-mail address</span>'+'<input type="button" onclick="doSubscribe();" value="Subscribe" />'+'</form>';}
function doSubscribe(){var v=new Validation("alertSubscribeForm",{stopOnFirst:true,immediate:true});if(!v.validate())return;var f=$("alertSubscribeForm").serialize(true);f.subHUR=f.subHUR?$("subHUR").value:"";f.subWAT=f.subWAT?$("subWAT").value:"";f.subFLO=f.subFLO?$("subFLO").value:"";f.subTOW=f.subTOW?$("subTOW").value:"";f.subTOR=f.subTOR?$("subTOR").value:"";f.subSEW=f.subSEW?$("subSEW").value:"";f.subWRN=f.subWRN?$("subWRN").value:"";f.subSVR=f.subSVR?$("subSVR").value:"";f.subALL=f.subALL?$("subALL").value:"";$("alertSubscribeForm").disable();var request=f.subLat+"|"+f.subLng+"|"+f.subName+"|"+f.subEmail+"|start123|"+
f.subHUR+";"+f.subWAT+";"+f.subFLO+";"+f.subTOW+";"+f.subTOR+";"+f.subSEW+";"+f.subWRN+";"+f.subSVR+";"+f.subALL;trackStats("homesDash","Subscribed%20Alerts%20");ibiseye.srvSaveAlertRequest(request,doSubscribe_result);}
function doSubscribe_result(r){$("alertSubscribeForm").innerHTML=r.value;}
﻿
var map;var miniMap;var currentMapZoom;var currentMapLat;var currentMapLng;var currentDirections;var trafficOverlay;Event.observe(window,'load',createMap);Event.observe(window,'resize',function(){if(map)
map.checkResize();});function createMap(){getVersion();createLegend();createMenu();createDashboards();var pageSize=WindowUtilities.getPageSize();$("map").style.height=pageSize.windowHeight;$("map").style.width=pageSize.windowWidth;map=new GMap2($("map"));var startLat=$("startLat").innerHTML;var startLng=$("startLng").innerHTML;var endLat=$("endLat").innerHTML;var endLng=$("endLng").innerHTML;var point1=new GLatLng(startLat,startLng);var point2=new GLatLng(endLat,endLng);var bounds=new GLatLngBounds();bounds.extend(point1);bounds.extend(point2);var clat=(bounds.getNorthEast().lat()+bounds.getSouthWest().lat())/2;var clng=(bounds.getNorthEast().lng()+bounds.getSouthWest().lng())/2;var centerLatLng=new GLatLng(clat,clng);var boundsZoom=map.getBoundsZoomLevel(bounds);if(isIE6)
map.setCenter(new GLatLng(25.44867367928756,-75.6328125),5);if(boundsZoom>6)boundsZoom=6;map.setCenter(centerLatLng,boundsZoom);map.addControl(new GLargeMapControl());map.addControl(new GScaleControl());map.addControl(new GMapTypeControl());map.addMapType(G_PHYSICAL_MAP);map.setMapType(G_PHYSICAL_MAP);miniMap=map.addControl(new GOverviewMapControl(new GSize(100,100)));map.enableContinuousZoom();map.enableDoubleClickZoom();map.enableScrollWheelZoom();geocoder=new GClientGeocoder();initToolTips(map);stormCollection=new StormCollection();riskManager=new RiskManager();weatherAlertManager=new WeatherAlertManager();windManager=new WindManager();homesManager=new HomesManager();servicesManager=new ServicesManager();shelterManager=new ShelterManager();GEvent.addListener(map,"moveend",getMapPosition);getMapPosition();checkVisit();var loadedActive=checkActive();if(!loadedActive){stormCollection.showingPOI=true;stormCollection.showPOI();$("poiCB").checked=true;}
GEvent.addListener(map,"dblclick",function(){if(currentMapZoom>=17){if(homeSearchMarker)map.removeOverlay(homeSearchMarker);var home=new SuperHome(arguments[1].lat(),arguments[1].lng());homeSearchMarker=home.marker;map.addOverlay(homeSearchMarker);}});GEvent.addListener(map,"zoomend",function(oldLevel,newLevel){if((map.getCurrentMapType().getName()=="Terrain")&&(newLevel>14)){map.setMapType(G_NORMAL_MAP);}});GEvent.addListener(map,"maptypechanged",function(){reindexGroundOverlays();});initTiles();initHotspots();map.checkResize();undonorton();}
function getMapPosition(oldLevel,newLevel){var center=map.getCenter();currentMapLat=center.lat();currentMapLng=center.lng();currentMapZoom=map.getZoom();}
﻿
var theme="alphacube";var dashes=new Array();var currentDash="";function createLegend(){var legend=new Window({maximizable:false,resizable:true,width:140,height:360,closable:false,right:0,top:30,className:theme,draggable:true,minHeight:360});legend.setContent("legend");legend.show();}
function createMenu(){var menu=new Window({maximizable:false,resizable:false,width:590,height:30,closable:false,minimizable:false,left:90,top:-20,className:theme,draggable:true,id:"mainMenuDashboard"});menu.setContent("mainMenuDiv");menu.showCenter(false,-20);var menuLeft=$("mainMenuDashboard").style.left;$("mainMenuDashboard").style.left=(parseInt(menuLeft)-50)+"px";}
var flexApp;function createDashboards(){var dashboards=$A(document.getElementsByClassName("dashboard",$("dashboards")));dashboards.each(initDashboard);$("riskEstimator").style.visibility="hidden";}
function initDashboard(dash){var dashWindow=new Window({maximizable:false,resizable:false,width:930,height:500,closable:true,minimizable:false,left:0,top:-600,className:theme,draggable:false,showEffect:Effect.ModalSlideDown,hideEffect:Effect.Fade,showEffectOptions:{duration:.7,delay:.3,afterFinish:dashLoaded},hideEffectOptions:{duration:.3},id:"uniqueDash"+dash.id,recenterAuto:false,onClose:hideMenus});dashWindow.setContent(dash);dashes[dash.id]=dashWindow;}
function loadMenuItem(dashId){dashes[dashId].showCenter(true);currentDash=dashId;trackStats(dashId);}
function hideMenus(){if(currentDash=="riskDash"){$("riskEstimator").style.visibility="hidden";}
var dashboards=$A(document.getElementsByClassName("dashboard",$("dashboards")));dashboards.each(function(s){s.hide});currentDash=null;}
function dashLoaded(){if($("uniqueDashriskDash")&&($("uniqueDashriskDash").visible())){$("riskEstimator").style.visibility="visible";$("riskEstimator").style.top=parseInt($("uniqueDashriskDash").style.top)+120+"px";$("riskEstimator").style.left=parseInt($("uniqueDashriskDash").style.left)+10+"px";riskManager.loadDataSet();}
var rand=Math.floor(Math.random()*100000);if(currentDash=="newsDash"){}
if(currentDash=="stormDash"){}
if(currentDash=="weatherDash"){}
if(currentDash=="homesDash"){}}
﻿
var newsHeadlineHash=new Hash();var viewedArticles=new Hash();var currentStoryId=null;var trackStoryView=false;Event.observe(window,'load',getHeadlines);function getHeadlines(){ibiseye.srvGetHeadlines(getHeadlines_result);}
function getHeadlines_result(r){var ds=r.value;if(ds==null)return;var rows=ds.Tables[0].Rows.length;if(rows==0){return;}
$("newsStoryListTarget").innerHTML="";var html="";var sidToLoad="";for(var i=0;i<rows;i++){var row=ds.Tables[0].Rows[i];var data=new Hash();data.sid=row.SID;data.maxID=row.MAXID;data.date=row.HEAD_DATE;data.time=row.HEAD_TIME;data.fullDate=row.FILED_DATE_TIME;data.headline=row.HEADLINE;data.index=i;newsHeadlineHash[data.sid]=data;html+='<div class="newsListItem" id="news'+data.sid+'">';if(data.headline.startsWith("NATIONAL HURRICANE CENTER")){html+='<a href="javascript:;" onclick="getStory(\''+data.sid+'\'); this.blur();" title="created on: '+data.fullDate+'" class="georgia red">';}else if(data.headline.startsWith("WEATHER UNDERGROUND")){html+='<a href="javascript:;" onclick="getStory(\''+data.sid+'\'); this.blur();" title="created on: '+data.fullDate+'" class="georgia green">';sidToLoad=data.sid;}else{html+='<a href="javascript:;" onclick="getStory(\''+data.sid+'\'); this.blur();" title="created on: '+data.fullDate+'" class="georgia blue">';}
html+='<h4>'+data.headline+'</h4>'+'</a>'+'</div>';}
$("newsStoryListTarget").innerHTML=html;if(params.newsitem){loadMenuItem("newsDash");sidToLoad=params.newsitem;}
if(sidToLoad!="")getStory(sidToLoad);}
function getStory(sid){if($("news"+sid)){$("news"+sid).addClassName("newsSelected");}
$A($("news"+sid).siblings()).each(function(elem){elem.removeClassName("newsSelected")});if(viewedArticles[sid]!=null)loadArticle(viewedArticles[sid]);ibiseye.srvGetStory(sid,getStory_result);}
function getStory_result(r){var ds=r.value;if(ds==null)return;var rows=ds.Tables[0].Rows.length;if(rows==0){return;}
for(var i=0;i<rows;i++){var row=ds.Tables[0].Rows[i];var data=new Hash();data.id=row.ART_ID;data.dateline=row.ART_DATELINE;data.fullDate=row.FILED_DATE_TIME;data.byline=row.ART_BYLINE;data.keywords=row.ART_KEYWORDS;data.picLink=row.ART_PIX_LINK;data.picCaption=row.ART_PIX_CAPTION;data.picCredit=row.ART_PIX_CREDIT;data.body=row.ART_BODY;data.headline=row.HEADLINE;}
if(trackStoryView){trackStats("newsDash","Viewed%20News%20Story%20"+data.headline);}else{trackStoryView=true;}
viewedArticles[data.id]=data;loadArticle(data);}
var articlePopUp=null;function loadArticle(data,isPaging){$("articleHeadline").innerHTML="";$("articleByline").innerHTML="";$("articleDateline").innerHTML="";$("articleDate").innerHTML="";$("articleBody").innerHTML="";$("articlePicture").innerHTML="";$("articlePicCaption").innerHTML="";$("articlePicCredit").innerHTML="";currentStoryId=data.id;$("articleHeadline").innerHTML=data.headline==null?"":data.headline;$("articleByline").innerHTML=data.byline==null?"":data.byline;$("articleDateline").innerHTML=data.dateline==null?"":data.dateline;$("articleDate").innerHTML=data.fullDate==null?"":data.fullDate;if(data.headline.indexOf("DISCUSSION")!=-1){var counter=0;var exp=/<a name\="poi_/;while(data.body.search(exp)!=-1){counter++;data.body=data.body.replace(/<a name\="poi_\d+/,"<b> (Point of Interest #"+counter);data.body=data.body.replace(/"><\/a>/,") </b>");}}
$("articleBody").innerHTML=data.body;if(data.picLink){$("articlePicture").innerHTML="<img src='"+data.picLink+"' class='articlePicture' />";$("articlePicBox").show();}else{$("articlePicBox").hide();}
if(data.picCaption){$("articlePicCaption").innerHTML=data.picCaption;}
if(data.picCredit){$("articlePicCredit").innerHTML=data.picCredit;}
var rand=Math.floor(Math.random()*100000);if(currentDash=="newsDash"){$("newsDashAd1").src="promoOne.aspx?r="+rand;}}
function nextStory(){var i=newsHeadlineHash[currentStoryId].index;var nextItem=newsHeadlineHash.find(function(item){if(item.value.index==i+1){return true;}
else return false;});if(nextItem==undefined){nextItem=newsHeadlineHash.find(function(item){if(item.value.index==0)return true;else return false;});}
getStory(nextItem.key,true);}
function prevStory(){var i=newsHeadlineHash[currentStoryId].index;var nextItem=newsHeadlineHash.find(function(item){if(item.value.index==i-1){return true;}
else return false;});if(nextItem==undefined){nextItem=$A(newsHeadlineHash)[$A(newsHeadlineHash).length-1];}
getStory(nextItem.key,true);}
function undockNews(target,content){target=new Window({maximizable:true,resizable:true,hideEffect:Effect.BlindUp,id:"undocked"+content,showEffect:Effect.BlindDown,destroyOnClose:true,width:630,height:500,minWidth:630,minHeight:500,className:theme,recenterAuto:false});target.setContent(content,true,true);var pageSize=WindowUtilities.getPageSize();target.setSize(630,pageSize.windowHeight-150);target.showCenter(true,40);myObserver={onDestroy:function(eventName,win){if(win==target){$(content+"Container").appendChild($(content));target=null;Windows.removeObserver(this);}}}
Windows.addObserver(myObserver);}
function fixPNGs(){var arVersion=navigator.appVersion.split("MSIE")
var version=parseFloat(arVersion[1])
if((version>=5.5)&&(document.body.filters))
{for(var i=0;i<document.images.length;i++)
{var img=document.images[i]
var imgName=img.src.toUpperCase()
if(imgName.substring(imgName.length-3,imgName.length)=="PNG")
{var imgID=(img.id)?"id='"+img.id+"' ":""
var imgClass=(img.className)?"class='"+img.className+"' ":""
var imgTitle=(img.title)?"title='"+img.title+"' ":"title='"+img.alt+"' "
var imgStyle="display:inline-block;"+img.style.cssText
if(img.align=="left")imgStyle="float:left;"+imgStyle
if(img.align=="right")imgStyle="float:right;"+imgStyle
if(img.parentElement.href)imgStyle="cursor:hand;"+imgStyle
var strNewHTML="<span "+imgID+imgClass+imgTitle
+" style=\""+"width:"+img.width+"px; height:"+img.height+"px;"+imgStyle+";"
+"filter:progid:DXImageTransform.Microsoft.AlphaImageLoader"
+"(src=\'"+img.src+"\', sizingMethod='scale');\"></span>"
img.outerHTML=strNewHTML
i=i-1}}}}
﻿
var RiskManager=Class.create();var riskManager;RiskManager.prototype={initialize:function(){this.segmentHash=new Hash();this.stormID="";this.selectedData="summary";this.segmentID="";this.hasData=false;this.windData;this.pressureData;this.fieldData;},getData:function(){},loadStorm:function(storm){showLoading();this.stormID=storm.stormID;this.stormName=storm.name;storm.dataArray.each(function(d){this.segmentHash[d.segmentID]=d.lat+"|"+d.lng;}.bind(this));this.getSummary();this.ds=null;ibiseye.srvGetStats(this.stormID,"",this.getStats_result.bind(this));},getStats_result:function(r){this.ds=r.value;if(this.ds.Tables[0].Rows.length>0){this.hasData=true;}else{this.hasData=false;}
hideLoading();},loadDataSet:function(){if(FABridge.RiskEstimator){this.sendDataToFlex();}else{FABridge.addInitializationCallback("RiskEstimator",this.sendDataToFlex.bind(this));}},sendDataToFlex:function(){var flexApp=FABridge.RiskEstimator.root();flexApp.setNow(serverNow);flexApp.resetData();if(this.hasData){flexApp.loadData(this.ds);}else{flexApp.loadData();}
if(this.windData){flexApp.loadWinds(this.windData);}
if(this.pressureData){flexApp.loadPressure(this.pressureData);}
if(this.fieldData){flexApp.loadFields(this.fieldData);}},getSummary:function(){$("riskMenuItem").innerHTML="<span class='blue' style='font-size:12px;'>"+this.stormName+"<br />Synopsis</span>";ibiseye.srvGetStormSummary(""+this.stormID,this.getSummary_result.bind(this));},getSummary_result:function(r){$("stormSummaryTarget").innerHTML=r.value;},addWindData:function(data){this.windData=data.clone();},addPressureData:function(data){this.pressureData=data.clone();},addFieldData:function(data){this.fieldData=data.clone();},clear:function(){this.windData=null;this.pressureData=null;this.fieldData=null;this.stormName=null;this.stormID=null;this.ds=null;}};﻿
var goesLatestURL="http://ibis.htcreative.com/data/goes12/goesbig.jpg?v=";var rainbowURL="http://www.ibiseye.com/KML/ibiseye/rainbow.aspx/";var goesBigAnimatedURL="http://www.ibiseye.com/KML/ibiseye/goesbig.aspx/";var windsURL="http://www.ibiseye.com/KML/ibiseye/navysats.aspx/wind/";var waterURL="http://www.ibiseye.com/KML/ibiseye/navysats.aspx/temp/";var pressureURL="http://www.ibiseye.com/KML/ibiseye/navysats.aspx/pressure/";var rainbowStillURL="http://www.ibiseye.com/KML/ibiseye/rainbow.aspx//"
var cloudsURL="http://www.ibiseye.com/KML/ibiseye/globalclouds.aspx/";var satArchiveDirectory="http://ibis.htcreative.com/data/goes12/archive/";var satOverlay=null;var satListener=null;var GOESRadioChecked=false;function toggleShowGOES(){GOESRadioChecked=!GOESRadioChecked;$("GOESRadio").checked=GOESRadioChecked;if(GOESRadioChecked){showSatImage(goesLatestURL,"ground");stormCollection.showingStormSat=false;}else{hideSatImage();}}
function toggleSatImage(url){GOESRadioChecked=false;if(!url){hideSatImage();return;}
showSatImage(url,"kml");}
function showSatImage(link,type){if(satOverlay)hideSatImage();var pointSW=new GLatLng(15.442252683109,-134.477622167829);var pointNE=new GLatLng(48.557747316891,-64.522377832171);var url=link+alertsVersion;if(link==cloudsURL){url+="/"+currentMapZoom+"/"+currentMapLat+"/"+currentMapLng;}
if(type=="kml"){satOverlay=new GGeoXml(link);}else{satOverlay=new GGroundOverlay(url,new GLatLngBounds(pointSW,pointNE));}
map.addOverlay(satOverlay);satListener=GEvent.addListener(map,"zoomend",function(oldLevel,newLevel){reindexGroundOverlays();});var pe=new PeriodicalExecuter(function(){pe.stop();reindexGroundOverlays();},1);}
function hideSatImage(){if(!satOverlay)return;map.removeOverlay(satOverlay);GEvent.removeListener(satListener);satListener=null;satOverlay=null;}
function reindexGroundOverlays(){var images=$A($("map").getElementsBySelector('img[src^="http://www.ibiseye.com/data/"]'));images.each(function(img){img.up().style.zIndex="-1";});images=$A($("map").getElementsBySelector('img[src^="http://www.nrlmry.navy.mil"]'));images.each(function(img){img.up().style.zIndex="-1";});images=$A($("map").getElementsBySelector('img[src^="http://www.ssd.noaa.gov/"]'));images.each(function(img){img.up().style.zIndex="-1";});images=$A($("map").getElementsBySelector('img[src^="http://ibis.htcreative.com/data/"]'));images.each(function(img){img.up().style.zIndex="-1";});}
﻿
var servicesSearchMarker=null;function getServicesSearch(){trackStats("servicesDash","Searched%20Services");if(servicesSearchMarker!=null)map.removeOverlay(servicesSearchMarker);var addy=$F("servicesSearchLocation");var city=$F("servicesSearchCity");var zip=$F("servicesSearchZip");servicesManager.ignoreNext=true;var location=addy+" "+city+", FL "+zip;geocoder.getLocations(location,function(result)
{if(result.Status.code==G_GEO_SUCCESS){var p=result.Placemark[0].Point.coordinates;map.setCenter(new GLatLng(p[1],p[0]),14);servicesSearchMarker=new GMarker(new GLatLng(p[1],p[0]));map.addOverlay(servicesSearchMarker);servicesManager.getServices(p[1],p[0]);}else{var reason="Code "+result.Status.code;if(geocodingReasons[result.Status.code]){reason=geocodingReasons[result.Status.code]}
alert('Could not find "'+location+'" '+reason);}});}
function addServiceToResults(service,featured){var d=service.data;var html="<div style='width:95%;'>";if(!featured){html+="<a class='homeLink' style='display:block; color:#333333; margin:5px 0 0 10px;' href='javascript:;' "+"onclick='loadServiceFromDash(\""+d.index+"\")'>";}else{html+="<a class='homeLink' style='display:block; color:#333333; margin:5px 0 0 10px;' href='javascript:;' "+"onclick='loadServiceFromDash(\""+d.index+"\", true)'>";}
html+="<h5 class='georgia blue'>"+d.name+"</h5>"+"<span style='color:#333333;'>"+d.catName+"</span><br />"+"<span>"+d.addy+"</span><br />"+"<span>"+d.phone+"</span><br />"+"<span><b>"+d.distance+" miles</b></span>";html+="</a></div>";if(!featured){new Insertion.Bottom("serviceDashResultsTarget",html);}else{new Insertion.Bottom("featuredServicesTarget",html);}}
function loadServiceFromDash(i,featured){if(!featured){var s=servicesManager.serviceArray[i];}else{var s=servicesManager.featuredArray[i];}
s.marker.openInfoWindowTabsHtml(s.html,{suppressMapPan:true});s.panToMarker();Windows.close("uniqueDashservicesDash");}
var servicesSearchPopUp=null;var servicesResultsPopUp=null;var featuredResultsPopUp=null;function undockServicesDash(){undockWindow(servicesSearchPopUp,'servicesSearchDock','Search Services',['servicesDashResultsDock','featuredServicesDock']);undockWindow(servicesResultsPopUp,'servicesDashResultsDock','Services',['servicesSearchDock','featuredServicesDock']);undockWindow(featuredResultsPopUp,'featuredServicesDock','Featured',['servicesSearchDock','servicesDashResultsDock']);Windows.close("uniqueDashservicesDash");}
﻿
var servicesManager=null;var ServicesManager=Class.create();ServicesManager.prototype={initialize:function(){this.serviceArray=new Array();this.featuredArray=new Array();this.areServicesShown=false;this.firstTime=true;this.ignoreNext=false;GEvent.addListener(map,"zoomend",function(oldLevel,newLevel){if(newLevel>=14){this.showServices();}else{this.hideServices();this.firstTime=false;if(servicesSearchMarker!=null)map.removeOverlay(servicesSearchMarker);}}.bind(this));},getServices:function(inLat,inLng){if(this.ignoreNext){this.ignoreNext=false;return;}
var cat=$F("servicesSearchCat")==null?"all":$F("servicesSearchCat");var distance=$F("servicesSearchDistance")==null?"5":$F("servicesSearchDistance");var freetext=$F("servicesSearchFreetext")==null?"":$F("servicesSearchFreetext");showLoading();$("serviceDashResultsTarget").innerHTML="Searching....";$("featuredServicesTarget").innerHTML="";var lat=inLat==null?currentMapLat:inLat;var lng=inLng==null?currentMapLng:inLng;ibiseye.srvGetServices(""+lat,""+lng,""+cat,""+distance,""+freetext,this.getServices_result.bind(this));},getServices_result:function(r){var ds=r.value;if(ds==null){$("serviceDashResultsTarget").innerHTML="No results found";return;}
var rows=ds.Tables[0].Rows.length;var rows2=ds.Tables[1].Rows.length;this.clearOutServices();if(rows==0){hideLoading();$("serviceDashResultsTarget").innerHTML="No results found.";return;}
$("serviceDashResultsTarget").innerHTML="";for(var i=0;i<rows;i++){var row=ds.Tables[0].Rows[i];var data=this.buildData(row,i);var newService=new Service(data);this.serviceArray.push(newService);}
if((rows2!=0)&&(ds.Tables[1]!=null)){for(var j=0;j<rows2;j++){var row=ds.Tables[1].Rows[j];var data=this.buildData(row,j);var newService=new Service(data);this.featuredArray.push(newService);}}
this.addServicesToDash();hideLoading();},buildData:function(row,index){var data=new Hash();data.catName=row.CAT_NAME;data.hurricane=row.HURRICANE;data.stage=row.STAGE;data.name=row.S_NAME;data.addy=row.S_ADD1;data.addy2=row.S_ADD2;data.city=row.S_CITY;data.state=row.S_STATE;data.zip=row.S_ZIP;data.lat=row.S_LAT;data.lng=row.S_LON;data.phone=row.S_PHONE;data.tfPhone=row.S_TFPHONE;data.fax=row.S_FAX;data.distance=row.DISTANCE;data.index=index;return data;},addServicesToDash:function(){this.serviceArray.each(function(service,index){addServiceToResults(service);});this.featuredArray.each(function(service,index){addServiceToResults(service,true);});},showServices:function(){this.areServicessShown=true;this.getServices();this.tempMoveListener=GEvent.addListener(map,"moveend",function(){GEvent.removeListener(this.tempMoveListener);this.addMoveListener();}.bind(this));},hideServices:function(){this.removeMoveListener();this.areServicesShown=false;this.clearOutServices();},addMoveListener:function(){if(this.mapListener==null){this.mapListener=GEvent.addListener(map,"moveend",function(){this.getServices();}.bind(this));}},removeMoveListener:function(){if(this.mapListener)
GEvent.removeListener(this.mapListener);this.mapListener=null;},clearOutServices:function(){var survived=null;this.serviceArray.each(function(service,index){var destroyed=service.destroy();});this.featuredArray.each(function(service,index){var destroyed=service.destroy();});this.featuredArray=new Array();this.serviceArray=new Array();}}
var Service=Class.create();Service.prototype={initialize:function(data){this.data=data;this.icon=this.getIcon(data);this.html=new Array();var infoHtml=this.buildBubble(data);this.html.push(new GInfoWindowTab("Info","<div class='homesBubbleSizer'>"+infoHtml+"</div>"));this.point=new GLatLng(data.lat,data.lng);this.marker=this.createMarker(this.point,this.html,this.icon,data.name+"<br />"+data.addy,data);this.isOpened=false;this.addToMap();},buildBubble:function(data){var html='<div class="bubbleElementContainer" style="background-color:#FFFFFF; float:left"> '+'<h3 class="stormBubbleStormName" style="margin-bottom:5px;">'+data.name+'</h3>'+'   <span class="bubbleLeft">Address: </span><span class="bubbleRight">'+data.addy+', '+data.addy2+'<br />'+data.city+', '+data.state+' '+data.zip+'</span>'+'<div class="bubbleElementContainer">'+'   <span class="bubbleLeft">Category: </span><span class="bubbleRight">'+data.catName+'</span>'+'</div><div class="bubbleElementContainer">'+'   <span class="bubbleLeft">Phone: </span><span class="bubbleRight">'+data.phone+'</span>'+'</div><div class="bubbleElementContainer" style="color:#666666;">'+'   <span class="bubbleLeft">TF Phone: </span><span class="bubbleRight">'+data.tfPhone+'</span>'+'</div><div class="bubbleElementContainer">'+'   <span class="bubbleLeft">Fax: </span><span class="bubbleRight">'+data.fax+'</span>'+'</div><div class="bubbleElementContainer">'+'   <span class="bubbleLeft">Distance: </span><span class="bubbleRight">'+data.distance+'</span>'+'</div></div>';return html;},getIcon:function(damaged){var icon=new GIcon();icon.image="images/icons/services/grocery.png";icon.iconSize=new GSize(30,31);icon.iconAnchor=new GPoint(15,15);icon.infoWindowAnchor=new GPoint(15,15);return icon;},createMarker:function(point,html,ic,toolText,data){var marker=new GMarker(point,ic);marker.data=data;marker.tooltip="<div class='tooltip'>"+toolText+"</div>";GEvent.addListener(marker,"click",function(){servicesManager.removeMoveListener();marker.openInfoWindowTabsHtml(html,{suppressMapPan:true});this.panToMarker();}.bind(this));GEvent.addListener(marker,"infowindowopen",function(){servicesManager.removeMoveListener();homesManager.removeMoveListener();currentMarker=marker;this.isOpened=true;trackStats("servicesDash","Viewed%20Service%20"+marker.data.name);}.bind(this));GEvent.addListener(marker,"infowindowclose",function(){this.isOpened=false;currentMarker=null;servicesManager.addMoveListener();homesManager.addMoveListener();}.bind(this));GEvent.addListener(marker,"mouseover",function(){showTooltip(marker,map);});GEvent.addListener(marker,"mouseout",function(){tooltip.style.visibility="hidden"});return marker;},panToMarker:function(){var markerLocation=this.marker.getPoint();var pixels=map.fromLatLngToDivPixel(markerLocation);var center=map.getCenter();var centerPixels=map.fromLatLngToDivPixel(center);var y=pixels.y;y=y-100;var newLatLng=map.fromDivPixelToLatLng(new GPoint(pixels.x,y));map.panTo(newLatLng);},addToMap:function(){this.isMapped=true;map.addOverlay(this.marker);},removeFromMap:function(){this.isMapped=false;map.removeOverlay(this.marker);},destroy:function(){this.removeFromMap();this.marker=null;this.data=null;this.icon=null;this.point=null;this.html=null;return true;}}
﻿
var query=location.search;var params=location.search.toQueryParams();function checkVisit(){var cookie=Cookie.get("ibiseye");if(cookie==null||parseFloat(cookie)<1.0){showIntroWindow();Cookie.set("ibiseye","1.0",120);}
checkURL();}
function showIntroWindow(){}
function checkURL(){if(params.lat&&params.lng&&params.zoom){map.setCenter(new GLatLng(params.lat,params.lng),params.zoom);}}
function checkForURLAlerts(){if(params.alertState){loadWeatherState(params.alertState.toUpperCase());if(params.alertZone){showWeatherAlert(params.alertZone.toUpperCase());}else{showAllSelectedAlerts();}}}
﻿
var ShelterManager=Class.create();var shelterManager=null;ShelterManager.prototype={initialize:function(){this.shelterArray=new Array();this.mapListener=null;this.sheltersShown=false;},getShelters:function(){showLoading();this.destroyShelters();$("homesDashSheltersTarget").innerHTML="";ibiseye.srvGetShelters(""+currentMapLat,""+currentMapLng,this.getShelters_result.bind(this));},getShelters_result:function(r){var ds=r.value;var rows=ds.Tables[0].Rows.length;if(rows==0){hideLoading();return;}
for(var i=0;i<rows;i++){var row=ds.Tables[0].Rows[i];var data=new Hash();data.name=row.SHELTER;data.addy=row.ADDRESS;data.city=row.CITY;data.county=row.COUNTY;data.lat=row.LAT;data.lng=row.LON;data.distance=row.DISTANCE;data.status=row.STATUS;data.index=i;var newShelter=new Shelter(data);this.shelterArray.push(newShelter);addShelterToResults(newShelter);}
this.addSheltersToMap();hideLoading();},showShelters:function(){this.addMoveListener();this.sheltersShown=true;this.getShelters();},addMoveListener:function(){if(!this.mapListener){this.mapListener=GEvent.addListener(map,"moveend",function(){this.getShelters();}.bind(this));}},removeMoveListener:function(){if(this.mapListener){GEvent.removeListener(this.mapListener);this.mapListener=null;}},hideShelters:function(){GEvent.removeListener(this.mapListener);$("homesDashSheltersTarget").innerHTML="";this.destroyShelters();this.sheltersShown=false;this.mapListener=null;},addSheltersToMap:function(){this.shelterArray.each(function(shelter){shelter.addToMap();});},removeSheltersFromMap:function(){this.shelterArray.each(function(shelter){shelter.removeFromMap();});},destroyShelters:function(){this.shelterArray.each(function(shelter){shelter.destroy();});this.shelterArray.clear();}}
var Shelter=Class.create();Shelter.prototype={initialize:function(data){this.isOnMap=false;this.data=data;this.point=new GLatLng(data.lat,data.lng);var icon=this.getIcon();this.html=new Array();var bubbleText=this.buildBubble(data);this.html.push(new GInfoWindowTab("Info","<div class='shelterBubbleSizer'>"+bubbleText+"</div>"));var tooltext=data.name;this.marker=this.getMarker(this.point,this.html,icon,tooltext,this.data);},getIcon:function(status){var icon=new GIcon();this.image="images/icons/shelter.png";icon.image=this.image;icon.iconSize=new GSize(30,30);icon.iconAnchor=new GPoint(15,15);icon.infoWindowAnchor=new GPoint(15,15);return icon;},getMarker:function(point,html,ic,toolText,data){var marker=new GMarker(point,ic);marker.data=data;marker.tooltip="<div class='tooltip'>"+toolText+"</div>";GEvent.addListener(marker,"click",function(){marker.openInfoWindowTabsHtml(html,{suppressMapPan:true});this.panToMarker();}.bind(this));GEvent.addListener(marker,"infowindowopen",function(){homesManager.removeMoveListener();servicesManager.removeMoveListener();shelterManager.removeMoveListener();this.isOpened=true;trackStats("homesDash","Viewed Shelter%20"+marker.data.name);}.bind(this));GEvent.addListener(marker,"infowindowclose",function(){this.isOpened=false;homesManager.infoWindowOpened=false;homesManager.addMoveListener();servicesManager.addMoveListener();shelterManager.addMoveListener();}.bind(this));GEvent.addListener(marker,"mouseover",function(){showTooltip(marker,map);});GEvent.addListener(marker,"mouseout",function(){tooltip.style.visibility="hidden"});return marker;},panToMarker:function(){var markerLocation=this.marker.getPoint();var pixels=map.fromLatLngToDivPixel(markerLocation);var center=map.getCenter();var centerPixels=map.fromLatLngToDivPixel(center);var y=pixels.y;y=y-100;var newLatLng=map.fromDivPixelToLatLng(new GPoint(pixels.x,y));map.panTo(newLatLng);},buildBubble:function(data){var html="";html+='<div class="bubbleElementContainer" style="background-color:#FFFFFF; float:left"> '+'<h3 class="stormBubbleStormName" style="margin-bottom:5px;">'+data.name+'</h3>'+'   <span class="bubbleLeft">Address: </span><span class="bubbleRight">'+data.addy+'</span>'+'<div class="bubbleElementContainer">'+'   <span class="bubbleLeft">City: </span><span class="bubbleRight">'+data.city+'</span>'+'</div><div class="bubbleElementContainer">'+'   <span class="bubbleLeft">County: </span><span class="bubbleRight">'+data.county+'</span>'+'</div><div class="bubbleElementContainer">'+'   <span class="bubbleLeft">Distance: </span><span class="bubbleRight"><b>'+data.distance+' miles</b></span>'+'</div><div class="bubbleElementContainer">'+'<span style="display:block; width:100%; margin-top:10px;">Enter Address for Directions (include city & state): </span>'+'<span style="display:block; margin-top:5px; width:100%;"><input type="text" id="shelterDirectionsAddy" style="width:100%; /></span>'+'</div><div class="bubbleElementContainer">'+'<span class="bubbleLeft"></span><span class="bubbleRight"><input type="button" onclick="getDirectionsFromShelter(\''+data.index+'\')" value="Get Directions" /></span>'+'</div>'+'</div>';return html;},addToMap:function(){map.addOverlay(this.marker);this.isOnMap=true;},removeFromMap:function(){map.removeOverlay(this.marker);this.isOnMap=false;},destroy:function(){this.removeFromMap();this.data=null;this.html=null;this.point=null;this.marker=null;}}
function getDirectionsFromHome(i){var h=homesManager.homeArray[i];var point=h.point;var homeLat=point.lat();var homeLng=point.lng();var shelters=shelterManager.shelterArray;var closest=shelters[0];var shelterLat=closest.point.lat();var shelterLng=closest.point.lng();var shelterAddy=closest.data.addy+" "+closest.data.city+", Florida";var homeAddy=homeLat+", "+homeLng;var route=homeAddy+" to "+shelterAddy;launchMapDirections(route);}
function getDirectionsFromShelter(index){elem=$("shelterDirectionsAddy");if(!elem.value){alert("Please Enter an address before trying to find directions");return;}
var shelterLocationData=shelterManager.shelterArray[index].data;var shelterAddy=shelterLocationData.addy+" "+shelterLocationData.city+", Florida";var route=elem.value+" to "+shelterAddy;launchMapDirections(route);}
function launchMapDirections(route){var win=new Window({maximizable:true,resizable:true,width:250,height:360,closable:true,left:80,top:80,className:theme,draggable:true,minHeight:360,showEffectOptions:{afterFinish:function(){var panel=$("panel");currentDirections=new GDirections(map,panel);currentDirections.load(route);}},hideEffect:Effect.SwitchOff,destroyOnClose:true});win.setHTMLContent("<div id='panel'></div>");win.show();myObserver={onDestroy:function(eventName,window){if(window==win){win=null;Windows.removeObserver(this);currentDirections.clear();}}};Windows.addObserver(myObserver);}
﻿
Event.observe(window,'load',addStormListeners);var stormsInListArray=new Hash();var selectedStormsArray=new Hash();var selectedStormsPopUp=null;var stormListPopUp=null;var stormSearchPopUp=null;var stormsInSearchArray=new Hash();var selectedStormsTotal=0;function addStormListeners(){var lis=$("stormListContainer").getElementsByTagName("li");for(var i=0;li=lis[i];i++){Event.observe(lis[i],"click",stormMenuClicked);}
parseStormItemID("v2010");}
function stormMenuClicked(event){var li=Event.findElement(event,'LI');li=$(li);Event.stop(event);itemID=li.id;if(itemID.startsWith("stormItem")){addStormToSelected(stormsInListArray["s"+itemID.substr(9)]);return;}
if(itemID.startsWith("v")){}
if(li.hasClassName("collapsed")){var ul=null;for(var i=0;node=li.childNodes[i];i++){if(node.nodeName.toLowerCase()=="ul"){ul=node;}}
if(ul){ul.style.display="block";}else{parseStormItemID(itemID);}
li.removeClassName("collapsed");li.addClassName("expanded");var siblingLists=$A(li.siblings());siblingLists.each(function(s,i){closeMenuItem(s)});}else{console.log("collapsing");closeMenuItem(li);}}
function closeMenuItem(node){var uls=node.getElementsByTagName("ul");for(var i=0;ul=uls[i];i++){ul.style.display="none";ul.parentNode.removeClassName("expanded");ul.parentNode.addClassName("collapsed");}
node.removeClassName("expanded");node.addClassName("collapsed");}
function parseStormItemID(id){var html="";if(id.startsWith("c")){html=generateDecades(id);}else if(id.startsWith("d")){html=generateYears(id);}else{var year=parseInt(id.substr(1));getStormListAll(year);html=["<ul id='stormYear"+year+"'><li>loading storms...</li></ul>",id];}
new Insertion.Bottom($(id),html[0]);return html[1];}
function generateDecades(id){var time=parseInt(id.substr(1));var html="<ul>";for(var i=0;i<10;i++){var decade=time+10*i;if((decade<nowYear)&&(decade>=1850)){html+="<li id=d"+decade+" class='collapsed'><a href='javascript:;'>"+decade+"</a></li>";}else{continue;}}
return[html+"</ul>","d"+time];}
function generateYears(id){var time=parseInt(id.substr(1));var html="<ul>";for(var i=0;i<10;i++){var year=time+i;if((year<nowYear)&&(year>=1851)){html+="<li id=y"+year+" class='collapsed'><a href='javascript:;'>"+year+"</a></li>";}else{continue;}}
return[html+"</ul>","y"+time];}
function getStormListAll(id){showLoading();var year=""+id;ibiseye.srvGetStorms(year,"35","",getStormList_result);}
function getStormList_result(r){var ds=r.value;var rows=ds.Tables[0].Rows.length;var html="";if(rows==0){hideLoading();return;}
for(var i=0;i<rows;i++){var data=new Object();row=ds.Tables[0].Rows[i];data.stormID=row.BTID;data.year=row.YEAR;data.season=row.YEAR_SEASON;data.wind=row.MAX_WINDS;data.state=row.STATE
data.name=row.NAME;data.active=row.ACTIVE;data.category=row.CAT
if(data.name.toLowerCase()==" not named")data.name="Storm #"+data.stormID;html+="<li id='stormItem"+data.stormID+"' class='collapsed'>";html+="<a href='javascript:;' class='stormItemAnchor' onclick='this.blur();'>"+data.name+" ("+data.category+")";if(data.active!=1){html+="<br /><span class='red' style='font-variant:small-caps;'>active</span>";}
if(data.state!=""){html+="<br /><span class='red ten'>Hit: "+data.state+"</span>";}
html+="</a>";html+="</li>";stormsInListArray["s"+data.stormID]=data;}
if($("stormYear"+data.season))
$("stormYear"+data.season).innerHTML=html;hideLoading();}
var trackActiveStormStats=false;function addStormToSelected(item){if((item.active==1)||(trackActiveStormStats)){trackStats("stormDash","Viewed Storm%20"+item.name);}else{trackActiveStormStats=true;}
if(item==null){Dialog.alert("There has been an errror with the application, please refresh the page",{className:theme});return;};if(selectedStormsArray["s"+item.stormID]!=null){return;}
if(++selectedStormsTotal>10){selectedStormsTotal=10;Dialog.alert("Please remove a storm from this list before adding another.",{className:theme});return;}
if(selectedStormsTotal>1){$("stormDashSelectedControls").show();}
selectedStormsArray["s"+item.stormID]=Object.clone(item);var target=$("stormDashSelectedStorms");var stormHTML="<div id='selectedStormListItem"+item.stormID+"'>"+"<h4 id='stormItem"+item.stormID+"' class='selectedStormItem'>"+item.name+" ("+item.season+")</h4>"+"<div class='selectedStormItemForm'>"+"<span>Load Path: <input id='cb"+item.stormID+"' checked type='checkbox' onclick='togglePathOnly(\""+item.stormID+"\")' /></span>"+"<span>Load Wind Field: <input id='rad"+item.stormID+"' type='radio' name='stormWindRadio' onclick='toggleFullStorm(\""+item.stormID+"\")' /></span>"+"<a href='javascript:;' onclick='removeFromSelectedStorms(\""+item.stormID+"\"); this.blur();'>Remove Storm</a>"+"<span><a href='javascript:;' onclick='viewStormPath(\""+item.stormID+"\"); this.blur();'>View this storm</a></span>"+"<span><a href='javascript:;' onclick='emailStormPath(\""+item.stormID+"\"); this.blur();'>link to this storm</a></span>"+"</div></div>";new Insertion.Bottom(target,stormHTML);if(!item.active)item.active=1;var isFirst=false;if(selectedStormsTotal==1){isFirst=true;$("rad"+item.stormID).checked=true;}
var newStorm
if(item.counter&&(item.counter>=1)){newStorm=new StormPath(""+item.stormID,item.active,isFirst,false);}else{newStorm=new StormPath(""+item.stormID,item.active,isFirst,true);}
stormCollection.addStorm(newStorm);}
function removeFromSelectedStorms(id){stormCollection.removeStormById(id);selectedStormsArray.remove("s"+id);$('selectedStormListItem'+id).remove();selectedStormsTotal--;if(selectedStormsTotal<2){$("stormDashSelectedControls").hide();}}
function viewStormPath(id){Windows.close("uniqueDashstormDash");$("cb"+id).checked=true;$("rad"+id).checked=true;stormCollection.zoomToPath(id);}
function emailStormPath(id){var storm=selectedStormsArray["s"+id];var linkHash=new Hash();linkHash.stormID=storm.stormID;var path=stormCollection.getStorm(id);var query=linkHash.toQueryString();var loc=location.toString();loc=loc.split("?")[0];query=loc+"?"+query
Dialog.alert("The below link will bring you back to this storm<br /><br />"+"<a href='"+query+"' target='_blank'>Right Click and 'Copy shortcut,' 'copy location,' or bookmark this link</a>"+"<br /><a href='mailto:?body="+query.gsub('&','%26')+"&subject=IBISEYE Storm Track'>Email This Storm</a>",{className:theme,width:800,height:200});trackStats("stormDash","Emailed storm%20"+linkHash.stormID);}
function getStormSearch(){trackStats("stormDash","Searched Storms");showLoading();var city=$F("stormSearchCity");var state=$F("stormSearchState");var location=city+", "+state;var cat=$F("stormSearchCategory");var distance="";var stormName=$F("stormSearchStormName");var startYear=parseInt($F("stormSearchStartYear"));var endYear=parseInt($F("stormSearchEndYear"));var d=new Date();var curYear=d.getUTCFullYear();if((startYear<1851)||(startYear>curYear)||(startYear==undefined)||(startYear==NaN)){startYear=1851
$("stormSearchStartYear").value=startYear;}
if((endYear<1851)||(endYear>curYear)||(endYear==undefined)||(endYear==NaN)){endYear=curYear
$("stormSearchEndYear").value=endYear;}
if(city==""){ibiseye.srvGetSearchStorms(" "," "," "+startYear," "+endYear," "+cat," ",""+state," "+stormName," ",getStormsSearch_result);return;}
geocoder.getLocations(location,function(result)
{if(result.Status.code==G_GEO_SUCCESS){var p=result.Placemark[0].Point.coordinates;map.setCenter(new GLatLng(p[1],p[0]),9);var icon=new GIcon;icon.image="images/icons/wind/r5_180.png";icon.iconSize=new GSize(32,33);icon.iconAnchor=new GPoint(16,17);icon.infoWindowAnchor=new GPoint(16,17);lookupMarker=new GMarker(new GLatLng(p[1],p[0]),icon);$("stormSearchResultsContainer").innerHTML="searching...";ibiseye.srvGetSearchStorms(""+p[1],""+p[0],""+startYear,""+endYear,""+cat,""+distance,""+state,""+stormName,city,getStormsSearch_result);map.addOverlay(lookupMarker);}else{ibiseye.srvGetSearchStorms(" "," ",""+startYear,""+endYear,""+cat," ",""+state,""+stormName,""+city,getStormsSearch_result);}});}
function getStormsSearch_result(r){var ds=r.value;if(ds==null){$("stormSearchResultsContainer").innerHTML="<span class='red georgia' style='font-size:18px;'><strong>no results found</strong></span>";hideLoading();}
var rows=ds.Tables[0].Rows.length;$H(stormsInSearchArray.toArray().clear());var html="<ul>";if(rows==0){$("stormSearchResultsContainer").innerHTML="no results found";hideLoading();return;}
for(var i=0;i<rows;i++){var row=ds.Tables[0].Rows[i];var data=new Object();data.name=row.NAME;data.stormID=row.BTID;data.season=row.YEAR_SEASON;data.state=row.STATES_HIT;data.dOrT=row.DISTANCE_OR_TIME;if(data.name.startsWith("Not_"))data.name="Storm #"+data.stormID;html+="<li id='stormSearchItem"+data.stormID+"' class='collapsed' onclick='addSearchedStorm(\""+data.stormID+"\")'>";html+="<a href='javascript:;'>"+data.name;if(data.dOrT!=""){html+=" ("+data.dOrT+")";}
if(data.state!=""){html+="<br /><span class='red ten'>Hit: "+data.state+"</span>";}
html+="</a>";html+="</li>";stormsInSearchArray["s"+data.stormID]=data;}
html+="</ul>"
$("stormSearchResultsContainer").innerHTML=html;hideLoading();}
function addSearchedStorm(stormID){addStormToSelected(stormsInSearchArray["s"+stormID]);}
function undockStormDash(){undockWindow(stormListPopUp,'stormListDock','Storm List',['selectedStormsDock','stormSearchDock']);undockWindow(selectedStormsPopUp,'selectedStormsDock','Selected Storms',['stormListDock','stormSearchDock']);undockWindow(stormSearchPopUp,'stormSearchDock','Storm Search',['stormListDock','selectedStormsDock']);Windows.close("uniqueDashstormDash");}
var hotspotOverlay;function toggleHotspots(){var toggle=$F("hotspotsCB")=="true"?true:false;if(toggle){map.addOverlay(hotspotOverlay);reindexGroundOverlays();}else{map.removeOverlay(hotspotOverlay);}}
function initHotspots(){var hotspotLayer=new GTileLayer(new GCopyrightCollection(),0,17);hotspotLayer.getTileUrl=function(a,b){b=this.maxResolution()-b;return"http://maps.google.com/mapsdt?id=http://ibis.htcreative.com/KML/simple_hot_clean3b.kml&x="+a.x+"&y="+a.y+"&zoom="+b;}
hotspotLayer.isPng=function(){return true;}
hotspotOverlay=new GTileLayerOverlay(hotspotLayer);}
﻿
function togglePathOnly(stormID){if(stormCollection.getStorm(stormID).pathMapped){stormCollection.deMapStormPath(stormID);$("rad"+stormID).checked=false;}else{stormCollection.mapStormPathOnly(stormID);}}
function toggleFullStorm(stormID){if((stormCollection.getFullyMappedStorm())&&(stormID==stormCollection.getFullyMappedStorm().stormID)){stormCollection.deMapStormWind(stormID);$("rad"+stormID).checked=false;}else{stormCollection.mapStormFull(stormID);$("cb"+stormID).checked=true;}}
var windsRadioChecked=false;function toggleWinds(){windsRadioChecked=!windsRadioChecked;$("windsRadio").checked=windsRadioChecked;if(!windsRadioChecked){stormCollection.killWinds();}else{stormCollection.mapStormFull(stormCollection.getFullyMappedStorm().stormID);}}
function togglePOI(){var cbValue=$F("poiCB");if(cbValue!=null){stormCollection.showPOI();}else{stormCollection.hidePOI();}}
var kmlURL="http://ibis.htcreative.com/KML/windfields.aspx/";var StormCollection=Class.create();StormCollection.prototype={initialize:function(){this.stormArray=new Hash();this.poiArray=new Array();this.showingPOI=false;this.showingStormSat=false;this.stormSatID=null;this.getPOI();this.fullyMappedStorm=null;},getPOI:function(){ibiseye.srvGetPointsOfInterest(this.getPOI_result.bind(this));},getPOI_result:function(r){var ds=r.value;if(ds==null)return;var rows=ds.Tables[0].Rows.length;if(rows==0){return;}
for(var i=0;i<rows;i++){row=ds.Tables[0].Rows[i];var data=new Hash();data.type=row.TYPE;data.lat=row.MAPLAT;data.lng=row.MAPLON;data.id=row.ANCHOR;data.html=row.CRAP;data.html+="<br /><br /><a href='javascript:;' onclick='getStory(\"1-65-18\"); loadMenuItem(\"newsDash\");'>View Full Discussion</a>";data.index=i+1;this.poiArray.push(new POI(data));}
rows=ds.Tables[1].Rows.length;if(rows==0){}
for(var i=0;i<rows;i++){row=ds.Tables[1].Rows[i];var data=new Hash();data.line=row.ENCODED.replace(/\\\\/g,"\\");;data.lat=row.LAT;data.lng=row.LON;data.bearing=row.STORM_BEARING;data.forwardSpeed=row.STORM_FORWARD_KTS;data.gusts=row.STORM_GUSTS_KTS;data.id=row.STORM_ID;data.sname=row.STORM_NAME;data.pressure=row.STORM_PRESSURE;data.wind=row.STORM_WIND_KTS;data.count=row.COUNTER;this.poiArray.push(new Invest(data));}
if(this.showingPOI)this.showPOI();},showPOI:function(){this.showingPOI=true;this.poiArray.each(function(poi){poi.show();}.bind(this));},hidePOI:function(){this.showingPOI=false;this.poiArray.each(function(poi){poi.hide();}.bind(this));},addStorm:function(stormObject){if(this.stormArray.size()==0)$("windsRadioDiv").show();this.stormArray["s"+stormObject.stormID]=stormObject;},removeStorm:function(stormObject){this.hidePointImage(stormObject.stormID);stormObject.destroy();this.stormArray.remove("s"+stormObject.stormID);if(this.stormArray.size()==0)
$("windsRadioDiv").hide();},removeStormById:function(id){this.hidePointImage(id);if((this.fullyMappedStorm==this.stormArray["s"+id])&&(this.stormArray.size()>0)){$("windsRadioDiv").hide();}
this.stormArray["s"+id].destroy();this.stormArray.remove("s"+id);if(this.stormArray.size()==0)
$("windsRadioDiv").hide();},getStorm:function(stormID){return this.stormArray["s"+stormID];},getFullyMappedStorm:function(){return this.fullyMappedStorm;},killWinds:function(){this.fullyMappedStorm.removeStormWinds();},mapStormPathOnly:function(stormID){this.stormArray["s"+stormID].mapStormPathOnly();},mapStormFull:function(stormID){this.stormArray.each(function(pair){pair.value.removeStormWinds();});this.stormArray["s"+stormID].mapStormFull();this.fullyMappedStorm=this.stormArray["s"+stormID];$("windsRadio").checked=windsRadioChecked=true;if(!$("windsRadioDiv").visible())$("windsRadioDiv").show();},deMapStormPath:function(stormID){this.stormArray["s"+stormID].removeStormPath();this.hidePointImage(stormID);$("windsRadio").checked=windsRadioChecked=false;},deMapStormWind:function(stormID){this.stormArray["s"+stormID].removeStormWinds();$("windsRadio").checked=windsRadioChecked=false;},zoomToPath:function(stormID){storm=this.stormArray["s"+stormID];if(storm.centerLatLng.lng()>-56){map.setCenter(storm.centerLatLng,storm.boundsZoom-2);}else{map.setCenter(storm.centerLatLng,storm.boundsZoom);}
this.mapStormFull(stormID);storm.flashPath();},addAllStormsToMap:function(){this.stormArray.each(function(pair){this.mapStormPathOnly(pair.value.stormID);$("cb"+pair.value.stormID).checked=true;}.bind(this));Windows.close("uniqueDashstormDash");},removeAllStormsFromMap:function(){this.stormArray.each(function(pair){this.deMapStormPath(pair.value.stormID);$("cb"+pair.value.stormID).checked=false;}.bind(this));},removeAllStormsFromList:function(){this.stormArray.each(function(pair){removeFromSelectedStorms(pair.value.stormID);}.bind(this));},hideModels:function(stormID){var s=this.getStorm(stormID);s.removeModelsFromMap();},showModels:function(stormID){var s=this.getStorm(stormID);s.addModelsToMap();},toggleModels:function(stormID){var s=this.getStorm(stormID);s.toggleModels();},showPointImage:function(stormID,markerNum){this.showingStormSat=true;this.stormSatID=stormID;var s=this.getStorm(stormID);var m=s.markerArray[markerNum];s.markerArray.without(m).each(function(m){m.showingSat=false;});var image=m.data.satImage;showSatImage(satArchiveDirectory+image);m.showingSat=true;s.showingSat=true;$("noSat").checked=true;GOESRadioChecked=false;},hidePointImage:function(stormID,markerNum){if(stormID){var s=this.getStorm(stormID);s.showingSat=false;if(markerNum){var m=s.markerArray[markerNum];m.showingSat=false;}
if((stormID==this.stormSatID)&&this.showingStormSat){hideSatImage();}}}};var stormCollection;var StormPath=Class.create();StormPath.prototype={initialize:function(stormID,active,isFirst,pop){this.stormID=stormID;this.active=active;this.dataArray=new Array();this.markerArray=new Array();this.points=new Array();this.forecastPoints=new Array();this.pathMapped=false;this.fullMapped=false;this.windFieldsTropical;this.windFieldsHurricane;this.isFirst=isFirst;this.stormBounds=new GLatLngBounds();this.modelArray=new Array();this.showingModels=false;this.windData=new Array();this.pressureData=new Array();this.fieldData=new Array();this.reloadPE=null;if(pop!=null){this.showPopup=pop;}else{this.showPopup=true;}
this.getData();},getData:function(){showLoading();ibiseye.srvGetStormPath(this.stormID,this.active,this.getData_result.bind(this));},getData_result:function(r){var ds=r.value;var rows=ds.Tables[0].Rows.length;if(rows==0){hideLoading();return;}
var pastFirstForecastPoint=false;for(var i=0;i<rows;i++){row=ds.Tables[0].Rows[i];var data=new Object();if(i==0){this.season=row.YEAR_SEASON;this.name=row.NAME;}
data.name=row.NAME;data.lat=row.LAT;data.lng=row.LONG;data.wind=row.WIND_KTS;data.pressure=row.PRESSURE;data.maxHurricaneRadius=row.MAX_H_RAD;data.maxTSRadius=row.MAX_TS_RAD;data.date=row.DT;data.stormID=this.stormID;data.category=row.CAT;data.stormType=row.STORM_TYPE;data.html=row.PHTML;data.segmentID=row.ID;data.index=i;data.satImage=row.SAT_IMAGE;this.windData.push({speed:data.wind,time:data.date,category:data.category});this.pressureData.push({pressure:data.pressure,time:data.date,category:data.category});this.fieldData.push({maxH:data.maxHurricaneRadius,maxTS:data.maxTSRadius,time:data.date,category:data.category});var html=new Array();var icon=this.getSimpleIcon(data.category);var bubble=this.buildBubble(data);html.push(new GInfoWindowTab(data.name,"<div class='bubbleSizer'>"+bubble+"</div>"));var tooltip=this.buildToolTip(data);var point=new GLatLng(data.lat,data.lng);var marker=this.createMarker(point,html,icon,data,tooltip);this.markerArray.push(marker);this.dataArray.push(data);if(data.stormType.toLowerCase()=="forecast"){if(!pastFirstForecastPoint){var previousRow=ds.Tables[0].Rows[i-1];this.lastActualPoint=this.markerArray[i-1];var prevLatLng=new GLatLng(previousRow.LAT,previousRow.LONG);this.forecastPoints.push(prevLatLng);pastFirstForecastPoint=true;this.getModels();this.startReloadCheck();}
this.forecastPoints.push(point);}else{this.points.push(point);}
if((data.stormType.toLowerCase()=="forecast")&&(i<rows-3)){}else if(data.stormType.toLowerCase()!="forecast"){}
this.stormBounds.extend(point);if(data.category.startsWith("T"))this.isTropicalStorm=true;if(data.category.startsWith("H"))this.isHurricane=true;if(this.forecastPoints.length>0)this.isActive=true;}
hideLoading();if(this.isTropicalStorm){}
if(this.isHurricane){}
if(this.isTropicalStorm||this.isHurricane){this.kmlURL=kmlURL+this.stormID;}
var clat=(this.stormBounds.getNorthEast().lat()+this.stormBounds.getSouthWest().lat())/2;var clng=(this.stormBounds.getNorthEast().lng()+this.stormBounds.getSouthWest().lng())/2;this.centerLatLng=new GLatLng(clat,clng);this.boundsZoom=map.getBoundsZoomLevel(this.stormBounds);if(!this.isFirst){this.mapStormPathOnly();}else{stormCollection.mapStormFull(this.stormID);}
if(this.isActive){this.lastPointID=data.segmentID;if(this.showPopup){var pe=new PeriodicalExecuter(function(){pe.stop();this.markerClick(this.lastActualPoint);}.bind(this),2);}}},loadKML:function(r){this.kmlURL=r.value;},buildBubble:function(data){var bubble="<div style='float:left;'><div id='stormInfoTarget'>Loading...</div>";bubble+="<div style='float:left; clear:both; display:none;' id='showWindsLink'>"+"<a href='javascript:;' onclick='stormCollection.mapStormFull(\""+this.stormID+"\")'>"+"Show winds for this storm</a></div>"+"<br /><div style='float:left; clear:both;' id='showModelsTarget'>"+"</div>";if(data.satImage){bubble+="<div style='float:left; clear:both;' id='showSatTarget'></div>";}
bubble+="<br /><div style='float:left; clear:both; margin-top:25px;'>"+"<iframe width='234' src='promoOne.aspx' id='bubbleAd' scrolling='no' height='60' frameborder='0' marginheight='0' marginwidth='0' ></iframe>"+"</div></div>";bubble+="<div id='nearestCitiesTarget'></div>";return bubble;},mapStormPathOnly:function(){if(this.pathMapped)return;this.stormPathOnMap=new GPolyline(this.points,"#000000",4,.5);map.addOverlay(this.stormPathOnMap);if(this.forecastPoints.length>0){this.forecastPathOnMap=new GPolyline(this.forecastPoints,"#f00000",4,.5);map.addOverlay(this.forecastPathOnMap);}
this.markerArray.each(function(m){map.addOverlay(m)});this.pathMapped=true;},mapStormFull:function(){if(this.fullMapped)return;if(!this.pathMapped)this.mapStormPathOnly();this.fullMapped=true;loadKML(this.kmlURL);riskManager.clear();riskManager.addWindData(this.windData);riskManager.addPressureData(this.pressureData);riskManager.addFieldData(this.fieldData);riskManager.loadStorm(this);},removeStormWinds:function(){if(!this.fullMapped)return;map.removeOverlay(windFields);this.fullMapped=false;},removeStormPath:function(){map.removeOverlay(this.stormPathOnMap);this.removeModelsFromMap();if(this.forecastPoints.length>0){map.removeOverlay(this.forecastPathOnMap);}
this.markerArray.each(function(m){map.removeOverlay(m)});this.removeStormWinds();this.fullMapped=false;this.pathMapped=false;},flashPath:function(){this.addExtraLine();var pe=new PeriodicalExecuter(function(){pe.stop();this.removeExtraLine();}.bind(this),7);},buildToolTip:function(data){var name=data.name;var dateParts=data.date.split("/");var mm=dateParts[1];var dd=dateParts[0];var yyyy=dateParts[2];var dateString=mm+"/"+dd+"/"+yyyy;if(data.stormType.toLowerCase()=="forecast"){name=name+"<br />forecast point"}
var html="<div  style='font-size:18px;'><span class='red'>"+name+"</span><br /><span>wind: "+data.wind+"mph</span><br />"+"<span>Category: "+data.category+"<br />"+dateString+":00 EDT</span></div>";return html;},getSimpleIcon:function(cat){if((cat=="E")||(cat=="L")||(cat=="H")||(cat=="W"))cat="td";var icon=new GIcon();icon.image="images/icons/storms/"+cat+".png";icon.iconSize=new GSize(17,16);icon.iconAnchor=new GPoint(8,8);icon.infoWindowAnchor=new GPoint(8,8);return icon;},createMarker:function(point,html,ic,data,toolText){data.point=point;var marker=new GMarker(point,ic);marker.data=data;marker.html=html;marker.tooltip="<div class='tooltip'>"+toolText+"</div>";GEvent.addListener(marker,"click",function(){this.markerClick(marker);trackStats("stormDash","View Storm Details%20"+this.name);}.bind(this));GEvent.addListener(marker,"infowindowopen",function(){if(this.extraLine==null)
this.addExtraLine(marker);getStormBubbleInfo(marker.data.stormID,marker.data.segmentID);if(this.fullMapped){$("showWindsLink").hide();}else{$("showWindsLink").show();}
if(this.isActive){if(this.showingModels){$("showModelsTarget").innerHTML="<a href='javascript:;' onclick='stormCollection.toggleModels(\""+marker.data.stormID+"\")'>Hide storm models</a>";}else{$("showModelsTarget").innerHTML="<a href='javascript:;' onclick='stormCollection.toggleModels(\""+marker.data.stormID+"\")'>Show storm models</a>";}}
if(marker.data.satImage){if(!marker.showingSat){$("showSatTarget").innerHTML="<br /><a href='javascript:;' onclick='stormCollection.showPointImage(\""+this.stormID+"\", \""+marker.data.index+"\")'>Show sat. image for this point</a>";}else{$("showSatTarget").innerHTML="<br /><a href='javascript:;' onclick='stormCollection.hidePointImage(\""+this.stormID+"\", \""+marker.data.index+"\")'>Hide sat. image</a>";}}
this.getCities(marker.getPoint().lat(),marker.getPoint().lng());}.bind(this));GEvent.addListener(marker,"infowindowclose",function(){if(this.extraLine!=null)
this.removeExtraLine(marker);}.bind(this));GEvent.addListener(marker,"mouseover",function(){if(this.extraLine==null)
this.addExtraLine(marker);showTooltip(marker,map);}.bind(this));GEvent.addListener(marker,"mouseout",function(){if(this.extraLine!=null)
this.removeExtraLine(marker);tooltip.style.visibility="hidden"}.bind(this));return marker;},markerClick:function(marker){map.closeInfoWindow();var markerLocation=marker.getPoint();var pixels=map.fromLatLngToDivPixel(markerLocation);var center=map.getCenter();var centerPixels=map.fromLatLngToDivPixel(center);var y=pixels.y;y=y-200;var newLatLng=map.fromDivPixelToLatLng(new GPoint(pixels.x,y));map.panTo(newLatLng);var pe=new PeriodicalExecuter(function(){pe.stop();marker.openInfoWindowTabsHtml(marker.html,{suppressMapPan:true});},1);},addExtraLine:function(marker){var extraLinePoints=this.points.concat(this.forecastPoints);this.extraLine=new GPolyline(extraLinePoints,"#FFFFAA",5,.9);map.addOverlay(this.extraLine);},removeExtraLine:function(marker){map.removeOverlay(this.extraLine);this.extraLine=null;},startReloadCheck:function(){this.reloadPE=new PeriodicalExecuter(function(){ibiseye.srvCheckForUpdate(""+this.stormID,""+this.lastPointID,this.startReloadCheck_result.bind(this))}.bind(this),600);},startReloadCheck_result:function(r){var reload=r.value.Tables[0].Rows[0].RELOADER;if(reload=="true"){this.showPopup=false;this.removeStormPath();this.removeModelsFromMap();this.removeExtraLine();this.dataArray.clear();this.markerArray.clear();this.points.clear();this.forecastPoints.clear();this.windData.clear();this.pressureData.clear();this.fieldData.clear();riskManager.clear();this.reloadPE.stop();this.getData();}else{}},getModels:function(){ibiseye.srvGetModels(this.stormID,this.getModels_result.bind(this));},getModels_result:function(r){var ds=r.value;if(ds==null)return;var rows=ds.Tables[0].Rows.length;if(rows==0){return;}
for(var i=0;i<rows;i++){row=ds.Tables[0].Rows[i];data=new Hash();data.lat=row.LAT;data.lng=row.LON;data.line=row.ENCODED_LATLON.replace(/\\\\/g,"\\");;data.name=row.MODEL_TYPE;data.count=row.COUNTER;this.modelArray.push(new StormModel(data));}},toggleModels:function(){if(this.showingModels){this.removeModelsFromMap();if($("showModelsTarget")!=null){$("showModelsTarget").innerHTML="<a href='javascript:;' onclick='stormCollection.toggleModels(\""+this.stormID+"\")'>Show storm models</a>";}}else{this.addModelsToMap();if($("showModelsTarget")!=null){$("showModelsTarget").innerHTML="<a href='javascript:;' onclick='stormCollection.toggleModels(\""+this.stormID+"\")'>Hide storm models</a>";}}},addModelsToMap:function(){this.showingModels=true;this.modelArray.each(function(model){model.show();}.bind(this));},removeModelsFromMap:function(){this.showingModels=false;this.modelArray.each(function(model){model.hide();}.bind(this));},getCities:function(lat,lng,bearing){ibiseye.srvGetCities(""+lat,""+lng,this.getCities_result.bind(this));},getCities_result:function(r){var ds=r.value;var targetElem=$("nearestCitiesTarget");targetElem.innerHTML="";var rows=ds.Tables[0].Rows.length;if(rows==0){return;}
for(var i=0;i<rows;i++){row=ds.Tables[0].Rows[i];var html="";html+="<div class='nearestCity'><span class='nearestName'>"+row.NAME+"</span><br /><span class='nearestGeo'>"+
row.DISTANCE+" miles to the "+row.HEADING+"</span></div>";new Insertion.Bottom(targetElem,html);}
new Insertion.Top(targetElem,"<h3>Nearest Cities</h3>");},destroy:function(){this.removeStormPath();this.stormID=null;this.active=null;this.dataArray.clear();this.markerArray.clear();this.points.clear();this.forecastPoints.clear();this.pathMapped=false;this.fullMapped=false;this.windData.clear();this.pressureData.clear();this.fieldData.clear();if(this.reloadPE!=null){this.reloadPE.stop();this.reloadPE=null;}}};function getStormBubbleInfo(stormID,segID){ibiseye.srvGetSegPopup(""+stormID,""+segID,getStormBubbleInfo_result);}
function getStormBubbleInfo_result(r){$("stormInfoTarget").innerHTML=r.value.Tables[0].Rows[0].PHTML;}
var windFields=null;function loadKML(url){if(windFields)map.removeOverlay(windFields);windFieldsLayer=new GTileLayer(new GCopyrightCollection(),0,17);windFieldsLayer.getTileUrl=function(a,b){b=this.maxResolution()-b;return"http://maps.google.com/mapsdt?id="+url+"//"+alertsVersion+"&x="+a.x+"&y="+a.y+"&zoom="+b;}
windFieldsLayer.isPng=function(){return true;}
windFields=new GTileLayerOverlay(windFieldsLayer);map.addOverlay(windFields);reindexGroundOverlays();}
var POI=Class.create();POI.prototype={initialize:function(data){this.data=data;this.icon=this.getIcon(data.type);this.html=new Array();this.html.push(new GInfoWindowTab(data.type,"<div class='weatherBubbleSizer'><div style='width:100%; height:180px; overflow:auto;'>"+data.html+"<br /><br /><iframe width='234' src='promoOne.aspx' id='bubbleAd' scrolling='no' height='60' frameborder='0' marginheight='0' marginwidth='0' ></iframe> </div></div>"));this.point=new GLatLng(data.lat,data.lng);this.marker=this.createMarker(this.point,this.html,this.icon,"POI #"+data.index,this.data);},getIcon:function(type){var icon=new GIcon();icon.image="images/icons/storms/"+type+".png";icon.iconSize=new GSize(25,24);icon.iconAnchor=new GPoint(13,12);icon.infoWindowAnchor=new GPoint(13,12);return icon;},createMarker:function(point,html,ic,toolText,data){var marker=new GMarker(point,ic);marker.data=data;marker.tooltip="<div class='tooltip'>"+toolText+"</div>";GEvent.addListener(marker,"click",function(){marker.openInfoWindowTabsHtml(html,{suppressMapPan:true});trackStats("stormDash","Viewed%20POI");this.panToMarker();}.bind(this));GEvent.addListener(marker,"infowindowopen",function(){}.bind(this));GEvent.addListener(marker,"mouseover",function(){showTooltip(marker,map);});GEvent.addListener(marker,"mouseout",function(){tooltip.style.visibility="hidden"});return marker;},panToMarker:function(){var markerLocation=this.marker.getPoint();var pixels=map.fromLatLngToDivPixel(markerLocation);var center=map.getCenter();var centerPixels=map.fromLatLngToDivPixel(center);var y=pixels.y;y=y-100;var newLatLng=map.fromDivPixelToLatLng(new GPoint(pixels.x,y));map.panTo(newLatLng);},show:function(){map.addOverlay(this.marker);},hide:function(){map.removeOverlay(this.marker);},destroy:function(){this.marker=null;this.data=null;this.icon=null;this.point=null;this.html=null;}}
var StormModel=Class.create();StormModel.prototype={initialize:function(data){this.data=data;this.icon=this.getIcon(data.type);this.onMap=false;this.extraLine=null;this.line=this.getLine(data.line,"#0000FF",data.count-1);this.point=new GLatLng(data.lat,data.lng);this.marker=this.createMarker(this.point,this.icon,"Model: "+data.name,this.data);},getIcon:function(type){var icon=new GIcon();icon.image="images/icons/storms/model.png";icon.iconSize=new GSize(20,20);icon.iconAnchor=new GPoint(10,10);icon.infoWindowAnchor=new GPoint(10,10);return icon;},getLine:function(line,color,count){var levels="";for(var i=0;i<count;i++){levels+="P";}
return new GPolyline.fromEncoded({color:color,weight:3,opacity:0.8,points:line,levels:levels,zoomFactor:1,numLevels:18});},createMarker:function(point,ic,toolText,data){var marker=new GMarker(point,ic);marker.data=data;marker.tooltip="<div class='tooltip'>"+toolText+"</div>";GEvent.addListener(marker,"click",function(){}.bind(this));GEvent.addListener(marker,"infowindowopen",function(){}.bind(this));GEvent.addListener(marker,"mouseover",function(){showTooltip(marker,map);this.addExtraLine();}.bind(this));GEvent.addListener(marker,"mouseout",function(){tooltip.style.visibility="hidden"
this.removeExtraLine();}.bind(this));return marker;},panToMarker:function(){var markerLocation=this.marker.getPoint();var pixels=map.fromLatLngToDivPixel(markerLocation);var center=map.getCenter();var centerPixels=map.fromLatLngToDivPixel(center);var y=pixels.y;y=y-100;var newLatLng=map.fromDivPixelToLatLng(new GPoint(pixels.x,y));map.panTo(newLatLng);},show:function(){if(this.onMap)return;this.onMap=true;map.addOverlay(this.marker);map.addOverlay(this.line);},hide:function(){if(!this.onMap)return;this.onMap=false;map.removeOverlay(this.marker);map.removeOverlay(this.line);},addExtraLine:function(marker){this.extraLine=this.getLine(this.data.line,"#FFFFAA",this.data.count-1);map.addOverlay(this.extraLine);},removeExtraLine:function(marker){map.removeOverlay(this.extraLine);this.extraLine=null;},destroy:function(){this.marker=null;this.data=null;this.icon=null;this.point=null;this.html=null;}}
var Invest=Class.create();Invest.prototype={initialize:function(data){this.data=data;this.modelArray=new Array();this.icon=this.getIcon(data.type);this.onMap=false;this.extraLine=null;this.line=this.getLine(data.line,"#000000",data.count-1);this.stormID=data.id;this.html=new Array();this.html.push(new GInfoWindowTab(data.type,"<div class='weatherBubbleSizer'><div style='width:100%; height:180px; overflow:auto;'>"+this.buildBubble()+"</div></div>"));this.point=new GLatLng(data.lat,data.lng);var tooltip="<b>Invest: </b> Bearing "+data.bearing+" degrees, at "+data.forwardSpeed+" with wind speeds of "+data.wind+" and a pressure of "+data.pressure+"."
this.marker=this.createMarker(this.point,this.icon,this.html,tooltip,this.data);},getIcon:function(type){var icon=new GIcon();icon.image="images/icons/storms/invest.png";icon.iconSize=new GSize(25,25);icon.iconAnchor=new GPoint(13,13);icon.infoWindowAnchor=new GPoint(13,13);return icon;},buildBubble:function(){d=this.data;var html='<div class="bubbleElementContainer" style="background-color:#FFFFFF; float:left"> '+'<h3 class="stormBubbleStormName" style="margin-bottom:5px;">'+d.sname+'</h3>'+'   <span class="bubbleLeft">Bearing: </span><span class="bubbleRight">'+d.bearing+'</span>'+'<div class="bubbleElementContainer">'+'   <span class="bubbleLeft">Forward Speed: </span><span class="bubbleRight">'+d.forwardSpeed+'</span>'+'</div><div class="bubbleElementContainer" style="color:#666666;">'+'   <span class="bubbleLeft">Wind Speed: </span><span class="bubbleRight">'+d.wind+'</span>'+'</div><div class="bubbleElementContainer" style="color:#666666;">'+'   <span class="bubbleLeft">Wind Gusts: </span><span class="bubbleRight">'+d.gusts+'</span>'+'</div><div class="bubbleElementContainer">'+'   <span class="bubbleLeft">Pressure:</span><span class="bubbleRight">'+d.pressure+'</span>'+'</div><div class="bubbleElementContainer">'+'   <span class="bubbleLeft">Position:</span><span class="bubbleRight">'+d.lat+', '+d.lng+'</span>'+'</div>'
return html;},getLine:function(line,color,count){var levels="";for(var i=0;i<count;i++){levels+="P";}
return new GPolyline.fromEncoded({color:color,weight:3,opacity:0.8,points:line,levels:levels,zoomFactor:1,numLevels:18});},createMarker:function(point,ic,html,toolText,data){var marker=new GMarker(point,ic);marker.data=data;marker.tooltip="<div class='tooltip'>"+toolText+"</div>";GEvent.addListener(marker,"click",function(){marker.openInfoWindowTabsHtml(html,{suppressMapPan:true});trackStats("stormDash","Viewed%20POI");this.panToMarker();}.bind(this));GEvent.addListener(marker,"infowindowopen",function(){}.bind(this));GEvent.addListener(marker,"mouseover",function(){showTooltip(marker,map);this.addExtraLine();}.bind(this));GEvent.addListener(marker,"mouseout",function(){tooltip.style.visibility="hidden"
this.removeExtraLine();}.bind(this));return marker;},panToMarker:function(){var markerLocation=this.marker.getPoint();var pixels=map.fromLatLngToDivPixel(markerLocation);var center=map.getCenter();var centerPixels=map.fromLatLngToDivPixel(center);var y=pixels.y;y=y-100;var newLatLng=map.fromDivPixelToLatLng(new GPoint(pixels.x,y));map.panTo(newLatLng);},show:function(){if(this.onMap)return;this.onMap=true;map.addOverlay(this.marker);map.addOverlay(this.line);this.getModels();},hide:function(){if(!this.onMap)return;this.onMap=false;map.removeOverlay(this.marker);map.removeOverlay(this.line);this.removeModelsFromMap();},addExtraLine:function(marker){this.extraLine=this.getLine(this.data.line,"#FFFFAA",this.data.count-1);map.addOverlay(this.extraLine);},getModels:function(){ibiseye.srvGetModels(this.stormID,this.getModels_result.bind(this));},getModels_result:function(r){var ds=r.value;if(ds==null)return;var rows=ds.Tables[0].Rows.length;if(rows==0){return;}
for(var i=0;i<rows;i++){row=ds.Tables[0].Rows[i];data=new Hash();data.lat=row.LAT;data.lng=row.LON;data.line=row.ENCODED_LATLON.replace(/\\\\/g,"\\");data.name=row.MODEL_TYPE;data.count=row.COUNTER;this.modelArray.push(new StormModel(data));}
this.addModelsToMap();},addModelsToMap:function(){this.showingModels=true;this.modelArray.each(function(model){model.show();}.bind(this));},removeModelsFromMap:function(){this.showingModels=false;this.modelArray.each(function(model){model.hide();}.bind(this));},removeExtraLine:function(marker){map.removeOverlay(this.extraLine);this.extraLine=null;},destroy:function(){this.marker=null;this.data=null;this.icon=null;this.point=null;this.html=null;}}
﻿
Window.keepMultiModalWindow=true
var now=new Date();var nowYear=now.getFullYear();var nowMin=now.getMinutes();var nowHour=now.getHours();var nowDay=now.getDay();var nowMonth=now.getMonth();var nowSeconds=now.getSeconds();var omnitureURL="http://nytrsarasota.112.2o7.net/b/ss/nytrsarasota/1/NS/";var adURL="http://adx.heraldtribune.com/apps/adx.dll/src/SH022/SIDEAD01/NEWS0704/";function randomNum(){var num=Math.floor(Math.random()*1000000);return num}
function trackStats(ibisDashName,ibisActionName){var randomNumber=Math.floor(Math.random()*100000000000);if(!ibisActionName)ibisActionName=ibisDashName;ibisActionName="IE%20|%20"+ibisActionName+"%20|%20"+ibisDashName;var src=omnitureURL+randomNumber+"?pageName="+ibisActionName+"&server=IBISEYE.com&ch="+ibisDashName;$("omnitureImage").src=src;}
Event.observe(window,'load',doBigAdTimer);function doBigAdTimer(){var pe=new PeriodicalExecuter(function(){pe.stop();$("bigAdDiv").hide();}.bind(this),8);}
function reloadPromo(target){var pageid=Math.floor(Math.random()*100000000000);var idn=Math.floor(Math.random()*100000000000);var scriptSource=adURL+pageid+'/-1/NEWS/;idn='+idn+';Type=1?';var html="<script type='javascript' language='text/javascript' src='"+scriptSource+"'></script>";var e=$A($(target).getElementsBySelector('iframe[src^="http://pagead2.googlesyndication.com"]'));if(e.length>0){var src=e[0].src+"&rsnd="+idn;e[0].src=src;}}
function resizeTheDamnMap(){map.checkResize();}
function undockWindow(target,content,title,relatedWindows){var contentWidth=$(content).style.width;var contentHeight=$(content).style.height;target=new Window({maximizable:true,resizable:true,hideEffect:Effect.SwitchOff,id:"undocked"+content,showEffect:Element.show,minWidth:contentWidth,destroyOnClose:true,width:contentWidth+30,height:contentHeight+10,className:theme,recenterAuto:false,title:title,minHeight:250,maxHeight:550});target.setContent(content,true,true);target.setLocation(40);target.show();myObserver={onDestroy:function(eventName,win){if(win==target){$(content+"Container").appendChild($(content));target=null;Windows.removeObserver(this);undocks=$A(document.getElementsByClassName('undockLink',$(content)));undocks.each(function(s){s.show()});if(relatedWindows){relatedWindows.each(function(window){Windows.close("undocked"+window);}.bind(this));}}}}
undocks=$A(document.getElementsByClassName('undockLink',$(content)));undocks.each(function(s){s.hide()});Windows.addObserver(myObserver);}
function showLoading(){$("loadingDiv").show();new PeriodicalExecuter(function(pe){hideLoading();pe.stop();},10);}
function hideLoading(){$("loadingDiv").hide();}
var geocodingReasons=[];geocodingReasons[G_GEO_SUCCESS]="Success";geocodingReasons[G_GEO_MISSING_ADDRESS]="Missing Address: The address was either missing or had no value.";geocodingReasons[G_GEO_UNKNOWN_ADDRESS]="Unknown Address:  No corresponding geographic location could be found for the specified address.";geocodingReasons[G_GEO_UNAVAILABLE_ADDRESS]="Unavailable Address:  The geocode for the given address cannot be returned due to legal or contractual reasons.";geocodingReasons[G_GEO_BAD_KEY]="Bad Key: The API key is either invalid or does not match the domain for which it was given";geocodingReasons[G_GEO_TOO_MANY_QUERIES]="Too Many Queries: The daily geocoding quota for this site has been exceeded.";geocodingReasons[G_GEO_SERVER_ERROR]="Server error: The geocoding request could not be successfully processed.";var tooltip;function initToolTips(){tooltip=document.createElement("div");$("map").appendChild(tooltip);tooltip.style.zIndex="100000000";tooltip.style.opacity="95";tooltip.style.filter="alpha(opacity=95)";tooltip.style.color="#333333";tooltip.style.border="1px solid black";tooltip.style.visibility="hidden";tooltip.style.position="absolute";}
function showTooltip(marker,map){tooltip.innerHTML=marker.tooltip;var point=map.getCurrentMapType().getProjection().fromLatLngToPixel(map.getBounds().getSouthWest(),map.getZoom());var offset=map.getCurrentMapType().getProjection().fromLatLngToPixel(marker.getPoint(),map.getZoom());var anchor=new Object();anchor.x=3;anchor.y=17;width=5;var pos=new GControlPosition(G_ANCHOR_BOTTOM_LEFT,new GSize(offset.x-point.x-anchor.x+width,-offset.y+point.y+anchor.y));pos.apply(tooltip);randomNothing();tooltip.style.visibility="visible";}
function randomNothing(){}
function refreshPage(){window.location=window.location;}
var stateArray=["AL","FL","GA","LA","MS","NC","SC","TX","VA"]
function formatCurrency(num){num=num.toString().replace(/\$|\,/g,'');if(isNaN(num)){num="0";}
num=Math.round((num/1000))*1000;sign=(num==(num=Math.abs(num)));num=Math.floor((num*100+0.50000000001));cents=num%100;num=Math.floor(num/100).toString();if(cents<10){cents="0"+cents;}
for(var i=0;i<Math.floor((num.length-(1+i))/3);i++){num=num.substring(0,num.length-(4*i+3))+','+
num.substring(num.length-(4*i+3));}
return(((sign)?'':'-')+'$'+num);}
var alertsVersion=0;var updateSeconds=600;var serverTime;var lastAlertUpdate=0;var serverNow;function getVersion(){$("startUp").style.display='none';alertsVersion=$("startUpVersion").innerHTML;lastServerAlertUpdate=$("startUpUpdated").innerHTML;serverTime=$("startUpNow").innerHTML;updateSeconds=$("startUpNextUpdate").innerHTML;serverNow=$("startLoadTime").innerHTML;}
Event.observe(window,"load",addAnchorListeners);function addAnchorListeners(){var as=document.getElementsByTagName("a");for(var i=0;a=as[i];i++){Event.observe(as[i],"click",function(e){var elem=Event.findElement(e,'A');elem.blur();});}}
function simpleTest(response){console.log(response.json);}
function test(response){console.log("response");console.log(response);for(prop in response){console.log(prop+": "+response[prop]);}
console.log(response.value);for(prop in response.value){console.log(prop+": "+response.value[prop]);}
for(prop in response.error){console.log(prop+": "+response.error[prop]);}
var ds=response.value;console.log("ds: "+ds);for(var j=0;j<ds.Tables.length;j++){var nos=ds.Tables[j].Rows.length;console.log("nos: "+nos)
console.log(ds.Tables[j].Rows);for(var i=0;i<nos;i++){var row=ds.Tables[j].Rows[i];for(prop in row){console.log(prop+": "+row[prop]);}}}}
function undonorton(){infected=false;tmp=window.onerror;if(tmp!=null){tmp=tmp.toString();if(tmp!=null)
if(tmp.indexOf('Sym')>=0)
infected=true;}
if(infected){window.open=null;window.open=SymRealWinOpen;window.onunload=null;window.onload=null;window.onerror=null;}}
function isIE6(){if(window.ActiveXObject)window.ie=window[window.XMLHttpRequest?'ie7':'ie6']=true;if(window.ie6)return true;return false;}
﻿
var weatherAlertManager;alertKMLLocation="http://ibis.htcreative.com/KML/ibiseye/livealerts.aspx/";var maxAlertZoomContext=10;var minAlertZoomContext=7;var trackWeatherAlertStats=false;var WeatherAlertManager=Class.create();WeatherAlertManager.prototype={initialize:function(){this.nextUpdate=updateSeconds;this.updateCount=0;this.alertsArray=new Array();this.checkURLForAlerts=true;if(this.nextUpdate<0)this.nextUpdate=600;this.timer=new PeriodicalExecuter(this.getWeatherAlerts.bind(this),this.nextUpdate);this.statesKMLHash=new Hash();this.centerPointsHash=new Hash();this.currentState="";this.getWeatherAlerts();this.addKML(["ALL"]);},getWeatherAlerts:function(){if(this.updateCount!=0){this.nextUpdate=600;this.timer.stop();this.timer=new PeriodicalExecuter(this.getWeatherAlerts.bind(this),this.nextUpdate);}
this.updateCount++;var bounds=map.getBounds();var sw=bounds.getSouthWest();var ne=bounds.getNorthEast();this.clearOutAlerts();ibiseye.srvGetWeatherAlerts(""+23.725011735951796,""+-116.103515625,""+51.06901665960392,""+-63.369140625,this.getWeatherAlerts_result.bind(this));},getWeatherAlerts_result:function(r){if(trackWeatherAlertStats){trackStats("weatherDash","Loaded%20Alerts");}else{trackWeatherAlertStats=true;}
var ds=r.value;if(ds==null)return;var rows=ds.Tables[0].Rows.length;var alertZone;var alertRows=new Array();if(rows==0)return;for(var i=0;i<rows;i++){row=ds.Tables[0].Rows[i];if(i==0){alertZone=row.ZONE;alertsVersion=row.VERSION;}
if((alertZone!=row.ZONE)){alertZone=row.ZONE;var newAlert=new WeatherAlert();newAlert.addData(alertRows);this.alertsArray.push(newAlert);alertRows.clear();}
alertRows.push(row);}
var newAlert=new WeatherAlert();newAlert.addData(alertRows);this.alertsArray.push(newAlert);var rows2=ds.Tables[1].Rows.length;for(var j=0;j<rows2;j++){var data=new Hash();var row=ds.Tables[1].Rows[j];data.state=row.STATE;data.nwLatLng=new GLatLng(row.NWLAT,row.NWLON);data.seLatLng=new GLatLng(row.SELAT,row.SELON);data.centerLatLng=new GLatLng(row.CENTERLAT,row.CENTERLON);this.centerPointsHash[data.state]=data;var bounds=new GLatLngBounds();bounds.extend(data.nwLatLng);bounds.extend(data.seLatLng);data.zoomLevel=map.getBoundsZoomLevel(bounds);}
if(this.currentState!=""){loadWeatherState(this.currentState);this.doLater=new PeriodicalExecuter(this.showAllSelectedAlerts.bind(this),.5);}else{this.addKML(["ALL"]);}
addNumbersToDashboard();if(this.checkURLForAlerts){checkForURLAlerts();this.checkURLForAlerts=false;}},showWeatherAlertZone:function(zone){var alert=this.getAlertByZone(zone);if(!alert){this.showAllSelectedAlerts();return;}
this.showAllSelectedAlerts(true,alert);if(currentMapZoom<minAlertZoomContext){map.setCenter(alert.marker.getPoint(),minAlertZoomContext);}else if(currentMapZoom>maxAlertZoomContext){map.setCenter(alert.marker.getPoint(),maxAlertZoomContext);}else{map.setCenter(alert.marker.getPoint(),currentMapZoom);}
var pe=new PeriodicalExecuter(function(){pe.stop();alert.marker.openInfoWindowTabsHtml(alert.html,{suppressMapPan:true});alert.panToMarker();}.bind(this),1);},showAllSelectedAlerts:function(toSpecificZone,alert){this.removeAllAlertsFromMap();if(this.doLater!=null){this.doLater.stop();}
if(!toSpecificZone&&(selectedAlertsState!="ALL")){map.setCenter(this.centerPointsHash[selectedAlertsState].centerLatLng,this.centerPointsHash[selectedAlertsState].zoomLevel);}
var alerts=selectedAlertsArray;alerts.each(function(alert){alert.addToMap();}.bind(this));this.addKML([selectedAlertsState]);Windows.close("uniqueDashweatherDash");},removeAllAlertsFromMap:function(){this.alertsArray.each(function(alert){alert.removeFromMap();});this.removeKML();},clearOutAlerts:function(){this.removeAllAlertsFromMap();this.alertsArray.each(function(alert){alert.destroy();}.bind(this));this.alertsArray.clear();},getAlertsByState:function(state){var alerts=this.alertsArray.findAll(function(alert){return(alert.state.toUpperCase()==state.toUpperCase());});return alerts;},getAlertByZone:function(zone){var alert=this.alertsArray.find(function(alert){return(alert.zone.toUpperCase()==zone.toUpperCase());});return alert;},addKML:function(states){if(states.length==0)states[0]="ALL";this.removeKML();states.each(function(state){newAlertLayer=new GTileLayer(new GCopyrightCollection(),0,17);newAlertLayer.getTileUrl=function(a,b){b=this.maxResolution()-b;return"http://maps.google.com/mapsdt?id="+alertKMLLocation+state+"/"+alertsVersion+"&x="+a.x+"&y="+a.y+"&zoom="+b;}
newAlertLayer.isPng=function(){return true;}
this.statesKMLHash[state]=new GTileLayerOverlay(newAlertLayer);map.addOverlay(this.statesKMLHash[state])}.bind(this));},removeKML:function(){this.statesKMLHash.each(function(state){map.removeOverlay(state.value);}.bind(this));}}
var WeatherAlert=Class.create();WeatherAlert.prototype={initialize:function(){this.allData=new Array();this.html=new Array();},addData:function(rows){for(var i=0;i<rows.length;i++){var data=new Hash();var row=rows[i];data.expires=row.EXP_T;data.starts=row.START_T;data.simpleType=row.TYPE_C;data.type=row.TYPE_W;data.zoneName=row.NAME;data.state=row.STATE;data.lat=row.LAT;data.lng=row.LON;data.update=row.UPDATE_TIME;if(i==0){this.latlng=new GLatLng(data.lat,data.lng);this.icon=this.getIcon(data.simpleType);this.tooltip=this.createTooltip(data);this.zone=row.ZONE;this.zoneName=row.NAME;this.state=row.STATE;}
var html=this.generateHTML(data);this.html.push(new GInfoWindowTab(data.simpleType,"<div class='weatherBubbleSizer'>"+html+"</div>"));this.allData.push(data);}
this.html.push(new GInfoWindowTab("Subscribe","<div id='subscribeFormTarget'>"+genSubscribeForm(data)+"</div>"));this.marker=this.createMarker(this.latlng,this.html,this.icon,this.allData,this.tooltip);},getIcon:function(type){var icon=new GIcon();this.image="http://ibis.htcreative.com/onelegged/images/icons/weather/"+type+".png";icon.image=this.image;icon.iconSize=new GSize(25,24);icon.iconAnchor=new GPoint(13,12);icon.infoWindowAnchor=new GPoint(13,12);return icon;},createMarker:function(point,html,ic,data,toolText){var marker=new GMarker(point,ic);marker.data=data;marker.tooltip="<div class='tooltip'>"+toolText+"</div>";GEvent.addListener(marker,"click",function(){map.closeInfoWindow();this.panToMarker();var moveListener=GEvent.addListener(map,"moveend",function(){marker.openInfoWindowTabsHtml(html,{suppressMapPan:true});GEvent.removeListener(moveListener);});}.bind(this));GEvent.addListener(marker,"infowindowopen",function(){this.getNarrative();this.infoWindowOpen=true;trackStats("weatherDash","Viewed%20Weather%20Details%20"+this.zoneName);}.bind(this));GEvent.addListener(marker,"infowindowclose",function(){this.infoWindowOpen=false;}.bind(this));GEvent.addListener(marker,"mouseover",function(){showTooltip(marker,map);});GEvent.addListener(marker,"mouseout",function(){tooltip.style.visibility="hidden"});return marker;},getNarrative:function(){ibiseye.srvGetWeatherAlertNarrative(""+this.zone,this.getNarrative_result.bind(this));},getNarrative_result:function(r){var ds=r.value;var rows=ds.Tables[0].Rows.length;if(rows==0)return;for(var i=0;i<rows;i++){var data=new Hash();var row=ds.Tables[0].Rows[i];data.type=row.TYPE_C;data.body=row.BODY;var targetDiv="alert"+data.type+this.zone;$(targetDiv).innerHTML=data.body;}},panToMarker:function(){var markerLocation=this.marker.getPoint();var pixels=map.fromLatLngToDivPixel(markerLocation);var center=map.getCenter();var centerPixels=map.fromLatLngToDivPixel(center);var y=pixels.y;y=y-100;var newLatLng=map.fromDivPixelToLatLng(new GPoint(pixels.x,y));map.panTo(newLatLng);},createTooltip:function(data){var html="<span class='red'>"+data.zoneName+"</span><br /><span>type: "+data.type+"</span><br />"+"<span><b>starts</b>: "+(data.starts?data.starts:'unknown')+"</span><br />"+"<span><b>expires</b>: "+data.expires+"</span>";return html;},generateHTML:function(data){var html="<div style='overflow:auto; width:95%; height:200px;'>"+"<h4 class='weatherBubbleZoneName'>"+this.zoneName+"</h4><br />"+"<b>type: </b><span>"+data.type+"</span><br />"+"<b>starts: </b><span>"+data.starts+"</span><br />"+"<b>expires: </b><span>"+data.expires+"</span><br />"+"<div id='alert"+data.simpleType+this.zone+"'>Loading...</div>"+"</div>";html+="<br /><iframe width='234' src='promoOne.aspx' id='bubbleAd' scrolling='no' height='60' frameborder='0' marginheight='0' marginwidth='0' ></iframe>";return html;},addToMap:function(){if(this.isOnMap)return;map.addOverlay(this.marker);this.isOnMap=true;},removeFromMap:function(){if(!this.isOnMap)return;map.removeOverlay(this.marker);this.isOnMap=false;},destroy:function(){this.html.clear();this.allData.clear();this.removeFromMap();}}
﻿
var selectedWeatherPopUp=null;var weatherListPopUp=null;var selectedAlertsArray=new Array();var selectedAlertsState="ALL";function loadWeatherState(state){trackStats("weatherDash","Viewed%20State%20Alerts%20"+state);selectedAlertsArray.clear();selectedAlertsState=state;weatherAlertManager.currentState=state;$("showAllSelectedAlertsLink").show();if($("uniqueDashweatherDash").visible()){new Effect.BlindUp("weatherDetailsListTarget",{afterFinish:function(){populateSelectedAlerts();new Effect.BlindDown("weatherDetailsListTarget");}});}else{populateSelectedAlerts();}}
function populateSelectedAlerts(){$("weatherDetailsListTarget").innerHTML="";var alerts=new Array();if(selectedAlertsState=="ALL"){alerts=weatherAlertManager.alertsArray.clone();}else{alerts=weatherAlertManager.getAlertsByState(selectedAlertsState);}
var html="<h3 class='red georgia' style='font-size:18px; padding-bottom:5px;'>"+selectedAlertsState+" Alerts</h3>";alerts.each(function(alert){html+="<div style='float:left; clear:both; width:92%; margin-bottom:8px;'>";html+="<a style='float:left; width:100%;' href='javascript:;' onclick='showWeatherAlert(\""+alert.zone+"\")'>";html+="<div style='float:left; margin-right:4px;'><img src='"+alert.image+"' border='0'></div>";html+="<div style='float:left'>";if(selectedAlertsState=="ALL"){html+="<span class='blue georgia'>"+alert.zoneName+" ("+alert.state+")</span><br />";}else{html+="<span class='blue georgia'>"+alert.zoneName+"</span><br />";}
alert.allData.each(function(data){html+="<span class='red'>"+data.type+"</span><br />";});html+="</div></a></div>";});$("weatherDetailsListTarget").innerHTML=html;selectedAlertsArray=alerts}
function addNumbersToDashboard(){var totalAlerts=0;stateArray.each(function(s){var alerts=weatherAlertManager.getAlertsByState(s);var count=alerts.size();totalAlerts+=count;$(s+"Count").innerHTML="("+count+" alerts)";});$("ALLCount").innerHTML="("+totalAlerts+" total alerts)";$("weatherMenuItem").innerHTML=totalAlerts+" Alerts";$("weatherMenuItem").style.color="#DD3333";}
function showWeatherAlert(zone){weatherAlertManager.showWeatherAlertZone(zone);reindexGroundOverlays();}
function showAllSelectedAlerts(){weatherAlertManager.showAllSelectedAlerts();reindexGroundOverlays();}
function removeAllAlertsFromMap(){loadWeatherState("");weatherAlertManager.removeAllAlertsFromMap();}
function toggleShowWind(){if(windManager.isWindShown){windManager.hideWind();}else{windManager.showWind();}}
function undockWeatherDash(){undockWindow(weatherListPopUp,'weatherStateListDock','Alert List',['selectedWeatherDock']);undockWindow(selectedWeatherPopUp,'selectedWeatherDock','Selected Alerts',['weatherStateListDock']);Windows.close("uniqueDashweatherDash");}
﻿
var customMaps=new Hash();var cloudsRadioChecked=false;function toggleShowClouds(){cloudsRadioChecked=!cloudsRadioChecked
$("cloudsRadio2").checked=cloudsRadioChecked;if(cloudsRadioChecked){map.setMapType(customMaps.clouds);}else{map.setMapType(G_NORMAL_MAP);}}
function initTiles(){var tileRadar=new GTileLayer(new GCopyrightCollection(""),1,17);tileRadar.myLayers='nexrad-n0r';tileRadar.myFormat='image/png';tileRadar.myBaseURL='http://mesonet.agron.iastate.edu/cgi-bin/wms/nexrad/n0r.cgi?';tileRadar.getTileUrl=CustomGetTileUrl;tileRadar.myOpacity=0.55;tileRadar.getOpacity=customOpacity;var layer1=[G_SATELLITE_MAP.getTileLayers()[0],G_HYBRID_MAP.getTileLayers()[1],tileRadar];customMaps.radar=new GMapType(layer1,G_SATELLITE_MAP.getProjection(),"Radar",G_SATELLITE_MAP);var tileTest=new GTileLayer(new GCopyrightCollection(""),1,17);tileTest.myLayers='nexrad-ntp';tileTest.myFormat='image/png';tileTest.myBaseURL='http://mesonet.agron.iastate.edu/cgi-bin/wms/nexrad/ntp.cgi?';tileTest.getTileUrl=CustomGetTileUrl;tileTest.myOpacity=0.55;tileTest.getOpacity=customOpacity;var layer3=[G_SATELLITE_MAP.getTileLayers()[0],G_HYBRID_MAP.getTileLayers()[1],tileTest];customMaps.precip=new GMapType(layer3,G_SATELLITE_MAP.getProjection(),"Precip",G_SATELLITE_MAP);var cloudTiles=new GTileLayer(new GCopyrightCollection(""),1,17);cloudTiles.myFormat='image/png';cloudTiles.getTileUrl=globalCloudsURL;var cloudLayer=[G_SATELLITE_MAP.getTileLayers()[0],cloudTiles];customMaps.clouds=new GMapType(cloudLayer,G_SATELLITE_MAP.getProjection(),"clouds",G_SATELLITE_MAP);GEvent.addListener(map,"maptypechanged",function(){var type=map.getCurrentMapType();if(type===customMaps.clouds){cloudsRadioChecked=true;$("cloudsRadio2").checked=cloudsRadioChecked;map.setZoom(4);}else{cloudsRadioChecked=false;$("cloudsRadio2").checked=cloudsRadioChecked;}});}
var MAGIC_NUMBER=6356752.3142;var DEG2RAD=0.0174532922519943;var PI=3.14159267;function dd2MercMetersLng(p_lng){return MAGIC_NUMBER*(p_lng*DEG2RAD);}
function dd2MercMetersLat(p_lat){if(p_lat>=85)p_lat=85;if(p_lat<=-85)p_lat=-85;return MAGIC_NUMBER*Math.log(Math.tan(((p_lat*DEG2RAD)+(PI/2))/2));}
CustomGetTileUrl=function(a,b,c){if(typeof(window['this.myStyles'])=="undefined")this.myStyles="";var lULP=new GPoint(a.x*256,(a.y+1)*256);var lLRP=new GPoint((a.x+1)*256,a.y*256);var lUL=G_NORMAL_MAP.getProjection().fromPixelToLatLng(lULP,b,c);var lLR=G_NORMAL_MAP.getProjection().fromPixelToLatLng(lLRP,b,c);if(this.myMercZoomLevel!=0&&map.getZoom()<this.myMercZoomLevel){var lBbox=dd2MercMetersLng(lUL.x)+","+dd2MercMetersLat(lUL.y)+","+dd2MercMetersLng(lLR.x)+","+dd2MercMetersLat(lLR.y);var lSRS="EPSG:54004";}else{var lBbox=lUL.x+","+lUL.y+","+lLR.x+","+lLR.y;var lSRS="EPSG:4326";}
var lURL=this.myBaseURL;lURL+="&REQUEST=GetMap";lURL+="&SERVICE=WMS";lURL+="&VERSION=1.1.1";lURL+="&LAYERS="+this.myLayers;lURL+="&STYLES="+this.myStyles;lURL+="&FORMAT="+this.myFormat;lURL+="&BGCOLOR=0xFFFFFF";lURL+="&TRANSPARENT=TRUE";lURL+="&SRS="+lSRS;lURL+="&BBOX="+lBbox;lURL+="&WIDTH=256";lURL+="&HEIGHT=256";lURL+="&reaspect=false";lURL+="&random="+Math.floor(Math.random()*100000000);return lURL;}
function customOpacity(){return this.myOpacity;}
globalCloudsURL=function(a,b){if(b<5){return"http://ibis.htcreative.com/tiles/GlobalClouds/"+a.x+"_"+a.y+"_"+(b)+".png?v="+alertsVersion;}else{return"http://ibis.htcreative.com/tiles/bugger.png";}}
﻿
var windManager;var WindManager=Class.create();WindManager.prototype={initialize:function(){this.windArray=new Array();this.markerManager=new MarkerManager(map);this.markerArray=new Array();this.isWindShown=false;},getWind:function(){showLoading();var bounds=map.getBounds();var sw=bounds.getSouthWest();var ne=bounds.getNorthEast();var swlat=sw.lat();var swlng=sw.lng();var nelat=ne.lat();var nelng=ne.lng();ibiseye.srvGetWinds(""+swlat,""+swlng,""+nelat,""+nelng,this.getWind_result.bind(this));},getWind_result:function(r){var ds=r.value;var rows=ds.Tables[0].Rows.length;this.clearOutWind();var newWindArrows=new Array();if(rows==0){hideLoading();return;}
for(var i=0;i<rows;i++){var row=ds.Tables[0].Rows[i];var data=new Hash();data.id=row.SID
data.name=row.M_NAME;data.mst=row.M_ST;data.lat=row.Y;data.lng=row.X;data.windAvg=((row.WIND_AVERAGE==999)||(row.WIND_AVERAGE==-999))?"NA ":row.WIND_AVERAGE;data.windLull=((row.WIND_LULL==999)||(row.WIND_LULL==-999))?"NA ":row.WIND_LULL;data.windGust=((row.WIND_GUST==999)||(row.WIND_GUST==-999))?"NA ":row.WIND_GUST;data.windDirection=row.WIND_DIRECTION;data.airTemp=((row.AIR_TEMP==999)||(row.AIR_TEMP==-999))?"NA ":row.AIR_TEMP;data.pressure=((row.AIR_PRESSURE==999)||(row.AIR_PRESSURE==-999))?"NA ":row.AIR_PRESSURE;data.waterTemp=((row.WATER_TEMP==999)||(row.WATER_TEMP==-999))?"NA ":row.WATER_TEMP;data.dewpoint=((row.AIR_DEWPOINT==999)||(row.AIR_DEWPOINT==-999))?"NA ":row.AIR_DEWPOINT;data.humidity=((row.AIR_HUMID==999)||(row.AIR_HUMID==-999))?"NA ":row.AIR_HUMID;data.wave=((row.WAVE==999)||(row.WIND_WAVE==-999))?"NA ":row.WAVE;data.date=row.WIND_DATE;var newWind=new Wind(data);this.windArray.push(newWind);newWindArrows.push(newWind.marker);}
this.addMarkersToArray(newWindArrows);if(this.isWindShown){this.addMarkersToManager();}
hideLoading();},addMarkersToArray:function(newArrows){this.markerArray=newArrows;},addMarkersToManager:function(){this.markerManager.clearMarkers();this.markerManager.addMarkers(this.markerArray,3);this.markerManager.refresh();},showWind:function(){trackStats("weatherDash","Viewed%20Wind");this.mapListener=GEvent.addListener(map,"moveend",function(){this.getWind();}.bind(this));this.isWindShown=true;this.getWind();},hideWind:function(){GEvent.removeListener(this.mapListener);this.mapListener=null;this.isWindShown=false;this.markerManager.clearMarkers();},clearOutWind:function(){this.windArray.each(function(wind){wind.destroy();});this.windArray.clear();}}
var Wind=Class.create();Wind.prototype={initialize:function(data){this.data=data;this.icon=this.getIcon(data.windDirection,data.windAvg);this.html=this.buildTooltip(data);this.point=new GLatLng(data.lat,data.lng);this.marker=this.createMarker(this.point,"",this.icon,this.html);},buildTooltip:function(data){var html='<div class="bubbleElementContainer" style="background-color:#FFFFFF; float:left"> '+'<h3 class="stormBubbleStormName">'+data.name+'</h3>'+'   <span class="bubbleLeft">Data time:</span><span class="bubbleRight">'+data.date+'</span>'+'</div><div class="bubbleElementContainer">'+'   <span class="bubbleLeft">Wind Average:</span><span class="bubbleRight">'+data.windAvg+'mph</span>'+'</div><div class="bubbleElementContainer">'+'   <span class="bubbleLeft">Wind Lull:</span><span class="bubbleRight">'+data.windLull+'mph</span>'+'</div><div class="bubbleElementContainer">'+'   <span class="bubbleLeft">Wind gust:</span><span class="bubbleRight">'+data.windGust+'mph</span>'+'</div><div class="bubbleElementContainer">'+'   <span class="bubbleLeft">Wind Direction:</span><span class="bubbleRight">'+data.windDirection+'&deg;</span>'+'</div><div class="bubbleElementContainer">'+'   <span class="bubbleLeft">Air Temp:</span><span class="bubbleRight">'+data.airTemp+'&deg;</span>'+'</div><div class="bubbleElementContainer">'+'   <span class="bubbleLeft">Air Pressure:</span><span class="bubbleRight">'+data.pressure+'mb</span>'+'</div><div class="bubbleElementContainer">'+'   <span class="bubbleLeft">Water Temp:</span><span class="bubbleRight">'+data.waterTemp+'&deg;</span>'+'</div><div class="bubbleElementContainer">'+'   <span class="bubbleLeft">Dewpoint:</span><span class="bubbleRight">'+data.dewpoint+'&deg;</span>'+'</div><div class="bubbleElementContainer">'+'   <span class="bubbleLeft">Humidity:</span><span class="bubbleRight">'+data.humidity+'%</span>'+'</div><div class="bubbleElementContainer">'+'   <span class="bubbleLeft">Wave Height:</span><span class="bubbleRight">'+data.wave+'</span>'+'</div>'+'</div>';return html;},getIcon:function(dirDeg,speed){dirDeg=parseInt(dirDeg);if(isNaN(speed))speed=0;var icon=new GIcon();var range=1;if((speed>=0)&&(speed<10)){range=1;}else if((speed>=10)&&(speed<25)){range=2;}else if((speed>=25)&&(speed<35)){range=3;}else if((speed>=35)&&(speed<55)){range=4;}else if((speed>=55)&&(speed<75)){range=5}else if(speed>=75){range=6;}
icon.image="images/icons/wind/r"+range+"_"+dirDeg+".png";icon.iconSize=new GSize(25,24);icon.iconAnchor=new GPoint(13,12);icon.infoWindowAnchor=new GPoint(13,12);return icon;},createMarker:function(point,html,ic,toolText){var marker=new GMarker(point,ic);marker.tooltip="<div class='tooltip'>"+toolText+"</div>";GEvent.addListener(marker,"click",function(){}.bind(this));GEvent.addListener(marker,"infowindowopen",function(){}.bind(this));GEvent.addListener(marker,"mouseover",function(){showTooltip(marker,map);});GEvent.addListener(marker,"mouseout",function(){tooltip.style.visibility="hidden"});return marker;},destroy:function(){this.marker=null;this.data=null;this.icon=null;this.point=null;this.html=null;}}