var resizeRefresh = 0;
var currentHeight = 0;
var currentWidth = 0;
var layerdisp = "none";
var helpdisp = "none";
var prefLatitude = 0;
var prefLongitude = 0;
var prefZoomLevel = 0;
var prefLayerMajorProjects = false;
var prefLayerLaneClosures = true;
var prefLayerCameras = true;
var prefLayerSpeed = true;
var prefLayerIncidents = true;
var prefTollBridges = true;
var prefMovableBridges = true;
var prefBridgeHeight1 = false;
var prefBridgeHeight2 = false;
var prefBridgeClass = false;
var prefLayerMessageSigns = false;
var gotACookie = false;
var trafficMap;
var pageRefresh = setInterval("getCurrentIncidents()", 180000);		
var jar = new CookieJar({
	expires:7776000,	// seconds
	path: '/'
});
if (jar.get("firtTimeUse") != null) {
	jar.put("firtTimeUse",{first:1});
}
if (jar.get("DriveMapSettings") != null) {
	jar.put("DriveMapSettings",jar.get("DriveMapSettings"));
}
/* Initialise scroller and map when window loads */
window.onload=function() {
	// check for DOM
	winInit();
	if(!document.getElementById || !document.createTextNode){return;}
	initDOMnews();
	if (jar.get("DriveMapSettings") != null) {
		setPrefsToCookie();
		gotACookie = true;
	}
	getSize(true);
	loadPage();
	prefLayerCameras ? document.getElementById('cbCameras').checked = true : document.getElementById('cbCameras').checked = false;
	prefLayerMessageSigns ? document.getElementById('cbMessageSigns').checked = true : document.getElementById('cbMessageSigns').checked = false;
	prefLayerIncidents ? document.getElementById('cbIncidents').checked = true : document.getElementById('cbIncidents').checked = false;
	prefLayerMajorProjects ? document.getElementById('cbMajorProjects').checked = true : document.getElementById('cbMajorProjects').checked = false;
	prefLayerLaneClosures ? document.getElementById('cbLaneClosures').checked = true : document.getElementById('cbLaneClosures').checked = false;
	prefLayerSpeed ? document.getElementById('cbCurrentSpeed').checked = true : document.getElementById('cbCurrentSpeed').checked = false;
	prefTollBridges ? document.getElementById('cbTollBridges').checked = true : document.getElementById('cbTollBridges').checked = false;
	prefMovableBridges ? document.getElementById('cbMovableBridges').checked = true : document.getElementById('cbMovableBridges').checked = false;
	prefBridgeHeight1 ? document.getElementById('cbBridgeHeight1').checked = true : document.getElementById('cbBridgeHeight1').checked = false;
	prefBridgeHeight2 ? document.getElementById('cbBridgeHeight2').checked = true : document.getElementById('cbBridgeHeight2').checked = false;
	prefBridgeClass ? document.getElementById('cbBridgeClass').checked = true : document.getElementById('cbBridgeClass').checked = false;
};
function setPrefsToCookie() {
	objDSCookie = jar.get("DriveMapSettings");
	prefLatitude = objDSCookie.latitude;
	prefLongitude = objDSCookie.longitude;
	prefZoomLevel = objDSCookie.zoomLevel;
	/*prefLayerMajorProjects = objDSCookie.layerMajorProjects;*/
	prefLayerMajorProjects = false; // CHANGE THIS BACK WHEN 2010 PROJECTS ARE AVAILABLE
	prefLayerLaneClosures = objDSCookie.layerLaneClosures;
	prefLayerCameras = objDSCookie.layerCameras;
	prefLayerSpeed = objDSCookie.layerSpeed;
	prefLayerIncidents = objDSCookie.layerIncidents;
	prefTollBridges = objDSCookie.layerTollBridges;
	prefMovableBridges = objDSCookie.layerMovableBridges;
	prefBridgeHeight1 = objDSCookie.layerBridgeHeight1;
	prefBridgeHeight2 = objDSCookie.layerBridgeHeight2;
	prefBridgeClass = objDSCookie.layerBridgeClass;
	prefLayerMessageSigns = objDSCookie.layerMessageSigns;
};
function loadPage() { 
	trafficMap = new cgi_mapObj(document.getElementById('map'));
	var searchString = document.location.hash;
	// strip off the leading '?'
	searchString = searchString.substring(1);
	if (searchString.length > 0) {
		var nvPairs = searchString.split("&");
	} else {
		var nvPairs = "";
	}
	var value = "";
	var ztl = -1;
	var ztcm = -1;
	var x = -1;
	var y = -1;
	var zoom = -1;
	// if the user has stored preferences, use them, otherwise go to Detroit.
	gotACookie?value = "m":value = "1";
	for (i = 0; i < nvPairs.length; i++) {
		var nvPair = nvPairs[i].split("=");
		if (nvPair[0] == "loc") {
			value = nvPair[1];
		} else if (nvPair[0] == "cid") {
			ztl = nvPair[1];
		} else if (nvPair[0] == "cmid") {
			ztcm = nvPair[1];
		} else if (nvPair[0] == "x") {
			x = nvPair[1];
		} else if (nvPair[0] == "y") {
			y = nvPair[1];
		} else if (nvPair[0] == "zoom") {
			zoom = nvPair[1];
		}
	}
	var coords = getLoc(value);
	trafficMap.setlatlon(coords.lat,coords.long);
	trafficMap.setzoom(coords.zoom);
	trafficMap.setzoomrange(0,12);
	trafficMap.setmaprestore(coords.lat,coords.long,'dd',coords.zoom);
	trafficMap.add('zb',true);
	trafficMap.add('sb',true);
	trafficMap.add('cr','Copyright &copy; 2010 State of Michigan.&nbsp;&nbsp;<a href="http://www.michigan.gov/drive/0,1607,7-246-46334-167223--,00.html" target="_blank">Disclaimer</a>&nbsp;&nbsp;Policies:&nbsp;<a href="http://www.michigan.gov/mdot/0,1607,7-151-12989-2301--,00.html" target="_blank">Security</a>&nbsp;|&nbsp;<a href="http://www.michigan.gov/mdot/0,1607,7-151-12987-2090--,00.html" target="_blank">Accessibility</a>&nbsp;|&nbsp;<a href="http://www.michigan.gov/mdot/0,1607,7-151-12985-2089--,00.html" target="_blank">Link</a>&nbsp;|&nbsp;<a href="http://www.michigan.gov/mdot/0,1607,7-151-12977-2088--,00.html" target="_blank">Privacy</a>');
	if (x != -1 && y!= -1 && zoom != -1) {
		trafficMap.drawcmap(false);
		prefLayerMajorProjects = false;
		trafficMap.drawlcars(true);
		prefLayerLaneClosures = true;
		trafficMap.drawsensors(prefLayerSpeed);
		if (prefBridgeHeight1)
			trafficMap.drawbrg(prefBridgeHeight1,'over');
		else if (prefBridgeHeight2)
			trafficMap.drawbrg(prefBridgeHeight2,'over146');
		else if (prefBridgeClass) 
			trafficMap.drawbrg(prefBridgeClass,'under');
		trafficMap.add('traffic_messages',prefLayerMessageSigns);
		trafficMap.add('traffic_cameras',prefLayerCameras);
		trafficMap.add('traffic_incidents',prefLayerIncidents);
		trafficMap.add('traffic_tollbridges',prefTollBridges);
		trafficMap.add('traffic_liftbridges',prefMovableBridges);
		trafficMap.setcenter(parseFloat(x),parseFloat(y));
		if (parseInt(zoom) < 0 || parseInt(zoom) > 12) {
			var scale = 3;
		} else {
			var scale = parseInt(zoom);
		}
		document.getElementById(trafficMap.divID + '_tickmark' + trafficMap.mapZoomScale()).src = trafficMap.skin() + 'tickmark.gif';
		document.getElementById(trafficMap.divID + '_tickmark' + scale).src = trafficMap.skin() + 'tickmark_on.gif';
		trafficMap.setzoom(scale);
		trafficMap.getmap();
	} else if (ztl != -1) {
		trafficMap.drawcmap(false);
		prefLayerMajorProjects = false;
		trafficMap.drawlcars(true);
		prefLayerLaneClosures = true;
		trafficMap.drawsensors(prefLayerSpeed);
		if (prefBridgeHeight1)
			trafficMap.drawbrg(prefBridgeHeight1,'over');
		else if (prefBridgeHeight2)
			trafficMap.drawbrg(prefBridgeHeight2,'over146');
		else if (prefBridgeClass) 
			trafficMap.drawbrg(prefBridgeClass,'under');
		trafficMap.add('traffic_messages',prefLayerMessageSigns);
		trafficMap.add('traffic_cameras',prefLayerCameras);
		trafficMap.add('traffic_incidents',prefLayerIncidents);
		trafficMap.add('traffic_tollbridges',prefTollBridges);
		trafficMap.add('traffic_liftbridges',prefMovableBridges);
		trafficMap.zoomtolcar(ztl);
/*	} else if (ztcm !=-1) {
		trafficMap.drawcmap(true);
		prefLayerMajorProjects = true;
		trafficMap.drawlcars(false);
		prefLayerLaneClosures = false;
		trafficMap.drawsensors(false);
		trafficMap.drawbrg(false,'over');
		trafficMap.drawbrg(false,'over146');
		trafficMap.drawbrg(false,'under');
		trafficMap.add('traffic_messages',false);
		trafficMap.add('traffic_cameras',false);
		trafficMap.add('traffic_incidents',false);
		trafficMap.add('traffic_tollbridges',false);
		trafficMap.add('traffic_liftbridges',false);
		document.getElementById('cbLaneClosures').disabled = true;
		document.getElementById('cbCameras').disabled = true;
		document.getElementById('cbCurrentSpeed').disabled = true;
		document.getElementById('cbIncidents').disabled = true;
		document.getElementById('cbMessageSigns').disabled = true;
		document.getElementById('cbTollBridges').disabled = true;
		document.getElementById('cbMovableBridges').disabled = true;
		document.getElementById('cbBridgeHeight1').disabled = true;
		document.getElementById('cbBridgeHeight2').disabled = true;
		document.getElementById('cbBridgeClass').disabled = true;
		if (ztcm == 0) {
			trafficMap.setlatlon(42.75684,-84.377007);
			document.getElementById(trafficMap.divID + '_tickmark' + trafficMap.mapZoomScale()).src = trafficMap.skin() + 'tickmark.gif';
			document.getElementById(trafficMap.divID + '_tickmark2').src = trafficMap.skin() + 'tickmark_on.gif';
			trafficMap.setzoom(2);
			trafficMap.getmap();
		} else if (ztcm == "s") {
			trafficMap.setlatlon(44.233393,-85.413208);
			document.getElementById(trafficMap.divID + '_tickmark' + trafficMap.mapZoomScale()).src = trafficMap.skin() + 'tickmark.gif';
			document.getElementById(trafficMap.divID + '_tickmark2').src = trafficMap.skin() + 'tickmark_on.gif';
			trafficMap.setzoom(0);
			trafficMap.getmap();
		} else {
			trafficMap.zoomtolcar(ztcm);
		}*/
	} else {  
		if (prefLayerMajorProjects) {
			trafficMap.add('traffic_messages',false);
			trafficMap.add('traffic_cameras',false);
			trafficMap.add('traffic_incidents',false);
			trafficMap.add('traffic_tollbridges',false);
			trafficMap.add('traffic_liftbridges',false);
			trafficMap.drawlcars(false);
			trafficMap.drawsensors(false);
			trafficMap.drawbrg(false,'over');
			trafficMap.drawbrg(false,'over146');
			trafficMap.drawbrg(false,'under');
			document.getElementById('cbLaneClosures').disabled = true;
			document.getElementById('cbCameras').disabled = true;
			document.getElementById('cbCurrentSpeed').disabled = true;
			document.getElementById('cbIncidents').disabled = true;
			document.getElementById('cbMessageSigns').disabled = true;
			document.getElementById('cbTollBridges').disabled = true;
			document.getElementById('cbMovableBridges').disabled = true;
			document.getElementById('cbBridgeHeight1').disabled = true;
			document.getElementById('cbBridgeHeight2').disabled = true;
			document.getElementById('cbBridgeClass').disabled = true;
		} else { 
			trafficMap.drawcmap(false);
			trafficMap.drawlcars(prefLayerLaneClosures);
			trafficMap.drawsensors(prefLayerSpeed);
			if (prefBridgeHeight1)
				trafficMap.drawbrg(prefBridgeHeight1,'over');
			else if (prefBridgeHeight2)
				trafficMap.drawbrg(prefBridgeHeight2,'over146');
			else if (prefBridgeClass) 
				trafficMap.drawbrg(prefBridgeClass,'under');
			trafficMap.add('traffic_messages',prefLayerMessageSigns);
			trafficMap.add('traffic_cameras',prefLayerCameras);
			trafficMap.add('traffic_incidents',prefLayerIncidents);
			trafficMap.add('traffic_tollbridges',prefTollBridges);
			trafficMap.add('traffic_liftbridges',prefMovableBridges);
			document.getElementById('cbLaneClosures').disabled = false;
			document.getElementById('cbCameras').disabled = false;
			document.getElementById('cbCurrentSpeed').disabled = false;
			document.getElementById('cbIncidents').disabled = false;
			document.getElementById('cbMessageSigns').disabled = false;
			document.getElementById('cbTollBridges').disabled = false;
			document.getElementById('cbMovableBridges').disabled = false;
			document.getElementById('cbBridgeHeight1').disabled = false;
			document.getElementById('cbBridgeHeight2').disabled = false;
			document.getElementById('cbBridgeClass').disabled = false;
		}
		trafficMap.getmap();
	}
	detroit = trafficMap.addmarker(42.5,-83.1,'dd',undefined,undefined,'images/street_light.gif');
	detroit.maxscale = 2;
	detroit.mrkDiv.title = "Detroit Traffic Information";
	detroit.msg = 'Detroit has real-time traffic speeds, message signs and live camera feeds.<br><span class="cgi_trafficIcon" onclick="loadGoto(1);trafficMap.msgbox.hideinfo();">Click to Zoom</span>';
	detroit.type = 'txt';
   	detroit.clickhandler(trafficMap.msgbox.showinfo);
	grapids = trafficMap.addmarker(42.96,-85.66,'dd',undefined,undefined,'images/street_light.gif');
	grapids.maxscale = 2;
	grapids.mrkDiv.title = "Grand Rapids Traffic Information";
	grapids.msg = 'Grand Rapids has live camera feeds.<br><span class="cgi_trafficIcon" onclick="loadGoto(2);trafficMap.msgbox.hideinfo();">Click to Zoom</span>';
	grapids.type = 'txt';
   	grapids.clickhandler(trafficMap.msgbox.showinfo);
   	document.location.hash = 1;
	if (!gotACookie) toggleLayers();
};
function getSize(firsttime) {
	var map = document.getElementById("map");
	var lay = document.getElementById("layersdiv");
	var hd = document.getElementById("helpDiv");
	var dc = document.getElementById("drivecontainer");
	var db = document.getElementById("driveBody");
	var hdrdiv = document.getElementById("hdr");
	var wid = f_clientWidth();
	var hei = f_clientHeight();
	var sl = f_scrollLeft();
	var st = f_scrollTop();
	if (navigator.userAgent.indexOf("Gecko") != -1) {
		hei = window.innerHeight;
		wid = window.innerWidth;
		map.style.width = Math.max(633, wid - 165) + "px";
		dc.style.width = Math.max(635, wid - 163) + "px";
		map.style.height = Math.max(340, hei-150) + "px";
		lay.style.left = Math.max(462, wid - 337) + "px";
		hd.style.left = Math.max(350, wid - 448) + "px";
	} else if (navigator.userAgent.indexOf("Opera") != -1) {
		hei = window.innerHeight;
		wid = window.innerWidth;
		map.style.width = Math.max(578, wid - 165) + "px";
		dc.style.width = Math.max(580, wid - 163) + "px";
		map.style.height = Math.max(340, hei-160) + "px";
		lay.style.left = Math.max(384, wid - 360) + "px";
		hd.style.left = Math.max(195, wid - 548) + "px";
	} else {
		hei = document.documentElement.clientHeight;
		wid = document.documentElement.clientWidth;
		hdrdiv.style.width = Math.max(788, wid) + "px";
		db.style.width = Math.max(788, wid) + "px";
		map.style.width = Math.max(624, wid - 163) + "px";
		dc.style.width = Math.max(626, wid - 161) + "px";
		map.style.height = Math.max(338, hei-155) + "px";
		lay.style.left = Math.max(434, wid - 352) + "px";
		hd.style.left = Math.max(341, wid - 446) + "px";
	}
	if (firsttime) {
		currentHeight = hei;
		currentWidth = wid;
	} else {
		clearInterval(resizeRefresh);
		resizeRefresh = setInterval("resizeMapReload()", 3000);
	}
};
function resizeMapReload () {
	var wid = 0;
	var hei = 0;
	if (navigator.userAgent.indexOf("Gecko") != -1) {
		hei = window.innerHeight;
		wid = window.innerWidth;
	} else {
		hei = document.documentElement.clientHeight;
		wid = document.documentElement.clientWidth;
	}
	if ((wid != currentWidth) || (hei != currentHeight)) {
		currentWidth = wid;
		currentHeight = hei;
		trafficMap.getmap();
	}
	clearInterval(resizeRefresh);
};
function getCurrentIncidents()	{
	clearInterval(pageRefresh);
	pageRefresh = setInterval("getCurrentIncidents()", 180000);
	// send data to CF
	DWRUtil.useLoadingMessage();
	DWREngine._execute(_ajaxConfig._cfscriptLocation, null, "getCurrentIncidents", "true", "true", "true", getIncidentResult);
	DWREngine._execute(_ajaxConfig._cfscriptLocation, null, "getCurrentIncidents", "false", "true", "true", getIncidentResult2);
};
// call back function
function getIncidentResult (r) {
	var newsScroller = document.getElementById("news");
	var noData = document.getElementById("noData");
	var r0 = r.substr(0, r.length-1);
	newsScroller.innerHTML = r0;
	stopDOMnews();
	initDOMnews();
};
function getIncidentResult2 (r) {
	var hth = document.getElementById("headlinesTextHidden");
	var r0 = r.substr(0, r.length-1);
	// Reformat for view all section
	var r1 = r0.replace(/<ul>/g, "");
	var r2 = r1.replace(/<li>/g, "");
	var r3 = r2.replace(/<\Sli>/g, "<br />");
	var r4 = r3.replace(/<\Sul>/g, "");
	hth.innerHTML = "<strong>Detroit Headlines</strong> as of " + r4;
	document.getElementById('headlinesText').innerHTML = hth.innerHTML;
};
function f_clientWidth() {
	return f_filterResults (
		window.innerWidth ? window.innerWidth : 0,
		document.documentElement ? document.documentElement.clientWidth : 0,
		document.body ? document.body.clientWidth : 0
	);
};
function f_clientHeight() {
	return f_filterResults (
		window.innerHeight ? window.innerHeight : 0,
		document.documentElement ? document.documentElement.clientHeight : 0,
		document.body ? document.body.clientHeight : 0
	);
};
function f_scrollLeft() {
	return f_filterResults (
		window.pageXOffset ? window.pageXOffset : 0,
		document.documentElement ? document.documentElement.scrollLeft : 0,
		document.body ? document.body.scrollLeft : 0
	);
};
function f_scrollTop() {
	return f_filterResults (
		window.pageYOffset ? window.pageYOffset : 0,
		document.documentElement ? document.documentElement.scrollTop : 0,
		document.body ? document.body.scrollTop : 0
	);
};
function f_filterResults(n_win, n_docel, n_body) {
	var n_result = n_win ? n_win : 0;
	if (n_docel && (!n_result || (n_result > n_docel)))
		n_result = n_docel;
	return n_body && (!n_result || (n_result > n_body)) ? n_body : n_result;
};
function toggleLayers() {
	if (layerdisp == "none") {
		document.getElementById('layersdiv').style.display = "block";
		document.getElementById('helpDiv').style.display = "none";
		document.getElementById("toggleView").innerHTML = "View All Headlines";
		winList['sample1'].close();
		layerdisp = "block";
		helpdisp = "none";
	} else {
		document.getElementById('layersdiv').style.display = "none";
		layerdisp = "none";
	}
};
function toggleHelp() {
	if (helpdisp == "none") {
		document.getElementById('helpDiv').style.display = "block";
		document.getElementById('layersdiv').style.display = "none";
		document.getElementById("toggleView").innerHTML = "View All Headlines";
		winList['sample1'].close();
		helpdisp = "block";
		layerdisp = "none";
	} else {
		document.getElementById('helpDiv').style.display = "none";
		helpdisp = "none";
	}
};
function toggleHeadlines() {
	if (winList['sample1'])
		winList['sample1'].open(); 
	if (document.getElementById("toggleView").innerHTML == "View All Headlines") {
		document.getElementById("toggleView").innerHTML = "Hide All Headlines";
	} else {
		document.getElementById("toggleView").innerHTML = "View All Headlines";
		winList['sample1'].close();
	}
	document.getElementById('headlinesText').innerHTML = document.getElementById('headlinesTextHidden').innerHTML;
	document.getElementById('layersdiv').style.display = "none";
	document.getElementById('helpDiv').style.display = "none";
	layerdisp = "none";
	helpdisp = "none";
	return false;
};
function testPersistentCookie () {
	jar.put("testPersistentCookie", "Enabled");
	if (jar.get("testPersistentCookie")=="Enabled") {
		jar.remove("testPersistentCookie");
		return true;
	} else {
		return false;
	}
};
function addDriveMapSettings() {
	if (!testPersistentCookie()) {
		alert ("You have cookies disabled");
		return;
	}
	if (jar.get("firtTimeUse") == null) {
		var answer = confirm("In order to save your view, a cookie must be written to your pc.  If you are unsure or do not want the cookie written, click cancel. You can read our privacy policy using the link at the bottom of the page.");
		if (!answer) {
			return;
		}
		jar.put("firtTimeUse",{first:1})
	} else {
		var answer = confirm("This action will overwrite any previous settings you have saved.  Are you sure?");
		if (!answer) {
			return;
		}
	}
	var map = eval('(' + trafficMap.getmapsettings() + ')');
	var latLon = getLatLon(map.x, map.y);
	jar.remove("DriveMapSettings");
	prefLayerMajorProjects = document.getElementById('cbMajorProjects').checked;
	prefLayerLaneClosures = document.getElementById('cbLaneClosures').checked;
	prefLayerCameras = document.getElementById('cbCameras').checked;
	prefLayerSpeed = document.getElementById('cbCurrentSpeed').checked;
	prefLayerIncidents = document.getElementById('cbIncidents').checked;
	prefTollBridges = document.getElementById('cbTollBridges').checked;
	prefMovableBridges = document.getElementById('cbMovableBridges').checked;
	prefBridgeHeight1 = document.getElementById('cbBridgeHeight1').checked;
	prefBridgeHeight2 = document.getElementById('cbBridgeHeight2').checked;
	prefBridgeClass = document.getElementById('cbBridgeClass').checked;
	prefLayerMessageSigns = document.getElementById('cbMessageSigns').checked;
	jar.put("DriveMapSettings",{latitude:latLon.x,longitude:latLon.y,zoomLevel:map.scale,layerMajorProjects:prefLayerMajorProjects,layerLaneClosures:prefLayerLaneClosures,layerCameras:prefLayerCameras,layerSpeed:prefLayerSpeed,layerIncidents:prefLayerIncidents,layerMessageSigns:prefLayerMessageSigns,layerTollBridges:prefTollBridges,layerMovableBridges:prefMovableBridges,layerBridgeHeight1:prefBridgeHeight1,layerBridgeHeight2:prefBridgeHeight2,layerBridgeClass:prefBridgeClass});
	prefLatitude = latLon.x;
	prefLongitude = latLon.y;
	prefZoomLevel = map.scale;
	gotACookie = true;
	alert ('Your settings have been saved.  Each time you visit the Drive Interactive Map, you will automatically be centered on this location with the map options you selected.  As you navigate around the map you can also now use the "My View" selection from the "Go To" drop down list to return to this location.');
};
function toggleMarker(obj, markerType) {
	if(obj.checked) {
		trafficMap.markerdisplay(markerType,true);
	} else {
		trafficMap.markerdisplay(markerType,false);
	}
};
function toggleSensors(obj) {
	if(obj.checked) {
		trafficMap.drawsensors(true);
	} else {
		trafficMap.drawsensors(false);
	}
};
function toggleLcars(obj) {
	if(obj.checked) {
		trafficMap.drawlcars(true);
	} else {
		trafficMap.drawlcars(false);
	}
};
function toggleBridges(obj,type) {
	if(obj.checked) {
	    if (obj == document.getElementById("cbBridgeClass")) {
	        document.getElementById("cbBridgeHeight1").checked = false;
	        document.getElementById("cbBridgeHeight2").checked = false;
	    } else if (obj == document.getElementById("cbBridgeHeight1")) {
	    	if (!document.getElementById("cbBridgeHeight2").checked) {
	    		alert("WARNING:   Particular attention is directed to the responsibility of truck operators in regard to bridge vertical clearance and bridge capacity information.  The information at this website is subject to frequent change.  The Michigan Department of Transportation provides this website for informational purposes only and makes no warranties that it is complete or accurate.  The vertical clearance data presented at this website cannot be assumed to be reliable for truck routing.  It is the responsibility of the user to apply for and receive the appropriate permit and to obey the conditions listed therein as well as follow normal truck routing procedures to obey clearance and capacity signs posted on structures.");
	    	}
	        document.getElementById("cbBridgeHeight2").checked = false;
	        document.getElementById("cbBridgeClass").checked = false;
	    } else {
	    	if (!document.getElementById("cbBridgeHeight1").checked) {
	    		alert("WARNING:   Particular attention is directed to the responsibility of truck operators in regard to bridge vertical clearance and bridge capacity information.  The information at this website is subject to frequent change.  The Michigan Department of Transportation provides this website for informational purposes only and makes no warranties that it is complete or accurate.  The vertical clearance data presented at this website cannot be assumed to be reliable for truck routing.  It is the responsibility of the user to apply for and receive the appropriate permit and to obey the conditions listed therein as well as follow normal truck routing procedures to obey clearance and capacity signs posted on structures.");
	    	}
	        document.getElementById("cbBridgeHeight1").checked = false;
	        document.getElementById("cbBridgeClass").checked = false;
	    }
		trafficMap.drawbrg(true,type);
	} else {
		trafficMap.drawbrg(false,type);
	}
}

function toggleCmap(obj) {
	if(obj.checked) {
		trafficMap.drawlcars(false);
		trafficMap.drawsensors(false);
		trafficMap.drawbrg(false,'over');
		trafficMap.drawbrg(false,'over146');
		trafficMap.drawbrg(false,'under');
		trafficMap.markerdisplay('traffic_incidents',false);
		trafficMap.markerdisplay('traffic_messages',false);
		trafficMap.markerdisplay('traffic_cameras',false);
		trafficMap.markerdisplay('traffic_tollbridges',false);
		trafficMap.markerdisplay('traffic_liftbridges',false);
		document.getElementById('cbLaneClosures').disabled = true;
		document.getElementById('cbCameras').disabled = true;
		document.getElementById('cbCurrentSpeed').disabled = true;
		document.getElementById('cbIncidents').disabled = true;
		document.getElementById('cbMessageSigns').disabled = true;
		document.getElementById('cbTollBridges').disabled = true;
		document.getElementById('cbMovableBridges').disabled = true;
		document.getElementById('cbBridgeHeight1').disabled = true;
		document.getElementById('cbBridgeHeight2').disabled = true;
		document.getElementById('cbBridgeClass').disabled = true;
		trafficMap.drawcmap(true);
	} else {
		trafficMap.drawcmap(false);
		if (document.getElementById('cbLaneClosures').checked) trafficMap.drawlcars(true);
		if (document.getElementById('cbCameras').checked) trafficMap.markerdisplay('traffic_cameras',true);
		if (document.getElementById('cbCurrentSpeed').checked) trafficMap.drawsensors(true);
		if (document.getElementById('cbIncidents').checked) trafficMap.markerdisplay('traffic_incidents',true);
		if (document.getElementById('cbMessageSigns').checked) trafficMap.markerdisplay('traffic_messages',true);
		if (document.getElementById('cbTollBridges').checked) trafficMap.markerdisplay('traffic_tollbridges',true);
		if (document.getElementById('cbMovableBridges').checked) trafficMap.markerdisplay('traffic_liftbridges',true);
		if (document.getElementById('cbBridgeHeight1').checked) trafficMap.drawbrg(false,'under');
		if (document.getElementById('cbBridgeHeight2').checked) trafficMap.drawbrg(false,'under');
		if (document.getElementById('cbBridgeClass').checked) {
			trafficMap.drawbrg(false,'over');
			trafficMap.drawbrg(false,'over146');
		}
		document.getElementById('cbLaneClosures').disabled = false;
		document.getElementById('cbCameras').disabled = false;
		document.getElementById('cbCurrentSpeed').disabled = false;
		document.getElementById('cbIncidents').disabled = false;
		document.getElementById('cbMessageSigns').disabled = false;
		document.getElementById('cbTollBridges').disabled = false;
		document.getElementById('cbMovableBridges').disabled = false;
		document.getElementById('cbBridgeHeight1').disabled = false;
		document.getElementById('cbBridgeHeight2').disabled = false;
		document.getElementById('cbBridgeClass').disabled = false;
	}
};
function loadGoto(loc) {
	var coords = getLoc(loc);
	switch(loc) {
		case 'm': // My View
		case '0': // My View
		case 0: // My View
			if (gotACookie) {
				setPrefsToCookie();
				if (prefLayerMajorProjects) {
					if (document.getElementById('cbMajorProjects').checked) {
						// do nothing - cmap is already turned on
					} else {
						document.getElementById('cbMajorProjects').checked = true;
						prefLayerCameras ? document.getElementById('cbCameras').checked = true : document.getElementById('cbCameras').checked = false;
						prefLayerMessageSigns ? document.getElementById('cbMessageSigns').checked = true : document.getElementById('cbMessageSigns').checked = false;
						prefLayerIncidents ? document.getElementById('cbIncidents').checked = true : document.getElementById('cbIncidents').checked = false;
						prefLayerLaneClosures ? document.getElementById('cbLaneClosures').checked = true : document.getElementById('cbLaneClosures').checked = false;
						prefLayerSpeed ? document.getElementById('cbCurrentSpeed').checked = true : document.getElementById('cbCurrentSpeed').checked = false;
						prefTollBridges ? document.getElementById('cbTollBridges').checked = true : document.getElementById('cbTollBridges').checked = false;
						prefMovableBridges ? document.getElementById('cbMovableBridges').checked = true : document.getElementById('cbMovableBridges').checked = false;
						prefBridgeHeight1 ? document.getElementById('cbBridgeHeight1').checked = true : document.getElementById('cbBridgeHeight1').checked = false;
						prefBridgeHeight2 ? document.getElementById('cbBridgeHeight2').checked = true : document.getElementById('cbBridgeHeight2').checked = false;
						prefBridgeClass ? document.getElementById('cbBridgeClass').checked = true : document.getElementById('cbBridgeClass').checked = false;
						toggleCmap(document.getElementById('cbMajorProjects'));
					}
				} else {
					if (document.getElementById('cbMajorProjects').checked) {
						document.getElementById('cbMajorProjects').checked = false;
						prefLayerCameras ? document.getElementById('cbCameras').checked = true : document.getElementById('cbCameras').checked = false;
						prefLayerMessageSigns ? document.getElementById('cbMessageSigns').checked = true : document.getElementById('cbMessageSigns').checked = false;
						prefLayerIncidents ? document.getElementById('cbIncidents').checked = true : document.getElementById('cbIncidents').checked = false;
						prefLayerLaneClosures ? document.getElementById('cbLaneClosures').checked = true : document.getElementById('cbLaneClosures').checked = false;
						prefLayerSpeed ? document.getElementById('cbCurrentSpeed').checked = true : document.getElementById('cbCurrentSpeed').checked = false;
						prefTollBridges ? document.getElementById('cbTollBridges').checked = true : document.getElementById('cbTollBridges').checked = false;
						prefMovableBridges ? document.getElementById('cbMovableBridges').checked = true : document.getElementById('cbMovableBridges').checked = false;
						prefBridgeHeight1 ? document.getElementById('cbBridgeHeight1').checked = true : document.getElementById('cbBridgeHeight1').checked = false;
						prefBridgeHeight2 ? document.getElementById('cbBridgeHeight2').checked = true : document.getElementById('cbBridgeHeight2').checked = false;
						prefBridgeClass ? document.getElementById('cbBridgeClass').checked = true : document.getElementById('cbBridgeClass').checked = false;
						toggleCmap(document.getElementById('cbMajorProjects'));
					} else {
						if (prefLayerLaneClosures) {
							if (!document.getElementById('cbLaneClosures').checked) {
								trafficMap.drawlcars(true);
								document.getElementById('cbLaneClosures').checked = true;
							}
						} else {
							if (document.getElementById('cbLaneClosures').checked) {
								trafficMap.drawlcars(false);
								document.getElementById('cbLaneClosures').checked = false;
							}
						}
						if (prefLayerCameras) {
							if (!document.getElementById('cbCameras').checked) {
								trafficMap.markerdisplay('traffic_cameras',true);
								document.getElementById('cbCameras').checked = true;
							}
						} else {
							if (document.getElementById('cbCameras').checked) {
								trafficMap.markerdisplay('traffic_cameras',false);
								document.getElementById('cbCameras').checked = false;
							}
						}
						if (prefLayerSpeed) {
							if (!document.getElementById('cbCurrentSpeed').checked) {
								trafficMap.drawsensors(true);
								document.getElementById('cbCurrentSpeed').checked = true;
							}
						} else {
							if (document.getElementById('cbCurrentSpeed').checked) {
								trafficMap.drawsensors(false);
								document.getElementById('cbCurrentSpeed').checked = false;
							}
						}
						if (prefLayerIncidents) {
							if (!document.getElementById('cbIncidents').checked) {
								trafficMap.markerdisplay('traffic_incidents',true);
								document.getElementById('cbIncidents').checked = true;
							}
						} else {
							if (document.getElementById('cbIncidents').checked) {
								trafficMap.markerdisplay('traffic_incidents',false);
								document.getElementById('cbIncidents').checked = false;
							}
						}
						if (prefTollBridges) {
							if (!document.getElementById('cbTollBridges').checked) {
								trafficMap.markerdisplay('traffic_tollbridges',true);
								document.getElementById('cbTollBridges').checked = true;
							}
						} else {
							if (document.getElementById('cbTollBridges').checked) {
								trafficMap.markerdisplay('traffic_tollbridges',false);
								document.getElementById('cbTollBridges').checked = false;
							}
						}
						if (prefMovableBridges) {
							if (!document.getElementById('cbMovableBridges').checked) {
								trafficMap.markerdisplay('traffic_liftbridges',true);
								document.getElementById('cbMovableBridges').checked = true;
							}
						} else {
							if (document.getElementById('cbMovableBridges').checked) {
								trafficMap.markerdisplay('traffic_liftbridges',false);
								document.getElementById('cbMovableBridges').checked = false;
							}
						}
						if (prefBridgeHeight1) {
							if (!document.getElementById('cbBridgeHeight1').checked) {
								trafficMap.drawbrg(false,'under');
								document.getElementById('cbBridgeHeight1').checked = true;
							}
						} else {
							if (document.getElementById('cbBridgeHeight1').checked) {
								trafficMap.drawbrg(false,'under');
								document.getElementById('cbBridgeHeight1').checked = false;
							}
						}
						if (prefBridgeHeight2) {
							if (!document.getElementById('cbBridgeHeight2').checked) {
								trafficMap.drawbrg(false,'under');
								document.getElementById('cbBridgeHeight2').checked = true;
							}
						} else {
							if (document.getElementById('cbBridgeHeight2').checked) {
								trafficMap.drawbrg(false,'under');
								document.getElementById('cbBridgeHeight2').checked = false;
							}
						}
						if (prefBridgeClass) {
							if (!document.getElementById('cbBridgeClass').checked) {
								trafficMap.drawbrg(false,'over');
								trafficMap.drawbrg(false,'over146');
								document.getElementById('cbBridgeClass').checked = true;
							}
						} else {
							if (document.getElementById('cbBridgeClass').checked) {
								trafficMap.drawbrg(false,'over');
								trafficMap.drawbrg(false,'over146');
								document.getElementById('cbBridgeClass').checked = false;
							}
						}
						if (prefLayerMessageSigns) {
							if (!document.getElementById('cbMessageSigns').checked) {
								trafficMap.markerdisplay('traffic_messages',true);
								document.getElementById('cbMessageSigns').checked = true;
							}
						} else {
							if (document.getElementById('cbMessageSigns').checked) {
								trafficMap.markerdisplay('traffic_messages',false);
								document.getElementById('cbMessageSigns').checked = false;
							}
						}
					}
				}
			}
			break;	
		default: 
			break;	
	}
	if (coords.zoom >= 0) {
		trafficMap.setlatlon(coords.lat,coords.long);
		document.getElementById(trafficMap.divID + '_tickmark' + trafficMap.mapZoomScale()).src = trafficMap.skin() + 'tickmark.gif';
		document.getElementById(trafficMap.divID + '_tickmark' + coords.zoom).src = trafficMap.skin() + 'tickmark_on.gif';
		trafficMap.setzoom(coords.zoom);
		trafficMap.getmap();
	}
	document.getElementById("goto").options[0].selected = true;
	document.getElementById("layers").focus();
};
function getLoc(loc) {
	document.getElementById('layersdiv').style.display = "none";
	document.getElementById('helpDiv').style.display = "none";
	layerdisp = "none";
	helpdisp = "none";
	var objCoords = new Object();
	switch(loc) {
		case 'm': // My View
		case '0': // My View
		case 0: // My View
			if (gotACookie) {
				objCoords = {lat:prefLatitude, long:prefLongitude, zoom:prefZoomLevel};
			} else {
				alert ("You need to save a view first.");
				if (loc == "m") {
					// default to Detroit
					objCoords = {lat:42.388473, long:-83.318253, zoom:3};
				} else {
					objCoords = {lat:0, long:0, zoom:-1};
				}
			}
			break;	
		case '1': // Detroit (x-west-to-east,y-south-to-north,zoom)
		case 1: // Detroit (x-west-to-east,y-south-to-north,zoom)
			objCoords = {lat:42.388473, long:-83.318253, zoom:3};
			break;	
		case '2': // Grand Rapids
		case 2: // Grand Rapids
			objCoords = {lat:42.941847, long:-85.676193, zoom:5};
			break;	
		case '3': // Lansing
		case 3: // Lansing
			objCoords = {lat:42.741465, long:-84.545975, zoom:5};
			break;	
		case '4': // Traverse City
		case 4: // Traverse City
			objCoords = {lat:44.758924, long:-85.607529, zoom:6};
			break;	
		case '5': // Kalamazoo
		case 5: // Kalamazoo
			objCoords = {lat:42.273752, long:-85.419388, zoom:3};
			break;	
		case '6': // Ann Arbor
		case 6: // Ann Arbor
			objCoords = {lat:42.282897, long:-83.742599, zoom:6};
			break;	
		case '7': // Benton Harbor
		case 7: // Benton Harbor
			objCoords = {lat:42.118089, long:-86.247482, zoom:3};
			break;	
		case '8': // Muskegon
		case 8: // Muskegon
			objCoords = {lat:43.211928, long:-86.21653, zoom:5};
			break;	
		case '9': // Saginaw
		case 9: // Saginaw
			objCoords = {lat:43.430484, long:-83.945847, zoom:5};
			break;	
		case '10': // Flint
		case 10: // Flint
			objCoords = {lat:43.009166, long:-83.678055, zoom:5};
			break;	
		case '11': // Jackson
		case 11: // Jackson
			objCoords = {lat:42.260541, long:-84.422379, zoom:6};
			break;	
		case '12': // Mackinac Bridge
		case 12: // Mackinac Bridge
			objCoords = {lat:45.812051, long:-84.729996, zoom:3};
			break;	
		case '13': // Sault Ste. Marie
		case 13: // Sault Ste. Marie
			objCoords = {lat:46.469311, long:-84.370827, zoom:5};
			break;	
		case '14': // Escanaba
		case 14: // Escanaba
			objCoords = {lat:45.747881, long:-87.078323, zoom:3};
			break;	
		case '15': // Marquette
		case 15: // Marquette
			objCoords = {lat:46.535721, long:-87.3983, zoom:5};
			break;	
		case '16': // Houghton
		case 16: // Houghton
			objCoords = {lat:47.12014, long:-88.573837, zoom:3};
			break;	
		case '17': // Statewide
		case 17: // Statewide
			objCoords = {lat:44.233393, long:-85.413208, zoom:0};
			break;	
		case '18': // Alpena
		case 18: // Alpena
			objCoords = {lat:45.060176, long:-83.857068, zoom:3};
			break;	
		case '19': // UP
		case 19: // UP
			objCoords = {lat:45.90362, long:-87.100782, zoom:1};
			break;	
		case '20': // Bay City
		case 20: // Bay City
			objCoords = {lat:43.598042, long:-83.890862, zoom:6};
			break;	
		case '21': // Holland
		case 21: // Holland
			objCoords = {lat:42.780027, long:-86.087441, zoom:6};
			break;	
		case '22': // Kalamazoo
		case 22: // Kalamazoo
			objCoords = {lat:42.255709, long:-85.590996, zoom:5};
			break;	
		case '23': // Midland
		case 23: // Midland
			objCoords = {lat:43.627871, long:-84.226632, zoom:5};
			break;	
		case '24': // Mount Pleasant
		case 24: // Mount Pleasant
			objCoords = {lat:43.599534, long:-84.769768, zoom:6};
			break;	
		case '25': // Port Huron
		case 25: // Port Huron
			objCoords = {lat:42.967724, long:-82.492851, zoom:6};
			break;	
		case '26': // Battle Creek
		case 26: // Battle Creek
			objCoords = {lat:42.315143, long:-85.185189, zoom:6};
			break;	
		case '27': // M-153
		case 27: // M-153
			objCoords = {lat:42.327768, long:-83.531886, zoom:6};
			break;	
		default: // Detroit
			objCoords = {lat:42.388473, long:-83.318253, zoom:3};
			break;	
	}
	return objCoords;
};
function centerMap(x,y) {
	var scale = 7;
	trafficMap.setcenter(x,y);
	document.getElementById(trafficMap.divID + '_tickmark' + trafficMap.mapZoomScale()).src = trafficMap.skin() + 'tickmark.gif';
	document.getElementById(trafficMap.divID + '_tickmark' + scale).src = trafficMap.skin() + 'tickmark_on.gif';
	trafficMap.setzoom(scale);
	trafficMap.getmap();
	if (document.getElementById('cbMajorProjects').checked == true) {
		document.getElementById('cbMajorProjects').checked = false;
		trafficMap.drawcmap(false);
		if (document.getElementById('cbLaneClosures').checked) trafficMap.drawlcars(true);
		if (document.getElementById('cbCurrentSpeed').checked) trafficMap.drawsensors(true);
		if (document.getElementById('cbMessageSigns').checked) trafficMap.markerdisplay('traffic_messages',true);
		document.getElementById('cbLaneClosures').disabled = false;
		document.getElementById('cbCameras').disabled = false;
		document.getElementById('cbCurrentSpeed').disabled = false;
		document.getElementById('cbIncidents').disabled = false;
		document.getElementById('cbMessageSigns').disabled = false;
		document.getElementById('cbTollBridges').disabled = false;
		document.getElementById('cbMovableBridges').disabled = false;
		document.getElementById('cbBridgeHeight1').disabled = false;
		document.getElementById('cbBridgeHeight2').disabled = false;
		document.getElementById('cbBridgeClass').disabled = false;
	}
	document.getElementById('cbCameras').checked = true;
	trafficMap.markerdisplay('traffic_cameras',true);
	document.getElementById('cbIncidents').checked = true;
	trafficMap.markerdisplay('traffic_incidents',true);
};

