var map;
var gmarkers = [];
var htmls = [];    
var cnt = 0;

var default_lat = 32.798814;
var default_lng = 130.717014;
var default_zoom = 15;

var base_url = "/";
var default_icon_img = base_url + "static/image/icon.gif";
var selected_icon_img = base_url + "static/image/icon2.gif";
var baseIcon = new google.maps.Icon();
baseIcon.iconSize = new google.maps.Size(40, 40);
baseIcon.iconAnchor = new google.maps.Point(20, 20);
baseIcon.image = default_icon_img;


var shop_icon_img = base_url + "static/image/shop_icon.gif";
var shopIcon = new google.maps.Icon();
shopIcon.iconSize = new google.maps.Size(40, 40);
shopIcon.iconAnchor = new google.maps.Point(20, 40);
shopIcon.image = shop_icon_img;


var requested_lat;
var requested_lng;
var requested_zoom;

function initialize() {
	if(GBrowserIsCompatible()) {
		map = new GMap2(document.getElementById("map"));
		map.addControl(new google.maps.LargeMapControl());
		map.addControl(new google.maps.ScaleControl());

		default_lat = shops[default_shop].lat;
		default_lng = shops[default_shop].lng;

		map.setCenter(new google.maps.LatLng(default_lat, default_lng), default_zoom);

		addShopIcons();

		GEvent.addListener(map, 'moveend', function() {
			var gcoder = new GClientGeocoder();
			gcoder.getLocations(map.getCenter(), function(result){
				var status = result.Status.code;
				if(status == 200) {
					var str;
					for(var i=0;result.Placemark.length; i++) {
						if(result.Placemark[i].AddressDetails.Accuracy != 5 && result.Placemark[i].AddressDetails.Accuracy != 6) {
							str = result.Placemark[i].address;
							break;
						}
					}
//					$("#address_name").text(str.replace('日本', ''));
					$("#address_name").text(str.replace('日本, ', ''));
				} else {
					$("#address_name").text('');
				}
			});

			var now_zoom = map.getZoom();
			
			if(now_zoom != requested_zoom) {
				plotData();
			} else {
				var center = map.getCenter();
				var now_lat = center.lat();
				var now_lng = center.lng();

				var tmp = map.getBounds();
				var sw = tmp.getSouthWest();
				var ne = tmp.getNorthEast();

				var permit_lat = ( ne.lat() - sw.lat() ) / 3; // 縦に1/3以上スククールしたら
				var permit_lng = ( ne.lng() - sw.lng() ) / 4; // 横に1/4以上スクロールしたら

				var sa_lat = now_lat - requested_lat;
				var sa_lng = now_lng - requested_lng;

				if(sa_lat > permit_lat || sa_lat < permit_lat*(-1) || sa_lng > permit_lng || sa_lng < permit_lng*(-1)) {
					plotData();
				}
			}
		});

	}
}




function plotData() {
	beforeWorks();

	var data = makeData();

	$.ajax({
		type: "POST",
		url: base_url + "api/search/",
		data: data,
		success: function(json){
			gmarkers.length=0;
			smarkers.length=0;
			htmls.length=0;
			cnt=0;
			var data = eval("("+json+")");

			if(data.bukken.length > 0) {
				$("#cnt").html(data.bukken.length+','+map.getZoom());
				for(var i=0;i<data.bukken.length;i++) {
					var bukken = data.bukken[i];
					var marker = createMarker(new GLatLng(bukken.lat, bukken.lng), bukken.code);
					map.addOverlay(marker);
				}
			}
			afterWorks();
		},
		error:function(json){
			alert('エラーが発生しました。');
		}
	});
}


// クエリ作成
function makeData() {
	var data = getKukei();

	$("#map_search_module #search_condition input:checked").each(function(){
		data+="&"+$(this).attr('name')+"="+$(this).attr('value');
	});

	data+="&pmin="+$("select#pmin option:selected").val();
	data+="&pmax="+$("select#pmax option:selected").val();

	return data;
}


// 地図の矩形情報を取得する
function getKukei() {
	var tmp = map.getBounds();
	var sw = tmp.getSouthWest();
	var ne = tmp.getNorthEast();
	var zoom = map.getZoom();

	var data = "sw="+sw.lat()+","+sw.lng()+"&ne="+ne.lat()+","+ne.lng()+"&z="+zoom;

	return data;
}



// 物件情報表示
function showHtml(i) {
	$("#result").css('display', 'none');
	$("#result_shop").css('display', 'none');
	$("#result_module").html(htmls[i]);
	$("#result").animate(
		{height: "toggle"},
		"slow"
	);
	
}


// 支店情報表示
function showShopHtml(i) {
	$("#result").css('display', 'none');
	$("#result_shop").css('display', 'none');
	var html = shops[i].html
	$("#result_shop_module").html(html);
	$("#result_shop").animate(
		{height: "toggle"},
		"slow"
	);
	
}


function beforeWorks() {
	requested_zoom = map.getZoom();
	
	var center = map.getCenter();
	requested_lat = center.lat();
	requested_lng = center.lng();

	$("#result_module").html("");
	$("#result").css('display', 'none');
	$("#result_shop_module").html("");
	$("#result_shop").css('display', 'none');
	map.clearOverlays();
	$("#loading").toggle();
	$("#map").css("opacity", "0.5");

	if(requested_zoom < 14) {
		$("#attention_zoom").text('この縮尺ではアイコンは表示されません。');
	} else {
		$("#attention_zoom").text('');
	}

}


function afterWorks() {
	$("#loading").toggle();
	$("#map").css("opacity", "1.0");
	// 支店のアイコン描画
	addShopIcons();
}


// アイコン画像初期化
function clearIconImages() {
	for(var i=0; i<gmarkers.length; i++) {
		gmarkers[i].setImage(default_icon_img);
	}
}


function addShopIcons() {
	if(showshops) {
		for(var i in shops)
		{
			var marker = createShopMarker(new GLatLng(shops[i].lat, shops[i].lng), shops[i].html, i);
			map.addOverlay(marker);
		}
	}
	return;
}

// 部屋情報取得
function getEstateInfo(code) {
	$("#result").css('display', 'none');
	$("#result_shop").css('display', 'none');
	var url = base_url+ "api/estate/" + code;
	$("#result_module").load(url,'',function(){
		$("#result").animate(
			{height: "toggle"},
			"slow"
		);
	});

}


function addFavorite(id) {
	$.ajax({
		type: "POST",
		url: $("#add_favorite" + id + " a").attr('href') ,
		success: function(){
			$("#add_favorite" + id).html('<span class="strong">追加済み</span>');
		},
		error:function(){
			alert('エラーが発生しました。');
		}
	});

	return false;
}


function createMarker(point, code) {
	var icon = new GIcon(baseIcon);

	var marker = new GMarker(point, icon);
	var pos = cnt;
	GEvent.addListener(marker, "click", function() {
		clearIconImages();

		getEstateInfo(code);

		marker.setImage(selected_icon_img);
	});

	gmarkers[cnt] = marker;
	cnt++;

	return marker;
}


function createShopMarker(point, html, pos) {
	var icon = new GIcon(shopIcon);

	var marker = new GMarker(point, icon);
	GEvent.addListener(marker, "click", function() {
		clearIconImages();
		showShopHtml(pos);
	});

	smarkers[pos] = marker;

	return marker;
}



// 条件切り替え
$(function(){
	$("#close_module").click(function() {
		$("#result").animate(
			{height: "toggle"},
			"slow"
		);
		$("#result_shop").css("display", "none");
		clearIconImages();
	});

	$("#close_shop_module").click(function() {
		$("#result_shop").animate(
			{height: "toggle"},
			"slow"
		);
		$("#result").css("display", "none");
		clearIconImages();
	});


	$("#layout10_btn").click(function() {
		if($("#layout10").attr('checked')) {
			$(this).css('background-position', '0 -25px');
			$("#layout10").attr("checked", "");
		} else {
			$(this).css('background-position', '0 0');
			$("#layout10").attr("checked", "checked");
		}
		
		plotData();
	});

	$("#layout11_btn").click(function() {
		if($("#layout11").attr('checked')) {
			$(this).css('background-position', '0 -25px');
			$("#layout11").attr("checked", "");
		} else {
			$(this).css('background-position', '0 0');
			$("#layout11").attr("checked", "checked");
		}
		
		plotData();
	});

	$("#layout12_btn").click(function() {
		if($("#layout12").attr('checked')) {
			$(this).css('background-position', '0 -25px');
			$("#layout12").attr("checked", "");
		} else {
			$(this).css('background-position', '0 0');
			$("#layout12").attr("checked", "checked");
		}
		
		plotData();
	});

	$("#layout14_btn").click(function() {
		if($("#layout14").attr('checked')) {
			$(this).css('background-position', '0 -25px');
			$("#layout14").attr("checked", "");
		} else {
			$(this).css('background-position', '0 0');
			$("#layout14").attr("checked", "checked");
		}
		
		plotData();
	});
	
	

	$("#layout21_btn").click(function() {
		if($("#layout21").attr('checked')) {
			$(this).css('background-position', '0 -25px');
			$("#layout21").attr("checked", "");
		} else {
			$(this).css('background-position', '0 0');
			$("#layout21").attr("checked", "checked");
		}
		
		plotData();
	});

	$("#layout22_btn").click(function() {
		if($("#layout22").attr('checked')) {
			$(this).css('background-position', '0 -25px');
			$("#layout22").attr("checked", "");
		} else {
			$(this).css('background-position', '0 0');
			$("#layout22").attr("checked", "checked");
		}
		
		plotData();
	});

	$("#layout24_btn").click(function() {
		if($("#layout24").attr('checked')) {
			$(this).css('background-position', '0 -25px');
			$("#layout24").attr("checked", "");
		} else {
			$(this).css('background-position', '0 0');
			$("#layout24").attr("checked", "checked");
		}
		
		plotData();
	});
	
	

	$("#layout31_btn").click(function() {
		if($("#layout31").attr('checked')) {
			$(this).css('background-position', '0 -25px');
			$("#layout31").attr("checked", "");
		} else {
			$(this).css('background-position', '0 0');
			$("#layout31").attr("checked", "checked");
		}
		
		plotData();
	});

	$("#layout32_btn").click(function() {
		if($("#layout32").attr('checked')) {
			$(this).css('background-position', '0 -25px');
			$("#layout32").attr("checked", "");
		} else {
			$(this).css('background-position', '0 0');
			$("#layout32").attr("checked", "checked");
		}
		
		plotData();
	});

	$("#layout34_btn").click(function() {
		if($("#layout34").attr('checked')) {
			$(this).css('background-position', '0 -25px');
			$("#layout34").attr("checked", "");
		} else {
			$(this).css('background-position', '0 0');
			$("#layout34").attr("checked", "checked");
		}
		
		plotData();
	});
	
	
	$("#layout42_btn").click(function() {
		if($("#layout42").attr('checked')) {
			$(this).css('background-position', '0 -25px');
			$("#layout42").attr("checked", "");
		} else {
			$(this).css('background-position', '0 0');
			$("#layout42").attr("checked", "checked");
		}
		
		plotData();
	});

	$("#layout44_btn").click(function() {
		if($("#layout44").attr('checked')) {
			$(this).css('background-position', '0 -25px');
			$("#layout44").attr("checked", "");
		} else {
			$(this).css('background-position', '0 0');
			$("#layout44").attr("checked", "checked");
		}
		
		plotData();
	});
	
	
	$("#layout_extra_btn").click(function() {
		if($("#layout_extra").attr('checked')) {
			$(this).css('background-position', '0 -25px');
			$("#layout_extra").attr("checked", "");
		} else {
			$(this).css('background-position', '0 0');
			$("#layout_extra").attr("checked", "checked");
		}
		
		plotData();
	});
	
	




	$("#property1_btn").click(function() {
		if($("#property1").attr('checked')) {
			$(this).css('background-position', '0 -25px');
			$("#property1").attr("checked", "");
		} else {
			$(this).css('background-position', '0 0');
			$("#property1").attr("checked", "checked");
		}
		
		plotData();
	});


	$("#property2_btn").click(function() {
		if($("#property2").attr('checked')) {
			$(this).css('background-position', '0 -25px');
			$("#property2").attr("checked", "");
		} else {
			$(this).css('background-position', '0 0');
			$("#property2").attr("checked", "checked");
		}
		
		plotData();
	});


	$("#property3_btn").click(function() {
		if($("#property3").attr('checked')) {
			$(this).css('background-position', '0 -25px');
			$("#property3").attr("checked", "");
		} else {
			$(this).css('background-position', '0 0');
			$("#property3").attr("checked", "checked");
		}
		
		plotData();
	});


	$("#property4_btn").click(function() {
		if($("#property4").attr('checked')) {
			$(this).css('background-position', '0 -25px');
			$("#property4").attr("checked", "");
			$("#layout82").attr("checked", "");
		} else {
			$(this).css('background-position', '0 0');
			$("#property4").attr("checked", "checked");
			$("#layout82").attr("checked", "checked");
		}
		
		plotData();
	});


	$("select").change(function(){
		plotData();
	});


	$("#search_kodawari input").click(function(){
		plotData();
	});

	$("#s_property input").click(function(){
		plotData();
	});

	$("#s_layout input").click(function(){
		plotData();
	});


	$("#center_point_hdl").click(function(){
		$("#center_point").toggle();
		var tmp = $("#center_point_hdl").text();
		if(tmp == "▲") {
			$("#center_point_hdl").text("▼");
		} else {
			$("#center_point_hdl").text("▲");
		}
	});

	$("#search_condition_hdl").click(function(){
		$("#search_condition").toggle();
		var tmp = $("#search_condition_hdl").text();
		if(tmp == "▲") {
			$("#search_condition_hdl").text("▼");
		} else {
			$("#search_condition_hdl").text("▲");
		}
	});


	$("#showshops_hdl").click(function(){
		if(showshops) {
			// 支店アイコン除去
			for(var i=0 in shops) {
				map.removeOverlay(smarkers[i]);
			}
			smarkers.length = 0;
			showshops = false;
			$("#showshops_hdl").text('支店を表示する');
		} else {
			showshops = true;
			addShopIcons()
			$("#showshops_hdl").text('支店を非表示にする');
		}
	});



});






