document.write('<script type="text/javascript" src="../data/layers/speed_segments.js?'+new Date().getTime()+'"><\/script>');var map=null;var incidentLayer=new VEShapeLayer();var roadClosureLayer=new VEShapeLayer();var laneClosureLayer=new VEShapeLayer();var cctvLayer=new VEShapeLayer();var dmsLayer=new VEShapeLayer();var transitLayer=new VEShapeLayer();var weatherLayer=new VEShapeLayer();var speedShapes;var speedSegmentOpacity=0.8;var _weatherImage=null;var _lastWeatherImageUrl=null;var _weatherCoordsHighLevel=[31.575,-97.620,27.361,-92.53];var _weatherCoordsLowLevel=[30.481,-96.168,29.051,-94.521];var _weatherImageCount=5;var _weatherImageNum=1;var _weatherTimer=0;var lineSettingsArray=new Array();var mapParam={latitude:29.81287,longitude:-95.42922,zoom:10,showIncidents:"true",showRoadClosures:"true",showLaneClosures:"false",showCameras:"false",showDms:"false",showSpeeds:"false",showTransit:"false",showWeather:"true"};var layerStatus={incidentIsLoaded:"false",roadClosureIsLoaded:"false",laneClosureIsLoaded:"false",cameraIsLoaded:"false",dmsIsLoaded:"false",speedIsLoaded:"false",transitIsLoaded:"false",weatherIsLoaded:"false"};var mapSettingsCookie=new Cookie(document,"veMapSettingsCookie",3600);window.onload=function(){initialize();};window.onunload=function(){map.Dispose();};function initialize(){if(window.XMLHttpRequest){mapParam.showSpeeds="true";}parseQueryString();initCookies();setCheckboxValues();toggleWeatherAnimationControlDisplay();loadMap(mapParam.latitude,mapParam.longitude,mapParam.zoom);}function initCookies(){if(mapSettingsCookie.load()&&mapSettingsCookie.showSpeeds&&mapSettingsCookie.showIncidents&&mapSettingsCookie.showRoadClosures&&mapSettingsCookie.showLaneClosures&&mapSettingsCookie.showCameras&&mapSettingsCookie.showDms&&mapSettingsCookie.showTransit&&mapSettingsCookie.showWeather){document.getElementById("chkSave").checked=true;mapParam.showSpeeds=mapSettingsCookie.showSpeeds;setCheckedStatus(mapParam.showSpeeds,document.mapControl.chkSpeeds);mapParam.showIncidents=mapSettingsCookie.showIncidents;setCheckedStatus(mapParam.showIncidents,document.mapControl.chkIncidents);mapParam.showRoadClosures=mapSettingsCookie.showRoadClosures;setCheckedStatus(mapParam.showRoadClosures,document.mapControl.chkRoadClosures);mapParam.showLaneClosures=mapSettingsCookie.showLaneClosures;setCheckedStatus(mapParam.showLaneClosures,document.mapControl.chkLaneClosures);mapParam.showCameras=mapSettingsCookie.showCameras;setCheckedStatus(mapParam.showCameras,document.mapControl.chkCameras);mapParam.showDms=mapSettingsCookie.showDms;setCheckedStatus(mapParam.showDms,document.mapControl.chkDms);mapParam.showTransit=mapSettingsCookie.showTransit;setCheckedStatus(mapParam.showTransit,document.mapControl.chkTransit);mapParam.showWeather=mapSettingsCookie.showWeather;setCheckedStatus(mapParam.showWeather,document.mapControl.chkWeather);}else{document.getElementById("chkSave").checked=false;}}function loadMap(x,y,zoomLevel){initLineSettings();map=new VEMap('clientMap');var options=new VEMapOptions();options.EnableBirdseye=false;map.EnableShapeDisplayThreshold(false);map.ShowMessageBox=false;map.onLoadMap=function(){setTimeout("populateMap()",300);};map.LoadMap(new VELatLong(x,y),parseInt(zoomLevel),null,null,null,null,null,options);map.AttachEvent("onendzoom",map_onEndZoom);map.AttachEvent("onendpan",map_onEndPan);initIcons();}function LineSettings(lineWidth,offsetDivisor,polylineDivisor){this.lineWidth=lineWidth;this.offsetDivisor=offsetDivisor;this.polylineDivisor=polylineDivisor;}function initLineSettings(){lineSettingsArray.push(new LineSettings(2,1,0));lineSettingsArray.push(new LineSettings(2,1,0));lineSettingsArray.push(new LineSettings(2,1,0));lineSettingsArray.push(new LineSettings(2,1,0));lineSettingsArray.push(new LineSettings(2,1,0));lineSettingsArray.push(new LineSettings(2,1,0));lineSettingsArray.push(new LineSettings(2,1,0));lineSettingsArray.push(new LineSettings(2,1,0));lineSettingsArray.push(new LineSettings(2,1,0));lineSettingsArray.push(new LineSettings(2,1,0));lineSettingsArray.push(new LineSettings(2,1,2));lineSettingsArray.push(new LineSettings(3,1,1));lineSettingsArray.push(new LineSettings(4,2,1));lineSettingsArray.push(new LineSettings(4,4,1));lineSettingsArray.push(new LineSettings(4,8,1));lineSettingsArray.push(new LineSettings(6,8,1));lineSettingsArray.push(new LineSettings(6,16,1));lineSettingsArray.push(new LineSettings(8,16,1));lineSettingsArray.push(new LineSettings(8,64,1));lineSettingsArray.push(new LineSettings(8,64,1));}function populateMap(){toggleIncidentLayer();toggleRoadClosureLayer();toggleLaneClosureLayer();toggleCameraLayer();toggleDmsLayer();toggleSpeedLayer();toggleTransitLayer();toggleWeatherLayer();}function toggleSpeedLayer(){if(mapParam.showSpeeds=="true"){if(layerStatus.speedIsLoaded=="false"){DrawSegments();layerStatus.speedIsLoaded="true";}}else{if(layerStatus.speedIsLoaded=="true"){deleteSpeedShapes();}}layerStatus.speedIsLoaded=String(mapParam.showSpeeds);}function toggleIncidentLayer(){if(mapParam.showIncidents=="true"){if(layerStatus.incidentIsLoaded=="false"){displayElement("progressBar");GetHttpData("../data/layers/incidents_json.js?arg="+new Date().getTime(),"LoadIncidents");layerStatus.incidentIsLoaded="true";}ShowLayer(incidentLayer);}else{HideLayer(incidentLayer);}}function toggleRoadClosureLayer(){if(mapParam.showRoadClosures=="true"){if(layerStatus.roadClosureIsLoaded=="false"){displayElement("progressBar");GetHttpData("../data/layers/roadclosures_json.js?arg="+new Date().getTime(),"LoadRoadClosures");layerStatus.roadClosureIsLoaded="true";}ShowLayer(roadClosureLayer);}else{HideLayer(roadClosureLayer);}}function toggleLaneClosureLayer(){if(mapParam.showLaneClosures=="true"){if(layerStatus.laneClosureIsLoaded=="false"){displayElement("progressBar");GetHttpData("../data/layers/laneclosures_json.js?arg="+new Date().getTime(),"LoadLaneClosures");layerStatus.laneClosureIsLoaded="true";}ShowLayer(laneClosureLayer);}else{HideLayer(laneClosureLayer);}}function toggleCameraLayer(){if(mapParam.showCameras=="true"){if(layerStatus.cameraIsLoaded=="false"){GetHttpData("../data/layers/cctvSnapshots_json.js?arg="+new Date().getTime(),"LoadCameras");layerStatus.cameraIsLoaded="true";}else{ShowLayer(cctvLayer);}}else{HideLayer(cctvLayer);}}function toggleDmsLayer(){if(mapParam.showDms=="true"){if(layerStatus.dmsIsLoaded=="false"){displayElement("progressBar");GetHttpData("../data/layers/dms_json.js?arg="+new Date().getTime(),"LoadDms");layerStatus.dmsIsLoaded="true";}else{ShowLayer(dmsLayer);}}else{HideLayer(dmsLayer);}}function toggleTransitLayer(){if(mapParam.showTransit=="true"){if(layerStatus.transitIsLoaded=="false"){displayElement("progressBar");GetHttpData("../data/layers/transit_json.js?arg="+new Date().getTime(),"LoadTransit");layerStatus.transitIsLoaded="true";}else{ShowLayer(transitLayer);}}else{HideLayer(transitLayer);}}function toggleWeatherLayer(){if(mapParam.showWeather=="true"){if(layerStatus.weatherIsLoaded=="false"){displayElement("progressBar");LoadWeather(GetWeatherImageParam());layerStatus.weatherIsLoaded="true";}}else{if(layerStatus.weatherIsLoaded=="true"){map.DeleteShape(_weatherImage);layerStatus.weatherIsLoaded="false";}}}function setCheckboxValues(){setCheckedStatus(mapParam.showIncidents,document.mapControl.chkIncidents);setCheckedStatus(mapParam.showRoadClosures,document.mapControl.chkRoadClosures);setCheckedStatus(mapParam.showLaneClosures,document.mapControl.chkLaneClosures);setCheckedStatus(mapParam.showCameras,document.mapControl.chkCameras);setCheckedStatus(mapParam.showDms,document.mapControl.chkDms);setCheckedStatus(mapParam.showSpeeds,document.mapControl.chkSpeeds);setCheckedStatus(mapParam.showTransit,document.mapControl.chkTransit);setCheckedStatus(mapParam.showWeather,document.mapControl.chkWeather);}function setCheckedStatus(thisMapParamItem,checkboxItem){if(thisMapParamItem=="true"){checkboxItem.checked=true;}else{checkboxItem.checked=false;}}function getCheckboxValues(checkboxId){var thisCheckbox=document.getElementById(checkboxId);switch(thisCheckbox.id){case "chkIncidents":mapParam.showIncidents=String(thisCheckbox.checked);toggleIncidentLayer();break;case "chkRoadClosures":mapParam.showRoadClosures=String(thisCheckbox.checked);toggleRoadClosureLayer();break;case "chkLaneClosures":mapParam.showLaneClosures=String(thisCheckbox.checked);toggleLaneClosureLayer();break;case "chkCameras":mapParam.showCameras=String(thisCheckbox.checked);toggleCameraLayer();break;case "chkDms":mapParam.showDms=String(thisCheckbox.checked);toggleDmsLayer();break;case "chkSpeeds":mapParam.showSpeeds=String(thisCheckbox.checked);toggleSpeedLayer();break;case "chkTransit":mapParam.showTransit=String(thisCheckbox.checked);toggleTransitLayer();break;case "chkWeather":mapParam.showWeather=String(thisCheckbox.checked);toggleWeatherLayer();break;default:break;}processCookieSettings();toggleWeatherAnimationControlDisplay();}function toggleWeatherAnimationControlDisplay(){switch(mapParam.showWeather){case "true":displayElement("weatherAnimationControl");break;default:hideElement("weatherAnimationControl");break;}}function showWeatherAnimation(){if((mapParam.showWeather=="true")&&(!_weatherTimer)){toggleWeatherImages();}else{return;}}function toggleWeatherImages(){if(_weatherImageNum>_weatherImageCount){clearTimeout(_weatherTimer);_weatherTimer=null;_weatherImageNum=1;return;}weatherImageParam=GetWeatherImageParam();weatherImageParam.ImageUrl=weatherImageParam.ImageUrl.replace(".gif","_"+_weatherImageNum+".gif");map.DeleteShape(_weatherImage);LoadWeather(weatherImageParam);_weatherImageNum++;_weatherTimer=setTimeout("toggleWeatherImages()",1000);}function parseQueryString(){mapParam.latitude=getQueryVar("x",mapParam.latitude);mapParam.longitude=getQueryVar("y",mapParam.longitude);mapParam.zoom=getQueryVar("z",mapParam.zoom);mapParam.showIncidents=getQueryVar("inc",mapParam.showIncidents);mapParam.showRoadClosures=getQueryVar("rc",mapParam.showRoadClosures);mapParam.showLaneClosures=getQueryVar("lc",mapParam.showLaneClosures);mapParam.showCameras=getQueryVar("cam",mapParam.showCameras);mapParam.showDms=getQueryVar("dms",mapParam.showDms);mapParam.showSpeeds=getQueryVar("spd",mapParam.showSpeeds);mapParam.showTransit=getQueryVar("tr",mapParam.showTransit);mapParam.showWeather=getQueryVar("wthr",mapParam.showWeather);}function getQueryVar(variable,defaultValue){var query=window.location.search.substring(1).toLowerCase();var vars=query.split("&");for(var i=0;i<vars.length;i++){var pair=vars[i].split("=");if(pair[0]==variable){return pair[1];}}return defaultValue;}function passMapSettings(href){window.location.href=href+getQueryUrl();}function getQueryUrl(){var currentMapArgs="";if(mapParam.showIncidents=="true"){currentMapArgs+="&inc=true";}else{currentMapArgs+="&inc=false";}if(mapParam.showRoadClosures=="true"){currentMapArgs+="&rc=true";}else{currentMapArgs+="&rc=false";}if(mapParam.showLaneClosures=="true"){currentMapArgs+="&lc=true";}else{currentMapArgs+="&lc=false";}if(mapParam.showCameras=="true"){currentMapArgs+="&cam=true";}else{currentMapArgs+="&cam=false";}if(mapParam.showDms=="true"){currentMapArgs+="&dms=true";}else{currentMapArgs+="&dms=false";}if(mapParam.showSpeeds=="true"){currentMapArgs+="&spd=true";}else{currentMapArgs+="&spd=false";}if(mapParam.showTransit=="true"){currentMapArgs+="&tr=true";}else{currentMapArgs+="&tr=false";}if(mapParam.showWeather=="true"){currentMapArgs+="&wthr=true";}else{currentMapArgs+="&wthr=false";}return currentMapArgs;}function initIcons(){var mapCenter=new VELatLong(29.7566,-95.3627);var speedZoomInIcon=new VEShape(VEShapeType.Pushpin,mapCenter);speedZoomInIcon.SetTitle("<span class='pagetext'>Zoom in or click <a href='#' onclick='passMapSettings(\"/layers/layers_ve.html?x=29.81287&y=-95.42922&z=10&spd=true\"); return false;'>here</a> to view Houston area speeds.</span>");speedZoomInIcon.SetCustomIcon("<img src='../images/speedicon.gif'/>");speedZoomInIcon.SetMaxZoomLevel(8);map.AddShape(speedZoomInIcon);var transguideIcon=new VEShape(VEShapeType.Pushpin,new VELatLong(29.42046,-98.48969));transguideIcon.SetTitle("<span class='pagetext'><a href='http://www.transguide.dot.state.tx.us/'>View San Antonio Area Traffic Information</a></span>");transguideIcon.SetCustomIcon("<img src='../images/traffic_signal_icon.gif'/>");map.AddShape(transguideIcon);var dfwIcon=new VEShape(VEShapeType.Pushpin,new VELatLong(32.75956,-97.05322));dfwIcon.SetTitle("<span class='pagetext'><a href='http://www.daltrans.org'>View Dallas-Fort Worth Traffic Information</a></span>");dfwIcon.SetCustomIcon("<img src='../images/traffic_signal_icon.gif'/>");map.AddShape(dfwIcon);var austinIcon=new VEShape(VEShapeType.Pushpin,new VELatLong(30.3065,-97.72888));austinIcon.SetTitle("<span class='pagetext'><a href='http://ausits.dot.state.tx.us/'>View Austin Traffic Information</a></span>");austinIcon.SetCustomIcon("<img src='../images/traffic_signal_icon.gif'/>");map.AddShape(austinIcon);}function DrawSegments(){displayElement("progressBar");var speedSegment;var currentZoomLevel=map.GetZoomLevel();speedLayer=new VEShapeLayer();var lineCount=0;var pointCount=0;var timesRun=0;speedShapes=new Array();var xOffset,yOffset;var i=0;var speedSegmentsLength=SpeedSegments.length;var drawSegmentsOnMap=function(){timesRun++;var startLoop=new Date();while(i<speedSegmentsLength){var pointArray=new Array();var speedSegmentLatLength=SpeedSegments[i].latitudes.length;for(var j=0;j<speedSegmentLatLength;j++){if((j%lineSettingsArray[currentZoomLevel].polylineDivisor==0)||((j==0)||(j==(speedSegmentLatLength-1)))){xOffset=parseFloat(SpeedSegments[i].latitudeOffsets[j])/parseFloat(lineSettingsArray[currentZoomLevel].offsetDivisor);yOffset=parseFloat(SpeedSegments[i].longitudeOffsets[j])/parseFloat(lineSettingsArray[currentZoomLevel].offsetDivisor);pointArray.push(new VELatLong(CalcOffsetDecimal(parseFloat(SpeedSegments[i].latitudes[j]),xOffset,SpeedSegments[i].segmentDirection,SpeedSegments[i].segmentFacilityType),CalcOffsetDecimal(parseFloat(SpeedSegments[i].longitudes[j]),yOffset,SpeedSegments[i].segmentDirection,SpeedSegments[i].segmentFacilityType)));pointCount++;}}speedSegment=new VEShape(VEShapeType.Polyline,pointArray);speedSegment.SetLineColor(GetSegmentColor(SpeedSegments[i].segmentSpeed));speedSegment.SetLineWidth(lineSettingsArray[currentZoomLevel].lineWidth);speedSegment.HideIcon();speedSegment.SetMinZoomLevel(currentZoomLevel);speedSegment.SetMaxZoomLevel(currentZoomLevel);map.AddShape(speedSegment);speedShapes[i]=speedSegment;lineCount++;i++;if(timesRun==20){displayElement("browserMsg");}if(i==speedSegmentsLength){hideElement("progressBar");hideElement("browserMsg");break;}if(startLoop.getTime()+300<new Date().getTime()){setTimeout(drawSegmentsOnMap,50);break;}}};drawSegmentsOnMap();}function CalcOffsetDecimal(coordValue,offsetValue,direction,facilityType){var offsetDecimal=null;if(((direction=="WB")||(direction=="NB"))&&(facilityType=="ML")){offsetDecimal=coordValue+offsetValue;}else if(((direction=="EB")||(direction=="SB"))&&(facilityType=="ML")){offsetDecimal=coordValue-offsetValue;}else{offsetDecimal=coordValue;}return offsetDecimal;}function GetSegmentColor(speed){var color;if((speed==null)||(speed<0))color=new VEColor(132,132,132,speedSegmentOpacity);else if(speed<20)color=new VEColor(255,0,0,speedSegmentOpacity);else if(speed<30)color=new VEColor(255,140,0,speedSegmentOpacity);else if(speed<40)color=new VEColor(255,255,0,speedSegmentOpacity);else if(speed<50)color=new VEColor(0,0,254,speedSegmentOpacity);else color=new VEColor(0,128,0,speedSegmentOpacity);return color;}function map_onEndZoom(e){if(mapParam.showSpeeds=="true"){deleteSpeedShapes();}if(mapParam.showWeather=="true"){map.DeleteShape(_weatherImage);LoadWeather(GetWeatherImageParam());}}function map_onEndPan(e){if(mapParam.showWeather=="true"){map.DeleteShape(_weatherImage);LoadWeather(GetWeatherImageParam());}}function deleteSpeedShapes(){displayElement("progressBar");var i=0;var speedShapesLength=speedShapes.length;var deleteSpeedShapesFromMap=function(){var startLoop=new Date();while(i<speedShapesLength){map.DeleteShape(speedShapes[i]);i++;if(i==speedShapesLength){hideElement("progressBar");if(mapParam.showSpeeds=="true"){ProcessSegmentsAfterZoom();}break;}if(startLoop.getTime()+300<new Date().getTime()){setTimeout(deleteSpeedShapesFromMap,50);break;}}};deleteSpeedShapesFromMap();}function ProcessSegmentsAfterZoom(){var currentZoomLevel=map.GetZoomLevel();if((currentZoomLevel<17)&&(currentZoomLevel>8)){hideElement("mapMessage");DrawSegments();}else if(currentZoomLevel>16){displayElement("mapMessage");}}function ShowLayer(layer,go){displayElement("progressBar");if(!go){setTimeout(function(){ShowLayer(layer,1);},300);}else{layer.Show();hideElement("progressBar");}}function HideLayer(layer,go){displayElement("progressBar");if(!go){setTimeout(function(){HideLayer(layer,1);},300);}else{layer.Hide();hideElement("progressBar");}}function GetHttpData(file,getFunctionName){var xhReq=getHTTPObject();xhReq.onreadystatechange=function(){if(xhReq.readyState==4){if(xhReq.status==200||xhReq.status==304){var jsonData=eval('('+xhReq.responseText+')');window[getFunctionName](jsonData);}}};xhReq.open("GET",file,true);xhReq.send(null);return true;}function getHTTPObject(){var xhr=false;if(window.XMLHttpRequest){xhr=new XMLHttpRequest();}else if(window.ActiveXObject){try{xhr=new ActiveXObject("Msxml2.XMLHTTP");}catch(e){try{xhr=new ActiveXObject("Microsoft.XMLHTTP");}catch(e){xhr=false;}}}return xhr;}function LoadIncidents(incidentData){var incidentCount=incidentData.incidents.length;var icon;var i=0;var timesRun=0;var IncidentList=new Array();var drawIncidentsOnMap=function(){timesRun++;var startLoop=new Date();while(i<incidentCount){var shape=new VEShape(VEShapeType.Pushpin,new VELatLong(incidentData.incidents[i].lat,incidentData.incidents[i].lng));shape.SetTitle("<span class='pagetext'><img src='../images/ts_logo_icon.gif' align='top' width='16' height='16' style='margin-right: 10px;'>Houston TranStar</span>");shape.SetDescription("<div><table border='1' cellpadding='3' cellspacing='0'><tr><td class='pagetext' colspan='2' bgcolor='#eaf7fb'><b>Roadway Incident</b></td></tr><tr><td class='smalltext'><b>Location</b></td><td class='smalltext'>"+incidentData.incidents[i].location+"</td></tr><tr><td class='smalltext'><b>Description</b></td><td class='smalltext'>"+incidentData.incidents[i].desc+"</td></tr><tr><td class='smalltext'><b>Vehicles Involved</b></td><td class='smalltext'>"+incidentData.incidents[i].veh+"</td></tr><tr><td class='smalltext'><b>Lanes Affected</b></td><td class='smalltext'>"+incidentData.incidents[i].lanes+"</td></tr><tr><td class='smalltext'><b>Status</b></td><td class='smalltext'>"+incidentData.incidents[i].status+" at "+incidentData.incidents[i].time+"</td></tr></table><br/><span class='pagetext'><a href='#' onclick='positionMap("+incidentData.incidents[i].lat+","+incidentData.incidents[i].lng+")'>+Zoom to Incident</a></span></div>");if(incidentData.incidents[i].status=="Cleared"){icon="<img src=\"../images/inc_cleared_icon_b.gif\" height=\"16\" width=\"16\"/>";}else{icon="<img src=\"../images/inc_verified_icon_b.gif\" height=\"16\" width=\"16\"/>";}shape.SetCustomIcon(icon);IncidentList.push(shape);i++;if(timesRun==20){displayElement("browserMsg");}if(i==incidentCount){map.AddShapeLayer(incidentLayer);incidentLayer.AddShape(IncidentList);incidentLayer.Show();hideElement("progressBar");hideElement("browserMsg");break;}if(startLoop.getTime()+300<new Date().getTime()){setTimeout(drawIncidentsOnMap,50);break;}}};drawIncidentsOnMap();}function LoadRoadClosures(roadClosureData){var roadClosureCount=roadClosureData.roadclosures.length;var icon;var i=0;var timesRun=0;var RoadClosureList=new Array();var drawRoadClosuresOnMap=function(){timesRun++;var startLoop=new Date();var html;while(i<roadClosureCount){var shape=new VEShape(VEShapeType.Pushpin,new VELatLong(roadClosureData.roadclosures[i].lat,roadClosureData.roadclosures[i].lng));shape.SetTitle("<span class='pagetext'><img src='../images/ts_logo_icon.gif' align='top' width='16' height='16' style='margin-right: 10px;'>Houston TranStar</span>");html="<div><table border='1' cellpadding='3' cellspacing='0'><tr><td class='pagetext' colspan='2' bgcolor='#eaf7fb'><b>Road Closure</b></td></tr><tr><td class='smalltext'><b>Location</b></td><td class='smalltext'>"+roadClosureData.roadclosures[i].location+"</td></tr><tr><td class='smalltext'><b>Description</b></td><td class='smalltext'>"+roadClosureData.roadclosures[i].desc+"</td></tr><tr><td class='smalltext'><b>Duration</b></td><td class='smalltext'>"+roadClosureData.roadclosures[i].duration+"</td></tr><tr><td class='smalltext'><b>Status</b></td><td class='smalltext'>"+roadClosureData.roadclosures[i].lanes+" "+roadClosureData.roadclosures[i].status+"</td></tr></table><br/><span class='pagetext'><a href='#' onclick='positionMap("+roadClosureData.roadclosures[i].lat+","+roadClosureData.roadclosures[i].lng+")'>+Zoom to Road Closure</a></span>";shape.SetDescription(html);icon="<img src=\"../images/road_closure_icon_14x14.gif\" height=\"14\" width=\"14\"/>";shape.SetCustomIcon(icon);RoadClosureList.push(shape);i++;if(timesRun==20){displayElement("browserMsg");}if(i==roadClosureCount){map.AddShapeLayer(roadClosureLayer);roadClosureLayer.AddShape(RoadClosureList);roadClosureLayer.Show();hideElement("progressBar");hideElement("browserMsg");break;}if(startLoop.getTime()+300<new Date().getTime()){setTimeout(drawRoadClosuresOnMap,50);break;}}};drawRoadClosuresOnMap();}function LoadLaneClosures(laneClosureData){var laneClosureCount=laneClosureData.laneclosures.length;var icon;var i=0;var timesRun=0;var LaneClosureList=new Array();var drawLaneClosuresOnMap=function(){timesRun++;var startLoop=new Date();var html;while(i<laneClosureCount){var shape=new VEShape(VEShapeType.Pushpin,new VELatLong(laneClosureData.laneclosures[i].lat,laneClosureData.laneclosures[i].lng));shape.SetTitle("<span class='pagetext'><img src='../images/ts_logo_icon.gif' align='top' width='16' height='16' style='margin-right: 10px;'>Houston TranStar</span>");html="<div><table border='1' cellpadding='3' cellspacing='0'><tr><td class='pagetext' colspan='2' bgcolor='#eaf7fb'><b>Lane Closure</b></td></tr><tr><td class='smalltext'><b>Location</b></td><td class='smalltext'>"+laneClosureData.laneclosures[i].location+"</td></tr><tr><td class='smalltext'><b>Lanes Affected</b></td><td class='smalltext'>"+laneClosureData.laneclosures[i].lanes+"</td></tr><tr><td class='smalltext'><b>Duration</b></td><td class='smalltext'>"+laneClosureData.laneclosures[i].duration+"</td></tr>";if(laneClosureData.laneclosures[i].detour!=""){html+="<tr><td class='smalltext'><b>Detour</b></td><td class='smalltext'>"+laneClosureData.laneclosures[i].detour+"</td></tr>";}html+="<tr><td class='smalltext'><b>Status</b></td><td class='smalltext'>"+laneClosureData.laneclosures[i].status+"</td></tr><tr><td class='smalltext'><b>Reported By</b></td><td class='smalltext'>"+laneClosureData.laneclosures[i].agency+"</td></tr></table><br/><span class='pagetext'><a href='#' onclick='positionMap("+laneClosureData.laneclosures[i].lat+","+laneClosureData.laneclosures[i].lng+")'>+Zoom to Lane Closure</a></span>";shape.SetDescription(html);if(laneClosureData.laneclosures[i].status=="Active"){icon="<img src=\"../images/lc_active_icon_b.gif\" height=\"16\" width=\"15\"/>";}else{icon="<img src=\"../images/lc_inactive_icon_b.gif\" height=\"16\" width=\"15\"/>";}if(laneClosureData.laneclosures[i].hotspot=="Y"){icon="<img src=\"../images/lc_hotspot_icon_b.gif\" height=\"16\" width=\"15\"/>";}shape.SetCustomIcon(icon);LaneClosureList.push(shape);i++;if(timesRun==20){displayElement("browserMsg");}if(i==laneClosureCount){map.AddShapeLayer(laneClosureLayer);laneClosureLayer.AddShape(LaneClosureList);laneClosureLayer.Show();hideElement("progressBar");hideElement("browserMsg");break;}if(startLoop.getTime()+300<new Date().getTime()){setTimeout(drawLaneClosuresOnMap,50);break;}}};drawLaneClosuresOnMap();}function LoadCameras(cctvSnapshots){var cameraCount=cctvSnapshots.cameras.length;var i=0;var timesRun=0;var CameraList=new Array();var drawCamerasOnMap=function(){timesRun++;var startLoop=new Date();while(i<cameraCount){var currentDate=new Date();var httpImage,imageHref;var cameraId=cctvSnapshots.cameras[i].id;if(cameraId=="0"){if(cctvSnapshots.cameras[i].url.indexOf("VIVDS")>-1){imageHref="This location has multiple cameras. Click <a href=\"#\" onclick=\""+cctvSnapshots.cameras[i].url+"\">here</a> to view them.";}else{formattedImageName=cctvSnapshots.cameras[i].location.replace(/ /g,"_")+"_live_image.jpg";httpImage="../cctv_construction/txdot/"+formattedImageName+"?arg="+currentDate.getTime().toString(10);imageHref="<img height='171' width='210' src='"+httpImage+"'/>";}}else{httpImage="http://www.houstontranstar.org/snapshots/cctv/"+cameraId+".jpg?arg="+currentDate.getTime().toString(10);imageHref="<img height='171' width='210' src='"+httpImage+"'/>";}var shape=new VEShape(VEShapeType.Pushpin,new VELatLong(cctvSnapshots.cameras[i].lat,cctvSnapshots.cameras[i].lng));shape.SetTitle("<span class='pagetext'><img src='../images/ts_logo_icon.gif' align='top' width='16' height='16' style='margin-right: 10px;'>Roadway Camera</span>");shape.SetDescription("<table border='1' cellpadding='3' cellspacing='0'><tr><td class='smalltext' bgcolor='#eaf7fb' style='color: Black; font-weight: bold;'>"+cctvSnapshots.cameras[i].location+"</td></tr><tr><td class='pagetext'>"+imageHref+"</td></tr></table><br/><span class='pagetext'><a href=\"#\" onclick=\""+cctvSnapshots.cameras[i].url+"\">Enlarge Image</a> | <a href='#' onclick='positionMap("+cctvSnapshots.cameras[i].lat+","+cctvSnapshots.cameras[i].lng+")'>+Zoom to Camera</a></span>");shape.SetCustomIcon("<img src=\"../images/camera_icon.gif\" height=\"6\" width=\"12\"/>");CameraList.push(shape);i++;if(timesRun==20){displayElement("browserMsg");}if(i==cameraCount){map.AddShapeLayer(cctvLayer);cctvLayer.AddShape(CameraList);cctvLayer.Show();hideElement("progressBar");hideElement("browserMsg");break;}if(startLoop.getTime()+300<new Date().getTime()){setTimeout(drawCamerasOnMap,50);break;}}};drawCamerasOnMap();}function LoadDms(dmsData){var icon;var dmsCount=dmsData.dmss.length;var timesRun=0;var i=0;var DmsList=new Array();var drawDmsOnMap=function(){timesRun++;var startLoop=new Date();while(i<dmsCount){var shape=new VEShape(VEShapeType.Pushpin,new VELatLong(dmsData.dmss[i].lat,dmsData.dmss[i].lng));shape.SetTitle("<span class='pagetext'><img src='../images/ts_logo_icon.gif' align='top' width='16' height='16' style='margin-right: 10px;'>Roadway Message Sign</span>");shape.SetDescription("<table border='1' cellpadding='3' cellspacing='0'><tr><td class='smalltext' bgcolor='#eaf7fb' style='color: Black; font-weight: bold;' align='center'>"+dmsData.dmss[i].location+"</td></tr><tr><td align='center'><img src='../dms/processDMSimage.aspx?imageid="+dmsData.dmss[i].id+"' /></td></tr></table><br/><span class='pagetext'><a href='#' onclick='positionMap("+dmsData.dmss[i].lat+","+dmsData.dmss[i].lng+")'>+Zoom to Roadway Sign</a></span>");if(dmsData.dmss[i].active=="True"){icon="<img src=\"../images/dms_icon_active_blk.gif\" height=\"7\" width=\"13\"/>";}else{icon="<img src=\"../images/dms_icon_inactive_blk.gif\" height=\"7\" width=\"13\"/>";}shape.SetCustomIcon(icon);DmsList.push(shape);i++;if(timesRun==20){displayElement("browserMsg");}if(i==dmsCount){map.AddShapeLayer(dmsLayer);dmsLayer.AddShape(DmsList);dmsLayer.Show();hideElement("progressBar");hideElement("browserMsg");break;}if(startLoop.getTime()+300<new Date().getTime()){setTimeout(drawDmsOnMap,50);break;}}};drawDmsOnMap();}function LoadTransit(transitData){var icon;var transitFacilityCount=transitData.TransitFacilities.length;var timesRun=0;var i=0;var TransitFacilityList=new Array();var drawTransitFacilitiesOnMap=function(){timesRun++;var startLoop=new Date();while(i<transitFacilityCount){var shape=new VEShape(VEShapeType.Pushpin,new VELatLong(transitData.TransitFacilities[i].lat,transitData.TransitFacilities[i].lng));var orgIconImgSrc;if(transitData.TransitFacilities[i].organization=="METRO"){orgIconImgSrc="<img src='../images/metro_icon.gif' align='top' width='16' height='15' style='margin-right: 10px;' />";}else{orgIconImgSrc="<img src=\"../images/bus_icon_small.gif\" height=\"13\" width=\"13\" style='margin-right: 10px;' />";}shape.SetTitle("<span class='pagetext'>"+orgIconImgSrc+transitData.TransitFacilities[i].organization+" "+transitData.TransitFacilities[i].location+"</span><br/>");shape.SetDescription("<span class='pagetext'><a target=\"_blank\" href=\""+transitData.TransitFacilities[i].href+"\">Schedules and Maps</a></span>");if(transitData.TransitFacilities[i].facility_type=="park_and_ride"){icon="<img src=\"../images/bus_icon_small.gif\" height=\"13\" width=\"13\"/>";}else{icon="<img src=\"../images/transit_center_icon.gif\" height=\"13\" width=\"13\"/>";}shape.SetCustomIcon(icon);TransitFacilityList.push(shape);i++;if(timesRun==20){displayElement("browserMsg");}if(i==transitFacilityCount){map.AddShapeLayer(transitLayer);transitLayer.AddShape(TransitFacilityList);transitLayer.Show();hideElement("progressBar");hideElement("browserMsg");break;}if(startLoop.getTime()+300<new Date().getTime()){setTimeout(drawTransitFacilitiesOnMap,50);break;}}};drawTransitFacilitiesOnMap();}function GetWeatherImageParam(){var imageUrl;var weatherImageCoords;var mapTopLeftLatLong=map.PixelToLatLong(new VEPixel(1,1));if((mapTopLeftLatLong.Latitude>_weatherCoordsLowLevel[0])||(mapTopLeftLatLong.Longitude<_weatherCoordsLowLevel[1])||(map.GetZoomLevel()<11)){weatherImageCoords=_weatherCoordsHighLevel;imageUrl="../data/layers/weather/high_zoom_ve_layer_weather.gif";}else{weatherImageCoords=_weatherCoordsLowLevel;imageUrl="../data/layers/weather/low_zoom_ve_layer_weather.gif";}var weatherImageParam={ImageCoords:weatherImageCoords,ImageUrl:imageUrl};return weatherImageParam;}function LoadWeather(weatherImageParam){if(map.GetZoomLevel()>13){hideElement("progressBar");hideElement("browserMsg");displayElement("weatherMessage");return;}var mapTopLeftLatLong=map.PixelToLatLong(new VEPixel(1,1));var nwPixelCoords=map.LatLongToPixel(new VELatLong(weatherImageParam.ImageCoords[0],weatherImageParam.ImageCoords[1]),map.GetZoomLevel());var sePixelCoords=map.LatLongToPixel(new VELatLong(weatherImageParam.ImageCoords[2],weatherImageParam.ImageCoords[3]),map.GetZoomLevel());_weatherImage=new VEShape(VEShapeType.Pushpin,mapTopLeftLatLong);var imageWidth=Math.round(sePixelCoords.x-nwPixelCoords.x);var imageHeight=Math.round(sePixelCoords.y-nwPixelCoords.y);var cssTop=Math.round(nwPixelCoords.y)+"px";var cssLeft=Math.round(nwPixelCoords.x)+"px";var currentDate=new Date();_weatherImage.SetCustomIcon("<img name='weatherOverlay' id='weatherOverlay' style='border: 0px; z-index: 10; top: "+cssTop+"; left: "+cssLeft+"; position: relative; opacity: 0.5; -moz-opacity: .5; -ms-filter:\"progid:DXImageTransform.Microsoft.Alpha(Opacity=50)\"; filter: alpha(opacity=50);' src='"+weatherImageParam.ImageUrl+"?arg="+currentDate.getTime().toString(10)+"' width='"+Math.round(imageWidth)+"' height='"+Math.round(imageHeight)+"' />");map.AddShape(_weatherImage);_lastWeatherImageUrl=weatherImageParam.ImageUrl;hideElement("weatherMessage");hideElement("progressBar");hideElement("browserMsg");}function displayElement(element){var oElement=document.getElementById(element);oElement.style.visibility="visible";}function hideElement(element){var oElement=document.getElementById(element);oElement.style.visibility="hidden";}function swapImg(imgId,newImg){var img=document.getElementById(imgId);img.src=newImg;}function positionMap(lat,lng){latLng=new VELatLong(lat,lng);map.SetCenterAndZoom(latLng,16);}function showWin(url,winType){var winWidth,winHeight;switch(winType){case "dms":winWidth=425;winHeight=290;break;default:winWidth=570;winHeight=440;break;}var winStyle="menubar=no,resizable=no,scrollbars=no,status=no,width="+winWidth+",height="+winHeight+",top=0,left=0";window.open(url,'',winStyle);}function FindLoc(){map.Find(null,document.getElementById('txtWhere').value,null,null,null,null,true,true);}function processCookieSettings(){if(document.getElementById("chkSave").checked==true){mapSettingsCookie.showSpeeds=document.getElementById("chkSpeeds").checked;mapSettingsCookie.showIncidents=document.getElementById("chkIncidents").checked;mapSettingsCookie.showRoadClosures=document.getElementById("chkRoadClosures").checked;mapSettingsCookie.showLaneClosures=document.getElementById("chkLaneClosures").checked;mapSettingsCookie.showCameras=document.getElementById("chkCameras").checked;mapSettingsCookie.showDms=document.getElementById("chkDms").checked;mapSettingsCookie.store();}else{mapSettingsCookie.remove();}}