//<![CDATA[
var map;
var buses = [];
var initbus = [];
var westBld = "";
var eastBld = "";
var form;

var imageBase = "http://www.niatt.uidaho.edu/google/image/";

defaultImage = "mm_20_red.png";
defaultImageFaded = "mm_20_red_fade.png";

var westImage = new image("mm_20_green.png", "mm_20_green_fade.png");
var eastImage = new image("mm_20_blue.png", "mm_20_blue_fade.png");

var encodedPolylineWest = new GPolyline.fromEncoded({
        color: "#33CC66",
        weight: 10,
        points: "{|e|Gr{ciUj@br@_@fg@{Ad@q@bA[hCUdEUhBu@xAoV?uA]aC}Cn@mC~AwMxBeI^kBOqxAeXGOgOvJ?|BtAtAzBlAr@~C?EuGpg@EDrGp@dBx@dCLnB?|C?`IoMG",
        levels: "BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB",
        zoomFactor: 32,
        numLevels: 4
    });

var encodedPolylineEast = new GPolyline.fromEncoded({
        color: "#33CCFF",
        weight: 10,
        points: "c}e|G|{ciU]oa@iMHKooAop@TPwr@z}@YAf`@~^BfQGrBZ`Bn@mGr]`A|@`@~@?vEeA`BM~GrAvGAza@cQ?sE~a@oEFe@Y_PC",
        levels: "BBBBBBBBBBBBBBBBBBBBBBBBB",
        zoomFactor: 32,
        numLevels: 4
    });


function image(imageNormal, imageFaded)
{
    this.normal = imageBase + imageNormal;
    this.faded = imageBase + imageFaded;
}

function bus(bld, busImage, lat, lng, route)
{
    this.bld = bld;
    this.image = busImage;

    this.icon = new GIcon();
    this.icon.image = this.image.normal;
    this.icon.shadow = imageBase + "mm_20_shadow.png";
    this.icon.iconSize = new GSize(12, 20);
    this.icon.shadowSize = new GSize(22, 20);
    this.icon.iconAnchor = new GPoint(6, 20);
    this.icon.infoWindowAnchor = new GPoint(5, 1);

    this.route = route;
    this.updated = false;

    this.overlay = new GMarker(new GLatLng(lat, lng), this.icon);
    this.overlay.hide();

    map.addOverlay(this.overlay);
}

function drawMarkers() {
    now = new Date();

    // date field is to avoid caching issues
    GDownloadUrl("http://www.niatt.uidaho.edu/google/data.xml?date=" + now, function(data, responseCode) {
            var xml = GXml.parse(data);
            if(xml.documentElement != undefined && xml != null){
                var markers = xml.documentElement.getElementsByTagName("marker");

                for(bld in buses) {
                    if(buses[bld] != null)
                        buses[bld].updated = false;
                }

                for (var i = 0; i < markers.length; i++) {
                    var bld = markers[i].getAttribute("bld");
                    var lat = parseFloat(markers[i].getAttribute("lat"));
                    var lng = parseFloat(markers[i].getAttribute("lng"));
                    var route = markers[i].getAttribute("route");;

                    lat = isNaN(lat) ? 46.750683 : lat;
                    lng = isNaN(lng) ? -117.031860 : lng;

                    if(route == undefined || bld == undefined){
                        continue;
                    }

                    // Create a new entry for the bus if one does not exist
                    if(typeof(buses[bld]) == undefined || buses[bld] == null){
                        buses[bld] = new bus(bld, new image(defaultImage, defaultImageFaded), lat, lng, route);
                    }

                    buses[bld].route = route;
                    buses[bld].updated = true;

                    // Don't display an out of service bus
                    if(route == "oos") {
                        buses[bld].overlay.hide();
                    } else {

                        // Check to see if bus has switched routes
                        if(route == "west") {
                            westBld = bld;
                            buses[bld].image = westImage;
                        }

                        if(route == "east") {
                            eastBld = bld;
                            buses[bld].image = eastImage;
                        }

                        if(markers[i].getAttribute("lastseen") != null) {
                            buses[bld].overlay.setImage(buses[bld].image.faded);
                        } else {
                            buses[bld].overlay.setImage(buses[bld].image.normal);
                        }

                        // Show bus if it was hidden and update lat/lng
                        buses[bld].overlay.setPoint(new GLatLng(lat, lng));
                        buses[bld].overlay.show();
                    } // if not oos
                } // for markers

                // Remove any buses that were removed from the xml file
                for (bld in buses) {
                    if(buses[bld] != null && buses[bld].updated == false && buses[bld].overlay != null){
                        map.removeOverlay(buses[bld].overlay);
                        buses[bld] = null;
                    }
                }

            } // if xml != null
        });

    // disable and enable buttons
    if(westBld == "") {
        document.getElementById("westButton").disabled=true;
        document.getElementById("westMobileButton").disabled=true;
    } else {
        document.getElementById("westButton").disabled=false;
        document.getElementById("westMobileButton").disabled=false;
    }
    if(eastBld == "") {
        document.getElementById("eastButton").disabled=true;
        document.getElementById("eastMobileButton").disabled=true;
    } else {
        document.getElementById("eastButton").disabled=false;
        document.getElementById("eastMobileButton").disabled=false;
    }
}

function centerToAll() {
    var nBuses = 0;
    var bounds = new GLatLngBounds();
    for (bld in buses) {
        if(!buses[bld].overlay.isHidden() && !bounds.containsLatLng(buses[bld].overlay.getLatLng())){
            nBuses++;
            bounds.extend(buses[bld].overlay.getLatLng());
        }
    }

    if(nBuses < 1){
        map.setCenter(new GLatLng(46.7323, -117), 14);
    } else {
        map.setZoom(map.getBoundsZoomLevel(bounds));
        map.setCenter(bounds.getCenter());
    }
}

function centerEast() {
    if(eastBld != "")
        map.setCenter(buses[eastBld].overlay.getPoint());
}

function centerWest() {
    if(westBld != "")
        map.setCenter(buses[westBld].overlay.getPoint());
}

function load() {
    var n = 0;
    initBus();
    if (GBrowserIsCompatible()) {
      map = new google.maps.Map2(document.getElementById("map"));
      if(!smallScreen) {
        map.addControl(new GMapTypeControl());
      }
      map.addControl(new GSmallMapControl());

	  var bounds = new GLatLngBounds();
	  for (var i = 0; i < initbus.length; i++) {
	    //document.write(initbus[i]);
	    bounds.extend(initbus[i]);
	    n++;
	  }
	
	  if(n < 1){
	    map.setCenter(new GLatLng(46.7323, -117), 14);
	  } else {
	    map.setCenter(bounds.getCenter(), map.getBoundsZoomLevel(bounds));     
	  }

      map.addOverlay(encodedPolylineWest);
      map.addOverlay(encodedPolylineEast);
      form = document.forms[0];
      setInterval("drawMarkers();", 1000);
    } else {
        alert("Google Maps is not compatible with this browser");
    }
}
//]]>
