﻿
	//じゃらんＡＰＩウェブサービスを利用しています。
	//宿コードを指定する事によりバリューコマースじゃらんから指定の宿詳細を表示します。
	//コード＝　<a Href="http://ck.jp.ap.valuecommerce.com/servlet/referral?sid=2357831&pid=875224379&vc_url=http%3a%2f%2fwww%2ejalan%2enet%2fuw%2fuwp3000%2fuww3001%2edo%3fyadNo%3d' + hotel_id[i] + '%26rootCd%3d03%26afCd%3d31%26vos%3dnjalvccp99000" target="_blank" ><img Src="http://ad.jp.ap.valuecommerce.com/servlet/gifbanner?sid=2357831&pid=875224379" height="1" width="1" Border="0">' + hotel_name[i] + '（詳細）</a>
	
	
	
function doSearch (start_page){

  //利用する変数を設定します。
	 var str_html = ""   ;                  //htmlエラー表示の取得
	 var res_count = 0  ;                   //対象宿の該当件数を取得
	 var view_count = 0  ;                  //このページの表示件数を取得
  	 var hotel_id = new Array ();           //各宿番号の取得
     	 var hotel_photo = new Array ();        //各宿写真のURLを取得
      	 var hotel_name = new Array ();         //各宿名を取得
     	 var hotel_catchcopy = new Array ();    //各キャッチコピーを取得
	 var hotel_rate = new Array ();         //参考料金の表示
      	 var hotel_jx = new Array ();           //各緯度を取得
     	 var hotel_jy = new Array ();           //各経度を取得

	 
	 var result_html = "";                  //html検索結果を表示する
	 var pagenavi_html = "";                //htmlページナビゲーションを表示する
     	 var yadoichiran_html = "";             //htmlで宿一覧を作成
  	 var start = 1 ;			//ページ初期値を１ページ目と設定します。
	



      	 var wy = myLatlng[0]; //世界系緯度
      	 var wx = myLatlng[1]; //世界系経度

	  // 世界測地系（度）から日本測地系（度）に変換します
          var jy = wy * 1.000106961 - wx * 0.000017467 - 0.004602017;　//日本系緯度
          var jx = wx * 1.000083049 + wy * 0.000046047 - 0.010041046;　//日本系経度

          //日本測地系（ミリ秒）に変換します
          var jy_ms = parseInt(jy * 3600 * 1000);
          var jx_ms = parseInt(jx * 3600 * 1000);
	
	//cgiに必要なデータを送信します
		 
	//開始ページ、ミリ秒単位の緯度経度をクエリの要素として加えます
	start = (start_page -1) * 10 + 1;
	$('f').start.value = start;
	$('f').x.value = jx_ms;
	$('f').y.value = jy_ms;
	
	//題名欄に「じゃらん宿の検索」をしている旨の表示をします
	$('kekka_daimei').innerHTML = '<b>じゃらん宿の検索</b>'; 
	$('page_navi').innerHTML     = '';  //ページナビを消去する
			
	//結果欄と一覧表欄に「只今　目的地設定中の表示をします
	$('yado_kekka').innerHTML = '<b>只今</b>'
	$('yado_ichiran').innerHTML = '<p style="padding:25px"><img src="scr_hol/ajax_load_orange.gif" \/><br />検索中...<\/p>';

	//----cgiに必要データを送信
     	var myAjax = new Ajax.Request(
	'search.cgi',
	{    
		method: 'post', 
		postBody: Form.serialize($('f')),
		onComplete:function(request) {   
		$('yado_ichiran').innerHTML = '<p style="padding:8px"><b>読み込み終了しました</b></p>';
                                 // alert('読み込みが終了しました'); 
		    　showResponse (request);
　				　　　},   
                onSuccess: function(request) {   
		$('yado_ichiran').innerHTML = '<p style="padding:8px"><b>読み込み成功しました</b></p>';
                  //alert('読み込み成功しました'); 
		// jsonの値を処理する場合↓↓   
                  //  var json;   
                  //  eval("json="+request.responseText);   
	              },   
                onFailure: function(request) {   
                  //alert('読み込みに失敗しました');   
                       request.transport.abort();
		      },   
                onException: function (request) {   
                  //alert('読み込み中にエラーが発生しました');   
                      request.transport.abort();
		      }  

	}
	);
			
	//----cgiに必要データを送信終了






	//----cgiから受信したデータを加工します
	function showResponse (request){
		//alert('いまからデータ処理'); 
		//alert('いまからデータ処理2' + request.responseText); 
	    //cgiから受信したデータをcsv方式で受信します
		var rcvdata = new Array();
		rcvdata = request.responseText.split(",") ;
		//alert('データ処理中'); 

            //検索結果が ０件の場合は目的地検索「obSearch()」を実行します
	       if(rcvdata[1] == 0 || rcvdata[1] =="")
		{
			
			//alert('データ1=' + rcvdata[1]); 
			obSearch();
	　　　　}

　　　　　　//検索結果が ０件の以外の場合の処理を行います。
				
		else
		
		{

		
	  //取得したデータをjavascriptで加工します
          //各変数に値を設定します
		 str_html = rcvdata[0] ;
		 res_count = parseInt(rcvdata[1]) ;
		 view_count = parseInt(rcvdata[2]) ;
		 
	 	
		 
		 for( var i = 0; i < view_count; i++ ) 
			 {
				hotel_id[i]      =    trim(rcvdata[(i * 7) + 3]);       //各宿番号の取得
				hotel_photo[i]   =    rcvdata[(i * 7) + 4];       //各宿写真のURLを取得
				hotel_name[i]    =    rcvdata[(i * 7) + 5];       //各宿名を取得
				hotel_catchcopy[i] =  rcvdata[(i * 7) + 6];       //各キャッチコピーを取得
				hotel_rate[i]    =    rcvdata[(i * 7) + 7];       //参考料金の表示
				sanko_ryokin = ""
				if(eval(rcvdata[(i * 7) + 7]) == "0")
					{
					hotel_rate[i] = "" ;
					}
					else
					{
					sanko_ryokin = hotel_rate[i] ;
					hotel_rate[i] = sanko_ryokin ;
					}

				hotel_jx[i]     =  parseFloat(rcvdata[(i * 7) + 8]);        //各緯度を取得
				hotel_jy[i]     =  parseFloat(rcvdata[(i * 7) + 9]);        //各経度を取得
			
			 }
		
	 //検索結果が０件の場合はobsearch(0)へ移動するようにしています。
	
	 //表示可能な最大ページ数を計算します
		var max_page = (res_count%10 > 0) ? parseInt(res_count/10) + 1 : parseInt(res_count/10);//ページ数
		

	//検索結果が１００件を超える場合は１００件に制限します
		max_page = (max_page > 10 ) ? 10 : max_page ;//ページを10(１００件)に制限する


	//掲載が２ページ以上ある場合はページナビゲーションを設定します
		pagenavi_html =""
		if (start_page > 1)
		    {  
		     pagenavi_html += '<a href="javascript:void(0)" onclick="doSearch (' + (start_page - 1) + ');">←前へ</a>　';								    }
		for (var i = 1; i <= max_page; i++ )
			{
			if (start_page == i)
				{
				pagenavi_html += '<span id="page_navi" style="background-color:#fff000;">' + i + '</span>　';
				}
			else
				{
				pagenavi_html += '<a href="javascript:void(0)" onclick="doSearch (' + i + ');">' + i + '</a>　';
				}
			}
		if (start_page < max_page && 1 <= max_page )
			{
			  pagenavi_html += '<a href="javascript:void(0)" onclick="doSearch (' + (start_page + 1) + ');">次へ→</a>';
			
			}
          

	
	  //検索結果(result_html)を表示します。
	    result_html += '<div>検索結果：' + res_count + ' 件<span>（うち ' + ((start_page-1)*10 + 1) + '－' + ((start_page-1)*10+view_count) + '件を表示）</span></div>';
		

	
	//このページの検索状態表示と宿リストを作成します
	    yadoichiran_html = "<div>検索状態 :　" + str_html + "</div>" ;
	    yadoichiran_html += '<span id="mark_'+ view_count + '" style="padding:6px;"><a href="javascript:void(0)" onclick="this.blur()" ><b>目標地点</b></a></span><br>';
		for (var i = 0; i < view_count; i++ )                           //view_count=実表示件数
               {
			yadoichiran_html += '<li id="mark_'+ i + '" style="padding-right:2px;"><a href="javascript:void(0)" onclick="this.blur()" >' + hotel_name[i] + '</a></li>';
			}
	

		//各欄に結果を表示するコマンド
		$('kekka_daimei').innerHTML  = '<b>じゃらん宿泊施設検索結果</b>';
		$('page_navi').innerHTML     = pagenavi_html;  //ページナビを設定
		$('yado_kekka').innerHTML    = result_html;   //宿結果件数を設定
		$('yado_ichiran').innerHTML  = yadoichiran_html; //宿検索結果を設定
	
		
	//今までに作成されたオーバーレイ(マーカー、アイコン等)を削除します
          map.clearOverlays();
		
		
	//各データを元に地図中のアイコンを設定します。
			 var baseIcon = new GIcon();
			baseIcon.shadow = "http://www.google.com/mapfiles/shadow50.png";
			baseIcon.iconSize = new GSize(20, 34);
			baseIcon.shadowSize = new GSize(37, 34);
			baseIcon.iconAnchor = new GPoint(9, 34);
			baseIcon.infoWindowAnchor = new GPoint(9, 2);
			baseIcon.infoShadowAnchor = new GPoint(18, 25);
		
		      
	// 予め設定された位置を中央にに地図を表示します。Center the map on Palo Alto
	//デフォルトはmapに設定します。
			//var map = new GMap2(document.getElementById("map"));
			//map.addControl(new GLargeMapControl());
			//map.addControl(new GMapTypeControl());

	//選択した距離によって宿掲載地図の縮尺を決定します
			//if(!show_range.innerHTML)
		//	{
		//		show_range.innerHTML = "10"
		//	}
		//	map.setCenter(new GLatLng(wy,wx),parseInt(show_range.innerHTML));
		//	map.setMapType(G_MAP_TYPE);
		      
	// マーカーはＡ，Ｂ，Ｃ・・で表現します。
	// Create a marker whose info window displays the letter corresponding
	// to the given index.
	   function createMarker(point, index) {
			    if(index ==  view_count)
		  	 {
		  	 	var blueIcon = new GIcon(G_DEFAULT_ICON);
			  	blueIcon.image = "http://gmaps-samples.googlecode.com/svn/trunk/markers/blue/blank.png";
				// Set up our GMarkerOptions object
				markerOptions = { icon:blueIcon };
				var marker = new GMarker(point, markerOptions)
		        var html = ('ここにコメントを追加します')
			  }	
			 else
			  { 
			    var letter = String.fromCharCode("A".charCodeAt(0) + index);
          		var letteredIcon = new GIcon(baseIcon);
          		letteredIcon.image = "http://www.google.com/mapfiles/marker" + letter + ".png";
          		markerOptions = { icon:letteredIcon };
				var marker = new GMarker(point, markerOptions);
			   }
			
	// 最高10程度に地点を設定します。
	// 地図のマーカーをクリックした時も、ページ中の地名をクリックしても詳細が出るようにします。
				

				var mark_ = new Array
				for( var i = 0; i < view_count; i++ )  //view_count=実表示件数
          		{
				if (index==i){
				var html =('<table width="274" height="148" bgcolor="eeefff"><tr><td colspan="2" style="padding:4px;font-size:11pt"><b><a Href="http://ck.jp.ap.valuecommerce.com/servlet/referral?sid=2357831&pid=875224379&vc_url=http%3a%2f%2fwww%2ejalan%2enet%2fuw%2fuwp3000%2fuww3001%2edo%3fyadNo%3d' + hotel_id[i] + '%26rootCd%3d03%26afCd%3d31%26vos%3dnjalvccp99000" target="_blank" ><img Src="http://ad.jp.ap.valuecommerce.com/servlet/gifbanner?sid=2357831&pid=875224379" height="1" width="1" Border="0">' + hotel_name[i] + '（詳細）</a></b></td></tr><tr><td style="padding:4px;"><img src="' + hotel_photo[i] + '" alt=""></td><td style="font-size:8pt"><div style="padding:4px">' + hotel_catchcopy[i] + '</div><div style="padding:4px">参考料金 : ￥' + hotel_rate[i] + '</div></td></tr></table>');
				mark_[i] = document.getElementById("mark_"+i);
				if(mark_[i]){mark_[i].onclick = hyoji;};
				};
				}
				if (index == view_count)
				{
				var html =('<table height="70"><tr><td style="padding:4px;font-size:10pt;background-color:#ff0000;color:#ffffff"><b>「じゃらん宿」検索中</b><div style="padding:4px;font-size:10pt;"><a href="javascript:obSearch(1);" ><b>目的地点を変更する</b></a></div></td></tr></table>');
				mark_[view_count] = document.getElementById("mark_" + view_count);
				if(mark_[view_count]){mark_[view_count].onclick = hyoji;};
				}
				
				
				
	// ページ内からリンクされたときに詳細を表示します。 
				function hyoji() {marker.openInfoWindowHtml(html);};
				
	// 地図の中でマーカーをクリックした時に詳細を表示します
				GEvent.addListener(marker, 'click', function() {
				marker.openInfoWindowHtml(html);});
				
				
				return marker;
				};
			


		     
	// 各地点のマーカーポイントを緯度、経度で設定します。
				for( var i = 0; i < view_count; i++ )  //view_count=実表示件数
          		{ 
					var point = ChangeLocationJapanToGlobal(hotel_jx[i],hotel_jy[i]);
					var marker = createMarker(point,i);
					map.addOverlay(marker);
					
				}
	
	
	
	//目標を示すためにblueIconを設定します。
				var point = new GLatLng(wy,wx);
				var marker = createMarker(point,view_count);
				map.addOverlay(marker);
       //検索結果が0以外の場合の処理を終了します
	
		}
       //----cgiから受信したデータ加工を終了します----showResponse (request)の終了
		}
	
	//doSearchの終了
	
	}

	
//---- [javascript] サーバが一定時間応答しなかったら処理を打ち切る
//setTimeoutで「5秒たったら通信が完了したかどうかチェックする処理」を登録する
function callInProgress (xmlhttp) {
  switch (xmlhttp.readyState) {
  case 1: case 2: case 3:
    return true;
    break;
  // Case 4 and 0
  default:
    return false;
    break;
  }
}

//XMLHttpRequest の通信の状態 xmlhttp.readyState
//0 = uninitialized（読み込み開始前の初期状態）
//1 = loading（読み込み中）
//2 = loaded（とりあえず読み込んだ）
//3 = interactive（読み込んだデータを解析中）
//4 = complete（読み込んだデータの解析完了、または失敗した。つまり処理が終わった） 



function showFailureMessage() {
  alert('ネットワークがダウンているので、少し時間を空けてから試してみてください');
obSearch();
}


// Register global responders that will occur on all AJAX requests
Ajax.Responders.register({
  onCreate: function(request) {
    request['timeoutId'] = window.setTimeout(
     function() {
	//alert('タイムアウト設定しました'); 
      // If we have hit the timeout and the AJAX request is active, abort it and let the user know
      if (callInProgress(request.transport)) {
        request.transport.abort();
        showFailureMessage();
	     // Run the onFailure method if we set one up when creating the AJAX object
	      if (request.options['onFailure']) {
	          request.options['onFailure'](request.transport, request.json);
		//alert('onFailureのタイムアウト設定しました'); 
	        }
	      if (request.options['onException']) {
	          request.options['onException'](request.transport, request.json);
		//alert('onExceptionのタイムアウト設定しました'); 
	        }
      }
    },
    5000 // Five seconds
    );
  },
  onComplete: function(request) {
    // Clear the timeout, the request completed ok
    window.clearTimeout(request['timeoutId']);
	//alert('タイムアウト解除しました'); 
	
    }
});


// [javascript] サーバが一定時間応答しなかったら処理を打ち切る-----終了



