// gMarkerオブジェクト
function gMarker() {
	this.lat;
	this.lng;
	this.msg;
	this.marker;
}

// マップの初期化
function initGMap(lat, lng, zoom) {
	var map = null;
	
	if(GBrowserIsCompatible()) {
		map = new GMap2(document.getElementById("map"));
		
		// Control button
		map.addControl(new GLargeMapControl());
		
		// Type change button
		map.addControl(	new GMapTypeControl(),
						new GControlPosition(G_ANCHOR_BOTTOM_LEFT,
						new GSize(10, 10)));

		// Enable to scroll wheel zoom
		map.enableScrollWheelZoom();
		
		// Point of center
		map.setCenter(new GLatLng(lat, lng), zoom);
	}
	return map;
}

// マーカー生成関数
function makeGMarker(data) {
	
	// マーカーアイコンオブジェクトの生成
	var gIcon = new GIcon(G_DEFAULT_ICON);
	gIcon.iconSize = new GSize(32, 35);
	gIcon.iconAnchor = new GPoint(16, 35);

	gIcon.shadowSize = new GSize(50, 35);
	gIcon.shadow = "/img/markers/shadow.png";
	
	// マーカーアイコンの決定
	if(data['sex'].indexOf("女", 0) != -1) {
		gIcon.image = "/img/markers/female/marker" + data['num'] + ".gif";
	} else {
		gIcon.image = "/img/markers/male/marker" + data['num'] + ".gif";
	}

	// メッセージのHTML化
	data['msg'] = data['msg'].replace(/&lt;/g, '<');
	data['msg'] = data['msg'].replace(/&gt;/g, '>');	
	
	// マーカーの生成
	var marker = new GMarker(new GLatLng(data['lat'], data['lng']), { icon : gIcon });
	GEvent.addListener(marker, "click", function() { marker.openInfoWindowHtml(data['msg']); });
	
	// マーカーデータの生成
	var markerData = new gMarker();
	markerData.lat = data['lat'];
	markerData.lng = data['lng'];
	markerData.msg = data['msg'];
	markerData.marker = marker;
	
	// グローバルな配列に格納
	window.markers.push(markerData);
	
	// マップにオーバーレイ
	window.map.addOverlay(marker);
}

// リンクからマーカーに移動するための関数
function openInfoWindowById(id) {
	// マーカー情報の取得
	var marker = window.markers[id];

	// 吹き出しの表示
	marker.marker.openInfoWindowHtml(marker.msg);
	
	// マップ上の移動
	window.map.panTo(new GLatLng(marker.lat, marker.lng));
}

// カート操作(Ajax)
function tutorCart(operation, id, cartName) {
	if(id) {
		urlId = id;
	} else {
		urlId = '0';
	}
	
	// URLの生成
	var url = '/tutors/cart_' + operation + '/' + urlId + '/' + cartName;
	
	var myAjax = new Ajax.Updater(
			'cart',
			url,
			{
				asynchronous:true,
				evalScripts:true,
				requestHeaders:['X-Update', 'cart']
			}
	);
}

// データをポストする(Ajax)
function postData(url) {	
	var myAjax = new Ajax.Request(
			url,
			{
				method:'post',
				parameters: Form.serialize('form'),
				asynchronous:false,
				evalScripts:true
			}
	);
}

// マップ上のすべてのマーカーを納めるマップレベルを取得し、設定する
// from http://slightlyblue.com/blog/2006/08/googlemapsgmarker.html
function setGMapZoomCenter(lat, lng) {
	var gb;

	if(window.markers != null) {
		// 存在する全マーカーをカバーするエリアを取得
		for(var i = 0; i < window.markers.length; i++) {
			var marker = window.markers[i].marker;
			
			if(i == 0) {
				// 一番最初の座標を用いてエリアオブジェクトを生成
				gb = new GLatLngBounds(marker.getPoint(), marker.getPoint());
			} else {					
				// あとはすべてのマーカーについてエリアを拡大していく
				gb.extend(marker.getPoint());
			}
		}
		
		// 住所検索対象が存在するなら、それをエリアに追加
		if(lat && lng) {
			// まずは指定座業に矢印を描画
			addPointArrow(lat, lng);
			
			// センター座標でエリアオブジェクトを生成
			if(gb != null) {
				gb.extend(new GLatLng(lat, lng));
			}
		}
		
		// エリアを納めるちょうどいい縮小レベルとセンター座標を設定
		if(gb != null) {
			window.map.setCenter(gb.getCenter(), window.map.getBoundsZoomLevel(gb));
		}
	}
}

function addPointArrow(lat, lng) {
	if(lat && lng) {
		// マーカーアイコンオブジェクトの生成
		var gIcon = new GIcon(G_DEFAULT_ICON);
		//gIcon.image = "https://www.e-katekyo.info/ssl/proxy.php/http://www.google.com/mapfiles/gadget/arrowSmall80.png";
		gIcon.image = "http://www.google.com/mapfiles/gadget/arrowSmall80.png";
		//gIcon.shadow = "https://www.e-katekyo.info/ssl/proxy.php/http://www.google.com/mapfiles/gadget/arrowshadowSmall80.png";
		gIcon.shadow = "http://www.google.com/mapfiles/gadget/arrowshadowSmall80.png";
		gIcon.iconSize = new GSize(31, 27);
		gIcon.shadowSize = new GSize(31, 27);
		gIcon.iconAnchor = new GPoint(8, 27);
				
		// マーカーの生成
		var marker = new GMarker(new GLatLng(lat, lng), { icon : gIcon });
				
		// マップにオーバーレイ
		window.map.addOverlay(marker);
	}
}

