var basepath = '/study/rg/';

function mySetCookie(myCookie,myValue,myDay){
   myExp = new Date();
   myExp.setTime(myExp.getTime()+(myDay*24*60*60*1000));
   myItem = "@" + myCookie + "=" + escape(myValue) + ";";
   myExpires = "expires="+myExp.toGMTString() + ";";
   myPath = "path=" + basepath;
   document.cookie =  myItem + myExpires + myPath;
}

function myGetCookie(myCookie){
   myCookie = "@" + myCookie + "=";
   myValue = null;
   myStr = document.cookie + ";" ;
   myOfst = myStr.indexOf(myCookie);
   if (myOfst != -1){
      myStart = myOfst + myCookie.length;
      myEnd   = myStr.indexOf(";" , myStart);
      myValue = unescape(myStr.substring(myStart,myEnd));
   }
   return myValue;
}

function op(type,lat,lng,disp,loader){
  var arr = new Array();
  if(type){
    arr.push('type=' + type);
  }
  if(lat){
    arr.push('lat=' + lat);
  }
  if(lng){
    arr.push('lng=' + lng);
  }
  var str = '?' + arr.join("&");
  var xmlhttp = new pXmlHttp();
  xmlhttp.getHtml(basepath + 'ajax.php' + str, disp,loader);
  if(document.getElementById(loader)){
    document.getElementById(loader).style.display = 'block';
  }
}

var map;
var lat;
var lng;

if(!myGetCookie('gmap')){
  gmap_cookie('max',30);
}


// gmap
function load(mid,lat,lng,cat,uid,mode,gzoom,maptype) {
  var gc = myGetCookie('gmap').split('-');
  user_zoom = parseFloat(gc[2]);
  user_lat = gc[0];
  user_lng = gc[1];
  user_maptype = gc[3];

  if (GBrowserIsCompatible()) {

    if(!lat || !lng){
      lat = 35.68112;
      lng = 139.76703;
      if (user_lat){
        lat = user_lat
      }
      if (user_lng){
        lng = user_lng;
      }
    }else{
      gmap_cookie('lat',lat);
      gmap_cookie('lng',lng);
    }
    if(!gzoom){
      if(mode == 'zoom' || mid){
        zoom = 19;
      }else{
        if (user_zoom) {
          zoom = user_zoom;
        }else{
          zoom = 16;
        }
      }
    }else{
      zoom = parseFloat(gzoom);
    }
    gmap_cookie('zoom',zoom);
    
    map = new GMap2(document.getElementById('map'));
    var point = new GLatLng(lat, lng);
    map.setCenter(point, zoom);
    map.addControl(new GLargeMapControl());
    map.addControl(new GScaleControl());
    map.addControl(new GMapTypeControl(),new GControlPosition(G_ANCHOR_TOP_RIGHT, new GSize(7,7)));

    if(!maptype){
      maptype = user_maptype;
    }
    switch (maptype){
      case 'satellite': map.setMapType(G_SATELLITE_MAP); break;
      case 'hybrid': map.setMapType(G_HYBRID_MAP); break;
    }

    new GKeyboardHandler(map);
    
    map.addControl(new GOverviewMapControl(new GSize(150,150)));
    var overview = document.getElementById("map_overview");
    overview.firstChild.style.border = "1px solid #ddd";
    overview.firstChild.firstChild.style.border = "1px solid red";
    overview.firstChild.firstChild.style.left="4px";
    overview.firstChild.firstChild.style.top="4px";
    overview.firstChild.firstChild.style.width="140px";
    overview.firstChild.firstChild.style.height="140px";
    
    GEvent.addListener(map, 'maptypechanged',function() {
      var maptype = map.getCurrentMapType();
      var newmaptype;
      switch (maptype){
        case G_NORMAL_MAP: newmaptype = "normal"; break;
        case G_SATELLITE_MAP: newmaptype = "satellite"; break;
        case G_HYBRID_MAP: newmaptype = "hybrid"; break;
      }
      gmap_cookie('type',newmaptype);
    });
    
    GEvent.addListener(map, 'zoomend', function(oldLevel, newLevel) {
      gmap_cookie('zoom',newLevel);
    });
    
    create_center_marker();

    GEvent.addListener(map, "moveend", function(){
      var center = map.getCenter();
      gmap_cookie('lng',center.x);
      gmap_cookie('lat',center.y);
    });

    geocoder = new GClientGeocoder();

    GEvent.addListener(map, "click", function(marker,dpoint) {
      map.clearOverlays();
      map.panTo(dpoint);
      var marker = create_marker(dpoint.y,dpoint.x);
      map.addOverlay(marker);
      op('addr',dpoint.y,dpoint.x,'addr','loader');
    });

    return;
  }
}

function create_marker(lat,lng) {
  var icon = new GIcon();
  icon.image = basepath + "-marker.png";
  icon.shadow = basepath + "-shadow.png";
  
  icon.iconSize = new GSize(20,34);
  icon.shadowSize = new GSize(37, 34);
  icon.iconAnchor = new GPoint(9, 30);
  icon.infoWindowAnchor = new GPoint(10,10);
  
  var point = new GLatLng(lat, lng);
  var marker = new GMarker(point,icon);
  
  return marker;
}

function create_center_marker(){
  map.removeOverlay(center_marker);
  var center_marker_icon = new GIcon();
  center_marker_icon.image = basepath + "center.png";
  center_marker_icon.shadow = basepath + "center-shadow.png";
  center_marker_icon.iconSize = new GSize( 15 , 15 );
  center_marker_icon.shadowSize = new GSize( 19 , 19 );
  center_marker_icon.iconAnchor = new GPoint( 7 , 7 );
  
  var center_marker = new GMarker(map.getCenter() , center_marker_icon);
  map.addOverlay(center_marker);
  
  GEvent.addListener(map, "moveend", function(){
    map.removeOverlay(center_marker);
    center_marker = new GMarker(map.getCenter() , center_marker_icon);
    map.addOverlay(center_marker);
  });
  
  return center_marker;
}

function srcFocus(){
  document.getElementById('gmapsearch').value='';
  document.getElementById('gmapsearch').style.color='#000000';
}


var geocoder = null;
function showAddress(address) {
  if(address == ''){
    return;
  }
  if(geocoder){
    geocoder.getLatLng(
      address,
      function(point) {
        if (!point) {
          alert("住所がみつかりません。\n" + address);
        }else{
          var gc = myGetCookie('gmap').split('-');
          zoom = parseFloat(gc[2]);
          if(!zoom || zoom < 14){
            zoom = 17;
          }
          map.setCenter(point, zoom);
        }
      }
    );
  }
}


function gmap_cookie(key,v){
  var c = new Array(7)
  if(myGetCookie('gmap')){
    c = myGetCookie('gmap').split('-');
  }
  var k = new Array('lat','lng','zoom','type','max');
  for(i=0;i < k.length;i++){
    if(k[i] == key){
      c[i] = v;
    }
  }
  c = new Array(c[0],c[1],c[2],c[3],c[4]);
  c = c.join('-');
  mySetCookie('gmap',c,365);
}


/*
===================================================
  paella.js ---- cross-browser ponpon Ajax Engine
  Copyright 2005 ponpon <ponpon@ponpon-village.net>
  URL http://ponpon-village.net/
===================================================
*/

function PonponNamespace() {

  function pXmlHttpProcesser() {
      this.create = XMLHttp.create();
      this.method = "GET";
  };

  pXmlHttpProcesser.xmlhttp = function() { return XMLHttp.create(); };

  pXmlHttpProcesser.Events = ['Uninitialized', 'Loading', 'Loaded', 'Interactive', 'Complete'];

  pXmlHttpProcesser.prototype = {
    setMethod: function(method) {
      var a = method.toUpperCase();
      if(a == "GET" || a == "POST" || a == "PUT" || a == "PROPFIND") {
        this.method = a;
      }
    },

    getMethod: function() {
      return this.method;
    },

    load: function(url, query, func) {
      var xmlhttp = this.create;

      xmlhttp.open(this.method, url);

      var proc = function () {
        if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
          func(xmlhttp);
        } else if (xmlhttp.readyState == 4 && xmlhttp.status != 200) {
          func(null);
        }
      };

      xmlhttp.onreadystatechange = proc;
      if(query != null) {
        xmlhttp.setRequestHeader("Content-Type" , "application/x-www-form-urlencoded");
      } else {
        xmlhttp.setRequestHeader("Content-Type" , "text/html; charset=utf-8");
      }
      xmlhttp.send( query );
    },

    getText: function(url, fnc) {
      var proc = function(xmlhttp) {
        if(xmlhttp != null) {
          fnc(xmlhttp.responseText);
        } else {
          fnc(null);
        }
      };

      this.load(url, null, proc);
    },

    getHtml: function(url,div,loader,fnc) { // +fnc
      var proc = function(xmlhttp) {
        var disp = $(div);
        disp.innerHTML = xmlhttp.responseText;
        if(fnc){
          fnc();
        }
        if(div){
          document.getElementById(div).style.display = 'block';
        }
        if(loader){
          document.getElementById(loader).style.display = 'none';
        }
      };

      this.load(url, null, proc);
    },

    getHtmltoText: function(url, div) {
      var reg;

      var proc = function(xmlhttp) {
        var disp = $(div);
        var txt = xmlhttp.responseText;
        txt = txt.replace(/</g, "&lt;");
        txt = txt.replace(/>/g, "&gt;");
        txt = txt.replace(/ /g, "&nbsp;");
        reg = new RegExp("\r\n|\r|\n", "g");
        txt = txt.replace(reg, "<br />");
        disp.innerHTML = txt;
        disp.style.display = "block";
      };

      this.load(url, null, proc);
    },

    getXml: function(url, fnc) {
      var proc = function(xmlhttp) {
        if(xmlhttp != null) {
          fnc(xmlhttp.responseXML);
        } else {
          fnc(null);
        }
      };

      this.load(url, null, proc);
    },

    getResponse: function(url, fnc) {
      var proc = function(xmlhttp) {
        if(xmlhttp != null) {
          (fnc || function(){})(xmlhttp);
        }
      };

      this.load(url, null, proc);
    },

    send: function(url, frm, div, fnc) { // +fnc
      this.check(this.create);

      frm = document.getElementById(frm);
      var postdata = this.dataset(frm);
      if(postdata.length = 0){
        window.alert("送信するデータがありません。");
        return false;
      }

      var proc = function(xmlhttp) {
        var disp = $(div);
        disp.innerHTML = xmlhttp.responseText;
        if(fnc){
          fnc();
        }
      };

      this.load(url, postdata, proc);
    },

    sendOnly: function(url, frm) {
      this.check(this.create);

      var postdata = this.dataset(frm);
      if(postdata.length = 0){
        window.alert("送信するデータがありません。");
        return false;
      }

      this.load(url, postdata, null);
    },

    check: function(xmlhttp) {
      if (xmlhttp) {
        if(xmlhttp.readyState == 1 || xmlhttp.readyState == 2 || xmlhttp.readyState == 3){
          window.alert("通信中です。");
          return false;
        }
      }
    },

    dataset: function(frm) {
      var postdata = new String();
      for(var i = 0 ; i < frm.elements.length ; i++){
        if(!frm.elements[i].disabled){
          postdata += "&";
          postdata += frm.elements[i].name;
          postdata += "=";
          postdata += frm.elements[i].value.replace(/&/g,'%26');
        }
      }
      if(postdata.length > 0){
        return postdata.substring(1);
      }
    }
  }

  function XMLHttp(){};

  XMLHttp.create = function(){
    if(typeof ActiveXObject != "undefined"){
      var ms = new Array('Msxml2.XMLHTTP', 'Microsoft.XMLHTTP', 'Msxml2.XMLHTTP.3.0', 'Msxml2.XMLHTTP.4.0', 'Msxml2.XMLHTTP.5.0');
      for (var x = 0; x < ms.length; x++) {
        try{
          return new ActiveXObject(ms[x]);
        }catch(e){}
      }
    }
    if(typeof XMLHttpRequest != "undefined"){
      return new XMLHttpRequest();
    }
    return null;
  };

  function pXsltProcesser() {};

  pXsltProcesser.prototype = {
    load: function(a) {
      try{
        if(typeof ActiveXObject != "undefined" && typeof GetObject != "undefined"){
          var b = new ActiveXObject("Microsoft.XMLDOM");
          b.async = false;
          b.load(a);
          return b;
        }else if(typeof XSLTProcessor != "undefined" && typeof XSLTProcessor.prototype.importStylesheet != "undefined"){
          var b =  document.implementation.createDocument("", "", null);
          b.async = false;
          b.load(a);
          return b;
        }
      }catch(c){}
    },

    Parser: function(a) {
      try{
        if(typeof ActiveXObject != "undefined" && typeof GetObject != "undefined"){
          var b = new ActiveXObject("Microsoft.XMLDOM");
          b.loadXML(a);
          return b;
        }else if(typeof DOMParser != "undefined"){
          return(new DOMParser()).parseFromString(a, "text/xml");
        }
      }catch(c){}
    },

    transformToHTML: function(xmlDoc, div, xslt){
      if(typeof xmlDoc.transformNode != "undefined"){
        div.innerHTML = xmlDoc.transformNode(xslt);
      }else if(typeof XSLTProcessor != "undefined" && typeof XSLTProcessor.prototype.importStylesheet != "undefined"){
        var c = new XSLTProcessor();
        c.importStylesheet(xslt);
        var d = c.transformToFragment(xmlDoc, window.document);
        div.innerHTML = "";
        div.appendChild(d);
      }else{
        var e = of(xmlDoc, xslt);
        div.innerHTML = e;
      }
    },

    asynchronousTransform: function(xmlDoc, div, xsltDoc) {
      if(xmlDoc == null) {
        $(div).innerHTML = "";
        return;
      }
      if(typeof xsltDoc == "string"){
        var xslt = this.Parser(xsltDoc);
      } else {
        var xslt = xsltDoc;
      }
      this.transformToHTML(xmlDoc, $(div), xslt);
    }
}

  function pCacheProcesser() {
    this.cache_ = new Array();
  };

  pCacheProcesser.prototype = {
    getCached: function(a) {
      return this.cache_[a];
    },

    cache: function(a, b) {
      this.cache_[a] = b;
    }
  }

  function $() {
    var elements = new Array();

    for (var i = 0; i < arguments.length; i++) {
      var element = arguments[i];
      if (typeof element == 'string') {
        element = document.getElementById(element);
      }

      if (arguments.length == 1) {
        return element;
      }

      elements.push(element);
    }

    return elements;
  }

  function pConst() {
    var w = window;
    w.pXmlHttp = pXmlHttpProcesser;
    w.pXslt = pXsltProcesser;
    w.pCache = pCacheProcesser;
    w.$ = $;
  };

  pConst();

}; PonponNamespace();