//<![CDATA[
//
// maps.js for Google Maps(V3).
//
// Copyright(c) 2006-2011 Logical Wedge. All rights reserved.
//
// URL: http://logical-wedge.net/
//
var map = null;
var openinfo = null;
var marker = new Array();

///////////////////////
function initialize() {
///////////////////////
  var latlng = new google.maps.LatLng(43.03953613581782, 142.0429229736328);
  var myOptions = {
    zoom: 12,
    center: latlng,
    mapTypeId: google.maps.MapTypeId.ROADMAP,
    scaleControl: true,
    scrollwheel: false
  };
  map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);

  var httpobj = createHttpRequest();
  httpobj.open("GET", "dat/icon.xml", false);
  httpobj.send(null);
  var RootNode = httpobj.responseXML.documentElement;
  var icon = new Array();
  var shadow = new Array();
  var j = 0;
  for (var i = 0; i < RootNode.childNodes.length; i++) {
    if (RootNode.childNodes[i].nodeName != 'icon') { continue; }
    var CNode = RootNode.childNodes[i];
    icon[j] = new google.maps.MarkerImage(
      "image/" + CNode.attributes[0].value,
      new google.maps.Size(CNode.attributes[2].value, CNode.attributes[3].value),
      new google.maps.Point(0, 0),
      new google.maps.Point(CNode.attributes[4].value, CNode.attributes[5].value)
    );
    shadow[j++] = new google.maps.MarkerImage(
      "image/" + CNode.attributes[1].value,
      new google.maps.Size(CNode.attributes[2].value, CNode.attributes[3].value),
      new google.maps.Point(0, 0),
      new google.maps.Point(CNode.attributes[4].value, CNode.attributes[5].value)
    );
  }

  httpobj.open("GET", "dat/marker.xml", false);
  httpobj.send(null);
  var RootNode = httpobj.responseXML.documentElement;
  var j = 0;
  for (var i = 0; i < RootNode.childNodes.length; i++) {
    if (RootNode.childNodes[i].nodeName != 'point') { continue; }
    var CNode = RootNode.childNodes[i];
    marker[j] = new google.maps.Marker({
      position: new google.maps.LatLng(CNode.attributes[0].value, CNode.attributes[1].value),
      map: map,
      icon: icon[Number(CNode.attributes[2].value)],
      shadow: shadow[Number(CNode.attributes[2].value)],
      title: CNode.attributes[4].value
    });
    makeMarkerEvent(marker[j++], CNode.attributes[3].value);
  }

  var areaControlDiv = document.createElement('DIV');
  var areaControl = new AreaControl(areaControlDiv);
  areaControlDiv.index = 1;
  map.controls[google.maps.ControlPosition.RIGHT].push(areaControlDiv);
}

////////////////////////////////////////
function makeMarkerEvent(marker, file) {
////////////////////////////////////////
  google.maps.event.addListener(marker, 'click', function() {
    openMarkerInfo(marker, file);
  });
}

/////////////////////////////////////
function clickMarkerName(idx, file) {
/////////////////////////////////////
  map.setCenter(marker[idx].getPosition());
  openMarkerInfo(marker[idx], file);
}

///////////////////////////////////////
function openMarkerInfo(marker, file) {
///////////////////////////////////////
  if (openinfo) {
    openinfo.close();
    openinfo = null;
  }
  var httpobj = createHttpRequest();
  httpobj.open("GET", file, false);
  httpobj.send(null);
  var windowText = httpobj.responseText;
  windowText = windowText.replace(/\r\n/g, '');
  windowText = windowText.replace(/\r/g, '');
  windowText = windowText.replace(/\n/g, '');
  var infowindow = new google.maps.InfoWindow({
    content: windowText
  }); 
  infowindow.open(map, marker);
  openinfo = infowindow;
  google.maps.event.addListener(infowindow, 'closeclick', function(){
    openinfo = null;
  });
}

//////////////////////////////////
function AreaControl(controlDiv) {
//////////////////////////////////
  controlDiv.style.padding = '5px';

  var httpobj = createHttpRequest();
  httpobj.open("GET", "dat/area.xml", false);
  httpobj.send(null);
  var RootNode = httpobj.responseXML.documentElement;
  for (var i = 0; i < RootNode.childNodes.length; i++) {
    if (RootNode.childNodes[i].nodeName != 'area') { continue; }
    var CNode = RootNode.childNodes[i];
    var controlUI = document.createElement('DIV');
    controlUI.style.width = '106px';
    controlUI.style.color = '#333333';
    controlUI.style.backgroundColor = '#FFFFFF';
    controlUI.style.border = '1px solid #7390D2';
    controlUI.style.cursor = 'pointer';
    controlUI.style.textAlign = 'center';
    controlUI.style.padding = '2px 0px';
    controlUI.style.marginBottom = '5px';
    controlUI.title = CNode.attributes[0].value;
    controlDiv.appendChild(controlUI);

    var controlText = document.createElement('DIV');
    controlText.innerHTML = CNode.attributes[0].value;
    controlUI.appendChild(controlText);

    makeAreaButtonEvent(
      controlUI,
      CNode.attributes[1].value,
      CNode.attributes[2].value,
      CNode.attributes[3].value
    );
  }
}

//////////////////////////////////////////////////////////////
function makeAreaButtonEvent(controlUI, map_x, map_y, map_z) {
//////////////////////////////////////////////////////////////
  google.maps.event.addDomListener(controlUI, 'click', function() {
    map.setCenter(new google.maps.LatLng(map_x, map_y));
    map.setZoom(Number(map_z));
  });
}

//////////////////////////////
function createHttpRequest() {
//////////////////////////////
  if (window.ActiveXObject) {
    try {
      return new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
      try {
        return new ActiveXObject("Microsoft.XMLHTTP");
      } catch (e2) {
        return null;
      }
    }
  } else if (window.XMLHttpRequest) {
    return new XMLHttpRequest();
  } else {
    alert('XMLHttpRequest Error');
    return null;
  }
}
//]]>

