var map = null;
var geocoder = null;

var listBlock = [];

var overlayMarkers = [];

var arrays = new Array();
arrays["mall"] = malls;
arrays["spot"] = spots;
arrays["shop"] = shops;
arrays["restaurant"] = restaurants;
arrays["edu"] = edus;


function load() {
  if (GBrowserIsCompatible()) {
    map = new GMap2(document.getElementById("map"));
    map.addControl(new GLargeMapControl());
    map.addControl(new GScaleControl());
    map.addControl(new GMapTypeControl());
    map.addControl(new GOverviewMapControl(new GSize(150,150)));
    map.setCenter(new GLatLng(39.27479,-76.687317), 10);
    geocoder = new GClientGeocoder();
    GEvent.addDomListener(document.getElementById("map"),
                          "DOMMouseScroll", map.wheelZoom);
    GEvent.addDomListener(document.getElementById("map"), "mousewheel",
                          map.wheelZoom);
    /*
        showAddress("10300 Mill Run Circle, Owings Mills, MD 21117");
        showAddress("21076");
        showAddress("1000 Hilltop Rd, Catonsville, MD");
        showAddress("4701 North Charles St, Baltimore, MD");
        showAddress("8200 Perry Hall Blvd, Baltimore, MD 21236");
        showAddress("10300 Little Patuxent Parkway, Columbia, MD 21044");
     */
  }
}

GMap2.prototype.wheelZoom = function(event) {
  if(event.cancelable)    event.preventDefault();
  (event.detail || -event.wheelDelta) < 0 ? map.zoomIn():
  map.zoomOut();
  return false;
}


function sleep_busy(wait) {
  var start = (new Date()).getTime();
  while(true) {
    if((new Date()).getTime() >= start + wait * 1) break;
  }
}

function showAddress(address, infoString) {
  geocoder.getLatLng(
    address,
    function(point) {
      if (!point) {
//        alert(address + " not found");
      } else {
        //        map.setCenter(point, 10);
        overlayMarkers[address] = new GMarker(point);
        map.addOverlay(overlayMarkers[address]);
        //        alert(overlayMarkers[address]);
        //        marker.openInfoWindowHtml(address);
        GEvent.addListener(overlayMarkers[address], "click", function() {
          overlayMarkers[address].openInfoWindowHtml(infoString);
        });
      }
    }
    );
  //  return retMarker;
}

function hideAddress(address) {
  //   alert(address);
  map.removeOverlay(overlayMarkers[address]);
}

function categorize(selection, linkFile) {
  var checkb = document.getElementById(selection);
  var list = document.getElementById("list");
  var tmp = arrays[selection];
  if( checkb.checked == false){
    //  alert(tmp.length);
    listBlock[selection] = "";
    for( var i=0; i<tmp.length; i++){
      listBlock[tmp[i].name] = "";
      hideAddress(tmp[i].address);
    }
  }
  else if( tmp.length > 0 ){
    listBlock[selection] = "<div class='chapter'><a target='_blank' href='" + linkFile + "'><strong>-" + selection + "-</strong></a><br /></div>";
    for( var i=0; i<tmp.length; i++){
      listBlock[tmp[i].name] = '<a href="javascript:void(0)" onclick="GEvent.trigger(overlayMarkers[' + "'" + tmp[i].address + "'" + "], 'click')" + '">' + tmp[i].name + "</a><br />";
      //    list.innerHTML += tmp[i].name + "<br />";

      var imageString = "";
      if( tmp[i].image != 'undefined' && tmp[i].image != null ){
        if( tmp[i].imagetype == 1 ){
          imageString = "<img width='240' height='320' src='./image/" + tmp[i].image + "' /><br />";
        }
        else {
          imageString = "<img width='320' height='240' src='./image/" + tmp[i].image + "' /><br />";
        }
      }
      var linkString = "";
      if( tmp[i].link != 'undefined' && tmp[i].link != null ){
        linkString = "<a target='_blank' href='" + tmp[i].link + "'>more</a>";
      }
      showAddress(tmp[i].address,
                  tmp[i].name + "<br />" + tmp[i].address + "<br />" + linkString + "<br />" + imageString );
      sleep_busy(2);
    }
    checkb.checked = true;
  }
  list.innerHTML = "";
  for( key in listBlock ){
    list.innerHTML += listBlock[key];
  }
}

