﻿var map;

var markers;

var selectedId;
var openWindowId;

var eventHandler_dragEnd;
var eventHandler_zoom;

var isLoaded;

function load() {

	markers = {};

	isLoaded = false;

	if (GBrowserIsCompatible()) {

		map = new GMap2($('map'));

		var lat = document.getElementById('lat').value;
		var lng = document.getElementById('lng').value;

		var homeId = getCookie('home_id');
		var homeLat = getCookie('home_lat');
		var homeLng = getCookie('home_lng');

		if (lat == '{$lat}'){
			lat = (homeLat == '') ? 35.65872588477524 : homeLat;
			$('lat').value = lat;
		}
		if (lng == '{$lng}'){
			lng = (homeLng == '') ? 139.74541783332825 : homeLng;
			$('lng').value = lng;
		}

		map.setCenter(new GLatLng(lat, lng), 14);

		// 色々と有効にする
		map.enableDoubleClickZoom();
		map.enableContinuousZoom();
		map.enableScrollWheelZoom();

		//コントロール追加
		map.addControl( new GLargeMapControl() );
		map.addControl( new GScaleControl() );

		// 画面スクロール対策
		GEvent.addDomListener(document.getElementById("map"), "DOMMouseScroll", CancelEvent); // Firefox
		GEvent.addDomListener(document.getElementById("map"), "mousewheel",     CancelEvent); // IE

		addEventHandlerDragEndAndZoom();

		onDragEnd();

		GEvent.addListener(map, 'infowindowopen', function(){removeEventHandlerDragEndAndZoom();});
		GEvent.addListener(map, 'infowindowclose', function(){addEventHandlerDragEndAndZoom();});
		GEvent.addListener(map, 'moveend', function(){onMoveEnd();});
	}
}

function setCenterFromAddress_Areamap(address, zoom){
	map.setZoom(zoom);
	$('address').value = address;
	setCenterFromAddress(address);
}

function setCenterFromAddress(address){
	var geocoder = new GClientGeocoder();
	geocoder.getLatLng(address,
		function(latlng){
			//alert(latlng.lat() + ", " + latlng.lng());
			map.setCenter(latlng);
			search(latlng.lat(), latlng.lng());
		}
	);
}

function search(lat, lng){
	markers = {};

	var limit = $('limit').value;
	//var word = $('shopname').value;
	//word = EscapeUTF8(word);

	var bounds = map.getBounds();
	var northeast = bounds.getNorthEast();
	var southwest = bounds.getSouthWest();
	var n = northeast.lat();
	var s = southwest.lat();
	var hankei = (n - s) / 2;

	var url = 
		"map/searchM.php"
		+ "?lat=" + lat
		+ "&lng=" + lng
		+ "&hankei=" + hankei
		+ "&lim=" + limit
	//	+ (word != '' ? "&word=" + word : '')
	;
	$('searchUrl').value = url;
	
	//alert(url);

	GDownloadUrl(url, onSearchedDartsBars);
}

function onMoveEnd(){
	var a = $('currentLocation');
	var latlng = map.getCenter();
	a.href = 'index.php?lat=' + latlng.lat() + '&lng=' + latlng.lng();
}

function removeEventHandlerDragEndAndZoom(){
	GEvent.removeListener(eventHandler_dragEnd);
	GEvent.removeListener(eventHandler_zoom);
}

function addEventHandlerDragEndAndZoom(){
	eventHandler_dragEnd = GEvent.addListener(map, 'dragend', onDragEnd);
	eventHandler_zoom = GEvent.addListener(map, 'zoomend', onDragEnd);
}

function addMarker(id, lat, lng, letter, shop, cla, zud){
    var posLink = createPositionLink(id, lat, lng, letter, shop, cla, zud);
    var newItem = addListItem( posLink );

    var icon = new GIcon();
    icon.iconSize = new GSize(20,34);
    icon.shadow = "http://www.google.com/mapfiles/shadow50.png";
    icon.shadowSize = new GSize(37,34);
    icon.iconAnchor = new GPoint(10,34);
    icon.image = "images/map/markers/marker" + letter + ".png";
    var options = new Object();
    options.icon = icon;
    var marker = new GMarker(new GLatLng(lat, lng), options);
    map.addOverlay(marker);

	GEvent.addListener(marker, "click", function(){moveAndOpen(id, lat, lng);});
             GEvent.addListener(marker, "mouseover", function(){ newItem.style.backgroundColor="#ccccff"; });
             GEvent.addListener(marker, "mouseout", function(){ newItem.style.backgroundColor="transparent"; });
	markers['' + id] = marker;
}

function createPositionLink(i, la, ln, le, sh, cl, zu ){
    var posLink = document.createElement("a");
    if ( zu == "" ){           
      posLink.innerHTML =   le + '.' + sh + ' [ ' + cl + ' ] ';
    }else{                                          
      posLink.innerHTML =   le + '.' +'<img src="images/map/encourage3.gif">'+ sh + ' [ ' + cl + ' ] ';
    }
    posLink.href = "#";
    posLink.onclick = function() { moveAndOpen( i, la, ln); }
    return posLink;
}

function addListItem( pl ){
    var newLi = document.createElement("li");
    newLi.appendChild(pl); 
    var historyList = document.getElementById("info");
    historyList.appendChild(newLi);
    return newLi;
}

function delNode(s){
    ob = document.getElementById(s);
    while( ob.hasChildNodes() ) ob.removeChild( ob.firstChild );
}


function onDragStart(){
}

function research(){
	var lat = map.getCenter().lat();
	var lng = map.getCenter().lng();
	document.getElementById('lat').value = lat;
	document.getElementById('lng').value = lng;
	search(lat, lng);
}

function onDragEnd(){
	research();
	$('zoom').value = map.getZoom();
}

function onSearchedDartsBars(txt, stat){
	
	map.clearOverlays();
             delNode('info');

	var funcs = txt.split("\n\n");

	//addMarker(231061001, 35.169900, 136.898100, '1', 'KYコーポレーション');
	//addMarkers();
	eval("var addMarkers = " + funcs[0]);
	addMarkers();


	if (!isLoaded){
		isLoaded = true;

		var mode = $('mode').value;
		var id = $('barid').value;
		var lat = $('lat').value;
		var lng = $('lng').value;

		switch(mode){
			case 'bar':
				moveAndOpen(id, lat, lng);
				break;
		}
	}
}

function moveAndOpen( id, lat, lng){

/*
	if (map.getZoom != 16){
		removeEventHandlerDragEndAndZoom();
		map.setZoom(16);
		addEventHandlerDragEndAndZoom();
	}
*/

	//情報ウィンドウが表示されてる間はマップを動かしても検索されない
	removeEventHandlerDragEndAndZoom();

	selectedId = id;

	map.panTo(new GLatLng(lat, lng));

	var opt = new Object();
	opt.maxWidth = 300;
	GDownloadUrl('map/info.php?p_no=' + id + '&lat=' + lat + '&lng=' + lng, 
		function(txt, stat){
			map.openInfoWindowHtml(markers[selectedId].getLatLng(), txt, opt);
		}
	);

	openWindowId = selectedId;
}

function setCookie(key, value, expireDays){
	var d = new Date();
    d.setTime(d.getTime() + 24*60*60*1000*expireDays); //24時間後
    expire = d.toGMTString();
	document.cookie = key + '=' + value + ';expires=' + expire;
}

function getCookie(item) {
    var i, index, arr;
    arr = document.cookie.split(";");
    for(i = 0; i < arr.length; i++) {
        index = arr[i].indexOf("=");
        //2番目は頭がスペースのとき
        if(arr[i].substring(0, index) == item || 
                arr[i].substring(0, index) == " " + item)
            return arr[i].substring(index + 1);
    }
    return "";
}

function setHome(){
	var latlng = map.getCenter();
	setCookie('home_id', '', 1);
	setCookie('home_lat', latlng.lat(), 365);
	setCookie('home_lng', latlng.lng(), 365);
	alert('現在地をホームにセットしました！');
}

function setHomeBar(id, lat, lng){
	setCookie('home_id', id, 365);
	setCookie('home_lat', lat, 365);
	setCookie('home_lng', lng, 365);
	alert('このバーをホームにセットしました！');
}

function loadHomeBar(){
	alert(getCookie('home_id'));
}

function clearHome(){
	setCookie('home_id', '', 1);
	setCookie('home_lat', '', 1);
	setCookie('home_lng', '', 1);
	setCookie('id', '', 1);
	setCookie('lat', '', 1);
	setCookie('lng', '', 1);
	alert('ホームをクリアしました！');
}
