﻿//----------------------------------------------------------------
//
//		不動産情報検索 on Google Maps　【 - f G m a p - 】
//
//----------------------------------------------------------------

//グローバル変数定義----------------------------------------------

	//カスタマイズ用==============================================
	//緯度・経度・ズーム------------------------------------
	var START_LAT       =  "35.180341";			//初期表示の緯度
	var START_LNG       = "136.906739";			//初期表示の経度
	var START_ZOOM      = 9;					//初期表示のズーム（0～19の数値を。大きいほど拡大）
	var MAX_ZOOMLEVEL   = 19;					//情報ウィンドウでの拡大する場合のズームレベル
	var XMLDATAPASS     = "./xml/data.xml";		//XMLファイルのパス

	var HTML_MAPCANVAS  = "map_canvas";			//地図出力divタグid
	var HTML_CHECKBOXID = "checkbox_cate";		//チェックボックス出力divタグid
	var HTML_ADDRTEXT   = "txtAdd";				//住所入力テキストボックスid
	var HTML_ICHIRAN    = "data_ichiran";		//一覧項目出力divタグid
	var HTML_INFOSPAN   = "info_span";			//不動産会社等連絡先のspanタグ
	var HTML_INFO       = "連絡先：　　＠＠＠＠不動産<br />東京都＠＠区＊＊町１－２－３<br />TEL：０３－＊＊＊＊－＊＊＊＊<br />abcdefg-hijk@xxxxx.yyyyy.com";
												//★★↑ここに連絡先などを入力（HTML可）★★
	//CSSクラス名
	var CSS_INFOWINHEAD = "infowin_head";		//情報ウィンドウ項目名用
	var CSS_INFOWINVAL  = "infowin_value";		//情報ウィンドウ値用
	var CSS_ICHICLICK   = "tr_ichiran_caution";	//一覧をクリック時のスタイルシート項目名
	
	//各種設定 ----------------------------------------------
	var IMAGE_SWITCH    = true;					//画像ファイルを表示する場合はtrue、非表示ならfalse

	var INDEX_LAT       = 3;					//緯度を格納している配列の番号
	var INDEX_LNG       = 4;					//経度を格納している配列の番号
	var INDEX_IMAGEFILE = 13;					//画像ファイル名を格納している配列の番号
	var INDEX_SHOUSAI   = 14;					//詳細ページファイル名を格納している配列の番号

	var IMAGEFILEFOLDER = "./images/bukken/";	//画像ファイル格納フォルダ
	var WIDTH_IMAGEINFO = "120";				//画像ファイルの横幅（情報ウィンドウでの）
	var WIDTH_IMAGEICHI = "50";					//画像ファイルの横幅（一覧での）
	var NOIMAGEMES_INFO = "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;No image&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;";
												//情報ウィンドウでの画像がない場合のメッセージ
	var NOIMAGEMES_ICHI = "No image";			//一覧での画像がない場合のメッセージ
	var ICHI_HTMLTEXT   = "<span class=\"ichi_bikou\">一覧をクリックすると地図上でその物件へ移動します</span>";
												//一覧で種別の右に表示する注意など。不要な場合は""にする。
	//種類-----------------------------------
	//★ここはカスタマイズしないでください★
	var CateTOCHI       = "tochi";
	var CateTATEMONO    = "tatemono";
	var CateAPART       = "apart";
	var CateMANSHON     = "manshon";
	var CateJIGYOU      = "jigyou";
	//---------------------------------------

	//表示項目設定 （ソート（並替え）、情報ウィンドウ、一覧等の設定）-----------------
	//初期表示並び替え機能設定
	var flgDefaultSort               = false;	//trueは初期表示ソート（並替え）する、falseは初期表示ソートしない
												//また、trueにすると、データ量によって表示するまで時間はかかる。
	//初期表示並び替え設定 【 flgDefaultSort=trueの場合に有効 】
	//SetDefaultSort[・・・] = ([a,b,c],・・・)
	// a は、表示する項目の配列番号。デフォルトでは0：ID、1：種別1、2：種別2、・・・
	// b は、ソート方法 0＝昇順、1＝降順
	// c は、データ種類 1=数値データ,2=文字列データ
	var SetDefaultSort = new Array();
		SetDefaultSort[CateTOCHI]    = new Array(10,0,2);	//デフォルトで10は住所
		SetDefaultSort[CateTATEMONO] = new Array(10,0,2);	//デフォルトで10は住所
		SetDefaultSort[CateAPART]    = new Array(11,0,2);	//デフォルトで11は間取り
		SetDefaultSort[CateMANSHON]  = new Array(11,0,2);	//デフォルトで11は間取り
		SetDefaultSort[CateJIGYOU]   = new Array(10,0,2);	//デフォルトで10は住所

	//情報ウィンドウ（噴出し）出力項目詳細設定
	//SetInfoWindowArr[・・・] = ([a,b,c],・・・)　上から順に表示していきます。
	// a は、表示する項目の配列番号。デフォルトでは0：ID、1：種別1、2：種別2、・・・
	// b は、表示方法。0:左 揃 え
	//                 1:中央揃え
	//                 2:右 揃 え
	// c は、付加機能  0:そのまま表示
	//                 1:３桁カンマ付加
	//
	//	※画像情報は配列には含めないでください！IMAGE_SWITCHとINDEX_IMAGEFILEで判断します
	//
	var SetInfoWindowArr = new Array();
	    SetInfoWindowArr[CateTOCHI]    = new Array([0,0,0],[14,0,0],[2,0,0],[10,0,0],[9,0,0],[7,0,1],[6,0,1],[8,0,1],[15,0,0]);
													//ID     詳細     種別2   住所    面積   坪単価   価格    賃料     備考
	    SetInfoWindowArr[CateTATEMONO] = new Array([0,0,0],[14,0,0],[2,0,0],[10,0,0],[11,0,0],[6,0,1],[8,0,1],[12,0,0],[15,0,0]);
													//ID     詳細     種別2   住所    間取り   価格     賃料     築年    備考
	    SetInfoWindowArr[CateAPART]    = new Array([0,0,0],[14,0,0],[2,0,0],[10,0,0],[11,0,0],[8,0,1],[12,0,0],[15,0,0]);
													//ID     詳細     種別2   住所    間取り    賃料     築年    備考
	    SetInfoWindowArr[CateMANSHON]  = new Array([0,0,0],[14,0,0],[2,0,0],[10,0,0],[11,0,0],[6,0,1],[8,0,1],[12,0,0],[15,0,0]);
													//ID     詳細     種別2   住所    間取り   価格     賃料     築年    備考
	    SetInfoWindowArr[CateJIGYOU]   = new Array([0,0,0],[14,0,0],[2,0,0],[10,0,0],[11,0,0],[6,0,1],[8,0,1],[12,0,0],[15,0,0]);
													//ID     詳細     種別2   住所    間取り   価格     賃料     築年    備考

	//一覧表出力項目詳細設定
	//SetIchiranArr[・・・] = ([a,b,c,d],・・・)　左から順に表示していきます。
	// a は、表示する項目の配列番号。デフォルトでは0：ID、1：種別1、2：種別2、・・・
	// b は、表示方法。0:左 揃 え
	//                 1:中央揃え
	//                 2:右 揃 え
	// c は、ソート    0:ソート機能無し
	//                 1:ソート機能有り（数字用（価格など））
	//                 2:ソート機能有り（文字用（住所など））
	// d は、付加機能  0:そのまま表示
	//                 1:３桁カンマ付加
	//
	var SetIchiranArr = new Array();
	    SetIchiranArr[CateTOCHI]    = new Array([0,1,2,0],[13,1,0,0],[14,1,0,0],[2,1,2,0],[10,0,2,0],[9,1,0,0],[7,2,1,1],[6,2,1,1],[8,2,0,1],[15,0,0,0]);
												//ID          画像      詳細       種別2     住所       面積     坪単価    価格      賃料       備考
	    SetIchiranArr[CateTATEMONO] = new Array([0,1,2,0],[13,1,0,0],[14,1,0,0],[2,1,2,0],[10,0,2,0],[11,1,2,0],[6,2,1,1],[8,2,1,1],[12,1,0,0],[15,0,0,0]);
												//ID         画像       詳細       種別2     住所      間取り      価格      賃料      築年       備考
	    SetIchiranArr[CateAPART]    = new Array([0,1,2,0],[13,1,0,0],[14,1,0,0],[2,1,2,0],[10,0,2,0],[11,1,2,0],[8,2,1,1],[12,1,0,0],[15,0,0,0]);
												//ID         画像       詳細       種別2     住所      間取り      賃料      築年       備考
	    SetIchiranArr[CateMANSHON]  = new Array([0,1,2,0],[13,1,0,0],[14,1,0,0],[2,1,2,0],[10,0,2,0],[11,1,2,0],[6,2,1,1],[8,2,1,1],[12,1,0,0],[15,0,0,0]);
												//ID         画像       詳細       種別2     住所      間取り      価格      賃料      築年       備考
	    SetIchiranArr[CateJIGYOU]   = new Array([0,1,2,0],[13,1,0,0],[14,1,0,0],[2,1,2,0],[10,0,2,0],[11,1,2,0],[6,2,1,1],[8,2,1,1],[12,1,0,0],[15,0,0,0]);
												//ID         画像       詳細       種別2     住所      間取り      価格      賃料      築年       備考

	//カスタマイズ用 End===========================================

	var xml;	//XMLデータ格納オブジェクト
	var strCategoryName           = new Array();				//"tochi","tatemono",・・・
	var strDefautCateName         = new Array();				//"tochi","tatemono",・・・
	var strCateDisp               = new Array();				//tochi = 土地の連想配列

	var map                       = null;
	var geocoder                  = null;						//住所検索用
	var icon1                     = new GIcon();				//アイコン用
		icon1.image               = "./images/marker.png";		//デフォルトアイコンはグーグルマップデフォルト
		icon1.shadow              = "./images/shadow50_2.png";	//オリジナルシャドウ
		icon1.iconSize            = new GSize(24, 34);			//アイコンサイズ
		icon1.shadowSize          = new GSize(37, 34);			//影のサイズ
		icon1.iconAnchor          = new GPoint(11, 34);			//アンカーポイントと画像の左上角からの相対オフセット値
		icon1.infoWindowAnchor    = new GPoint(11, 2);
		icon1.infoShadowAnchor    = new GPoint(18, 25);

	var strArrXmlData = new Array();							//XMLデータを３次元配列に格納	[種類][当該種類内件数][項目]
	var arrMarkersLen = new Array();							//土地、建物、アパート・・・各項目のデータ数格納
	var strIconPass   = new Array();
		strIconPass[CateTOCHI]    = "./images/icoTochi.png";
		strIconPass[CateTATEMONO] = "./images/icoTate.png";
		strIconPass[CateAPART]    = "./images/icoApart.png";
		strIconPass[CateMANSHON]  = "./images/icoManshon.png";
		strIconPass[CateJIGYOU]   = "./images/icoJigyo.png";
	var blnOpenArg3               = true;						//HTTPREQUEST openメソッドの第三引数
	
	//一覧HTML用
	var strArrListHtmlHead        = new Array();				//一覧のテーブルヘッダ項目作成用
	var strKoumokunameArr         = new Array();				//一覧HTML表示項目名
	var intKoumokunameCnt         = 0;							//項目数格納用（ID、種別１、、の個数）
	var strWk                     = "";							//汎用文字列格納用

//===============================================================
//
//	ロード時の関数 
//
//---------------------------------------------------------------
function initialize() {
		
	// 地図を生成
	if (GBrowserIsCompatible()) {

		map = new GMap2($(HTML_MAPCANVAS));
		//移動、ズームコントロール追加
		map.addControl(new GLargeMapControl());
		//右上の地図切替ボタン追加
		map.addControl(new GMapTypeControl(true));
		//地形図切替ボタン追加
		map.addMapType(G_PHYSICAL_MAP);
		//縮尺スケール追加
		map.addControl(new GScaleControl());
		//緯度、経度、ズーム
		map.setCenter(new GLatLng(parseFloat(START_LAT) , parseFloat(START_LNG)), parseFloat(START_ZOOM));
		//右下の小窓
		map.addControl(new GOverviewMapControl(new GSize(80,80)));
		//ダブルクリック時にズームを無効
		map.disableDoubleClickZoom();
		// GClientGeocoderを初期化
		geocoder = new GClientGeocoder();

		//不動産会社等の情報を挿入
		if ($(HTML_INFOSPAN) != null) {
			$(HTML_INFOSPAN).innerHTML = HTML_INFO;
		}

		strCategoryName = new Array(CateTOCHI, CateTATEMONO, CateAPART, CateMANSHON, CateJIGYOU);	//一時的に全種類を格納

		//XMLからデータを取得-----------------------------
		var objReq = GXmlHttp.create();
		objReq.open("GET", XMLDATAPASS, blnOpenArg3);

		objReq.onreadystatechange = function(){

			if(objReq.readyState == 4) {
				//XMLデータへ加工（改行、タブ文字を除去）
				xml = GXml.parse( objReq.responseText.replace(/\r\n/g, "").replace(/\t/g, "") );

				if( !xml.documentElement ){
//					alert( "データファイルがありません。");
					return false;
				}

				var shus = xml.documentElement.getElementsByTagName("shu");
				var koumokunames = xml.documentElement.getElementsByTagName("koumokuname");

				//<shu>タグ情報取得
				for (var i = 0; i < strCategoryName.length ; i++) {
					if (shus[0].getElementsByTagName("name_" + strCategoryName[i]).length != 0) {
						//以下の配列には("tochi","tatemono",・・・)
						strDefautCateName.push(strCategoryName[i]);

						//以下の配列には strCateDisp["tochi"]=土地、,strCateDisp["tatemono"]=建物、・・・
						strCateDisp[strCategoryName[i]] = GXml.value(shus[0].getElementsByTagName("name_" + strCategoryName[i])[0]);

					}	//End if
				}	//End for i

				//<koumokuname>タグ情報取得
				var koumokunameswork = koumokunames[0].getElementsByTagName("arg");
				intKoumokunameCnt = koumokunameswork.length
				for (var i = 0; i < intKoumokunameCnt ; i++) {
					//配列の作成
					strKoumokunameArr.push(GXml.value(koumokunameswork[i]));
					/*
						デフォルトの場合のXMLデータとの対応表
						（※エクセルで項目など加工している場合は以下の限りではありません）
						strKoumokunameArr[0] ：ID
						strKoumokunameArr[1] ：種別1
						strKoumokunameArr[2] ：種別2
						strKoumokunameArr[3] ：緯度
						strKoumokunameArr[4] ：経度
						strKoumokunameArr[5] ：名称
						strKoumokunameArr[6] ：価格
						strKoumokunameArr[7] ：坪単価
						strKoumokunameArr[8] ：賃料
						strKoumokunameArr[9] ：面積
						strKoumokunameArr[10]：所在地
						strKoumokunameArr[11]：間取り
						strKoumokunameArr[12]：築年
						strKoumokunameArr[13]：写真
						strKoumokunameArr[14]：詳細
						strKoumokunameArr[15]：備考
						strKoumokunameArr[16]：ユーザー1
						strKoumokunameArr[17]：ユーザー2
						strKoumokunameArr[18]：ユーザー3
						strKoumokunameArr[19]：ユーザー4
						strKoumokunameArr[20]：ユーザー5
					*/
				}	//End for i

				//配列のコピー
				strCategoryName = strDefautCateName.clone();

				//カテゴリ選択チェックボックス作成----------------------------------------
				if ($(HTML_CHECKBOXID) != null) {
					var strCateChkBoxHtml = "";	//カテゴリ選択チェックボックス作成用HTML
					strCateChkBoxHtml = "<div class=\"chkbox_inner_div\">";
					for (n = 0; n < strDefautCateName.length ; n++) {
						strCateChkBoxHtml += "<input type=\"checkbox\" id=\"chk00" + (n+1) + "\" value=\"" + strDefautCateName[n] + "\" checked />" +
											"&nbsp;<span id=\"\" onClick=\"javascript:chgCheckBox(\'chk00" + (n+1) + "\');\">" +
											"<img id=\"\" alt=\"" + strCateDisp[strDefautCateName[n]] + "\" src=\"" + strIconPass[strDefautCateName[n]] + "\" align=\"middle\" />" +
											"<span class=\"chkbox_spantext\">&nbsp;&nbsp;" + strCateDisp[strDefautCateName[n]] + "</span></span><br />";
					}	//End for n

					strCateChkBoxHtml += "</div><div class=\"chkformbtn_div\"><input type=\"button\" id=\"chkformbtn\" value=\" 表示更新 \" onClick=\"javascript:chkchange();\" /></div>";
					$(HTML_CHECKBOXID).innerHTML = strCateChkBoxHtml;
				}

				//データロード
				funcMakeDataArr();
			}
		}
		objReq.send(null);
	} else {
		$(HTML_MAPCANVAS).innerHTML ="<b>お使いいただいているブラウザや環境ではグーグルマップをご利用できません</b>";
	}	//end if
}
// initialize() End----------------------------------------------



//===============================================================
//
//	データ配列の作成
//
//---------------------------------------------------------------
//function xmldataload() {
function funcMakeDataArr() {

	// xmlのデータをダウンロードし、地図上にロードする。

	var markers = null;		//XMLオブジェクト格納用
	var i       = 0;		//for文用
	var j       = 0;		//for文用
	var k       = 0;		//for文用
	var m       = 0;		//for文用
	
	if( !xml.documentElement ){
		alert( "データファイルがありません。");
		return false;
	}	//End if

	//３次元配列の種類の作成（１次元目枠）
	strArrXmlData = new Array(strCategoryName.length);

	//土地、建物、アパート・・・各項目のデータ数格納用配列作成
	arrMarkersLen = new Array(strCategoryName.length);

	//一覧のテーブルヘッダ項目用配列
	strArrListHtmlHead = new Array(strCategoryName.length);
	for (i = 0; i < strCategoryName.length ; i++) {

		//一覧のテーブルヘッダ項目作成
		strArrListHtmlHead[i] = creIchiranHeadHTML(i, strCategoryName[i]);
		//XMLからデータを抽出
		markers = xml.documentElement.getElementsByTagName(strCategoryName[i]);

		//配列２次元目枠作成
		arrMarkersLen[i] = markers.length;				//各種別のデータ数
		strArrXmlData[i] = new Array(arrMarkersLen[i]);

		for (j = 0; j < markers.length; j++) {

			//配列３次元目枠作成	markers[j].childNodes.lengthはid、shu2などタグの個数
			intChildNodesLen = markers[j].childNodes.length;
			strArrXmlData[i][j] = new Array(intChildNodesLen);

			//ＸＭＬの各項目を取得
			for (k = 0; k < intChildNodesLen ; k++) {

				strArrXmlData[i][j][k] = GXml.value(markers[j].childNodes[k]);
				/*
					デフォルトの場合のXMLとの対応表
					strArrXmlData[i][j][0] ：<id>の値
					strArrXmlData[i][j][1] ：<shu1>の値
					strArrXmlData[i][j][2] ：<shu2>の値
					strArrXmlData[i][j][3] ：<lat>の値
					strArrXmlData[i][j][4] ：<lng>の値
					strArrXmlData[i][j][5] ：<name>の値
					strArrXmlData[i][j][6] ：<price>の値
					strArrXmlData[i][j][7] ：<tubotanka>の値
					strArrXmlData[i][j][8] ：<chinryou>の値
					strArrXmlData[i][j][9] ：<menseki>の値
					strArrXmlData[i][j][10]：<addr>の値
					strArrXmlData[i][j][11]：<madori>の値
					strArrXmlData[i][j][12]：<chikunen>の値
					strArrXmlData[i][j][13]：<imagepass>の値
					strArrXmlData[i][j][14]：<shousaiaddr>の値
					strArrXmlData[i][j][15]：<bikou>の値
					strArrXmlData[i][j][16]：<user1>の値
					strArrXmlData[i][j][17]：<user2>の値
					strArrXmlData[i][j][18]：<user3>の値
					strArrXmlData[i][j][19]：<user4>の値
					strArrXmlData[i][j][20]：<user5>の値
				*/

			}	//End for k
		} //End for j
	} //End for i

	//デフォルトソート------------------------------------------
	//flgDefaultSort = trueの設定の場合に実行
	if (flgDefaultSort) {
		for (m = 0; m < strCategoryName.length ; m++) {
			//SetDefaultSort[ strCategoryName[i] ][0] 表示する項目の配列番号。
			//SetDefaultSort[ strCategoryName[i] ][1] ソート方法 0＝昇順、1＝降順
			//SetDefaultSort[ strCategoryName[i] ][2] データ種類 1=数値データ,2=文字列データ
			myDataSort(m, SetDefaultSort[ strCategoryName[m] ][0], SetDefaultSort[ strCategoryName[m] ][1], SetDefaultSort[ strCategoryName[m] ][2]);
		}	//End for m
	}	//End if

	//一覧等表示関数へ
	funcdataOutput();
}
// funcMakeDataArr() End----------------------------------------------


//===============================================================
//
//	一覧及びアイコン作成関数 
//
//---------------------------------------------------------------
function funcdataOutput() {

	var i                   = 0;			//for文用
	var j                   = 0;			//for文用
	var strArrDataWork      = new Array();
	var strInfoWinHTML      = "";			//情報ウィンドウHTML作成用
	var strInfoWindowOpenID = "";			//情報ウィンドウと一覧を結ぶID
	var strTableCN          = "";			//一覧テーブルCSSクラスネーム用
	
	//一覧表示セクション ----------------------------
	var strListHtml = new Array(strCategoryName.length);
	strWk = "";

	for (i = 0; i < strCategoryName.length ; i++) {
		strListHtml[i] = "";
		for (j = 0; j < arrMarkersLen[i]; j++) {
			//配列記述省略用
			strArrDataWork = strArrXmlData[i][j].clone();
			//情報ウィンドウと一覧を紐付けするためのIDを作成
			strInfoWindowOpenID = "Eve" + strCategoryName[i] + j;
			//種別ごとに格納
			strListHtml[i] += creIchiranHTML(j, strCategoryName[i], strArrDataWork, strInfoWindowOpenID);
		} //End for j

		//出力項目の連結
		if (strListHtml[i] != "") {
			//項目アイコンを付加して一覧を作成
			strWk += "<br /><div class=\"shurui_div\">" + addSpace(4) + strCateDisp[strCategoryName[i]] + addSpace(20) + ICHI_HTMLTEXT + "</div><table>" +
					strArrListHtmlHead[i] + strListHtml[i] + "</table>";
		}	//End if
	} //End of for i

	//divタグへ出力
	if (strWk == "") {
		strWk = "<br />何も表示するものがありません。";
	}
	$(HTML_ICHIRAN).innerHTML = strWk;

	//ポイント表示セクション -------------------------------
	//噴出し（情報ウィンドウ）イベント操作のためもう一度まわす
	for (i = 0; i < strCategoryName.length ; i++) {
		for (j = 0; j < arrMarkersLen[i]; j++) {		
			//配列記述省略用
			strArrDataWork = strArrXmlData[i][j].clone();			
			//ポイントマーク用
			var point = new GLatLng(parseFloat(strArrDataWork[INDEX_LAT]) , parseFloat(strArrDataWork[INDEX_LNG]));
			//アイコンイメージの指定（分岐）
			icon1.image = switchIconImg(strCategoryName[i]);
			strInfoWindowOpenID = "Eve" + strCategoryName[i] + j;
			//情報ウィンドウHTML作成
			strInfoWinHTML = creInfoWinHTML(strCategoryName[i], strArrDataWork, strInfoWindowOpenID);
			//アイコン作成関数に渡す
			myCreateMarker(point, strInfoWinHTML, strInfoWindowOpenID);
		} //End for j
	} //End for i
}
// funcdataOutput() End------------------------------------------


//===============================================================
//
//	チェックボックス更新ボタン押下
//
//		チェックされた項目だけ表示する
//---------------------------------------------------------------
function chkchange() {

	strCategoryName = new Array();	//配列初期化
	for (var i = 0; i < strDefautCateName.length ; i++) {
		if ($("chk00" + (i+1)).checked == true) {
			//チェックされた項目をstrCategoryName配列に挿入
			strCategoryName.push($("chk00" + (i+1)).value);
		} //End if
	}	//End for i

	//全アイコン消去
	map.clearOverlays();
	//データ配列の作成
	funcMakeDataArr();
}
// chkchange() End-----------------------------------------------

//===============================================================
//
//	データの並び替え押下
//	//argOrderは、0=△（昇順）,1=▽（降順）
//	//argNumStrは 1=数値データ,2=文字列データ
//---------------------------------------------------------------
function myDataSort(argI, argKoumoku, argOrder, argNumStr) {

	//---------------------------------
	//ソート（並び替え）セクション
	//---------------------------------
	if (argNumStr == 1) {
		//数値のソートの場合
		if (argOrder == 0) {
			//昇順の場合
			strArrXmlData[argI]= strArrXmlData[argI].sort(function(a, b){
				return a[argKoumoku] - b[argKoumoku];
			});
		} else {
			//降順の場合
			strArrXmlData[argI]= strArrXmlData[argI].sort(function(a, b){
				return b[argKoumoku] - a[argKoumoku];
			});
		}	//End if
	} else {
		//文字列のソートの場合
		if (argOrder == 0) {
			//昇順の場合
			strArrXmlData[argI]= strArrXmlData[argI].sort(function(a, b){
				if (a[argKoumoku] > b[argKoumoku]) return  1;
				if (a[argKoumoku] < b[argKoumoku]) return -1;
				return 0;
			});
		} else {
			//降順の場合
			strArrXmlData[argI]= strArrXmlData[argI].sort(function(a, b){
				if (a[argKoumoku] > b[argKoumoku]) return -1;
				if (a[argKoumoku] < b[argKoumoku]) return  1;
				return 0;
			});
		}	//End if
	}	//End if

	//一覧及びアイコン作成関数へ
	funcdataOutput();
}
// myDataSort() End--------------------------------------------- 


//===============================================================
//
//	マーカー表示及び情報ウィンドウオープン用関数 
//
//		クリックされたら情報ウィンドウに表示する。
//---------------------------------------------------------------
function myCreateMarker(point, textinfo, argID) {

	var marker = new GMarker(point, icon1);
	var saveCN = "";	//スタイシート項目保存用

	//マーカークリック時
	GEvent.addListener(marker, "click", function() {
		marker.openInfoWindowHtml(textinfo);
		//選択された行の背景色を変える
		saveCN = $("tr_" + argID).className;
		$("tr_" + argID).className = CSS_ICHICLICK;
	});

	//一覧クリック時
	GEvent.addDomListener($("tr_" + argID), "click", function() {
		marker.openInfoWindowHtml(textinfo);
		//選択された行の背景色を変える
		saveCN = $("tr_" + argID).className;
		$("tr_" + argID).className = CSS_ICHICLICK;
		location.hash = "pagetop";	//ページ先頭へ
	});

	//情報ウィンドウが閉じたとき
	GEvent.addListener(marker, "infowindowclose", function() {
		//選択された行の背景色を戻す
		$("tr_" + argID).className = saveCN;
	});
	map.addOverlay(marker);
}
// myCreateMarker() End------------------------------------------


//===============================================================
//
//	情報ウィンドウ（噴出し）用HTML作成用関数 
//
//---------------------------------------------------------------
function creInfoWinHTML(argCategoryName, argArrData, argID) {

	var strHTML       = "";
	var strData       = "";
	var strTrCss      = "";
	var strIchiranLCR = "";
	var strImageHTML  = "";
	var intTrRow      = 0;	//行数を格納

	//SetInfoWindowArrに従い作成
	intTrRow = SetInfoWindowArr[argCategoryName].length;

	for (var i = 0; i < intTrRow ; i++) {

		//【詳細】項目の処理
		if (SetInfoWindowArr[argCategoryName][i][0] == INDEX_SHOUSAI) {
			//一覧HTML 詳細ページへリンクアンカー作成
			if (argArrData[SetInfoWindowArr[argCategoryName][i][0]] == "") {
				//詳細ページアドレスが無い場合
				strData = "";
			} else {
				//詳細ページアドレスがある場合
				strData = "<a href=\"" + argArrData[SetInfoWindowArr[argCategoryName][i][0]] + "\" class=\"anc_shousai\" target=\"_blank\">詳細</a>";
			}
		} else {
			//詳細以外の項目の場合
			strData = argArrData[ SetInfoWindowArr[argCategoryName][i][0] ];
		}	//End if

		//付加機能
		// SetInfoWindowArr[argCategoryName][i][2] は、0:そのまま表示、1:３桁カンマ付加
		if (SetInfoWindowArr[argCategoryName][i][2] == 1) {
			strData = chgAddComma( argArrData[ SetInfoWindowArr[argCategoryName][i][0] ] );
		}	//End if

		//表示方法
		// SetInfoWindowArr[argCategoryName][i][1] は、0:左 揃 え、1:中央揃え、2:右 揃 え
		switch (SetInfoWindowArr[argCategoryName][i][1]) {
			case 0:
				strIchiranLCR = "ichiran_left";
				break;
			case 1:
				strIchiranLCR = "ichiran_center";
				break;
			case 2:
				strIchiranLCR = "ichiran_right";
				break;
			default:
				strIchiranLCR = "ichiran_left";
		}

		//画像を情報ウィンドウ内の左に入れる
		if (IMAGE_SWITCH) {
			if (i==0) {
				//画像ファイル表示
				if (argArrData[INDEX_IMAGEFILE] == "") {
					//ファイル名が入っていない場合
					strImageHTML = NOIMAGEMES_INFO;

				} else {
					var strImageFilePass = IMAGEFILEFOLDER + argArrData[INDEX_IMAGEFILE];
					strImageHTML = "<a href=\"" + strImageFilePass + "\" target=\"_blank\">" +
								   "<img id=\"\" src=\"" + strImageFilePass + "\" alt=\"写真\" width=\"" + WIDTH_IMAGEINFO + "\" /></a>" +
								   "<br><span class=\"imgmes\">クリックして拡大</span>";

				}	//End if
				strHTML += "<tr><td rowspan=\"" + intTrRow +"\">" + strImageHTML + "</td><th>" + strKoumokunameArr[ SetInfoWindowArr[argCategoryName][i][0] ] + "</th>";
			} else {
				strHTML += "<tr><th>" + strKoumokunameArr[ SetInfoWindowArr[argCategoryName][i][0] ] + "</th>";
			}	//End if
			
		} else {
			strHTML += "<tr><th>" + strKoumokunameArr[ SetInfoWindowArr[argCategoryName][i][0] ] + "</th>";
		}	//End if
		//内容
		strHTML += "<td class=\"" + strIchiranLCR + "\">" + strData + "</td></tr>";

	}	//End for i

	//ズーム機能付加
	strHTML = "<table>" + strHTML + "</table>" + 
				"<span class=\"info_zoom\" onClick=\"javascript:map.setCenter(new GLatLng(" + parseFloat(argArrData[INDEX_LAT]) + "," +
				parseFloat(argArrData[INDEX_LNG]) + ")," + MAX_ZOOMLEVEL + ")\">このポイントの拡大</span>";
	return strHTML;
}
// creInfoWinHTML() End------------------------------------------

//===============================================================
//
//	一覧項目ヘッダーHTML作成用関数 
//
//---------------------------------------------------------------
function creIchiranHeadHTML(argI, argCategoryName) {

	var strHTML = "";
	strHTML = "<tr>";

	//SetIchiranArrに従い作成
	for (var i = 0; i < SetIchiranArr[argCategoryName].length ; i++) {
		if (SetIchiranArr[argCategoryName][i][2] >= 1) {
			//ソート機能有りの場合
			strHTML += "<th>" + strKoumokunameArr[ SetIchiranArr[argCategoryName][i][0] ] +
						"<br /><span id=\"sp" + argI + "_" + argCategoryName + "_" + i + "_0" +
								"\" class=\"td_sort\" onClick=\"javascript:myDataSort(" +
								argI + "," + SetIchiranArr[argCategoryName][i][0] +", 0," +
								SetIchiranArr[argCategoryName][i][2] +");\">▲</span>" +
								addSpace(1) + "<span id=\"sp" + argI + "_" + argCategoryName + "_" + i + "_1" +
								"\" class=\"td_sort\" onClick=\"javascript:myDataSort(" +
								argI + "," + SetIchiranArr[argCategoryName][i][0] +", 1," +
								SetIchiranArr[argCategoryName][i][2] +");\">▼</span>" +
								"</th>";
		} else {
			//ソート機能無しの場合
			strHTML += "<th>" + strKoumokunameArr[ SetIchiranArr[argCategoryName][i][0] ] + "</th>";
		}	//End if
	}	//End for i
	strHTML += "</tr>";
	return strHTML;
}
// creIchiranHeadHTML() End------------------------------------------


//===============================================================
//
//	一覧項目HTML作成用関数 
//
//---------------------------------------------------------------
function creIchiranHTML(argI, argCategoryName, argArrData, argID) {

	var strHTML       = "";
	var strData       = "";
	var strTrCss      = "";
	var strIchiranLCR = "";
	var strImageHTML  = "";

	//一覧のゼブラ模様。奇数行はtr_zebla_01、偶数行はtr_zebla_02
	if (argI % 2 ==0) {
		//偶数行
		strTrCss = "tr_zebla_01";	//iは0からスタートのためこちらが最初の行
	} else {
		//奇数行
		strTrCss = "tr_zebla_02";
	}
	strHTML = "<tr id=\"tr_" + argID + "\" class = \""+ strTrCss + "\">";

	for (var i = 0; i < SetIchiranArr[argCategoryName].length ; i++) {
		
		//”詳細”項目の処理
		if (SetIchiranArr[argCategoryName][i][0] == INDEX_SHOUSAI) {
			//一覧HTML 詳細ページへリンクアンカー作成
			if (argArrData[SetIchiranArr[argCategoryName][i][0]] == "") {
				//詳細ページアドレスが無い場合
				strData = "";
			} else {
				//詳細ページアドレスがある場合
				strData = "<a href=\"" + argArrData[SetIchiranArr[argCategoryName][i][0]] + "\" class=\"anc_shousai\" target=\"_blank\">詳細</a>";
			}
		} else {
			//詳細以外の項目の場合
			strData = argArrData[ SetIchiranArr[argCategoryName][i][0] ];
		} //end if

		//付加機能
		// SetIchiranArr[argCategoryName][i][3] は、0:そのまま表示、1:３桁カンマ付加
		if (SetIchiranArr[argCategoryName][i][3] == 1) {
			strData = chgAddComma( argArrData[ SetIchiranArr[argCategoryName][i][0] ] );
		}

		//表示方法
		// SetIchiranArr[argCategoryName][i][1] は、0:左 揃 え、1:中央揃え、2:右 揃 え
		switch (SetIchiranArr[argCategoryName][i][1]) {
			case 0:
				strIchiranLCR = "ichiran_left";
				break;
			case 1:
				strIchiranLCR = "ichiran_center";
				break;
			case 2:
				strIchiranLCR = "ichiran_right";
				break;
			default:
				strIchiranLCR = "ichiran_left";
		}

		//画像の場合
		if (SetIchiranArr[argCategoryName][i][0] == INDEX_IMAGEFILE) {
			if (IMAGE_SWITCH) {
				//画像ファイル表示
				if (argArrData[SetIchiranArr[argCategoryName][i][0]] == "") {
					//ファイル名が入っていない場合
					strData = NOIMAGEMES_ICHI;

				} else {
					var strImageFilePass = IMAGEFILEFOLDER + argArrData[SetIchiranArr[argCategoryName][i][0]];
					strData = "<a href=\"" + strImageFilePass + "\" target=\"_blank\">" +
								   "<img id=\"\" src=\"" + strImageFilePass + "\" alt=\"写真\" width=\"" + WIDTH_IMAGEICHI + "\" /></a>";

				}	//End if
			} else {
				//何も表示しない
				strData = "&nbsp;";
			}	//End if
		}	//End if
		
		strHTML += "<td class=\"" + strIchiranLCR + "\">" + strData + "</td>";
	} //end for i

	strHTML += "</tr>";
	return strHTML;
}
// creIchiranHTML() End------------------------------------------


//===============================================================
//
//	住所入力移動関数 
//
//		住所入力し「移動する」ボタンを押されると実行されます
//---------------------------------------------------------------
function showAddress() {
	var address = $(HTML_ADDRTEXT).value;
	if (geocoder) {
		geocoder.getLatLng(address, function(point) {
			if (!point) {
				alert("「" + address + "」は見つかりませんでした");
			} else {
				map.setCenter(point);
				//アイコン作成
				var icon1 = new GIcon();
				icon1.image            = "./images/marker.png";		//Google デフォルトのアイコン
				icon1.shadow           = "./images/shadow50.png";
				icon1.iconSize         = new GSize(20, 34);			//アイコンサイズ
				icon1.shadowSize       = new GSize(37, 34);			//影のサイズ
				icon1.iconAnchor       = new GPoint(9, 34);			//アンカーポイントと画像の左上角からの相対オフセット値
				icon1.infoWindowAnchor = new GPoint(9, 2);
				icon1.infoShadowAnchor = new GPoint(18, 25);
				var marker = new GMarker(point, icon1);

				//アイコンをクリックしたときの情報ウィンドウ表示
				GEvent.addListener(marker, "click", function() {
					map.closeInfoWindow();				//情報ウィンドウ出ていたら削除
					marker.openInfoWindowHtml(address);
				});
				//アイコンをダブルクリックしたときアイコン削除
				GEvent.addListener(marker, "dblclick", function() {
					map.removeOverlay(marker);			//アイコン削除
					map.closeInfoWindow();				//情報ウィンドウ出ていたら削除
				});
				//アイコン表示
				map.addOverlay(marker);
				//情報ウィンドウ表示
				marker.openInfoWindowHtml(address);
			}	//End if
		}	//End if
	);}
}
// showAddress() End---------------------------------------------


//===============================================================
//
//	住所移動テキストボックス上でリターンキーで移動実行
//
//---------------------------------------------------------------
function f_addressKD(evt) {
	//formのsubmitキャンセル後に住所移動
	if (evt.keyCode == 13) {
		if (evt.preventDefault) {
			evt.preventDefault();
		} else {
			evt.returnValue = false;
		}
		showAddress();
	}	//End if
}
// f_addressKD() End---------------------------------------------

//===============================================================
//
//	getElementByIdの省略用関数
//
//---------------------------------------------------------------
function $() {
	var elements = new Array();
	for (var i = 0; i < arguments.length; i++) {
		var element = arguments[i];
		if (typeof element == 'string')
			element = document.getElementById(element);

		if (arguments.length == 1)
			return element;
			elements.push(element);
	}
	return elements;
}
// $() End---------------------------------------------------------


//===============================================================
//
//	アイコン選別関数
//
//		種類によってイメージを変える
//---------------------------------------------------------------
function switchIconImg (id) {

	var strImage = "";		//戻り用
	switch (id) {
		case CateTOCHI:		strImage = "./images/icoTochi.png";break;
		case CateTATEMONO:	strImage = "./images/icoTate.png";break;
		case CateAPART:		strImage = "./images/icoApart.png";break;
		case CateMANSHON:	strImage = "./images/icoManshon.png";break;
		case CateJIGYOU:	strImage = "./images/icoJigyo.png";break;
		default:			strImage = "./images/marker.png";
	}
	return strImage;
}
// switchIconImg() End ---------------------------------------


//===============================================================
//
//	配列コピー（１次元用）
//
//---------------------------------------------------------------
Array.prototype.clone = function(){
	return Array.apply(null,this)
}
// Array.prototype.clone End ------------------------------------

//===============================================================
//
//	配列コピー（多次元用）
//
//---------------------------------------------------------------
Array.prototype.cloneMulti = function() {
	// 自分自身が配列かをチェック
	if ( this[0].constructor == Array ) {
		var ar, n;
		// 新しい配列を用意する
		ar = new Array( this.length );
		for ( n = 0; n < ar.length; n++ ) {
			// 再起呼び出しで配列の中身をコピー
			ar[n] = this[n].cloneMulti();
		}
		// 作成した配列を返す
		return ar;
	}
	return Array.apply( null, this );
}
// Array.prototype.cloneMulti End -------------------------------

//===============================================================
//
//	３桁カンマ区切り
//
//---------------------------------------------------------------
function chgAddComma(argData) {

	var cnt     = 0;
	var retData = "";
	for(var i = argData.length - 1; i >= 0 ; i--) {
		retData = argData.charAt(i) + retData;
		cnt += 1;
		if(((cnt % 3) == 0) && (i != 0))
			retData = "," + retData;
	}	//End for i
	return retData;
}
// chgAddComma End ----------------------------------------------

//===============================================================
//
//	HTMLスペース付加関数
//
//---------------------------------------------------------------
function addSpace(argCnt) {
	var retData = "";
	for(var i = 0; i < argCnt ; i++) {
		retData += "&nbsp;"
	}	//End for i
	return retData;
}
// addSpace End -------------------------------------------------

//===============================================================
//
//	HTMLチェックボックス操作関数
//
//---------------------------------------------------------------
function chgCheckBox(strID) {
	if ($(strID).checked == true) {
		$(strID).checked = false;
	} else {
		$(strID).checked = true;
	}	//End if
}
// chgCheckBox End ----------------------------------------------

//===============================================================
//
//	HTML住所入力初期表示制御関数
//
//---------------------------------------------------------------
flg_1staddressFocus = true;
function f_addressFocus(a) {
	//住所入力ボックスに１番最初にフォーカスしたとき入力内容を消す
	//最初に「ここに住所を入力して移動できます」を入れているため
	if (flg_1staddressFocus) {					
		a.value = "";
		flg_1staddressFocus = false;
	}
}
// flg_1staddressFocus End --------------------------------------
