// $Id: tankenmap.js,v 1.10.2.1 2008/06/23 03:08:23 smunakat Exp $
// $Name:  $
/**
 * アオモリ探検マップ用JavaScript
 *
 * @author Shinji Munakata
 */

var DEFAULT_COLOR = '#F0F0F0';
var SELECT_COLOR = '#E0E0FF';
var HOVER_COLOR = '#BBDBFF';
var HOVER_SELECT_COLOR = '#E0E0FF';


/**
 * クエリストリング作成
 */
function makeQuery(search, handle, page, x0, y0, x1, y1)
{
	return 'search=' + encodeURIComponent(search)
		  + '&x0=' + x0
		  + '&y0=' + y0
		  + '&x1=' + x1
		  + '&y1=' + y1
		  + '&page=' + page
		  + '&handle=' + encodeURIComponent(handle);
}


/**
 * ブログ串刺し検索
 * @param int flg 0: 全域検索ボタンから
 *                1: 範囲検索ボタンから
 *                2: この範囲内でもっとから 範囲のみ
 */
function searchBlog(form, flg)
{
	var wk = map.getBounds();
	switch(flg){
	case 0:
		return searchBlogEx(
			form.search.value,
			form.handle.value,
			1, 0, 0, 0, 0, 0);
	case 1:
		return searchBlogEx(
			form.search.value,
			form.handle.value,
			1,
			wk.getSouthWest().x,
			wk.getSouthWest().y,
			wk.getNorthEast().x,
			wk.getNorthEast().y, 0);
	case 2:
		return searchBlogEx(
			'', '', 1,
			wk.getSouthWest().x,
			wk.getSouthWest().y,
			wk.getNorthEast().x,
			wk.getNorthEast().y, 0);
	}
}


/**
 * ブログ串刺し検索
 */
function searchBlogEx(search, handle, page, x0, y0, x1, y1, moveFlg)
{
	if(req.readyState != 0 && req.readyState != 4) return false;	// 検索中
	
	var infoStr;
	if(moveFlg == 0){
		infoStr = "検索中・・・";
	}else{
		infoStr = "移動中・・・";
	}
	var label = printLabel(infoStr, true);
	document.getElementById('hitnum').innerHTML = infoStr;
	resizeMap();
	
	var query = makeQuery(search, handle, page, x0, y0, x1, y1);
	req.open('GET', './index.php?' + query + '&req=js', true);
	req.onreadystatechange = function(){
		if(req.readyState != 4) return;
		
		eval(req.responseText);	// 検索結果を変数に反映
		
        document.getElementById('hitnum').innerHTML = cnt + "件見つかりました。";
        document.getElementById('pageselect').innerHTML = pagestr;
		document.getElementById('lists').innerHTML = str;
		resizeMap();
		
		map.removeTLabel(label);
		if(cnt == 0){
			printLabel('お探しのキーワード、地域では、<br />お店の情報が見つかりませんでした。<br />', false);
		}else if(moveFlg == 0){
			str = cnt + "件見つかりました。";
			if(cnt > 30){
				str += "<br />はじめの30件を表示しています。";
			}
			printLabel(str, false);
		}
	}
	
	req.send('');
	
	return false;
}


// アイコンクリックイベント
function openInfo(mkobj, did)
{
	mkobj.openInfoWindowHtml(mkobj.infoStr);
	var zoom = map.getZoom();
	if(zoom < 14){
		map.setZoom(14);
	}
	changeColor(did, 'select');
	map.panTo(mkobj.getPoint());
}


// Googlemapの上にテキスト表示
function printLabel(str, noremove)
{
	var label = new TLabel();
	label.id = (new Date()).getMilliseconds();
	label.anchorLatLng = map.getCenter();
	label.anchorPoint = 'bottomLeft';
	label.markerOffset = new GSize(180, 0);
	label.content = '<div class="mapcomment">' + str + '</div>';
	label.percentOpacity = 80;
	map.addTLabel(label, function(){
		map.removeTLabel(this);
	});
	
	if(!noremove){
		setTimeout(function(){
			map.removeTLabel(label);
		}, 5000);
	}
	
	return label;
}


// クッキー保存
function setCookie(key, val, tmp)
{
	var pos = map.getCenter();
	var rect = map.getBounds();
	var width = rect.getNorthEast().x - rect.getSouthWest().x;
	var height = rect.getNorthEast().y - rect.getSouthWest().y;
	document.cookie = "lat=" + pos.lat() + '; expires=Thu, 1-Jan-2030 00:00:00 GMT;';
	document.cookie = "lng=" + pos.lng() + '; expires=Thu, 1-Jan-2030 00:00:00 GMT;';
	document.cookie = "width=" + width + '; expires=Thu, 1-Jan-2030 00:00:00 GMT;';
	document.cookie = "height=" + height + '; expires=Thu, 1-Jan-2030 00:00:00 GMT;';
	document.cookie = "zoom=" + map.getZoom() + '; expires=Thu, 1-Jan-2030 00:00:00 GMT;';
	alert('保存しました');
	
	return false;
}



// 高さ再計算
function resizeMap(){
	var latlng;
	if(map){
		latlng = map.getCenter();
	}
	
	var height = 100;
	if(navigator.appName.charAt(0) == "M"){
		// IE
		height = document.documentElement.clientHeight;
	}else{
		// Opera, FireFox
		height = window.innerHeight;
	}
	height = height - document.getElementById('liquid').offsetTop - 35;
	if(height <= 0) return;
	document.getElementById('liquid').style.height = height + "px";
	
	var wk = height - document.getElementById('lists').offsetTop - 27;
	document.getElementById('lists').style.height = wk + "px";
	
	wk = height - document.getElementById('map_main').offsetTop - 2;
	document.getElementById('map_main').style.height = wk + "px";
	
	if(map){
		map.checkResize();
		map.setCenter(latlng);
	}
}


// 背景色＆アイコン変更
function changeColor(divname, flg){
	if(flg == 'select'){
		if(nowSelect){
			document.getElementById(nowSelect).style.backgroundColor = DEFAULT_COLOR;
		}
		if(hover == divname){
			document.getElementById(divname).style.backgroundColor = HOVER_SELECT_COLOR;
		}else{
			document.getElementById(divname).style.backgroundColor = SELECT_COLOR;
		}
		nowSelect = divname;
	}else if(flg == 'on'){
		if(divname == nowSelect){
		    document.getElementById(divname).style.backgroundColor = HOVER_SELECT_COLOR;
		}else{
			document.getElementById(divname).style.backgroundColor = HOVER_COLOR;
		}
		hover = divname;
	}else{
		if(divname == nowSelect){
			document.getElementById(divname).style.backgroundColor = SELECT_COLOR;
		}else{
			document.getElementById(divname).style.backgroundColor = DEFAULT_COLOR;
		}
		hover = null;
	}
}


// タグ生成画面表示
function maketag()
{
	var wk = map.getBounds();
	var query = makeQuery(
		document.form1.search.value,
		document.form1.handle.value,
		gPage,
		wk.getSouthWest().x,
		wk.getSouthWest().y,
		wk.getNorthEast().x,
		wk.getNorthEast().y);
	window.open("./maketag.php?" + query, "maketag", "width=350,height=250,resizable=yes");
	
	return false;
}


/**
 * メイン
 */

document.write('<script type="text/javascript" src="js/tlabel.2.05.js"></script>');

var map = null;
resizeMap();
map = new GMap2(document.getElementById('map_main'));
new GKeyboardHandler(map);
map.enableDoubleClickZoom();	// ダブルクリックでズーム
map.enableContinuousZoom();		// スムーズなズーム
map.addControl(new GLargeMapControl());
//map.addControl(new GMapTypeControl());
map.addControl(new GScaleControl());

/** なぜか IEだとエラーが出るので削除(2008/6/23)
if(navigator.appName.charAt(0) != "N"){
	map.addControl(new GOverviewMapControl());
}*/


var req = GXmlHttp.create();	// XML取得

var icon = new Object();

// 感想あり
icon[0] = new GIcon();
icon[0].image = "images/micon_blog.png";
icon[0].shadow = null;
icon[0].iconSize = new GSize(30, 26);
//icon[0].shadowSize = new GSize(17, 17);
icon[0].iconAnchor = new GPoint(9, 25);
icon[0].infoWindowAnchor = new GPoint(9, 15);

// まいどくん登録店かつ感想あり
icon[1] = new GIcon(icon[0]);
icon[1].image = "images/micon_maido.png";

var nowSelect = null;
var hover = null;
var gPage = 0;

var newShop = new Object();	// 新規店舗マーカ
var marker = new Object();	// 通常店舗マーカ
