var map;
var gmarkers = [];
var htmls = [];    
var cnt = 0;
var types = [];
var titles = [];

var smarker;

var toggle_flg = true;	// trueが開いてる

var is_lock = false;

var init_flg = false;
var is_form = true;

var default_lat = 32.789366;
var default_lng = 130.739995;
var default_zoom = 14;

var base_url = "/";
var default_icon_img = base_url + "static/image/apart.gif";
var selected_icon_img = base_url + "static/image/apart_ov.gif";
var baseIcon = new google.maps.Icon();
baseIcon.image = default_icon_img;
baseIcon.iconSize = new google.maps.Size(40, 70);
baseIcon.iconAnchor = new google.maps.Point(20, 50);

var mansion_icon_img = base_url + "static/image/cmansion.gif";
var selected_mansion_icon_img = base_url + "static/image/cmansion_ov.gif";
var mansionIcon = new google.maps.Icon();
mansionIcon.image = mansion_icon_img;
mansionIcon.iconSize = new google.maps.Size(40, 70);
mansionIcon.iconAnchor = new google.maps.Point(20, 50);

var kashiya_icon_img = base_url + "static/image/kashiya.gif";
var selected_kashiya_icon_img = base_url + "static/image/kashiya_ov.gif";
var kashiyaIcon = new google.maps.Icon();
kashiyaIcon.image = kashiya_icon_img;
kashiyaIcon.iconSize = new google.maps.Size(40, 70);
kashiyaIcon.iconAnchor = new google.maps.Point(20, 50);

var office_icon_img = base_url + "static/image/office.gif";
var selected_office_icon_img = base_url + "static/image/office_ov.gif";
var officeIcon = new google.maps.Icon();
officeIcon.image = office_icon_img;
officeIcon.iconSize = new google.maps.Size(40, 70);
officeIcon.iconAnchor = new google.maps.Point(20, 50);

var shop_icon_img = base_url + "static/image/shop.gif";
var selected_shop_icon_img = base_url + "static/image/shop_ov.gif";
var shopIcon = new google.maps.Icon();
shopIcon.image = shop_icon_img;
shopIcon.iconSize = new google.maps.Size(40, 70);
shopIcon.iconAnchor = new google.maps.Point(20, 50);

// 201009 add
var soko_icon_img = base_url + "static/image/soko.gif";
var selected_soko_icon_img = base_url + "static/image/soko_ov.gif";
var sokoIcon = new google.maps.Icon();
sokoIcon.image = soko_icon_img;
sokoIcon.iconSize = new google.maps.Size(40, 70);
sokoIcon.iconAnchor = new google.maps.Point(20, 50);

var parking_icon_img = base_url + "static/image/parking.gif";
var selected_parking_icon_img = base_url + "static/image/parking_ov.gif";
var parkingIcon = new google.maps.Icon();
parkingIcon.image = parking_icon_img;
parkingIcon.iconSize = new google.maps.Size(40, 70);
parkingIcon.iconAnchor = new google.maps.Point(20, 50);

var land_icon_img = base_url + "static/image/rent_land.gif";
var selected_land_icon_img = base_url + "static/image/rent_land_ov.gif";
var landIcon = new google.maps.Icon();
landIcon.image = land_icon_img;
landIcon.iconSize = new google.maps.Size(40, 70);
landIcon.iconAnchor = new google.maps.Point(20, 50);




var asayama_default_icon_img = base_url + "static/image/icon-asayama.gif";
var asayama_selected_icon_img = base_url + "static/image/icon-asayama2.gif";
var asayamaIcon = new google.maps.Icon();
asayamaIcon.iconSize = new google.maps.Size(39, 68);
asayamaIcon.iconAnchor = new google.maps.Point(19, 34);
asayamaIcon.image = asayama_default_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());
		map.addControl(new google.maps.MapTypeControl());
		map.enableContinuousZoom();

		//オーバービューコントロール追加
//		var overviewCtrl = new GOverviewMapControl(new GSize(150,150));
//		map.addControl(overviewCtrl);

		map.setCenter(new google.maps.LatLng(default_lat, default_lng), default_zoom);
		addAsayamaIcon();

		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('日本', ''));
				} else {
					$("#address_name").text('');
				}
			});

			if(toggle_flg) {
				clearIconImages();
				getShowingData();
			}

			is_lock = false;
		});

		plotData();
	}
}


function getShowingData() {
	$(".hdl").unbind('mouseover', aOver);
	$(".hdl").unbind('mouseout', aOut);
	var kukei = map.getBounds();
	var arr = [];
	var event = [];
	for(var i=0; i<gmarkers.length; i++) {
		if(kukei.containsLatLng(gmarkers[i].getLatLng())) {
			arr.push(htmls[i]);
			event.push(i);
		}
	}

	if(arr.length != 0) {
		$("#info_area").html('<div class="info_ttl">表示範囲内物件一覧</div>'+arr.join(''));
	} else {
		$("#info_area").html('<div  class="info_ttl">表示範囲内物件一覧</div><p style="padding:10px;">表示中のエリアには、<br />この条件で表示できる物件がありません</p>');
	}

	$(".hdl").bind('mouseover', aOver);
	$(".hdl").bind('mouseout', aOut);
}


function aOver() {
	if(types[$(this).attr('rel')] == 'mansion') {
		gmarkers[$(this).attr('rel')].setImage(selected_mansion_icon_img);
	} else if(types[$(this).attr('rel')] == 'kashiya') {
		gmarkers[$(this).attr('rel')].setImage(selected_kashiya_icon_img);
	} else if(types[$(this).attr('rel')] == 'office') {
		gmarkers[$(this).attr('rel')].setImage(selected_office_icon_img);
	} else if(types[$(this).attr('rel')] == 'shop') {
		gmarkers[$(this).attr('rel')].setImage(selected_shop_icon_img);
	} else if(types[$(this).attr('rel')] == 'soko') {
		gmarkers[$(this).attr('rel')].setImage(selected_soko_icon_img);
	} else if(types[$(this).attr('rel')] == 'parking') {
		gmarkers[$(this).attr('rel')].setImage(selected_parking_icon_img);
	} else if(types[$(this).attr('rel')] == 'land') {
		gmarkers[$(this).attr('rel')].setImage(selected_land_icon_img);
	} else {
		gmarkers[$(this).attr('rel')].setImage(selected_icon_img);
	}
	
	$(this).css('background-color', '#DFD');
}

function aOut() {
	if(types[$(this).attr('rel')] == 'mansion') {
		gmarkers[$(this).attr('rel')].setImage(mansion_icon_img);
	} else if(types[$(this).attr('rel')] == 'kashiya') {
		gmarkers[$(this).attr('rel')].setImage(kashiya_icon_img);
	} else if(types[$(this).attr('rel')] == 'office') {
		gmarkers[$(this).attr('rel')].setImage(office_icon_img);
	} else if(types[$(this).attr('rel')] == 'shop') {
		gmarkers[$(this).attr('rel')].setImage(shop_icon_img);
	} else if(types[$(this).attr('rel')] == 'soko') {
		gmarkers[$(this).attr('rel')].setImage(soko_icon_img);
	} else if(types[$(this).attr('rel')] == 'parking') {
		gmarkers[$(this).attr('rel')].setImage(parking_icon_img);
	} else if(types[$(this).attr('rel')] == 'land') {
		gmarkers[$(this).attr('rel')].setImage(land_icon_img);
	} else {
		gmarkers[$(this).attr('rel')].setImage(default_icon_img);
	}

	$(this).css('background-color', '#FFF');
}



function plotData() {
	beforeWorks();

	var data = makeData();

	$.ajax({
		type: "POST",
		url: base_url + "rent/api/",
		data: data,
		success: function(json){
			gmarkers.length=0;
			htmls.length=0;
			types.length=0;
			cnt=0;
			var data = eval("("+json+")");

			if(data.estates.length > 0) {
				$(".cnt").text(data.estates.length);
				for(var i=0;i<data.estates.length;i++) {
					var estate = data.estates[i];
					var marker = createMarker(new GLatLng(estate.lat, estate.lng), estate);
					map.addOverlay(marker);
				}
			} else {
				$(".cnt").text('0');
			}

			getShowingData();
			afterWorks();
		},
		error:function(json){
			alert('エラーが発生しました。');
		}
	});
}


// クエリ作成
function makeData() {
	var data = getKukei();

	$("#search_module input:checked").each(function(){
		data+="&"+$(this).attr('name')+"="+$(this).attr('value');
	});

	data+="&p_min="+$("select#p_min option:selected").val();
	data+="&p_max="+$("select#p_max option:selected").val();

//	data+="&senyu_min_m="+$("select#senyu_min_m option:selected").val();
//	data+="&senyu_max_m="+$("select#senyu_max_m option:selected").val();

//	data+="&age="+$("#age select 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 beforeWorks() {
	map.clearOverlays();
	$("#loading").toggle();
	$("#map").css("opacity", "0.5");
}


function afterWorks() {
	addAsayamaIcon();
	$("#loading").toggle();
	$("#map").css("opacity", "1.0");
}


// アイコン画像初期化
function clearIconImages() {
	for(var i=0; i<gmarkers.length; i++) {
		if(types[i] == 'mansion') {
			gmarkers[i].setImage(mansion_icon_img);
		} else if(types[i] == 'kashiya') {
			gmarkers[i].setImage(kashiya_icon_img);
		} else if(types[i] == 'office') {
			gmarkers[i].setImage(office_icon_img);
		} else if(types[i] == 'shop') {
			gmarkers[i].setImage(shop_icon_img);
		} else if(types[i] == 'soko') {
			gmarkers[i].setImage(soko_icon_img);
		} else if(types[i] == 'parking') {
			gmarkers[i].setImage(parking_icon_img);
		} else if(types[i] == 'land') {
			gmarkers[i].setImage(land_icon_img);
		} else {
			gmarkers[i].setImage(default_icon_img);
		}
	}
	
	smarker.setImage(asayama_default_icon_img);
}


function addAsayamaIcon() {
	var marker = createShopMarker(new GLatLng(default_lat, default_lng));
	map.addOverlay(marker);

	return;
}


function createMarker(point, estate) {
	var type = estate.type;
//	if(type == "mansion") {
//		var icon = new GIcon(mansionIcon);
//	} else if(type == "kashiya") {
//		var icon = new GIcon(kashiyaIcon);
//	} else if(type == "office") {
//		var icon = new GIcon(officeIcon);
//	} else if(type == "shop") {
//		var icon = new GIcon(shopIcon);
//	} else {
//		var icon = new GIcon(baseIcon);
//	}

	if(type == "mansion") {
		var icon = mansionIcon;
	} else if(type == "kashiya") {
		var icon = kashiyaIcon;
	} else if(type == "office") {
		var icon = officeIcon;
	} else if(type == "shop") {
		var icon = shopIcon;
	} else if(type == "soko") {
		var icon = sokoIcon;
	} else if(type == "parking") {
		var icon = parkingIcon;
	} else if(type == "land") {
		var icon = landIcon;
	} else {
		var icon = baseIcon;
	}

	var marker = new GMarker(point, {icon: icon});
	var pos = cnt;
	var html = '<div id="icon_'+pos+'" class="hdl" rel="'+pos+'">'+estate.html+'</div>';

	gmarkers[cnt] = marker;
	htmls[cnt] = html;
	types[cnt] = type;


	GEvent.addListener(marker, "mouseover", function() {
		if(!is_lock) {
			$("#icon_"+pos).css('background-color', '#DFD');
			if(types[pos] == "mansion") {
				gmarkers[pos].setImage(selected_mansion_icon_img);
			} else if(types[pos] == "kashiya") {
				gmarkers[pos].setImage(selected_kashiya_icon_img);
			} else if(types[pos] == "office") {
				gmarkers[pos].setImage(selected_office_icon_img);
			} else if(types[pos] == "shop") {
				gmarkers[pos].setImage(selected_shop_icon_img);
			} else if(types[pos] == "soko") {
				gmarkers[pos].setImage(selected_soko_icon_img);
			} else if(types[pos] == "parking") {
				gmarkers[pos].setImage(selected_parking_icon_img);
			} else if(types[pos] == "land") {
				gmarkers[pos].setImage(selected_land_icon_img);
			} else {
				gmarkers[pos].setImage(selected_icon_img);
			}

//			if(types[pos] == 'mansion') {
//				gmarkers[pos].setImage(selected_mansion_icon_img);
//			} else if(type == 'land') {
//				gmarkers[pos].setImage(selected_land_icon_img);
//			} else {
//				gmarkers[pos].setImage(selected_icon_img);
//			}
		}
	});

	GEvent.addListener(marker, "mouseout", function() {
		if(!is_lock) {
			$("#icon_"+pos).css('background-color', '#FFF');
			if(types[pos] == "mansion") {
				gmarkers[pos].setImage(mansion_icon_img);
			} else if(types[pos] == "kashiya") {
				gmarkers[pos].setImage(kashiya_icon_img);
			} else if(types[pos] == "office") {
				gmarkers[pos].setImage(office_icon_img);
			} else if(types[pos] == "shop") {
				gmarkers[pos].setImage(shop_icon_img);
			} else if(types[pos] == "soko") {
				gmarkers[pos].setImage(soko_icon_img);
			} else if(types[pos] == "parking") {
				gmarkers[pos].setImage(parking_icon_img);
			} else if(types[pos] == "land") {
				gmarkers[pos].setImage(land_icon_img);
			} else {
				gmarkers[pos].setImage(default_icon_img);
			}

//			if(types[pos] == 'mansion') {
//				gmarkers[pos].setImage(mansion_icon_img);
//			} else if(types[pos] == 'land') {
//				gmarkers[pos].setImage(land_icon_img);
//			} else {
//				gmarkers[pos].setImage(default_icon_img);
//			}
		}
	});



	GEvent.addListener(marker, "click", function() {
		clearIconImages();
		if(type == "mansion") {
			marker.setImage(selected_mansion_icon_img);
		} else if(type == "kashiya") {
			marker.setImage(selected_kashiya_icon_img);
		} else if(type == "office") {
			marker.setImage(selected_office_icon_img);
		} else if(type == "shop") {
			marker.setImage(selected_shop_icon_img);
		} else if(type == "soko") {
			marker.setImage(selected_soko_icon_img);
		} else if(type == "parking") {
			marker.setImage(selected_parking_icon_img);
		} else if(type == "land") {
			marker.setImage(selected_land_icon_img);
		} else {
			marker.setImage(selected_icon_img);
		}
		setInfoArea(html, true);

		is_lock = true;
	});

	cnt++;

	return marker;
}


// 物件情報表示
function setInfoArea(html, type) {
	if(type) {
		var ttl = "物件情報";
	} else {
		var ttl = "朝山不動産";
	}

	$("#info_area").html('<div id="only"><div class="info_ttl">物件情報</div>'+html+'</div>');

	$("#info_area").css('width', '280px');
	$("#toggle_hdl").css('right', '280px');
	$("#toggle_hdl").text('→');
	$("#map").css('width', '620px');

	$("#toggle_hdl").attr('class', 'toggle_close');
	toggle_flg = true;
	map.checkResize();
}


// お店のアイコン追加
function createShopMarker(point) {
//	var icon = new GIcon(asayamaIcon);
	var icon = asayamaIcon;

	var marker = new GMarker(point, icon);
	var html = getCompanyInfo();
	GEvent.addListener(marker, "click", function() {
		clearIconImages();
		marker.setImage(asayama_selected_icon_img);
//		map.openInfoWindowHtml(marker.getLatLng(), '<strong>朝山不動産</strong>');
		setInfoArea(html, false);
	});

	smarker = marker;

	return marker;
}



// 条件切り替え
$(function(){
//	$("#search_module").prepend('<div><span id="search_module_hdl">切り替え</span></div>');

//	$("#search_module_hdl").click(function() {
//		$(".module").toggle();
//		updateCondition();
//	});

//	$("#module_in_hdl").click(function() {
//		$(".module").toggle();
//		updateCondition();
//	});

//	$("#search_btn").click(function() {
//		if(init_flg == false) {
//			$("#map_area").show();
//			initialize();
//			init_flg = true;
//		}

//		$(".module").toggle();
//		plotData();
//		updateCondition();
//	});


	init_flg = true;
	$("#map_area").show();
	initialize();

	// 絞込み
	$("#search_module input:checkbox").click(function(){
		plotData();
	});

	$("#search_module select").change(function(){
		plotData();
	});



	$("#zoom_hdl").click(function(){
		map.zoomIn();
	});

	$("#wide_hdl").click(function(){
		map.zoomOut();
	});

	$("#home_hdl").click(function(){
		map.returnToSavedPosition();
	});


	// サイズ変更
	$("#toggle_hdl").click(function(){
		if(toggle_flg) {
			$("#info_area").css('width', '0');
			$("#toggle_hdl").css('right', '0');
			$("#toggle_hdl").text('←');
			$("#map").css('width', '910px');
			$("#toggle_hdl").attr('class', 'toggle_open');
		} else {
			$("#info_area").css('width', '280px');
			$("#toggle_hdl").css('right', '280px');
			$("#toggle_hdl").text('→');
			$("#map").css('width', '620px');
			$("#toggle_hdl").attr('class', 'toggle_close');
		}
		toggle_flg = !toggle_flg;
		map.checkResize();
		getShowingData();
	});



//	alert(screen.width);
});

function updateCondition()
{
	var html = "";
	var arr = [];
	var html_arr = [];
	var text = "";

	// 種別
	arr = [];
	$("#search_module_form #type input:checked").each(function(){
		arr.push($(this).attr('title'));
	});
	if(arr.length != 0) {
		html_arr.push('<div class="area"><strong>種別</strong>:'+arr.join(',')+"</div>");
	}

	// 価格
	text = $("#search_module_form #p_min :selected").text()+"～"+$("#search_module_form #p_max :selected").text();
	html_arr.push('<div class="area"><strong>価格</strong>:'+text+"</div>");

	// 地区
	arr = [];
	$("#search_module_form #area input:checked").each(function(){
		arr.push($(this).attr('title'));
	});
	
	if(arr.length != 0) {
		html_arr.push('<div class="area"><strong>地区</strong>:'+arr.join(',')+"</div>");
	}

	// 専有面積（m2）
	text = $("#search_module_form #senyu_min_m :selected").text()+"～"+$("#search_module_form #senyu_max_m :selected").text();
	html_arr.push('<div class="area"><strong>建物面積(&#13217;)</strong>:'+text+"</div>");

	// 間取り
	arr = [];
	$("#search_module_form #layout input:checked").each(function(){
		arr.push($(this).attr('title'));
	});
	
	if(arr.length != 0) {
		html_arr.push('<div class="area"><strong>間取り</strong>:'+arr.join(',')+"</div>");
	}

	// 築年数
	text = $("#search_module_form #age :selected").text();
	if($("#search_module_form #age #exc_new:checked").length == 1) {
		text += "(新築除く)";
	}
	html_arr.push('<div class="area"><strong>築年数</strong>:'+text+"</div>");

	// 画像
	arr = [];
	$("#search_module_form #image input:checked").each(function(){
		arr.push($(this).attr('title'));
	});
	
	if(arr.length != 0) {
		html_arr.push('<div class="area"><strong>画像</strong>:'+arr.join(',')+"</div>");
	}

	// こだわり条件
	arr = [];
	$("#search_module_form #kodawari input:checked").each(function(){
		arr.push($(this).attr('title'));
	});
	
	if(arr.length != 0) {
		html_arr.push('<div class="area"><strong>こだわり条件</strong>:'+arr.join(',')+"</div>");
	}

	// フリーワード
	if($("#q").val().length > 0) {
		html_arr.push('<div class="area"><strong>フリーワード</strong>:'+htmlspecialchars($("#q").val())+"</div>");
	}

	// 物件情報更新日
	text = $("#search_module_form #regist :checked").attr('title');
	html_arr.push('<div class="area"><strong>物件情報更新日</strong>:'+text+"</div>");



	if(html_arr.length == 0) {
		$("#search_condition_txt").html('<strong>検索条件指定なし</strong>');
	} else {
		$("#search_condition_txt").html(html_arr.join(''));
	}


	return;
}


function htmlspecialchars(ch) {
	ch = ch.replace(/&/g,"&amp;") ;
	ch = ch.replace(/"/g,"&quot;") ;
	ch = ch.replace(/'/g,"&#039;") ;
	ch = ch.replace(/</g,"&lt;") ;
	ch = ch.replace(/>/g,"&gt;") ;

	return ch ;
}

function getCompanyInfo() {
	return '<div>〒862-0950<br />熊本市水前寺6丁目5番23号<br />朝山不動産ビル2F<table><tr><th>TEL</th><td>0120-27-0021</td></tr><tr><th>営業時間</th><td>9:00～18:00</td></tr><tr><th>休業日</th><td>水曜日</td></tr></table></div>';

}
