    var map = null;
    var geocoder = null;
    var trafficIMAGES = [ "closure", "crash", "camera", "trafficcounts1", "potholes1", "potholes_open" ];
    var trafficICONS = [];
    var cameraLatLngs = [];
    var geoXml = null;
    var cameraMarkerManager = null;
    var incidentsMarkerManager = null;
    var trafficcountMarkerManager = null;
    var closureMarkerManager = null;
    var openPotholesMarkerManager = null;
    var closedPotholesMarkerManager = null;
    var overlayHTrafficCounts = null;
    var toggleState = 1;
    var gTrafficLayer = null;
        
    function clearCameras(chkBox) {
        if (!chkBox)
            return;
        if (chkBox.checked)  
           loadTrafficCameras(); 
        else {  
            if (cameraMarkerManager != null)
            cameraMarkerManager.clearMarkers();
        }        
    }
   
    function clearTrafficCounts(chkBox) {
        if (!chkBox)
            return;
        if (chkBox.checked)  
        { loadTrafficCounts(); }
        else {
            if (trafficcountMarkerManager != null)
                trafficcountMarkerManager.clearMarkers();
        }        
    }
   
    function clearIncidents(chkBox) {
        if (!chkBox)
            return;
        if (chkBox.checked)
            loadTrafficIncidents();     
        else {    
            if (incidentsMarkerManager != null)
            incidentsMarkerManager.clearMarkers();
        }
    } 
    
    function clearClosures(chkBox)
    {
        if (!chkBox)
            return;
        if (chkBox.checked) 
          loadRoadClosures();
        else {
            if (closureMarkerManager != null) 
                closureMarkerManager.clearMarkers();
        }
    }
    
    function clearOpenPotholes(chkBox) {
        if (!chkBox)
            return;
        if (chkBox.checked) 
          loadPotholes(0);
        else {
            if (openPotholesMarkerManager != null) 
                openPotholesMarkerManager.clearMarkers();
        }
    }
    
    function clearClosedPotholes(chkBox) {
        if (!chkBox)
            return;
        if (chkBox.checked) 
          loadPotholes(1);
        else {
            if (closedPotholesMarkerManager != null) 
                closedPotholesMarkerManager.clearMarkers();
        }
    }
       
   // function clearTrafficSpeeds(chkBox)
   // {
   //     if (!chkBox)
   //         return;
   //     var tr = document.getElementById("infoRow");  
   //     if (chkBox.checked) {
   //        geoXml = new GGeoXml("http://www.lafayettela.gov/upload/images/xmlfiles/trafficinfo.kml");
   //        map.addOverlay(geoXml);
   //        if (tr!=null)
   //         tr.style.display = '';
   //     }
   //     else { 
   //         map.removeOverlay(geoXml);
   //         tr.style.display = 'none';
   //     }
   // }


    function clearTrafficSpeeds(chkBox)
    {
        if (!chkBox)
            return;
        if (map == null)
            return;    
        if (chkBox.checked) {
           gTrafficLayer = new google.maps.TrafficOverlay;
           map.addOverlay(gTrafficLayer);
        }
        else { 
            map.removeOverlay(gTrafficLayer);
        }
    }


        
    function initialize() {  
        map = new google.maps.Map(document.getElementById('trafficMap')); 
        map.clearOverlays();
        map.setCenter(new GLatLng(30.224880, -92.009404), 11);
        map.setUIToDefault();
        loadTrafficIcons();
        loadTrafficCameras();
        loadTrafficIncidents();
        loadTrafficCounts();
        loadRoadClosures();
        loadPotholes(0);
        loadPotholes(1);
     }  
    
     function loadTrafficIcons() {
        for (i = 0; i < trafficIMAGES.length; i++) 
        {
            if (!trafficICONS[i]) {
                var icon = new GIcon();
                icon.image = './images/' + trafficIMAGES[i] + '.gif';
                icon.iconAnchor = new GPoint(16, 16);
                icon.infoWindowAnchor = new GPoint(16, 0);
                icon.iconSize = new GSize(20, 20);
                icon.shadow = "images/" 
                    + trafficIMAGES[i] + "-shadow.png";
                icon.shadowSize = new GSize(59, 32);
                trafficICONS[i] = icon;
            }
        } 
        return trafficICONS;
    }

    function loadXMLDoc(dname) {
        if (window.XMLHttpRequest) 
           var xhttp = new XMLHttpRequest();
        else 
            var xhttp = new ActiveXObject("Microsoft.XMLHTTP");
        xhttp.open("GET",dname,false);
        xhttp.send("");
       
        if (window.DOMParser) {
            parser = new DOMParser();
            var xmlDoc = parser.parseFromString(xhttp.responseText,"text/xml");
        }
        else {
            var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
            xmlDoc.async = "false";
            xmlDoc.loadXML(xhttp.responseText); 
        }
        return xmlDoc;
    } 

    function loadTrafficCameras() {
        var xmlDoc = loadXMLDoc("trafficCameras.kml");
        var tPlacemarks = xmlDoc.getElementsByTagName('Placemark');
        var tCameras = [];
        cameraMarkerManager = new MarkerManager(map);
       
        for (i = 0; i < tPlacemarks.length; i++)
        {
            var LatLng = xmlDoc.getElementsByTagName("coordinates")[i].childNodes[0].nodeValue.split(", ");
            var name = xmlDoc.getElementsByTagName("name")[i].childNodes[0].nodeValue;
            var description;
            if (xmlDoc.getElementsByTagName("description")[i].childNodes[1] == null)
            { description = xmlDoc.getElementsByTagName("description")[i].childNodes[0].nodeValue; }
            else 
            { description = xmlDoc.getElementsByTagName("description")[i].childNodes[1].nodeValue; }
            var point = new GLatLng(LatLng[1], LatLng[0]);
            var markerOptions = { icon:trafficICONS[2], title:name }; 
            var marker = new GMarker(point, markerOptions);  
            marker.bindInfoWindowHtml(description);
            tCameras.push(marker);
        }
        cameraMarkerManager.addMarkers(tCameras, 0);
        cameraMarkerManager.refresh();
     }
    
    function loadTrafficIncidents() {
        var xmlDoc = loadXMLDoc("LoadTrafficIncidents.aspx?Id=1");
        var tPlacemarks = xmlDoc.getElementsByTagName('Placemark');
        var tCameras = [];
        incidentsMarkerManager  = new MarkerManager(map);
       
        for (i = 0; i < tPlacemarks.length; i++)
        {
            var LatLng = xmlDoc.getElementsByTagName("coordinates")[i].childNodes[0].nodeValue.split(", ");
            var name = xmlDoc.getElementsByTagName("name")[i].childNodes[0].nodeValue;
            var description;
            if (xmlDoc.getElementsByTagName("description")[i].childNodes[1] == null)
            { description = xmlDoc.getElementsByTagName("description")[i].childNodes[0].nodeValue; }
            else 
            { description = xmlDoc.getElementsByTagName("description")[i].childNodes[1].nodeValue; }
            var point = new GLatLng(LatLng[1], LatLng[0]);
            var markerOptions = { icon:trafficICONS[1], title:name }; 
            var marker = new GMarker(point, markerOptions);  
            marker.bindInfoWindowHtml("<br />" + name + "<br />" + description);
            tCameras.push(marker);
        }
        incidentsMarkerManager.addMarkers(tCameras, 0);
        incidentsMarkerManager.refresh();
    }
   
    function loadTrafficCounts() {
        var xmlDoc = loadXMLDoc("LoadTrafficIncidents.aspx?Id=2");
        var tPlacemarks = xmlDoc.getElementsByTagName('Placemark');
        var tCameras = [];
        trafficcountMarkerManager = new MarkerManager(map);
       
        for (i = 0; i < tPlacemarks.length; i++)
        {
            var name = xmlDoc.getElementsByTagName("name")[i].childNodes[0].nodeValue;
            if (name != 'No Data Available' && name != 'Error retrieving data') {
                var LatLng = xmlDoc.getElementsByTagName("coordinates")[i].childNodes[0].nodeValue.split(", ");
                var description;
                if (xmlDoc.getElementsByTagName("description")[i].childNodes[1] == null)
                    { description = xmlDoc.getElementsByTagName("description")[i].childNodes[0].nodeValue; }
                else 
                    { description = xmlDoc.getElementsByTagName("description")[i].childNodes[1].nodeValue; }
                var point = new GLatLng(LatLng[1], LatLng[0]);
                var markerOptions = { icon:trafficICONS[3], title:name }; 
                var marker = new GMarker(point, markerOptions);  
                marker.bindInfoWindowHtml("<br />" + name + description);
                tCameras.push(marker);
            }    
        }
        trafficcountMarkerManager.addMarkers(tCameras, 0);
        trafficcountMarkerManager.refresh();
    }
    
    function loadPotholes(mType) {
        // 0 & 3 is for open and 1 & 4 is for closed
        if (mType == 0)
        { var xmlDoc = loadXMLDoc("LoadTrafficIncidents.aspx?Id=3"); }
        else { xmlDoc = loadXMLDoc("LoadTrafficIncidents.aspx?Id=4"); }
        var tPlacemarks = xmlDoc.getElementsByTagName('Placemark');
        var tCameras = [];
        if (mType == 0)
        { openPotholesMarkerManager  = new MarkerManager(map); }
        else
        { closedPotholesMarkerManager  = new MarkerManager(map); }
        
             
        for (var i = 0; i < tPlacemarks.length; i++)
        {
            var LatLng = xmlDoc.getElementsByTagName("coordinates")[i].childNodes[0].nodeValue.split(", ");
            var name = xmlDoc.getElementsByTagName("name")[i].childNodes[0].nodeValue;
            var description;
            
            if (xmlDoc.getElementsByTagName("description")[i].hasChildNodes()) {
               description = xmlDoc.getElementsByTagName("description")[i].childNodes[0].nodeValue;
            }
            else { description = ""; }
            var point = new GLatLng(LatLng[1], LatLng[0]);
            if (mType == 0) {
                var markerOptions = { icon:trafficICONS[5], title:name }; 
            }
            else {
                var markerOptions = { icon:trafficICONS[4], title:name };
            }
            var marker = new GMarker(point, markerOptions);  
            marker.bindInfoWindowHtml(name + "<br />" + description + "<br /><br />");
            tCameras.push(marker);
        }
        if (mType == 0) { 
            openPotholesMarkerManager.addMarkers(tCameras, 0);
            openPotholesMarkerManager.refresh(); 
        }
        else {
            closedPotholesMarkerManager.addMarkers(tCameras, 0);
            closedPotholesMarkerManager.refresh();
        }
        
    }
         
    function loadRoadClosures() {
        var xmlDoc = loadXMLDoc("LoadRoadClosures.aspx");
        var tPlacemarks = xmlDoc.getElementsByTagName('Placemark');
        var tCameras = [];
        closureMarkerManager  = new MarkerManager(map);
       
        for (i = 0; i < tPlacemarks.length; i++)
        {
            var LatLng = xmlDoc.getElementsByTagName("coordinates")[i].childNodes[0].nodeValue.split(", ");
            var name = xmlDoc.getElementsByTagName("name")[i].childNodes[0].nodeValue;
            var description;
            if (xmlDoc.getElementsByTagName("description")[i].childNodes[1] == null)
            { description = xmlDoc.getElementsByTagName("description")[i].childNodes[0].nodeValue; }
            else 
            { description = xmlDoc.getElementsByTagName("description")[i].childNodes[1].nodeValue; }
            var point = new GLatLng(LatLng[1], LatLng[0]);
            var markerOptions = { icon:trafficICONS[0], title:name }; 
            var marker = new GMarker(point, markerOptions);  
            marker.bindInfoWindowHtml("<br /><b>" + name + "</b><br />" + description);
            tCameras.push(marker);
        }
        closureMarkerManager.addMarkers(tCameras, 0);
        closureMarkerManager.refresh();
    } 
    
     function loadHistoricTrafficCounts() {
//    var overlayHTrafficCounts = new google.maps.KmlLayer("http://www.lafayettela.gov/upload/images/xmlfiles/historic_traffic_counts.kml");
//    overlayHTrafficCounts.setMap(map);
      overlayHTrafficCounts = new GGeoXml("http://www.lafayettela.gov/upload/images/xmlfiles/historic_traffic_counts.kml"); 
      map.addOverlay(overlayHTrafficCounts); 
    }
    
    function clearHTrafficCounts(chkBox) {
        if (!chkBox)
            return;
        if (chkBox.checked) { 
           if (overlayHTrafficCounts == null)
              loadHistoricTrafficCounts(); 
           else
              overlayHTrafficCounts.show();   
        }
        else {
            if (overlayHTrafficCounts != null)
                overlayHTrafficCounts.hide();
        }        
    }
