Application = function() {
	
  return {
    
    init : function() {
      var self = Application;
      
      window.onResize = self.sizeWindow();
      
      if (GBrowserIsCompatible()) {
        self.updateTime = 15000;
        //Read XML Docs    	
        self.etaFeed = self.loadXMLDoc("bart_eta.xml"); //needed for launchDateTime only
        
		self.launchDateTime();
        self.launchMap();
        self.launchStations();
        //self.launchTrains();

		self.sizeWindow();
      
        setInterval(self.update, self.updateTime);
        setInterval(self.updateClock, 1000);
        
      }
    },
    
	sizeWindow : function(){
		frame = document.getElementById("map_canvas");
		
		if( typeof( window.innerWidth ) == 'number' ) {
		    //Non-IE
		    var windowheight = window.innerHeight;
		  } else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) {
		    //IE 6+ in 'standards compliant mode'
		    var windowheight = document.documentElement.clientHeight;
		  } else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) {
		    //IE 4 compatible
		    var windowheight = document.body.clientHeight;
		  }
		
		
		frame.style.height = (windowheight - 120) + "px";
	},

    loadXMLDoc : function(dname) {
      var self = Application;
      
      var xmlDoc;

      if (window.XMLHttpRequest){
        xmlDoc=new window.XMLHttpRequest();
        xmlDoc.open("GET",dname,false);
        xmlDoc.send("");
        return xmlDoc.responseXML;
      }

      // IE 5 and IE 6

      else window.location = 'http://getfirefox.com';

    },

    stripHTML : function(oldString) {
      var self = Application;
      
      var newString = "";
      var inTag = false;
      for(var i = 0; i < oldString.length; i++) {

        if(oldString.charAt(i) == '<') inTag = true;
        if(oldString.charAt(i) == '>') {
          if(oldString.charAt(i+1)=="<")
          {
            //dont do anything
          }
          else
          {
            inTag = false;
            i++;
          }
        }
        if(!inTag) newString += oldString.charAt(i);
      }
      return newString;
    },

    launchDateTime : function() {
      var self = Application;
      
      var date = self.etaFeed.getElementsByTagName("date")[0].childNodes[0].nodeValue;
      var time = self.etaFeed.getElementsByTagName("time")[0].childNodes[0].nodeValue;
      document.getElementById("last_updated").innerHTML = "Data as of " + time.replace(" PDT","") + " on " + date;

    },

    launchMap : function() { 
      var self = Application;
      self.map = new GMap2(document.getElementById("map_canvas")); 
      self.map.setCenter(new GLatLng(37.779224, -122.313831), 11);
      self.map.setUIToDefault();

	// Load Google Transit Layer
	  var gTransitTileUrlTemplate = 'http://mt1.google.com/vt/lyrs=m@121,transit|vm:1&hl=en&opts=r&x={X}&y={Y}&z={Z}';
		var tileLayerOverlay = new GTileLayerOverlay(
		  new GTileLayer(null, null, null, {
		    tileUrlTemplate: gTransitTileUrlTemplate, 
		    isPng:true,
		    opacity:1
		  })
		);
		
		self.map.addOverlay(tileLayerOverlay);
      
    },

    launchStations : function() { 

      	var self = Application;
		Stations = new GGeoXml("http://whereisbart.com/KML/stations.kml?"+(new Date()).getTime());
		GEvent.addListener(Stations,"load",function(){self.launchTrains();});
		self.map.addOverlay(Stations);

    },

    launchTrains : function() { 
	
		var self = Application;
		var oDestinations = ["DUBL","FRMT","MLBR","PITT","SFIA","DALY","TFTH","CONC","MONT","BAYF","RICH"];
		self.TrainOverlays = new Array();
		for(var i = 0; i<oDestinations.length; i++){
			self.TrainOverlays[i] = new GGeoXml("http://whereisbart.com/KML/"+oDestinations[i]+".kml?"+(new Date()).getTime());
			self.map.addOverlay(self.TrainOverlays[i]);	
		}		
    },

    update : function() {
  
      var self = Application;
	  self.updateTime = 15000;
	  	
	  for(i=0;i<self.TrainOverlays.length;i++){self.map.removeOverlay(self.TrainOverlays[i]);}
	  //self.map.removeOverlay(self.Stations);	
	
	  //self.map.clearOverlays();
	  //self.launchLines();
      //self.launchStations();
      self.launchTrains();
	
    },

    updateClock : function() {
      var self = Application;
      self.updateTime -= 1000;
      document.getElementById("clock").firstChild.nodeValue = "Time until next update " + self.updateTime / 1000 + " seconds";
    }
    
  };

}();

$(Application.init);