  var centerLatitude = 39.809849;
  var centerLongitude = -98.55394;
  var startZoom = 4;

  var iconChurch = new GIcon();
  iconChurch.image = "http://maps.google.com/mapfiles/kml/pal2/icon3.png";
  iconChurch.shadow = "http://maps.google.com/mapfiles/kml/pal2/icon3s.png";
  iconChurch.iconSize = new GSize(32,32);
  iconChurch.iconAnchor = new GPoint(16,32);
  iconChurch.infoWindowAnchor = new GPoint(16,1);
  iconChurch.infoShadowAnchor = new GPoint(33,16);

  var map;
  var reponseDivID;
  var search_type;

  function createRequest() {
    try {
      request = new XMLHttpRequest();
    } catch (trymicrosoft) {
      try {
        request = new ActiveXObject("Msxml2.XMLHTTP");
      } catch (othermicrosoft) {
        try {
          request = new ActiveXObject("Microsoft.XMLHTTP");
        } catch (failed) {
          request = false;
        }
      }
    }
    if (!request) {
      alert("Error initializing XMLHttpRequest!");
    }
  }

  function search(id) {
    clearMap();
    createRequest();
    responseDivID = id;

    // Build the URL to connect to
    var search = trim(document.getElementById("search_term").value);

    // Only go on if there is a value
    if ((search == null) || (search == "")) {
      return;
    }

    var url = "searchChurches.php?search_term="+escape(search);
    request.open("GET", url, true);
    request.onreadystatechange = updatePage;
    request.send("");
  }
  
  function getNameInfo(id) {
    search_type = "name";
    responseDivID = id;
    clearMap();
    createRequest();
    // Build the URL to connect to
    var name = trim(document.getElementById("name").value);

    // Only go on if there is a value
    if ((name == null) || (name == "")) {
      return;
    }

    var url = "name_data.php?name="+escape(name);
    request.open("GET", url, true);
    request.onreadystatechange = updatePage;
    request.send("");
  }  

  function getAddressInfo(id) {
    responseDivID = id;
    search_type = "address";
    clearMap();
    createRequest();
    // Build the URL to connect to
    var data = document.getElementById("address").value;
    var data_array = data.split(",");
    var address = trim(data_array[0]);
    var city = trim(data_array[1]);
    var state = trim(data_array[2]);
    // Only go on if there are values for all fields
    if ((address == null) || (address == "")){
      return;
    }
    if ((city == null) || (city == "")) {
      return;
    }
    if ((state == null) || (state == "")) {
      return;
    }
    
    var url = "address_data.php?address="+escape(address)+"&city="+escape(city)+"&state="+escape(state);
    request.open("GET", url, true);
    request.onreadystatechange = updatePage;
    request.send("");
  }
  
  function getRegionInfo(id) {
    responseDivID = id;
    search_type = "region";
    clearMap();
    createRequest(); 
    // Build the URL to connect to
    var data = document.getElementById("region").value;
    var data_array = data.split(",");
    var city = trim(data_array[0]);
    var state = trim(data_array[1]);
    // Only go on if there are values for both fields
    if ((city == null) || (city == "")) return;
    if ((state == null) || (state == "")) return;
    
    var url = "regional_data.php?city="+escape(city)+"&state="+escape(state);
    request.open("GET", url, true);
    request.onreadystatechange = updatePage;
    request.send("");
  }

  function getAdvancedInfo(id) {
    responseDivID = id;
    search_type = "advanced";
    clearMap();
    createRequest();
    // Build the URL to connect to
    var name = document.getElementById("adv_name").value;
    var data = document.getElementById("adv_address").value;

    var data_array = data.split(",");
    var address = trim(data_array[0]);
    var city = trim(data_array[1]);
    var state = trim(data_array[2]);

    // Only go on if there are values for all fields
    if ((name == null) || (name == "")){
      return;
    }
    if ((address == null) || (address == "")){
      return;
    }
    if ((city == null) || (city == "")) {
      return;
    }
    if ((state == null) || (state == "")) {
      return;
    }

    var url = "advanced_search.php?name="+escape(name)+"&address="+escape(address)+"&city="+escape(city)+"&state="+escape(state);
    request.open("GET", url, true);
    request.onreadystatechange = updatePage;
    request.send("");
  }

  
  function updatePage() {
    if (request.readyState == 1) {
      document.getElementById(responseDivID).innerHTML = "<img src=\"http://www.catholic.org/images/mycol/loading.gif\" align=\"ABSmiddle\" />&nbsp;<b>Searching...</b>";
    } else if (request.readyState == 2) {
      document.getElementById(responseDivID).innerHTML = "<img src=\"http://www.catholic.org/images/mycol/loading.gif\" align=\"ABSmiddle\" />&nbsp;<b>Searching...</b>";
    } else if (request.readyState == 3) {
      document.getElementById(responseDivID).innerHTML = "<img src=\"http://www.catholic.org/images/mycol/loading.gif\" align=\"ABSmiddle\" />&nbsp;<b>Searching...</b>";
    } else if (request.readyState == 4) {
       document.getElementById(responseDivID).innerHTML = "<img src=\"http://www.catholic.org/images/mycol/magnifying-glass.gif\" align=\"ABSmiddle\" />&nbsp;<b>Double click</b> an icon for more Parish information.";
      if (request.status == 200) {
        var response = request.responseXML.documentElement;
        var churches = response.getElementsByTagName('church');
        
        // No Search Results
        if( churches.length == 0){
          alert( "Your query returned no results.  Please try again.");
        }

        for( var i = 0; i<churches.length; i++ ) {
          var id = response.getElementsByTagName('id')[i].firstChild.data;
          var name = response.getElementsByTagName('name')[i].firstChild.data;
          var address = response.getElementsByTagName('address')[i].firstChild.data;
          var city = response.getElementsByTagName('city')[i].firstChild.data;
          var state = response.getElementsByTagName('state')[i].firstChild.data;
          var zip = response.getElementsByTagName('zip')[i].firstChild.data;
          var voice = response.getElementsByTagName('voice')[i].firstChild.data;
          var country = response.getElementsByTagName('country')[i].firstChild.data;
          var latitude = response.getElementsByTagName('latitude')[i].firstChild.data;
          var longitude = response.getElementsByTagName('longitude')[i].firstChild.data;

          //Test to make sure element is not null
          var mtweekday = response.getElementsByTagName('masstimeweekday')[i];
          if( mtweekday.firstChild ) {
            var masstimeweekday = mtweekday.firstChild.data;
          } else {
            var masstimeweekday = "COL has no weekday mass information for "+name+"."; 
          }

          //Test to make sure element is not null
          var mtweekend = response.getElementsByTagName('masstimeweekend')[i];
          if( mtweekend.firstChild ) {
            var masstimeweekend = mtweekend.firstChild.data;
          } else {
            var masstimeweekend = "COL has no weekend mass information for "+name+".";
          }
      
          var parish_info = "<br /><b>"+name+"</b><br />"+address+"<br />"+city+", "+state+"&nbsp;&nbsp;"+zip+"<br />"+voice+"<br />";

          var mass_info = "<br /><b>Weekdays:</b>&nbsp;"+masstimeweekday+"<br /><b>Weekends:</b>&nbsp;"+masstimeweekend+"<br />";
  
          var infoTabs = [
            new GInfoWindowTab("Location", parish_info), 
            new GInfoWindowTab("Mass Times", mass_info), 
            new GInfoWindowTab("Bulletin","<br /><b>Coming Soon!</b>")
          ];
          addMarker(latitude, longitude, infoTabs);
        }               
      }
    }
  }
  
  function addMarker(latitude, longitude, tabs) {
    var point = new GLatLng(latitude, longitude);
    var marker = new GMarker(point, iconChurch);
    //var marker = new GMarker(new GLatLng(latitude, longitude));
    
    if( search_type == "address" || search_type == "advanced" ) {
      map.setCenter(point, 16);
//      marker.openInfoWindowTabsHtml(tabs);
    } else if( search_type == "region" ){
      map.setCenter(point, 10);
  //    marker.openInfoWindowTabsHtml(tabs);
    }

    

    GEvent.addListener(marker, 'dblclick',
      function() {
        var current_zoom = map.getZoom();
        var new_zoom = 11;
        if( current_zoom > new_zoom )
          new_zoom = current_zoom;
        map.setCenter(point, new_zoom);
        marker.openInfoWindowTabsHtml(tabs);
      }
    );

 
    
    map.addOverlay(marker);
  }

  function clearMap() { 
    map.clearOverlays();
    init(); 
  } 

  function init() {
    if (GBrowserIsCompatible()) {
      map  = new GMap2(document.getElementById("map"));
      var location = new GLatLng(centerLatitude, centerLongitude);

      map.addControl(new GLargeMapControl());
      map.addControl(new GMapTypeControl());

       map.setCenter(location, startZoom);
    }
  }
  
  function trim(strText) { 
    // this will get rid of leading spaces 
    while (strText.substring(0,1) == ' ') {
      strText = strText.substring(1, strText.length);
    }
    
    // this will get rid of trailing spaces 
    while (strText.substring(strText.length-1,strText.length) == ' ') {
      strText = strText.substring(0, strText.length-1);
    }
    
    return strText;
  } 

  function disableEnter(event){
    if (event.keyCode==13){
      return false;
    } else {
      return true;
    }
  }

  //window.onload = init;
  //window.onunload = GUnload;
