//---------------市町村データ----------------
var cityp = new Array;
cityp[0] = new Array('大分市','大分市',33.23422,131.607055277778);
cityp[1] = new Array('別府市','別府市','33.2796062539487','131.500843763351');
cityp[2] = new Array('中津市','中津市','33.5993394982607','131.19072675705');
cityp[3] = new Array('日田市','日田市','33.3169107165613','130.938395261765');
cityp[4] = new Array('佐伯市','佐伯市','32.9724338324588','131.902348995209');
cityp[5] = new Array('臼杵市','臼杵市','33.1218099797353','131.804137229919');
cityp[6] = new Array('津久見市','津久見市','33.0730770020297','131.863725185394');
cityp[7] = new Array('竹田市','竹田市','32.9707326706705','131.390272378922');
cityp[8] = new Array('豊後高田市','豊後高田市','33.5572569307528','131.444613933563');
cityp[9] = new Array('杵築市','杵築市','33.4168993030029','131.615953445435');
cityp[10] = new Array('宇佐市','宇佐市','33.5319152648809','131.349492073059');
cityp[11] = new Array('豊後大野市','豊後大野市','32.9779961327433','131.585140228271');
cityp[12] = new Array('由布市','由布市','33.2626794758702','131.355156898499');
cityp[13] = new Array('国東市','国東市','33.5653568271017','131.731653213501');
cityp[14] = new Array('姫島村','東国東郡姫島村','33.724196887712495','131.64556503295898');
cityp[15] = new Array('日出町','速見郡日出町','33.3694775173845','131.532354354858');
cityp[16] = new Array('九重町','玖珠郡九重町','33.2284025','131.188773333333');
cityp[17] = new Array('玖珠町','玖珠郡玖珠町','33.2829696902215','131.151566505432');

//-----------------共通変数------------------
var map;                         //---地図オブジェクト
var fixflag = false;             //---false:PopUpなし  true:PopUp中
var mvflag  = 0;                 //---0のときのみ通常移動扱い（PopUp移動後のページ切り替え時中央に戻す際は一時的に1とする）
var nowarea = new Array;         //---地図範囲情報  0:中心緯度  1:中心経度  2:最小緯度  3:最大緯度  4:最小経度  5:最大緯度  6:縮尺
var keepflag = 1;                //---センターマークを 0:保持しない 1:保持する
var keepmarker;                  //---センターマーク

var pcenlist  = new Array;       //---PCデータ内容
var pcallnum = 0;                //---pc全数
var pcallpage = 0;               //---pc全ページ数
var pcpage = 0;                  //---pc現在表示ページ

var gGeo;                        //---住所地番検索用オブジェクト

//----------店舗名文字列置き換え用-----------
var rcode1  = new RegExp("&amp;","g");
var rcode2  = new RegExp("&#39;","g");

//-------------アイコンの基本設定------------
var baseIcon = new GIcon();
baseIcon.image = "/map/icon/icon_g.png";
baseIcon.shadow = "/map/icon/shadow.png";
baseIcon.iconSize = new GSize(20, 34);
baseIcon.shadowSize = new GSize(37, 34);
baseIcon.iconAnchor = new GPoint(10,34);
baseIcon.infoWindowAnchor = new GPoint(10, 2);
baseIcon.infoShadowAnchor = new GPoint(18,25);
//-------------------------------------------
var center_opts = new Object();
center_opts.icon = baseIcon;

//----------アルファベットマーカー-----------
var iconimg = new Array('/map/icon/iconA.png','/map/icon/iconB.png','/map/icon/iconC.png','/map/icon/iconD.png','/map/icon/iconE.png','/map/icon/iconF.png','/map/icon/iconG.png','/map/icon/iconH.png','/map/icon/iconI.png','/map/icon/iconJ.png','/map/icon/iconK.png','/map/icon/iconL.png','/map/icon/iconM.png','/map/icon/iconN.png','/map/icon/iconO.png','/map/icon/iconP.png','/map/icon/iconQ.png','/map/icon/iconR.png','/map/icon/iconS.png','/map/icon/iconT.png');
var iconstr = new Array('A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T');

//-----------------起動時動作----------------
$(function(){

	//-------------地図の定義----------------
	map = new GMap2(document.getElementById("map"));

	//--------コントロールの設置-------------
	map.addControl(new GLargeMapControl());
	map.addControl(new GScaleControl()); 
	map.addControl(new GOverviewMapControl());

	//-------センターを決めて地図を描画------
	var cido = parseFloat(cityp[0][2]);
	var ckdo = parseFloat(cityp[0][3]);
	//---------------------------------------
	var keeppoint  = new GLatLng(cido,ckdo);
	keepmarker = new GMarker(keeppoint, center_opts);
	//---------------------------------------
	map.setCenter(keeppoint,14);
	
	//------------PopUpの有無フラグ----------
	GEvent.addListener(map, "infowindowopen",  function() { fixflag = true; });    //---PopUp中
	GEvent.addListener(map, "infowindowclose", function() { fixflag = false; });   //---PopUpなし

	// ドラッグ終了時にマーカーを再配置（PopUpなし&通常移動時）
	GEvent.addListener(map, "moveend", function() {
		if(!(fixflag)){ if (mvflag == 0) { reqPcList(); } }
	});

	// ズームレベル変更時にマーカーを再配置（PopUpなし&通常ズーム時）
	GEvent.addListener(map, "zoom", function() {
		if(!(fixflag)){ if (mvflag == 0) { reqPcList(); } }
	});

	//------------地名検索用クラス-----------
	gGeo = new GClientGeocoder();

	//------------初期地図検索---------------
	reqPcList();
	
	//------------市町村リンク---------------
	var cityhtml = '';
	for (i=0; i<18; i++) {
		cityhtml += '<a href="javascript:setCityPoint('+i+')">'+cityp[i][0]+'</a>';
	}
	cityhtml += '<br clear="all" />';
	$("#cityarea").html(cityhtml);
	
	//--------市町村選択リストを閉じる-------
	$("#cityclose").click(function(){
		$("#citypopup").css("visibility","hidden");
		return false;
    });
    
	//-----------地図上で検索を実行----------
	$("#add2mapbtn").click(function(){
		startAdd2Map();
		return false;
    });
    
});

//------------地図範囲情報取得---------------
function getMapAreaInfo() {
	//------------中央の緯度・経度-----------
	var chuou  = map.getCenter();
	nowarea[0] = chuou.lat();
	nowarea[1] = chuou.lng();
	//----------表示領域情報を取得-----------
	var area = map.getBounds();
	var southWest = area.getSouthWest();
	var northEast = area.getNorthEast();
	nowarea[2] = southWest.lat();
	nowarea[3] = northEast.lat();
	nowarea[4] = southWest.lng();
	nowarea[5] = northEast.lng();
	//-------------ズームレベル--------------
	nowarea[6] = map.getZoom();
	//------------中央マーク-----------------
	if (keepflag == 0) {
		var keeppoint  = new GLatLng(nowarea[0],nowarea[1]);
		keepmarker = new GMarker(keeppoint, center_opts);
		keepflag = 1;
	}
}

//------------市町村ダイレクト---------------
function setCityPoint(num) {
	var cido = parseFloat(cityp[num][2]);
	var ckdo = parseFloat(cityp[num][3]);
	mvflag = 1;
	map.setCenter(new GLatLng(cido,ckdo));
	mvflag = 0;
	keepflag = 0;
	reqPcList();
	//---------------------------------------
	var citylistlink = '<a href="citylist.php?city='+num+'">「'+cityp[num][0]+'」の販売店一覧表</a>';
	$("#citylink").html(citylistlink);
}

//----------地図リストのリクエスト-----------
function reqPcList() {
	//-------------地図情報取得--------------
	getMapAreaInfo();
	//----------ここからdbを検索-------------
	$.ajax({
		//-------------送信部----------------
		dataType: "jsonp",
		data: {
			"cntido": nowarea[0],
			"cntkdo": nowarea[1],
			"sttido": nowarea[2],
			"endido": nowarea[3],
			"sttkdo": nowarea[4],
			"endkdo": nowarea[5]
		},
		cache: false,
		url: "/map/req_pclist2.cgi",
		//-------------受信部----------------
		success: function (data) {
			getPcList(data);
		}
	});
}

//-------------地図リストの取得--------------
function getPcList(data) {
	//---------------------------------------
	map.clearOverlays();                     //---現マーカーを消去
	map.addOverlay(keepmarker);              //---センターマーク
	//--------------検索結果-----------------
	var status = parseInt(data.feed.status,10);
	if (status == 1) {
		dbError(1);
		return;
	}
	//---------------全該当数----------------
	pcallnum = parseInt(data.feed.pcallnum,10);
	if (pcallnum == 0) {
		dbError(2);
		return;
	}
	//--------------リストの取得-------------
	var pc_templist = new Array;
	//---------------------------------------
	$.each(data.feed.entry, function(i,item){
		pc_templist[i] = new Array(item.pcid,item.pcname,item.add,item.tel,item.image,item.ido,item.kdo,item.pccode);
	});
	//---------------------------------------
	pcenlist = pc_templist;
	//-------------ナビの表示----------------
	setNaviArea();
	//---------マーカーの再配置--------------
	resetMarker(1);                          //---1ページ目
}

//---------------地図検索エラー--------------
function dbError(type) {
	if (type == 0) {
		$("#listarea").html('<font color="red">※データベースの検索に失敗しました...</font>');
	} else {
		$("#listarea").html('<font color="red">※表示されている地図範囲にはプレスセンターはありません...</font>');
	}
	$("#naviarea").text('');
}

//---------------ナビエリア設定--------------
function setNaviArea() {
	//-------------切替ページ数--------------
	if (pcallnum < 15) {
		pcallpage = 1;
	} else if (pcallnum % 15 == 0) {
		pcallpage = pcallnum / 15;
	} else {
		pcallpage = (pcallnum - (pcallnum % 15)) / 15 + 1;
	}
	//---------------------------------------
	pcpage = 1;
	setSelectList();
	setSelectPage();
}

//----------------リストの出力---------------
function setSelectList() {
	var liststart = (pcpage - 1) * 15;
	var listend = liststart + 15;
	if (listend > pcallnum) { listend = pcallnum; }
	//---------------------------------------
	var listhtml = '<table width="180" cellpadding="0" cellspacing="0" border="0">';
	//---------------------------------------
	var j = 0;
	for (i = liststart; i < listend; i++) {
		listhtml += '<tr>';
		listhtml += '<td width="15"><b>'+iconstr[j]+'</b></td>';
		listhtml += '<td width="165"><a href="#" onclick="return false" id="pl'+pcenlist[i][0]+'">'+pcenlist[i][1]+'プレスセンター</a></td>';
		listhtml += '</tr>';
		j++;
	}
	listhtml += '</table>';
	$("#listarea").html(listhtml);
}
//--------------切替ページの出力-------------
function setSelectPage() {
	var navihtml = '<hr size="1">'
	navihtml += '<font class="font10">※全'+pcallnum+'ヶ所 ( '+pcallpage+' ページ ) あります</font>';
	navihtml += '<hr size="1">'
	for (var p=1; p <= pcallpage; p++) {
		if (p == pcpage) {
			navihtml += '<u><b><font color="red">'+p+'</font></b></u>　';
		} else {
			navihtml += '<a href="javascript:changePage('+p+')">'+p+'</a>　';
		}
	}
	$("#naviarea").html(navihtml);
}

//-------------マーカーの再配置--------------
function resetMarker(page) {
	var startpc = (page - 1) * 15;
	var endpc   = startpc + 15;
	if (endpc > pcallnum) { endpc = pcallnum; }
	//---------------------------------------
	var j = 0;
	for (i = startpc; i < endpc; i++) {
		setMarker(i,j);
		j++;
	}
}

//--------------個別マーカーの配置-----------
function setMarker(num,no) {
	var lat  = parseFloat(pcenlist[num][5]);
	var lon  = parseFloat(pcenlist[num][6]);
	var point = new GLatLng(lat,lon);
	var icon  = new GIcon(baseIcon);
	icon.image = iconimg[no];
	
	var pcname = pcenlist[num][1];
	var pcadd  = pcenlist[num][2];
	var pctel  = pcenlist[num][3];
	if (pctel != '') { pctel = 'TEL.'+pctel; }
	
	pcname2    = pcname.replace(rcode1,"&");
	pcname2    = pcname2.replace(rcode2,"'");
	
	var markeropts = new Object();
	markeropts.icon = icon;
	markeropts.title = pcname2 + 'プレスセンター';
	
	var marker = new GMarker(point,markeropts);
	var window_msg = function() { marker.openInfoWindowHtml('<div style="width:250px\;font-size:12px\;" align="left"><img src="/pc-imgs/s/'+pcenlist[num][4]+'" align="right"><b><a href="shop.php?code='+pcenlist[num][7]+'">'+pcname+'プレスセンター</a></b><br />'+pcadd+'<br />'+pctel+'<p align="right">&gt;&gt; <a href="javascript:showPostArea('+num+')">配達エリアを確認</a></p></div>'); }
	GEvent.addListener(marker, 'click', window_msg);
	
	var marker_id = 'pl'+pcenlist[num][0];
	var marker_link = document.getElementById(marker_id);
	if( marker_link ){ marker_link.onmousedown = window_msg; }
	
	map.addOverlay(marker);
}

//---------------ページの切替----------------
function changePage(page) {
	pcpage = page;
	mvflag = 1;
	map.setCenter(new GLatLng(nowarea[0],nowarea[1]));
	mvflag = 0;
	setSelectList();
	setSelectPage();
	//---------------------------------------
	map.clearOverlays();                     //---現マーカーを消去
	map.addOverlay(keepmarker);              //---センターマーク
	//---------------------------------------
	resetMarker(pcpage);
}

//--------------地名検索スタート-------------
function startAdd2Map() {
	if (document.adrset.add2.value == '') {
		alert('市町村名が入力されていません...');
	} else {
		var add1 = document.adrset.add1.value;
		var add2 = document.adrset.add2.value;
		var add3 = document.adrset.add3.value;
		var address = add1 + add2 + add3;
		gGeo.getLatLng(address, checkGeo);
	}
}
//----------------地名検索結果---------------
function checkGeo(geopoint) {
	if (geopoint) {
		mvflag = 1;
		map.setCenter(geopoint);
		mvflag = 0;
		keepflag = 0;
		reqPcList();
	} else {
		alert('指定された住所地番の位置情報が見つかりませんでした...');
	}
}

//----------------市町村選択-----------------
function popupCity() {
	
	//------------POPUP位置設定--------------
	var addpoint = $("#addinput").offset();
	var leftpx = addpoint.left + 'px';
	var toppx  = addpoint.top + 20 + 'px';
	$("#citypopup").css("left", leftpx);
	$("#citypopup").css("top", toppx);
	
	//---------------------------------------
	var nowadr = document.adrset.add2.value;
	var cityselhtml = '<table cellpadding="0" cellspacing="0" border="0">';
	for (i=0; i<18; i++) {
		cityselhtml += '<tr class="trline" onclick="selectCity('+i+')">';
		if (cityp[i][1] == nowadr) {
			cityselhtml += '<td bgcolor="#999999" class="linetd"><font color="#ffffff">'+cityp[i][1]+'</font></td>';
		} else {
			cityselhtml += '<td class="linetd">'+cityp[i][1]+'</td>';
		}
		cityselhtml += '</tr>';
	}
	cityselhtml += '</table>';
	//---------------------------------------
	$("#citylist").html(cityselhtml);
	//------------行選択スタイル-------------
	$("tr.trline").hover(
		function(){ this.style.backgroundColor = "#999999"; this.style.color = "#ffffff"; this.style.cursor = "pointer"; },
		function(){ this.style.backgroundColor = "#ffffff"; this.style.color = "#000000"; this.style.cursor = "default"; }
	);
	//---------------------------------------
	$("#citypopup").css("visibility","visible");
}
//-------------------------------------------
function selectCity(num) {
	document.adrset.add1.value = '大分県';
	document.adrset.add2.value = cityp[num][1];
	$("#citypopup").css("visibility","hidden");
}

