var CompatVersion = "0.082305.0"; function _VERegisterNamespaces() { for (var i=0;i< astrParts.length; j++) { if (!root[astrParts[j]]) { root[astrParts[j]] = new Object(); } root = root[astrParts[j]]; } } } _VERegisterNamespaces("Web.Browser","Web.Debug.Performance"); // Stub debug functions if (!Web.Debug.Enabled) { Web.Debug.Enabled = false; Web.Debug.Assert = Web.Debug.Trace = function() {}; Web.Debug.Performance.Start = function() { this.End = function(){} return this } } // Need more robust checks Web.Browser._isMozilla = (typeof document.implementation != 'undefined') && (typeof document.implementation.createDocument != 'undefined') && (typeof HTMLDocument!='undefined'); Web.Browser.isMozilla = function() { return Web.Browser._isMozilla; } // Mozilla implementation of CreatePopup Web.Browser._Private = function() {} Web.Browser._Private.CreatePopup = function() { var obj = new Object(); obj.document = document.createDocumentFragment(); obj.document.body = obj.document.appendChild(document.createElement("div")); obj.document.close = obj.document.open = function() {}; obj.document.write = function(v) { obj.document.body.innerHTML += v; } obj.show = function(x,y,width,height,offset) { if (!offset) offset = document.body; var offsetLoc = Web.Dom.GetLocation(offset); obj.document.body.style.cssText = "z-index:100;position:absolute;margin:0px;padding:0px;top:{0}px;left:{1}px;width:{2}px;height:{3}px;background:white".format(y+offsetLoc.top,x+offsetLoc.left,width,height); var r = document.body.appendChild(obj.document.body); document.addEventListener("mousedown",doHide,true) r.onclicktemp = obj.document.onclick; r.onclick = doClick function doHide(ev) { if (!obj.document.body.contains(ev.target)) { ev.stopPropagation() r.removeNode(); } document.removeEventListener("mousedown",doHide,true); } function doClick(ev) { if (this.onclicktemp) this.onclicktemp() r.removeNode(); } } return obj; } // Stub out filters Web.Browser._Private.MozillaFilterMethods = new Array("addAmbient","addCone","addPoint","apply","changeColor","changeStrength","clear","moveLight") Web.Browser._Private.MozillaFilterEventMethods = new Array("play","stop"); Web.Browser._Private.MozillaFilterSub = function() { // Need to implement item, etc) // Use prototype to make more efficient var privFilter = Web.Browser._Private; for (var i=0;iIE Compatibility Library w.CollectGarbage = function() {}; function EstablishMode() { var el = w.document.getElementsByName("Web.moz-custom"); if (el.length>0) Web.Browser.MozillaCompatMode = el[0].getAttribute("content").toLowerCase()=="enabled"; else Web.Browser.MozillaCompatMode = false; } EstablishMode(); function GenWindowEvent(e) { window.event = e; } Web.Browser.Button = {LEFT:0,RIGHT:2,MIDDLE:1}; function Map(el,mozillaType, callback) { var strMozillaType = mozillaType.slice(2); // dirty hack to make scroll wheel work for Firefox but not break Safari if (strMozillaType=="mousewheel" && typeof window.onmousewheel === "undefined") { strMozillaType = "DOMMouseScroll"; } if (strMozillaType!="mouseenter" && strMozillaType!="mouseleave") { el.addEventListener(strMozillaType, GenWindowEvent, true); // Grab events first to establish window object } else // Simulate events { el.addEventListener("mouseover", GenWindowEvent, true); // Grab events first to establish window object el.addEventListener("mouseout", GenWindowEvent, true); // Grab events first to establish window object el.addEventListener("mouseover",CheckEnter,false); el.addEventListener("mouseout",CheckLeave,false); } el.addEventListener(strMozillaType, callback, false); // Hook the actual event } function CheckEnter() { if (!this.contains(window.event.fromElement)) { var oEvent = document.createEvent("MouseEvents"); oEvent.initEvent("mouseenter",false,false); this.dispatchEvent(oEvent) } } function CheckLeave() { if (!this.contains(window.event.toElement)) { var oEvent = document.createEvent("MouseEvents"); oEvent.initEvent("mouseleave",false,false); this.dispatchEvent(oEvent) } } function RemoveMap(el,mozillaType,callback) { var strMozillaType = mozillaType.slice(2) // dirty hack to make scroll wheel work for Firefox but not break Safari if (strMozillaType=="mousewheel" && typeof window.onmousewheel === "undefined") { strMozillaType = "DOMMouseScroll"; } el.removeEventListener(strMozillaType, callback, false); } function GetNonTextNode(n) { try { while (n && n.nodeType!=1) n=n.parentNode; } catch(ex) { n = null; } return n; } var elementProto = w.Element.prototype; var htmlProto = w.HTMLDocument.prototype; var eventProto = w.Event.prototype; var cssProto = w.CSSStyleDeclaration.prototype; var docProto = w.Document.prototype; w.attachEvent = w.HTMLDocument.prototype.attachEvent = w.HTMLElement.prototype.attachEvent = function (type, callback) {Map(this,type,callback);} w.detachEvent = w.HTMLDocument.prototype.detachEvent = w.HTMLElement.prototype.detachEvent = function (type, callback) {RemoveMap(this,type,callback);} w.createPopup = Web.Browser._Private.CreatePopup; // TODO - implement this on nodes docProto.__proto__ = { get xml(){ return (new XMLSerializer()).serializeToString(this);}, __proto__ : docProto.__proto__ } w.Document.prototype.scripts = document.getElementsByTagName("script"); // TODO - implement selection w.Document.prototype.selection = new Object(); w.Document.prototype.selection.clear = function() {}; // Need to find Mozilla equivalent w.Document.prototype.selection.createRange = function() {return window.getSelection().getRangeAt(0);} w.XMLDocument.prototype.transformNodeToObject = function(p_objXsl) { var objXslProcessor = new XSLTProcessor(); objXslProcessor.importStylesheet(p_objXsl); var ownerDocument = document.implementation.createDocument("", "", null); return objXslProcessor.transformToFragment(this, ownerDocument); } w.HTMLElement.prototype.removeNode = function(b) { return this.parentNode.removeChild(this) } w.HTMLElement.prototype.contains = function (el) { while (el!=null && el!=this) el = el.parentElement; return (el!=null) }; function CurrentStyle(el) { // Extend this if additional CurrentStyle properties are required var PropertyList = new Array("Top","Left","Right","Bottom"); var cs = document.defaultView.getComputedStyle(el,null); for (var i=0;i0) { var close = v.indexOf(")",opacityIndex); if (close==-1) close = v.indexOf(",",opacityIndex); return ("." + v.substring(opacityIndex+matchString.length,close)); } else return ""; } // IE CSS Properties cssProto.__proto__ = { get pixelLeft() {return parseInt(this.left) || 0;}, set pixelLeft(v) {this.left = v + "px";}, get pixelHeight() {return parseInt(this.height) || 0;}, set pixelHeight(v) {this.height = v + "px";}, get pixelTop() {return parseInt(this.top) || 0;}, set pixelTop(v) {this.top = v + "px";}, get pixelWidth() {return parseInt(this.width) || 0;}, set pixelWidth(v) {this.width = v + "px";}, set filter(v) {this.opacity = parseFilter(v)}, get cssText() { var s = ""; for (var j=0;j0) return nl[0]; else return null; } function selectNodes(d,v,c) { var oResult = d.evaluate(v, c, d.createNSResolver(d.documentElement), XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); var nodeList = new Array(); for(i=0;i
Map Compass
Increase ZoomDecrease Zoom

Zoom

Show/hide CamerasShow/hide Cameras

Cameras

Show/hide IncidentsShow/hide Incidents

Incidents

Show/hide Work ZonesShow/hide Work Zones

Work Zones

Show/hide WeatherShow/hide Weather

Weather

Show/hide Bridge EventsShow/hide Bridge Events

Bridges

Show Legend

Hover over icons for map key
This icon indicates the location of a TRAFFIC INCIDENT on the map. This icon indicates the location of a HIGH IMPACT TRAFFIC INCIDENT on the map. This icon indicates the location of a WEATHER EVENT (flooding, fog, etc.) that is impacting traffic. This icon indicates the location of a WEATHER EVENT (flooding, fog, etc.) that has closed a roadway. This icon indicates the location of an ACTIVE WORK ZONE on the map. This icon indicates the location of an INACTIVE WORK ZONE on the map. This icon indicates the location of a SPECIAL EVENT on the map that may effect traffic.
This icon indicates that there are SCHEDULED BRIDGE OPENINGS for this location on the map. This icon indicates that there are NO SCHEDULED BRIDGE OPENINGS for this location on the map. This icon indicates an active camera on the map. This icon indicates an inactive camera on the map.

Snow/Ice Conditions
Minor: Advisory, potential for icy patches or snow on roadway; passable with caution. Moderate: Snow or ice covering a major portion of the roadway; passable with caution. Severe: Significant accumulation of snow or ice partially blocking the roadway; conditions are hazardous. Closed: Roadway is closed; impassable.

40 miles
40 miles