﻿/********************************************************************
八尾市歯科医師会さま向け、MAPシステム
Ver.1.0
２００９．４．２０
 (C) 2009 KT System Service,Inc.
********************************************************************/

var map;
var RANGE = 3;
var MAXHIT = 30;
var ZOOM_SIZE = 16;
var POPDIV_ID = "_shopphoto";
var SELDIV_ID = "_selinfo";
var INPUTDIV_ID = "_inputbox";

var marker_list=[];
var txt_list=[];
var txt_list2=[];  //検索用　データ保存

var option_list=[];



//-------------------------------------------------------------------
// HTMLイベントハンドラ設定

window.onload = function() {
	getFile( '' , 'GET', './js/data.csv' , true )
}

//XMLHttpRequestオブジェクト生成
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() //[1]'
	} else {
		return null
	}
}


//受信内容を確認してイベントを起動
function getFile( data , method , fileName , async ){

	//XMLHttpRequestオブジェクト生成
	var httpoj = createHttpRequest()
	httpoj.open( method , fileName , async )

	//受信時に起動するイベント
	httpoj.onreadystatechange = function(){
		if (httpoj.readyState==4){

			//コールバック
			on_loaded(httpoj)
		}
	}
	httpoj.send( data )
}

//コールバック関数 ( 受信時に実行されます )
function on_loaded(oj){


			dispTxt	= oj.responseText
			
			//整形して表示
			var aryIn = dispTxt.split("\n");
			dispTxt = seikei(aryIn);


}

function seikei(aryIn){

var dispTxt = "";var tag = "";

    //セレクトタグを作ります
var      htm = '<select name="id" onChange="handleSelected(this)">\n';
      htm +=  '<option value="0"selected>医院を選んでください';
      htm +=  '--会員の医院を表示します</option> \n';

// Googleマップ初期化

    if (GBrowserIsCompatible()) {
        map = new GMap2(document.getElementById("mymap"));
        map.setCenter(new GLatLng(34.61709, 135.596973), 13);
        map.addControl(new GScaleControl());
        map.addControl(new GLargeMapControl());
        map.addControl(new GOverviewMapControl(new GSize(128,128)));
　      _d("info", "◆◆◆◆　大阪府八尾市歯科医師会　会員マップ　◆◆◆");
//***********

		var sTitle;
	    var sBody;
            var sBody2;

var      htm = '<select name="id" onChange="handleSelected(this)">\n';
      htm +=  '<option value="0"selected>医院名を選んでください';
      htm +=  '--全ての医院名を表示します</option> \n';


  
for (var i = 1; i < aryIn.length-1; i++) {
	var line = aryIn[i];

      //1行ずつ順番に処理します
        //カンマ(,)で区切って配列を作ります
	   var  rows = line.split(',');

       htm += '  <option value="'+rows[4]+','+rows[5]+','+i+'">'+rows[1]+'</option>\n';
       option_list[i] =  '  <option value="'+rows[4]+','+rows[5]+','+i+'">'+rows[1]+'</option>\n';

// マーカのチップヘルプ
            sTitle = rows[1] +
           "(" + errChk(rows[7]) +
           "/" + errChk(rows[8]) + 
           "/" + errChk(rows[6]) + ")";

// マーカのバルーンヘルプ
       var  sBody = "<table width=\"480\">" +
        "<tr><th colspan=\"2\">" + rows[1] + "</th></tr>" +
        "<tr><td>■医院名</td><td>" +
        errChk(rows[1]) +
        "&nbsp;&nbsp;" +　"　" +
        "</td></tr>" +
        "<tr><td>■診療時間</td><td>" + 
        errChk(rows[7]) + " " +errChk(rows[8]) + "&nbsp;" +
        errChk(rows[23]) + "</td></tr>" +
        "<tr><td>■診療曜日</td><td>" + "<table><tr><td>" + 
		"</td><td>" +
		"月</td><td>" +
		"火</td><td>" +
		"水</td><td>" +
		"木</td><td>" +
		"金</td><td>" +
		"土</td><td>" +
		"日" + "</td></tr>" + "<tr><td>午前：</td><td ALIGN=CENTER>" +
                   rows[9] + "</td><td ALIGN=CENTER>" +
                   rows[11] + "</td><td ALIGN=CENTER>" +
                   rows[13] + "</td><td ALIGN=CENTER>" +
                   rows[15] + "</td><td ALIGN=CENTER>" +
                   rows[17] + "</td><td ALIGN=CENTER>" +
                   rows[19] + "</td><td ALIGN=CENTER>" +
                   rows[21]  + "</td></tr>" + "<tr><td>午後：</td><td ALIGN=CENTER>" +
                   rows[10] + "</td><td ALIGN=CENTER>" +
                   rows[12] + "</td><td ALIGN=CENTER>" +
                   rows[14] + "</td><td ALIGN=CENTER>" +
                   rows[16] + "</td><td ALIGN=CENTER>" +
                   rows[18] + "</td><td ALIGN=CENTER>" +
                   rows[20] + "</td><td ALIGN=CENTER>" +
                   rows[22] +
		  "</td></tr></table>" + "</td></tr>" +
        "<tr><td>■住所</td><td>" +
        errChk(rows[2]) + errChk(rows[3]) + "</td></tr>" +
        "<tr><td>■電話</td><td>" + errChk(rows[6]) + "</td></tr>";

    if (varChk(rows[28], "string")) {
        sBody += "<tr><td>■HP</td>" +
            "<td><a href=\"" + rows[28] + "\" target=\"blank\">" +
            rows[28] + "</td></tr>";
    }

　　sBody2 = sBody + "<tr><td colspan=\"2\">" + "";

    sBody += "<tr><td colspan=\"2\">" + errChk(rows[24]);



    if (varChk(rows[25],"string") &&  rows[25] != "") {

        sBody += "&nbsp;<span onClick=\"sPhotoDsp('" +
            rows[25] +
            "')\"><br />[医院の写真1]</span>";
    }
    if (varChk(rows[26],"string") &&   rows[26] != "") {
        sBody += "&nbsp;<span onClick=\"sPhotoDsp('" +
            rows[26] +
            "')\"><br />[医院の写真2]</span>&nbsp;";
    }

    if (varChk(rows[27],"string") &&  rows[27] != "") {
        sBody += "&nbsp;<span onClick=\"sPhotoDsp('" +
            rows[27] +
            "')\"><br />[医院の写真3]</span>&nbsp;";
    }


    sBody += "</td></tr></table>";
//マーカー出力
　　createGMarker(sTitle, sBody, rows[4], rows[5], i, sBody2);

	}


//セレクトタグを出力
//	selDiv = createDiv(SELDIV_ID,650,40);
	selDiv = createDiv(SELDIV_ID,620,10);

    document.getElementById(SELDIV_ID).innerHTML=htm

//検索BOXを出力
//      var htm = 'キーワード：<input type="text" name="key" size="30" >\n';
//      var srDiv = createDiv("_inbox",650,10);
//      document.getElementById("_inbox").innerHTML=htm

      var htm =  '<input type="button" value="検索" >';
      var inDiv = createDiv("_sr",250,7);
      document.getElementById("_sr").innerHTML=htm

      document.getElementById("_sr").onclick = srShop;
      selDiv = createDiv('_sr_id',130,40);

}

return dispTxt;
}

//選択ボックス選択時の処理
    function handleSelected(oj) { 
      if (oj.selectedIndex != 0) { 

        var k = oj.options[oj.selectedIndex].text
        var point = oj.options[oj.selectedIndex].value
        var p = point.split(',')

//吹き出しを表示する
        marker_list[p[2]].openInfoWindowHtml(txt_list[p[2]]);

//        var msg =  ken+"庁の<br>経度は、"+point[0]+"<br>緯度は、"+ point[1]+"<br>の付近です"
//        document.getElementById('msg').innerHTML=msg;
      } 
    } 

//検索の処理
    function srShop() { 
      keywd = document.getElementById('key').value;
      selDiv = createDiv('_sr_id',150,40);
	  var htm = '<select name="_sr_id" onChange="handleSelected(this)">\n';
      htm +=  '<option value="0"selected>医院名を選んでください';
      htm +=  '--検索された医院名を表示します</option> \n';
      document.getElementById('_sr_id').innerHTML=htm


	  var htm = '<select name="_sr_id" onChange="handleSelected(this)">\n';
      htm +=  '<option value="0"selected>医院名を選んでください';
      htm +=  '--	検索された医院名を表示します</option> \n';
      for (var n = 1; n <= txt_list.length - 1; n++) {
		if (txt_list2[n].indexOf(keywd) >= 0) {
			htm += option_list[n];
	    }
      }
	  
	  document.getElementById('_sr_id').innerHTML=htm

} 

//-------------------------------------------------------------------
// マーカを作る

function createGMarker(title, html, lat, lng, i, sarchBody) {
    var infoObj = new Object();
    infoObj.title = title;
    var gpObj = new GLatLng(lat, lng);
    var marker = new GMarker(gpObj, infoObj);
    map.addOverlay(marker);
    marker_list[i] = marker;
	txt_list[i] = html;

        txt_list2[i] = sarchBody;

    GEvent.addListener(marker, "click", function() {
        marker.openInfoWindowHtml(html);
    });
}


//-------------------------------------------------------------------
// 医院データの特定項目が未定義か、空欄だった場合の判定

function errChk(tgd) {
    return varChk(tgd,"string") ? tgd : "---";
}

//-------------------------------------------------------------------
// 医院写真の表示

var photoDiv;

function sPhotoDsp(imageUrl) {
    photoDiv = createDiv(POPDIV_ID,80,32);
    document.getElementById(POPDIV_ID).innerHTML = 
        "<div id=\"photocnt\" onClick=\"sPhotoClose()\"><img src=\"" +
        "./photo/" + imageUrl +
        "\" /><br /></div>";
}

//-------------------------------------------------------------------
// 医院写真を消す

function sPhotoClose() {
    removeDiv(POPDIV_ID);
}

//-------------------------------------------------------------------
// 測地系の変換
//  ※本コードはNowral氏が下記に公開されている変換式を参考にしています。
//  http://homepage3.nifty.com/Nowral/index.html

function chgTky2WgsLng(lat, lng) {
    return (lng - lat * 0.000046038 - lng * 0.000083043 + 0.010040);
}

function chgTky2WgsLat(lat, lng) {
    return (lat - lat * 0.00010695 + lng * 0.000017464 + 0.0046017);
}

function chgWgs2TkyLng(lat, lng) {
    return (lng + lat * 0.000046047 + lng * 0.000083049 - 0.010041);
}

function chgWgs2TkyLat(lat, lng) {
    return (lat + lat * 0.00010696 - lng * 0.000017467 - 0.0046020);
}

//-------------------------------------------------------------------
// htmlコード挿入

function _d(id, htmlTxt) {
    document.getElementById(id).innerHTML = htmlTxt;
}

//-------------------------------------------------------------------
// divブロック挿入

function createDiv(id,left,top) {
    var outDiv;
    outDiv =document.createElement('div');
    outDiv.id = id;
    document.body.appendChild(outDiv);

    var tgdStyle = document.getElementById(id).style;
    tgdStyle.position = "absolute";
    tgdStyle.left = left + "px";
    tgdStyle.top = top + "px";
    tgdStyle.background = "white";
}

//-------------------------------------------------------------------
// divブロックの削除

function removeDiv(id) {
    var outDiv = document.getElementById(id);
    document.body.removeChild(outDiv);
}

//-------------------------------------------------------------------
// 要素のタイプを確認する

function varChk(tgd,type) {
    return typeof(tgd) == type ? true : false;
}

// EOF
