var map;
var gmarkers = [];
var htmls = [];
var types = [];
var favorites = [];
var cnts = [];
var id2obj = [];

var cnt = 0;
var is_map = false;
var is_lock = false;
var is_new_process = false;

var type_slug;

var default_lat = 32.798814;
var default_lng = 130.717014;
var default_zoom = 12;

var objects;

var sleep_cnt = 0;
var is_realtime = true;

var ttl_suffix = ' | コスギ不動産 売買';

var base_url = "/";
var mansion_icon_img = base_url + "static/img/mansion.gif";
var selected_mansion_icon_img = base_url + "static/img/mansion_ov.gif";
var mansionIcon = new google.maps.Icon();
mansionIcon.iconSize = new google.maps.Size(54, 67);
mansionIcon.iconAnchor = new google.maps.Point(27, 67);
mansionIcon.image = mansion_icon_img;

var kodate_icon_img = base_url + "static/img/kodate.gif";
var selected_kodate_icon_img = base_url + "static/img/kodate_ov.gif";
var kodateIcon = new google.maps.Icon();
kodateIcon.iconSize = new google.maps.Size(54, 67);
kodateIcon.iconAnchor = new google.maps.Point(27, 67);
kodateIcon.image = kodate_icon_img;

var land_icon_img = base_url + "static/img/land.gif";
var selected_land_icon_img = base_url + "static/img/land_ov.gif";
var landIcon = new google.maps.Icon();
landIcon.iconSize = new google.maps.Size(54, 67);
landIcon.iconAnchor = new google.maps.Point(27, 67);
landIcon.image = land_icon_img;

var invest_icon_img = base_url + "static/img/invest.gif";
var selected_invest_icon_img = base_url + "static/img/invest_ov.gif";
var investIcon = new google.maps.Icon();
investIcon.iconSize = new google.maps.Size(54, 67);
investIcon.iconAnchor = new google.maps.Point(27, 67);
investIcon.image = invest_icon_img;

var invest1r_icon_img = base_url + "static/img/invest1r.gif";
var selected_invest1r_icon_img = base_url + "static/img/invest1r_ov.gif";
var invest1rIcon = new google.maps.Icon();
invest1rIcon.iconSize = new google.maps.Size(54, 67);
invest1rIcon.iconAnchor = new google.maps.Point(27, 67);
invest1rIcon.image = invest1r_icon_img;

var business_icon_img = base_url + "static/img/business.gif";
var selected_business_icon_img = base_url + "static/img/business_ov.gif";
var businessIcon = new google.maps.Icon();
businessIcon.iconSize = new google.maps.Size(54, 67);
businessIcon.iconAnchor = new google.maps.Point(27, 67);
businessIcon.image = business_icon_img;

var show_map = false;	// 地図表示したかどうか

function initialize() {
	if(google.maps.BrowserIsCompatible()) {
		map = new google.maps.Map2(document.getElementById("map"));
		map.addControl(new google.maps.LargeMapControl());
		map.addControl(new google.maps.ScaleControl());

		map.setCenter(new google.maps.LatLng(default_lat, default_lng), default_zoom);

		// 物件を地図上にプロット
		objects = eval("("+json+")");
		for(var i=0;i<objects.length;i++) {
			var html = "";
			html = getHtml(objects[i], cnt);
			var marker = createMarker(new google.maps.LatLng(objects[i].lat, objects[i].lng), html, objects[i]);
			map.addOverlay(marker);
		}

		// イベントの追加
		google.maps.Event.addListener(map, 'moveend', function() {
			getLocation();
			getShowingData();

			is_lock = false;	// ロックの解除
		});

		getLocation();
	}
}


/**
 * 物件情報HTMLを生成
 *
**/
function getHtml(obj, pos) {
	if(obj.cnt == 1) {
		html = getSingleHtml(obj.arr[0], pos);
	} else {
		html = getMultiHtml(obj, pos);
	}

	return html;
}

/**
 * (地図用)
 * 重複する物件がない場合
 *
**/
function getSingleHtml(obj, pos) {
	if(id2obj[obj.id] == undefined) {
		id2obj[obj.id] = pos;
	}

	if(!is_lock) {
		favorites[obj.id] = obj.is_favorite;
	}

	var html = '<div id="icon_'+id2obj[obj.id]+'" class="hdl box" rel="'+id2obj[obj.id]+'" title="'+obj.name+'"><h3 class="default_'+obj.type+'">'+obj.name+'</h3><div class="clearfix">';

	html += '<div class="f_left"><img src="'+obj.img+'" alt="'+obj.name+'" /></div><div class="f_right">';
	html += mapInfo(obj);

	if(favorites[obj.id]) {
		html += '<p><img src="/static/img/btn_is_favorite.png" alt="追加済み" /></p>';
	} else {
		html += '<p><a class="add_favorite" href="/favorite/add/'+obj.id+'" rel="'+obj.id+'"><img src="/static/img/btn_add_favorite.png" alt="お気に入りに追加" /></a></p>';
	}
	
	html += '</div></div></div>';

	return html;
}

/**
 * (地図用)
 * 重複する物件の場合
 *
**/
function getMultiHtml(obj, pos) {
	var num = 1;

	if(id2obj[obj.arr[0].id] == undefined) {
		id2obj[obj.arr[0].id] = pos;
	}

	var html = '<div id="icon_'+id2obj[obj.arr[0].id]+'" class="hdl box" rel="'+id2obj[obj.arr[0].id]+'" title="'+obj.arr[0].name+'"><h3 class="default_'+obj.arr[0].type+'">'+obj.arr[0].name+'('+obj.cnt+')</h3><div class="clearfix">';
	for( var index in obj.arr ){
		var part = obj.arr[index];

		if(id2obj[part.id] == undefined) {
			id2obj[part.id] = pos;
		}

		if(!is_lock) {
			favorites[part.id] = part.is_favorite;
		}


		if(num == 1) {
			html += '<div class="f_left"><img src="'+part.img+'" alt="'+part.name+'" /></div><div class="f_right">'
		} else {
			html += '<hr />';
		}

		html += mapInfo(part);

		if(favorites[part.id]) {
			html += '<p><img src="/static/img/btn_is_favorite.png" alt="追加済み" /></p>';
		} else {
			html += '<p><a class="add_favorite" href="/favorite/add/'+part.id+'" rel="'+part.id+'"><img src="/static/img/btn_add_favorite.png" alt="お気に入りに追加" /></a></p>';
		}


		
		num++;
	};
	html += '</div></div></div>';

	return html;
}



function mapInfo(obj) {
	var html = "";
	html += '<ul><li class="address"><a href="'+obj.target+'">'+obj.address+'</a></li><li class="price">'+number_format(obj.price)+'万円</li>';

	if(obj.type == 1) {
		html += '<li class="layout">'+obj.layout+'</li><li class="build_date">'+obj.j_completion_date+'</li><li class="age">築'+obj.age+'年</li>';
	} else if(obj.type == 2) {
		html += '<li class="layout">'+obj.layout+'</li><li class="land">'+obj.land+'㎡／'+obj.j_land+'坪</li><li class="build_date">'+obj.j_completion_date+'</li><li class="age">築'+obj.age+'年</li>';
	} else if(obj.type == 3) {
		html += '<li class="land">'+obj.land+'㎡／'+obj.j_land+'坪</li>';
		if(obj.tsubo_rate && obj.tsubo_rate != 0) {
			html += '<li class="tsubo">'+obj.tsubo_rate+'万円/坪</li>';
		}
	} else if(obj.type == 4) {
		html += '<li class="land">'+obj.land+'㎡／'+obj.j_land+'坪</li><li class="annual">'+obj.annual+'円</li><li class="yield">'+obj.yield+'％</li>';
	} else if(obj.type == 5) {
		html += '<li class="layout">'+obj.layout+'</li><li class="annual">'+obj.annual+'円</li><li class="yield">'+obj.yield+'％</li><li class="build_date">'+obj.j_completion_date+'</li><li class="age">築'+obj.age+'年</li>';
	} else if(obj.type == 6) {
		html += '<li class="land">'+obj.land+'㎡／'+obj.j_land+'坪</li>';
		if(obj.tsubo_rate && obj.tsubo_rate != 0) {
			html += '<li class="tsubo">'+obj.tsubo_rate+'万円/坪</li>';
		}
	}
	html += '</ul>';
	html += '<div style="margin-bottom:5px;">&raquo; <a href="'+obj.target+'">詳細へ</a></div>';

	return html;
}


/**
 * Geocoder
 *
**/
function getLocation() {
	var gcoder = new google.maps.ClientGeocoder();
	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] != undefined && result.Placemark[i].AddressDetails.Accuracy != 5 && result.Placemark[i].AddressDetails.Accuracy != 6) {
					str = result.Placemark[i].address;
					break;
				}
			}
			str = str.replace('日本, ', '');
			str = str.replace('日本', '');
			$("#address_name").text(str);
		} else {
			$("#address_name").text('');
		}
	});
}


/**
 * 表示中の地図内の物件を取得
 *
**/
function getShowingData() {
	// アイコンの初期化
	clearIconImages();

	// イベントの削除
	$(".hdl").unbind('mouseover', aOver);
	$(".hdl").unbind('mouseout', aOut);
	$(".hdl").unbind('click', aClick);
	$("a.add_favorite", "#map_result").unbind('click');

	// 表示矩形の取得
	var kukei = map.getBounds();
	var arr = [];
	var event = [];
	var showing_cnt = 0;
	for(var i=0; i<gmarkers.length; i++) {
		if(kukei.containsLatLng(gmarkers[i].getLatLng())) {
			arr.push(htmls[i]);
			event.push(i);
			showing_cnt += cnts[i];
		}
	}

	$("span#map_showing", "#result_info_map").text(showing_cnt);
	

	// 物件情報HTML作成
	if(arr.length != 0) {
		$("#map_result").html(arr.join(''));
	} else {
		$("#map_result").html('<p style="padding:10px;">表示中のエリアには、<br />この条件で表示できる物件がありません</p>');
	}

	// イベントの追加
	$(".hdl").bind('mouseover', aOver);
	$(".hdl").bind('mouseout', aOut);
	$(".hdl").bind('click', aClick);
	// お気に入り登録をクリックした場合
	$("a.add_favorite", "#map_result").click(function(){
		var target=$(this);
		$.ajax({
			type: "GET",
			url: "/favorite/add_js/"+$(this).attr('rel'),
			success: function(msg){
				if(msg == "200") {
					chgFavoriteIcon(target.attr('rel'));
				} else {
					alert('お気に入りへの追加に失敗しました');
				}
			}
		});
		return false;
	});
}


/**
 * マウスオーバー時の処理
 *
**/
function aOver() {
	if(types[$(this).attr('rel')] == 1) {
		gmarkers[$(this).attr('rel')].setImage(selected_mansion_icon_img);
	} else if(types[$(this).attr('rel')] == 2) {
		gmarkers[$(this).attr('rel')].setImage(selected_kodate_icon_img);
	} else if(types[$(this).attr('rel')] == 3) {
		gmarkers[$(this).attr('rel')].setImage(selected_land_icon_img);
	} else if(types[$(this).attr('rel')] == 4) {
		gmarkers[$(this).attr('rel')].setImage(selected_invest_icon_img);
	} else if(types[$(this).attr('rel')] == 5) {
		gmarkers[$(this).attr('rel')].setImage(selected_invest1r_icon_img);
	} else if(types[$(this).attr('rel')] == 6) {
		gmarkers[$(this).attr('rel')].setImage(selected_business_icon_img);
	} else {
		gmarkers[$(this).attr('rel')].setImage(selected_mansion_icon_img);
	}
	
	$(this).addClass('current');
}


/**
 * マウスアウト時の処理
 *
**/
function aOut() {
	if(types[$(this).attr('rel')] == 1) {
		gmarkers[$(this).attr('rel')].setImage(mansion_icon_img);
	} else if(types[$(this).attr('rel')] == 2) {
		gmarkers[$(this).attr('rel')].setImage(kodate_icon_img);
	} else if(types[$(this).attr('rel')] == 3) {
		gmarkers[$(this).attr('rel')].setImage(land_icon_img);
	} else if(types[$(this).attr('rel')] == 4) {
		gmarkers[$(this).attr('rel')].setImage(invest_icon_img);
	} else if(types[$(this).attr('rel')] == 5) {
		gmarkers[$(this).attr('rel')].setImage(invest1r_icon_img);
	} else if(types[$(this).attr('rel')] == 6) {
		gmarkers[$(this).attr('rel')].setImage(business_icon_img);
	} else {
		gmarkers[$(this).attr('rel')].setImage(mansion_icon_img);
	}

	$(this).removeClass('current');
}


/**
 * マウスクリック時の処理
 *
**/
function aClick() {
	clearIconImages();
	if(types[$(this).attr('rel')] == 1) {
		gmarkers[$(this).attr('rel')].setImage(mansion_icon_img);
	} else if(types[$(this).attr('rel')] == 2) {
		gmarkers[$(this).attr('rel')].setImage(kodate_icon_img);
	} else if(types[$(this).attr('rel')] == 3) {
		gmarkers[$(this).attr('rel')].setImage(land_icon_img);
	} else if(types[$(this).attr('rel')] == 4) {
		gmarkers[$(this).attr('rel')].setImage(invest_icon_img);
	} else if(types[$(this).attr('rel')] == 5) {
		gmarkers[$(this).attr('rel')].setImage(invest1r_icon_img);
	} else if(types[$(this).attr('rel')] == 6) {
		gmarkers[$(this).attr('rel')].setImage(business_icon_img);
	} else {
		gmarkers[$(this).attr('rel')].setImage(mansion_icon_img);
	}

	$("#icon_"+$(this).attr('rel')).addClass('current');
	is_lock = true;
}


/**
 * アイコン画像初期化
 *
**/
function clearIconImages() {
	for(var i=0; i<gmarkers.length; i++) {
		if(types[i] == 1) {
			gmarkers[i].setImage(mansion_icon_img);
		} else if(types[i] == 2) {
			gmarkers[i].setImage(kodate_icon_img);
		} else if(types[i] == 3) {
			gmarkers[i].setImage(land_icon_img);
		} else if(types[i] == 4) {
			gmarkers[i].setImage(invest_icon_img);
		} else if(types[i] == 5) {
			gmarkers[i].setImage(invest1r_icon_img);
		} else if(types[i] == 6) {
			gmarkers[i].setImage(business_icon_img);
		} else {
			gmarkers[i].setImage(mansion_icon_img);
		}

	}
}



/**
 * マーカーを追加
 *
**/
function createMarker(point, html, obj) {
	if(obj.arr[0].type == 1) {
		var marker = new google.maps.Marker(point, {icon: mansionIcon});
	} else if(obj.arr[0].type == 2) {
		var marker = new google.maps.Marker(point, {icon: kodateIcon});
	} else if(obj.arr[0].type == 3) {
		var marker = new google.maps.Marker(point, {icon: landIcon});
	} else if(obj.arr[0].type == 4) {
		var marker = new google.maps.Marker(point, {icon: investIcon});
	} else if(obj.arr[0].type == 5) {
		var marker = new google.maps.Marker(point, {icon: invest1rIcon});
	} else if(obj.arr[0].type == 6) {
		var marker = new google.maps.Marker(point, {icon: businessIcon});
	} else {
		var marker = new google.maps.Marker(point, {icon: mansionIcon});
	}

	var id = obj.arr[0].id;
	var pos = cnt;
	var type = obj.arr[0].type;

	gmarkers[cnt] = marker;
	htmls[cnt] = html;
	cnts[cnt] = obj.cnt;
	types[cnt] = type;

	google.maps.Event.addListener(marker, "mouseover", function(e) {
		if(!is_lock) {
			$("#icon_"+pos).css('background-color', '#FFE4B5');
			if(types[pos] == 1) {
				gmarkers[pos].setImage(selected_mansion_icon_img);
			} else if(types[pos] == 2) {
				gmarkers[pos].setImage(selected_kodate_icon_img);
			} else if(types[pos] == 3) {
				gmarkers[pos].setImage(selected_land_icon_img);
			} else if(types[pos] == 4) {
				gmarkers[pos].setImage(selected_invest_icon_img);
			} else if(types[pos] == 5) {
				gmarkers[pos].setImage(selected_invest1r_icon_img);
			} else if(types[pos] == 6) {
				gmarkers[pos].setImage(selected_business_icon_img);
			} else {
				gmarkers[pos].setImage(selected_mansion_icon_img);
			}
		}
	});

	google.maps.Event.addListener(marker, "mouseout", function() {
		if(!is_lock) {
			$("#icon_"+pos).css('background-color', '#FFF');
			if(types[pos] == 1) {
				gmarkers[pos].setImage(mansion_icon_img);
			} else if(types[pos] == 2) {
				gmarkers[pos].setImage(kodate_icon_img);
			} else if(types[pos] == 3) {
				gmarkers[pos].setImage(land_icon_img);
			} else if(types[pos] == 4) {
				gmarkers[pos].setImage(invest_icon_img);
			} else if(types[pos] == 5) {
				gmarkers[pos].setImage(invest1r_icon_img);
			} else if(types[pos] == 6) {
				gmarkers[pos].setImage(business_icon_img);
			} else {
				gmarkers[pos].setImage(mansion_icon_img);
			}
		}
	});


	google.maps.Event.addListener(marker, "click", function() {
		clearIconImages();
		if(type == 1) {
			marker.setImage(selected_mansion_icon_img);
		} else if(type == 2) {
			marker.setImage(selected_kodate_icon_img);
		} else if(type == 3) {
			marker.setImage(selected_land_icon_img);
		} else if(type == 4) {
			marker.setImage(selected_invest_icon_img);
		} else if(type == 5) {
			marker.setImage(selected_invest1r_icon_img);
		} else if(type == 6) {
			marker.setImage(selected_business_icon_img);
		} else {
			marker.setImage(selected_mansion_icon_img);
		}

		setInfoAreaHtml(pos);

		$("#icon_"+pos).addClass('current');
		is_lock = true;
	});

	cnt++;

	return marker;
}


/**
 * 物件情報表示
 * 該当物件のHTMLのみ表示する
**/
function setInfoAreaHtml(id) {
	$("#map_result").html('<div id="only">'+htmls[id]+'</div>');
}



function showLoading(){
	$(".loading").show();
//	$("#conditions").append('<div id="loading_mini" style="text-align:center;">Loading...</div>');

}

function hideLoading(){
	$(".loading").hide();
//	$("#loading_mini").remove();
}


// 検索条件変更時の処理
function plotData()
{
	if(is_realtime) {
		plotDataMain();
	}

//	sleep_cnt++;
//	window.setTimeout('plotDataCheck()', 500);
}

function plotDataCheck()
{
	sleep_cnt--;
	if(sleep_cnt <= 0) {
		sleep_cnt = 0;
		plotDataMain();
	}
}

function plotDataMain()
{
	var new_condition = $("#search_form").serialize();

	showLoading();

	$.ajax({
		type: "POST",
		url: "/api/search/",
		data: new_condition,
		dataType: "json",
		success: function(json){
			apiCallback(json);

			is_new_process = true;
			if(is_map) {
				$.history.load(key+'-mappage');
			} else {
				$.history.load(key+'-1');
			}
			is_new_process = false;

			hideLoading();
		}
	});

	return false;
}


/**
 * 検索条件変更時のcallback
 *
**/
function apiCallback(json)
{
	if(json.status != '200') {
		alert('リクエストが不正です');
		return;
	}
	type_slug = json.slug;
	key = json.key;

	if(type_slug == "mansion") {
		$(".search_land").hide();
		$("#form_name_layout").attr('style', '');
	} else {
		$(".search_land").show();
		if(type_slug == 'kodate') {
			$("#form_name_layout").attr('style', '');
		} else {
			$("#form_name_layout").hide();
		}
	}

	if(!isMSIE) {
		var ttl = ttl_suffix;
		switch(type_slug) {
			case 'mansion':
				ttl = '【マンション】熊本の不動産情報(中古マンション・中古住宅・土地)'+ttl;
				break;
			case 'kodate':
				ttl = '【一戸建て】熊本の不動産情報(中古マンション・中古住宅・土地)'+ttl;
				break;
			case 'land':
				ttl = '【土地】熊本の不動産情報(中古マンション・中古住宅・土地)'+ttl;
				break;
			case 'invest':
				ttl = '【1棟】熊本の不動産投資・収益物件'+ttl;
				break;
			case 'invest1r':
				ttl = '【1R】熊本の不動産投資・収益物件'+ttl;
				break;
			case 'business':
				ttl = '熊本の事業用不動産（建物・土地）'+ttl;
				break;
			default:
				ttl = '熊本の不動産情報'+ttl;
				break;
		}
		$('title').html(ttl);
	}

	var cond = json.cond;

	if(cond.pmin == undefined) {
		$("#select_pmin").val(0);
	} else {
		$("#select_pmin").val(cond.pmin);
	}
	if(cond.pmax == undefined) {
		$("#select_pmax").val(0);
	} else {
		$("#select_pmax").val(cond.pmax);
	}

	if(cond.land_min == undefined) {
		$("#select_land_min").val(0);
	} else {
		$("#select_land_min").val(cond.land_min);
	}
	if(cond.land_max == undefined) {
		$("#select_land_max").val(0);
	} else {
		$("#select_land_max").val(cond.land_max);
	}

	if(cond.j_land_min == undefined) {
		$("#select_j_land_min").val(0);
	} else {
		$("#select_j_land_min").val(cond.j_land_min);
	}
	if(cond.j_land_max == undefined) {
		$("#select_j_land_max").val(0);
	} else {
		$("#select_j_land_max").val(cond.j_land_max);
	}

	$("#search_form :radio").attr('checked', false);
	if(cond.type == undefined) {
		$("#search_form #type1").attr('checked', true);
	} else {
		$("#search_form #type"+cond.type).attr('checked', true);
	}

	$("#search_form #form_name_area :checkbox").attr('checked', false);
	if(cond.area != undefined) {
		for(var index in cond.area) {
			$("#search_form #area"+cond.area[index]).attr('checked', true);
		}
	}

	if(cond.lmin == undefined) {
		$("#select_lmin").val(0);
	} else {
		$("#select_lmin").val(cond.lmin);
	}
	if(cond.lmax == undefined) {
		$("#select_lmax").val(0);
	} else {
		$("#select_lmax").val(cond.lmax);
	}

	if(cond.sort != undefined) {
		$("#form_sort").val(cond.sort);
	} else {
		$("#form_sort").val(0);
	}


	// リストページ描画
	$("#list_area").html(json.html);
	initList();

	// 初期化
	map.clearOverlays();
	gmarkers.length = 0;
	htmls.length = 0;
	types.length = 0;
	favorites.length = 0;
	cnts.length = 0;
	id2obj.length = 0;
	cnt = 0;
	objects.length = 0;

	$("#total_objects").html(json.total);

	objects = json.map;

	for(var i=0;i<objects.length;i++) {
		var html = "";
		html = getHtml(objects[i], cnt);
		var marker = createMarker(new google.maps.LatLng(objects[i].lat, objects[i].lng), html, objects[i]);
		map.addOverlay(marker);
	}

	if(objects.length) {
		initZoom();
		getShowingData();
	} else {
		$("#map_showing").html(0);
		setNotFoundMessage();
	}

	// 高さ調整
	flatHeightTwice();

	return true;
}




function setNotFoundMessage()
{
	$("#map_result").html('<p style="padding:10px;">ご指定の条件では、物件が見つかりませんでした</p>');
	return true;
}




/**
 * 処理
 *
**/
$(function(){
	// 地図へのリンク表示
	$("ul", "#list_tabs").append('<li id="chg_map"><span class="chg_map">地図表示</span></li>');
	$("#btn_search").hide();
	$("#tbl_search_submit").show();

	$(".search_notice").hide();

	if(type_slug == "mansion") {
		$(".search_land").hide();
	}

	// 絞込み
	$("#conditions #form_name_area input:checkbox").click(function(){
		plotData();
	});
	$("#conditions #form_name_layout input:checkbox").click(function(){
		plotData();
	});
	$("#conditions input:radio").click(function(){
		plotData();
	});
	$("#conditions select").change(function(){
		plotData();
	});

	if(typeof(is_keyword) == "undefined") {
		$("#search_form").submit(function(){
			plotDataMain();
			return false;
		});
	}

	$("#what_realtime").mouseover(function(){
		$("#realtime_note").css('display', 'inline');
	});

	$("#what_realtime").mouseout(function(){
		$("#realtime_note").css('display', 'none');
	});

	$("#chk_realtime").click(function(){
		is_realtime = $(this).attr('checked');
	});

	// Loading画像設置
	$("body").append('<div id="loading" class="loading"><img src="/static/img/loading.gif" /></div>');
	$("body").append('<div id="overlay" class="loading"></div>');



	// 一覧表示をクリックした場合
	$(".chg_list").click(function(){
		$("#list_area").show();
		$("#map_area").hide();
		$("#chg_list").addClass('current');
		$("#chg_map").removeClass('current');

		is_map = false;

		is_new_process = true;
		var page = $("#list_tabs").attr('rel');
		if(isNaN(page)) {
			page = 1;
		}

		if(typeof(is_keyword) == "undefined") {
			$.history.load(key+'-'+page);
		}

		// 高さ調整
		flatHeightTwice();
	});


	// 地図表示をクリックした場合
	$(".chg_map").click(function(){
		$("#list_area").hide();
		$("#map_area").show();
		$("#chg_list").removeClass('current');
		$("#chg_map").addClass('current');

		is_map = true;

		if(!show_map) {
			map.checkResize();
			initZoom();
			show_map=true;
		}

		if(typeof(is_keyword) == "undefined") {
			is_new_process = true;
			$.history.load(key+'-mappage');
		}
	});


	// 一覧エリアにjsイベント付与
	initList();

	// 一覧エリアの高さ調整
	flatHeightTwice();

	if(typeof(is_keyword) != "undefined") {
		$("a", "#page_navi .f_left").unbind('click');
		$("#btn_search").show();
	}
});


/**
 * ズームレベルの調整
 *
**/
function initZoom(){
	var gb;
	var first = 1;

	// 表示可能範囲指定(padding:40px 65px)
	var viewArea = new google.maps.Size(580, 360);

	if(gmarkers.length != 0) {
		for( var index in gmarkers ){
			var marker = gmarkers[index];
			if( first ){
				gb = new google.maps.LatLngBounds( marker.getPoint(), marker.getPoint() );
				first = 0;
			}else{
				var point = marker.getPoint();
				gb.extend( point );
			}
		}
//		map.setCenter( gb.getCenter(), map.getBoundsZoomLevel( gb ) );
		var maptype = map.getCurrentMapType();
		var new_zoom = maptype.getBoundsZoomLevel( gb, viewArea );
		map.setCenter( gb.getCenter(), new_zoom );
	}
}


/**
 * 戻るボタン対応
 *
**/
function pageload(hash) {
	if(is_new_process == false) {
		var page = 1;
		if($.browser.msie) {
			hash = encodeURIComponent(hash);
		}


		if (!hash){
			hash2search(start_key, 1);
			
			return false;
		}
		if (hash.indexOf("-") != -1){
			var arr = hash.split('-');
			var old_key = arr[0];
			if(arr[1] == "mappage"){
				hash2search(old_key, 1);
				$("#list_area").hide();
				$("#map_area").show();

				$("#chg_list").removeClass('current');
				$("#chg_map").addClass('current');

				is_map = true;

				if(!show_map) {
					map.checkResize();
					initZoom();
					show_map=true;
				}

				return false;
			} else {
				page = parseInt(arr[1]);
				hash2search(old_key, page);

				$("#chg_list").addClass('current');
				$("#chg_map").removeClass('current');

				return false;
			}
		} else {
			hash2search(hash, 1);

			return false;
		}
	}
	is_new_process = false;
}



/**
 * ハッシュキーを基にデータ取得
 *
**/
function hash2search(old_key, page)
{
	$("#map_area").hide();
	$("#list_area").show();

	showLoading();

	$.ajax({
		type: "GET",
		url: "/api/search_key/"+old_key+'/'+page,
		dataType: "json",
		success: function(json){
			apiCallback(json);

			hideLoading();
		}
	});
}




/**
 * 一覧エリアにjsイベント付与
 *
**/
function initList(){
	// ページ番号をクリックした場合
	$("a", ".pagination").click(function(){
		var target = $(this).attr('rel');
		getListHtml(target);
		return false;
	});

	// 並び替えをクリックした場合
	$("a", "#page_navi .f_right").click(function(){
		var sort = $(this).attr('rel');
		getListHtmlSort(sort);
		return false;
	});
	// 並び替えをクリックした場合
	$("a", "#page_navi_footer .f_right").click(function(){
		var sort = $(this).attr('rel');
		getListHtmlSort(sort);
		return false;
	});


	// お気に入り登録をクリックした場合
	$("a", ".add_favorite").click(function(){
		var target=$(this);
		$.ajax({
			type: "GET",
			url: "/favorite/add_js/"+$(this).attr('rel'),
			success: function(msg){
				if(msg == "200") {
					chgFavoriteIcon(target.attr('rel'));
				} else {
					alert('お気に入りへの追加に失敗しました');
				}
			}
		});
		return false;
	});

}

function chgFavoriteIcon(target){
	$("#list_fav_"+target).html('<img src="/static/img/btn_is_favorite.png" alt="お気に入り追加済み" />');
	favorites[target] = true;
	is_lock = true;
	htmls[id2obj[target]] = getHtml(objects[id2obj[target]]);
	is_lock = false;
	getShowingData();

	return;
}


/**
 * 物件情報詳細表示（一覧用）
 *
**/
function getListHtml(target){

	showLoading();

	$("#list_area").load(
					"/api/objList/"+key+'/'+target,
					null,
					function(){
						initList();
						flatHeightTwice();
						if(isNaN(target) === false && target > 1) {
							var page = target;
						} else {
							var page = 1;
						}

						$("#list_tabs").attr('rel', page);

						is_new_process = true;
						$.history.load(key+'-'+page);

						hideLoading();
						initScroll();
					});
	return false;
}


/**
 * 物件情報詳細表示　並び替え（一覧用）
 *
**/
function getListHtmlSort(sort){

	showLoading();

	$("#list_area").load(
					"/api/objListSort/"+key+'/'+sort,
					null,
					function(){
						initList();
						flatHeightTwice();
						var page = 1;

						key = $("#list").attr('class');

						$("#list_tabs").attr('rel', page);

						$("#form_sort").val(sort);

						is_new_process = true;
						$.history.load(key+'-'+page);

						hideLoading();
						initScroll();
					});
	return false;
}

function initScroll() {
	var speed = 500;
	var position = $("#list_tabs").offset().top;
	$($.browser.safari ? 'body' : 'html').animate({scrollTop:position}, speed, 'swing');
	return false;
}

/**
 * x高さ揃え（間隔を開けて2回）
 * 高さ揃え（画像の読み込みが終わってから）
 *
**/
function flatHeightTwice() {
//	flatHeightParent();
	flatHeightEvent();
	var img_cnt = $("#list_area img").length;
	$("#list_area img").load(function(){
		img_cnt--;
		if(img_cnt == 0) {
//			flatHeightParent();
			flatHeightEvent();
		}
	});
//	var timerID = setTimeout("flatHeightParent()", 500);
}

/**
 * php の number_format と同じ動作をする
 *
**/
function number_format(num){
	return (num.toString().replace( /([0-9]+?)(?=(?:[0-9]{3})+$)/g , '$1,' ));
}


