/*google.load("maps", "2");
    
function createGmap(_cfg) {
    if (GBrowserIsCompatible()) {
        // create map inside assigned Div ref by ID
        map = new google.maps.Map2(document.getElementById(_cfg.MapElId));
        // bind events to map object
        
    
        // set center of map and zoom level althoug after map loads we run geoXml.gotoDefaultViewport(map) which sets the zoom and centers the map so we can see all the points in one view
        map.setCenter(new google.maps.LatLng(_cfg.lat, _cfg.lng), _cfg.zoom);
        //map.setCenter(new google.maps.LatLng(0, 0), _cfg.zoom);
        
        // zoom with mouse wheel
        map.enableScrollWheelZoom();
        
        // show Map, Satellite and hybrid options
        map.addControl(new GMapTypeControl());
        // add map controls (i.e. zoom control)
        map.addControl(new google.maps.LargeMapControl());
        
        
        
        KMLparser(kmlPath+'/Bus_Routes.xml',map, "#f90404", 4, 0.8, false);
        //KMLparser(kmlPath+'/Time_Points.xml',map, "#FF0000", 4, 1.0, false);
        //KMLparser(kmlPath+'/No_Stop_Zone.xml',map, "#FFB273", 4, 1.0, false);
        //KMLparser(kmlPath+'/Snow_Route.xml',map, "#BFFFFF", 4, 1.0, false);
	}else{
	    document.getElementById(_cfg.MapElId).InnerHTML = "Your browser is not compatible with this mapping application.<br />If you feel you have received this message in error, please email us at: info (at) this domain.com.";
	}
}*/
function hideChosenRoute(path, routeNumber) {
    var index = false;
    for (var i = 0; i < mapObject[path]['routeNumber'].length; i++) {
        if (mapObject[path]['routeNumber'][i] == routeNumber) {
            (mapObject[path]['marker'][i]) ? map.removeOverlay(mapObject[path]['marker'][i]) : '';
            (mapObject[path]['polyline'][i]) ? map.removeOverlay(mapObject[path]['polyline'][i]) : '';
            if (!index) {
                index = i;
            }
        }
    }
    if (!mapObject[kmlPath+'/Time_Points.xml'] || mapObject[kmlPath+'/Time_Points.xml'] == undefined) {
        parseXml(kmlPath+'/Time_Points.xml', map, "#FF0000", 4, 1.0, true);
        setTimeout("hideChosenTimePoints(kmlPath+'/Time_Points.xml', " + routeNumber + ")", 7000);
        //showChosenTimePoints(kmlPath+'/Time_Points.xml', routeNumber)
    } else {
        hideChosenTimePoints(kmlPath+'/Time_Points.xml', routeNumber);
    }
    if (!mapObject[kmlPath+'/Snow_Route.xml'] || mapObject[kmlPath+'/Time_Points.xml'] == undefined) {
        parseXml(kmlPath+'/Snow_Route.xml', map, "#BFFFFF", 4, 1.0, false);
        setTimeout("hideSnowRoutes(kmlPath+'/Snow_Route.xml', " + routeNumber + ")", 7000);
    } else {
        hideSnowRoutes(kmlPath+'/Snow_Route.xml', routeNumber);
    }
    if (!mapObject[kmlPath+'/No_Stop_Zone.xml'] || mapObject[kmlPath+'/Time_Points.xml'] == undefined) {
        parseXml(kmlPath+'/No_Stop_Zone.xml', map, "#FFB273", 4, 1.0, false);
        setTimeout("hideNoStopZones(kmlPath+'/No_Stop_Zone.xml', " + routeNumber + ")", 7000);
    } else {
        hideNoStopZones(kmlPath+'/No_Stop_Zone.xml', routeNumber);
    }
}
function showChosenRoute(path, routeNumber){
    eventListener[path][routeNumber] = GEvent.addListener(map, 'addoverlay', function(x){ 
       toggleMapLoading(true);
       returnedItem = x;
       if(x.color =="#000000"){
        //toggleMapLoading(false);
       
        //GEvent.removeListener(eventListener[path][routeNumber]); 
       } 
    });
    GEvent.addListener(map, 'mousemove', function(){
        toggleMapLoading(false);
    });
    //map.clearOverlays();
    var index = false;
    
    //if (document.getElementById('inboundRoutes').checked) {
        for (var i = 0; i < mapObject[path]['routeNumber'].length; i++) {
            /*if(routeNumber == '1' && mapObject[path]['routeNumber'][i] == routeNumber){
                debugger;
            }*/
            if (mapObject[path]['routeNumber'][i] == routeNumber && mapObject[path]['direction'][i] == 'Inbound') {
                (mapObject[path]['marker'][i]) ? map.addOverlay(mapObject[path]['marker'][i]) : '';
                (mapObject[path]['polyline'][i]) ? map.addOverlay(mapObject[path]['polyline'][i]) : '';
                if (!index) {
                    index = i;
                }
            }
        }
    //}
    //if (document.getElementById('outboundRoutes').checked) {
        for (var i = 0; i < mapObject[path]['routeNumber'].length; i++) {
            if (mapObject[path]['routeNumber'][i] == routeNumber && mapObject[path]['direction'][i] == 'Outbound') {
                (mapObject[path]['marker'][i]) ? map.addOverlay(mapObject[path]['marker'][i]) : '';
                (mapObject[path]['polyline'][i]) ? map.addOverlay(mapObject[path]['polyline'][i]) : '';
                if (!index) {
                    index = i;
                }
            }
        }
    //}
    if (!mapObject[kmlPath+'/Time_Points.xml'] || mapObject[kmlPath+'/Time_Points.xml'] == undefined) {
        parseXml(kmlPath+'/Time_Points.xml', map, "#FF0000", 4, 0.6, true);
        //setTimeout("showChosenTimePoints(kmlPath+'/Time_Points.xml', '" + routeNumber + "')", 7000);
        //showChosenTimePoints(kmlPath+'/Time_Points.xml', routeNumber)
    } else {
        showChosenTimePoints(kmlPath+'/Time_Points.xml', routeNumber);
    }
    if (!mapObject[kmlPath+'/Snow_Route.xml'] || mapObject[kmlPath+'/Snow_Route.xml'] == undefined) {
        parseXml(kmlPath+'/Snow_Route.xml', map, "#f677d1", 8, 0.8, false);
        //setTimeout("showSnowRoutes(kmlPath+'/Snow_Route.xml', '" + routeNumber + "')", 4000);
    } else {
        //setTimeout("showSnowRoutes(kmlPath+'/Snow_Route.xml', " + routeNumber + ")", 4000);
        showSnowRoutes(kmlPath+'/Snow_Route.xml', routeNumber)
    }
    if (!mapObject[kmlPath+'/No_Stop_Zone.xml'] || mapObject[kmlPath+'/No_Stop_Zone.xml'] == undefined) {
        parseXml(kmlPath+'/No_Stop_Zone.xml', map, "#000000", 8, 0.8, false);
        //setTimeout("showNoStopZones(kmlPath+'/No_Stop_Zone.xml', '" + routeNumber + "')", 4000);
    } else {
        //setTimeout("showNoStopZones(kmlPath+'/No_Stop_Zone.xml', " + routeNumber + ")", 4000);
        showNoStopZones(kmlPath+'/No_Stop_Zone.xml', routeNumber);
    }
    (mapObject[path]['polyline'][index])?map.setCenter(mapObject[path]['polyline'][index].getBounds().getCenter(), 13):'';
}

function hideChosenTimePoints(path, routeNumber) {
    for (var i = 0; i < mapObject[path]['routeNumber'].length; i++) {
        if (mapObject[path]['routeNumber'][i] == routeNumber) {
            (mapObject[path]['marker'][i]) ? map.removeOverlay(mapObject[path]['marker'][i]) : '';
            //(mapObject[path]['polyline'][i]) ? map.addOverlay(mapObject[path]['polyline'][i]) : '';
        }
    }
}
function showChosenTimePoints(path, routeNumber) {
    var index = false;
	/*if(!browser.ie){
		if (document.getElementById('timePoints').checked) {
			for (var i = 0; i < mapObject[path]['routeNumber'].length; i++) {
				if (mapObject[path]['routeNumber'][i] == routeNumber) {
					(mapObject[path]['marker'][i]) ? map.addOverlay(mapObject[path]['marker'][i]) : '';
					//(mapObject[path]['polyline'][i]) ? map.addOverlay(mapObject[path]['polyline'][i]) : '';
				}
				if (!index) {
					index = i;
				}
			}
		}
	}else{*/
		if(showTimePoints){
			for (var i = 0; i < mapObject[path]['routeNumber'].length; i++) {
				if (mapObject[path]['routeNumber'][i] == routeNumber) {
					(mapObject[path]['marker'][i]) ? map.addOverlay(mapObject[path]['marker'][i]) : '';
					//(mapObject[path]['polyline'][i]) ? map.addOverlay(mapObject[path]['polyline'][i]) : '';
				}
				if (!index) {
					index = i;
				}
			}	
		}
//	}
    //(mapObject[path]['polyline'][index]) ? map.setCenter(mapObject[path]['polyline'][index].getBounds().getCenter(), 13) : '';
}
function hideSnowRoutes(path, routeNumber) { //showSnowRoutes(kmlPath+'/Snow_Route.xml', routeNumber)
   for (var i = 0; i < mapObject[path]['routeNumber'].length; i++) {
        if (mapObject[path]['routeNumber'][i] == routeNumber) {
            //(mapObject[path]['marker'][i]) ? map.addOverlay(mapObject[path]['marker'][i]) : '';
            (mapObject[path]['polyline'][i]) ? map.removeOverlay(mapObject[path]['polyline'][i]) : '';
        }
    }
}
function showSnowRoutes(path, routeNumber) { //showSnowRoutes(kmlPath+'/Snow_Route.xml', routeNumber)
   var index = false;
    //if (document.getElementById('snowRoutes').checked) {
        for (var i = 0; i < mapObject[path]['routeNumber'].length; i++) {
            if (mapObject[path]['routeNumber'][i] == routeNumber) {
                //(mapObject[path]['marker'][i]) ? map.addOverlay(mapObject[path]['marker'][i]) : '';
                (mapObject[path]['polyline'][i]) ? map.addOverlay(mapObject[path]['polyline'][i]) : '';
            }
            if (!index) {
                index = i;
            }
        }
    //}
    //(mapObject[path]['polyline'][index]) ? map.setCenter(mapObject[path]['polyline'][index].getBounds().getCenter(), 13) : '';
}
function hideNoStopZones(path, routeNumber) {
    for (var i = 0; i < mapObject[path]['routeNumber'].length; i++) {
        if (mapObject[path]['routeNumber'][i] == routeNumber) {
            //(mapObject[path]['marker'][i]) ? map.addOverlay(mapObject[path]['marker'][i]) : '';
            (mapObject[path]['polyline'][i]) ? map.removeOverlay(mapObject[path]['polyline'][i]) : '';
        }
    }
}
function showNoStopZones(path, routeNumber) {
    var index = false;
    //if (document.getElementById('noStopZones').checked) {
        for (var i = 0; i < mapObject[path]['routeNumber'].length; i++) {
            if (mapObject[path]['routeNumber'][i] == routeNumber) {
                //(mapObject[path]['marker'][i]) ? map.addOverlay(mapObject[path]['marker'][i]) : '';
                (mapObject[path]['polyline'][i]) ? map.addOverlay(mapObject[path]['polyline'][i]) : '';
            }
            if (!index) {
                index = i;
            }
        }
    //}
    //(mapObject[path]['polyline'][index]) ? map.setCenter(mapObject[path]['polyline'][index].getBounds().getCenter(), 13) : '';
}
function showOutboundRoute(path, routeNumber) {
    var index = false;
    for (var i = 0; i < mapObject[path]['routeNumber'].length; i++) {
        if (mapObject[path]['routeNumber'][i] == routeNumber && mapObject[path]['direction'][i] == 'Outbound') {
            (mapObject[path]['marker'][i]) ? map.addOverlay(mapObject[path]['marker'][i]) : '';
            (mapObject[path]['polyline'][i]) ? map.addOverlay(mapObject[path]['polyline'][i]) : '';
            if (!index) {
                index = i;
            }
        }
    }
    //(mapObject[path]['polyline'][index]) ? map.setCenter(mapObject[path]['polyline'][index].getBounds().getCenter(), 13) : '';
}
function hideOutboundRoute(path, routeNumber) {
    for (var i = 0; i < mapObject[path]['routeNumber'].length; i++) {
        if (mapObject[path]['routeNumber'][i] == routeNumber && mapObject[path]['direction'][i] == 'Outbound') {
            (mapObject[path]['marker'][i]) ? map.removeOverlay(mapObject[path]['marker'][i]) : '';
            (mapObject[path]['polyline'][i]) ? map.removeOverlay(mapObject[path]['polyline'][i]) : '';
        }
    }
}
function showInboundRoute(path, routeNumber) {
    var index = false;
    for (var i = 0; i < mapObject[path]['routeNumber'].length; i++) {
        if (mapObject[path]['routeNumber'][i] == routeNumber && mapObject[path]['direction'][i] == 'Inbound') {
            (mapObject[path]['marker'][i]) ? map.addOverlay(mapObject[path]['marker'][i]) : '';
            (mapObject[path]['polyline'][i]) ? map.addOverlay(mapObject[path]['polyline'][i]) : '';
        }
        if (!index) {
            index = i;
        }
    }
    //(mapObject[path]['polyline'][index]) ? map.setCenter(mapObject[path]['polyline'][index].getBounds().getCenter(), 13) : '';
}
function hideInboundRoute(path, routeNumber) {
    for (var i = 0; i < mapObject[path]['routeNumber'].length; i++) {
        if (mapObject[path]['routeNumber'][i] == routeNumber && mapObject[path]['direction'][i] == 'Inbound') {
            (mapObject[path]['marker'][i]) ? map.removeOverlay(mapObject[path]['marker'][i]) : '';
            (mapObject[path]['polyline'][i]) ? map.removeOverlay(mapObject[path]['polyline'][i]) : '';
        }
    }
}
function toggleRouteSelection(checked, elId, path, routeNumber) {
    if (checked) {
        //enableInOutCheckBoxes();
        document.getElementById(elId).className = 'redBackground';
        showChosenRoute(path, routeNumber);
        visibleRoutes.push(routeNumber);
    } else {
        document.getElementById(elId).className = 'clearBackground';
        hideChosenRoute(path, routeNumber);
        var tempVisRoutes = visibleRoutes;
        for (var i = 0; i < tempVisRoutes.length; i++) {
            if (tempVisRoutes[i] == routeNumber) {
                visibleRoutes.splice(i, 1);
            }
        }
    }
}
function enableInOutCheckBoxes() {
    document.getElementById('inboundRoutes').checked = true;
    document.getElementById('outboundRoutes').checked = true;
}
function showHideMapElement(elId, checked) {
    for (var i = 0; i < visibleRoutes.length; i++) {
        switch (elId) {
            case 'outboundRoutes':
                if (checked) {
                    showOutboundRoute(kmlPath+'/Bus_Routes.xml', visibleRoutes[i]);
                }else{
                    hideOutboundRoute(kmlPath+'/Bus_Routes.xml', visibleRoutes[i]);
                }
                break;
            case 'inboundRoutes':
                if (checked) {
                    showInboundRoute(kmlPath+'/Bus_Routes.xml', visibleRoutes[i]);
                } else {
                    hideInboundRoute(kmlPath+'/Bus_Routes.xml', visibleRoutes[i]);
                }
                break;
            case 'timePoints':
                if (checked) {
					showTimePoints = true;
                    showChosenTimePoints(kmlPath+'/Time_Points.xml', visibleRoutes[i]);
                } else {
					showTimePoints = false;
                    hideChosenTimePoints(kmlPath+'/Time_Points.xml', visibleRoutes[i]);
                }
                break;
            case 'snowRoutes':
                if (checked) {
                    showSnowRoutes(kmlPath+'/Snow_Route.xml', visibleRoutes[i]);
                } else {
                    hideSnowRoutes(kmlPath+'/Snow_Route.xml', visibleRoutes[i]);
                }
                break;
            case 'noStopZones':
                if (checked) {
                    showNoStopZones(kmlPath+'/No_Stop_Zone.xml', visibleRoutes[i]);
                } else {
                    hideNoStopZones(kmlPath+'/No_Stop_Zone.xml', visibleRoutes[i]);
                }
                break;
        }
    }
}
function showAllRoutes(){
    for(var i = 0; i<routeCheckBoxes.length; i++){
        (document.getElementById(routeCheckBoxes[i].id))?document.getElementById(routeCheckBoxes[i].id).checked = true:'';
        toggleRouteSelection(true, routeCheckBoxes[i].labelId, kmlPath+"/Bus_Routes.xml", routeCheckBoxes[i].routeNumber);
    }
}
function hideAllRoutes(){
    for(var i = 0; i<routeCheckBoxes.length; i++){
       (document.getElementById(routeCheckBoxes[i].id))?document.getElementById(routeCheckBoxes[i].id).checked = false:'';
        toggleRouteSelection(false, routeCheckBoxes[i].labelId, kmlPath+"/Bus_Routes.xml", routeCheckBoxes[i].routeNumber);
    }
}
function toggleMapLoading(state){
  var loadingIcon = (document.getElementById('loadingIcon'))?document.getElementById('loadingIcon'):false;
  if(state){
    if(loadingIcon){
       if(loadingIcon.className.match('hidden')){
            loadingIcon.className = loadingIcon.className.replace(/hidden/, '');
        }
    }
  }else{
	 if(loadingIcon){
        if(!loadingIcon.className.match('hidden')){
            loadingIcon.className += ' hidden';
        }
    } 
  }
}
/*
function changeMapOverlay(_cfg){
    if (typeof map == 'undefined'){
        createGmap(_cfg);
    }
    // clear previous overlays
    map.clearOverlays();
    // set center of map and zoom level
    map.setCenter(new google.maps.LatLng(_cfg.lat, _cfg.lng), _cfg.zoom);
    // prepare map to digest KML
    //geoXml = new google.maps.GeoXml(_cfg.kmlUrl);
    KMLparser(kmlPath+'/'+_cfg.kmlUrl ,map, "#f90404", 4, 1.0, true);
    toggleLoddingIcon(true);
//    mapEventListener = google.maps.Event.bind(geoXml, "load", this, function(){
//        toggleLoddingIcon(false);
//    });
    //map.addOverlay(geoXml);
}
function showAllRouteDataMap(_cfg){
    if (typeof map == 'undefined'){
        createGmap(_cfg);
    }
    // clear previous overlays
    map.clearOverlays();
    // set center of map and zoom level
    map.setCenter(new google.maps.LatLng(_cfg.lat, _cfg.lng), _cfg.zoom);
    // prepare map to digest KML
    KMLparser(kmlPath+'/Bus_Routes.xml',map, "#f90404", 4, 0.3, false);
    KMLparser(kmlPath+'/Time_Points.xml',map, "#FF0000", 4, 1.0, true);
    KMLparser(kmlPath+'/No_Stop_Zone.xml',map, "#FFB273", 4, 1.0, false);
    KMLparser(kmlPath+'/Snow_Route.xml',map, "#BFFFFF", 4, 1.0, false);
    
//    toggleLoddingIcon(true);
//    mapEventListener = google.maps.Event.bind(geoXml, "load", this, function(){
//        toggleLoddingIcon(false);
//        geoXml.gotoDefaultViewport(map);
//    });
//    map.addOverlay(geoXml);
//    map.addOverlay(geoXml2);
//    map.addOverlay(geoXml3);
//    map.addOverlay(geoXml4);
}
function make_MapConfigChanges(_cfgChanges){
     if(_cfgChanges.kmlUrl){
        if(_cfgChanges.obj === 'kmlUrl'){
           
            defaultConfig.kmlUrl = _cfgChanges.kmlUrl;//kmlUrl+_cfgChanges.kmlUrl;
        }
        if(_cfgChanges.obj === 'zoom'){
            defaultConfig.zoom = kmlUrl+_cfgChanges.zoom;
        }else{
            defaultConfig.zoom = map.getZoom();
        }
        if(_cfgChanges.kmlUrl == 'AllRouteData'){
            showAllRouteDataMap(defaultConfig);
        }else{
            changeMapOverlay(defaultConfig);
        }
    }
}
*/
function setDeafultMapConfigs(){
    var config = {
        MapElId:'map', 
        //kmlUrl:kmlUrl+'Bus_Routes.kml', 
        lat:42.7682644637029, 
        lng:-71.0525010795494, 
        zoom:11
    };
    return config;
}
/*
// global UI function
function toggleLoddingIcon(valid){
    document.getElementById('mapStatus').innerHTML = (valid)?"Loading..":"";
}
// run createGmap function when Dom is ready rather than after all the other elements are rendered to the page(i.e. images and such)
*/
