﻿////////////////////////////////////////////////////////////
//
//ファイル名	:   asynchronous.js
//機能			:   Ajax関連
//依存			:   -
//バージョン	:　 2.0.0.1
//更新日時		:　 2006.08.01
//更新者		:   kawame
//
/////////////////////////////////////////////////////////////


function GetRequestItem(RequestParam)
{
  var xmlHttp = '';
  // XMLHttpRequestオブジェクトの生成
  try {
    // IEの場合



    xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
  } catch(e) {
    // Firefoxなど
    xmlHttp = new XMLHttpRequest();
  }

  // XMLHttpRequestオブジェクトの状態をチェック
  xmlHttp.onreadystatechange = function()
  {
    //受信したデータを反映
    if (xmlHttp.readyState == 4)
    {
      if (xmlHttp.status == 200)
       {
        var data ='';
        var responseParam = '';
       //データの受信
		data = xmlHttp.responseText;
	   //どのリクエストのレスポンスが帰ってきたかヘッダで判断
		responseParam = xmlHttp.getResponseHeader("resParam");
		//データの反映	
		Reflection(responseParam,data);
		//処理が完了したらオブジェクトを破棄する



//		xmlHttp.abort();       
      }
    }
  }

//サーバに送信するするデータを取得



var transvalue = SelectTransData(RequestParam);

//POST、転送先DataTransfer.aspx、非同期'true'でOPEN
 xmlHttp.open("POST", "DataTransfer.aspx", true);
//POSTのデータの場合必須



 xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
 xmlHttp.setRequestHeader("SendType", "ajax");

 //param=処理を分けるパラメータ、transdata=送信するデータ
 xmlHttp.send("param=" + RequestParam + "&transdata=" + transvalue); 

 
 //////////////////////////////////////////
 //属性検索の場合、属性があったらtrue、属性がなかったらfalseを返す。



 //ようにすること
 //////////////////////////////////////////
 
}
/////////////////////////終わり/////////////////////////////
////////////////////////////////////////////////////////////


////////////////////////始まり//////////////////////////////
////////////////送信するデータの判断をする//////////////////
//サーバに送信すべきデータをパラメータごとに取得する(関数に投げる)
function SelectTransData(RequestParam)
{
	var transvalue = "";
//①STEP1  Lv0のIDを送信する場合(レイヤツリーを要求する場合)
	if(RequestParam=='reqLayerTree')
	{
		transvalue = LayerTreeTransData();
	}
//②STEP1　起動時のレイヤツリー要求

	if(RequestParam=='reqInitLayerTree')
	{
		transvalue = LayerTreeTransData();
	}
//③STEP1  MapCategoryを送信する場合(レイヤカテゴリを送信して地図を更新する場合)
    if(RequestParam =='reqMapCategory')
    {
		var Lv1ID = GetCheckedId('middle');    
		var catID = GetCheckedId('small');
		
		transvalue = GetCheckedId('small');
		
		//地図画像更新の待機画像をセット					
		setMapLoadingLayer();
    }
//④STEP1  Lv0のIDを送信する場合(属性検索レイヤ一覧を要求)
	if(RequestParam=='reqSearchLayer')
	{
		transvalue = LayerTreeTransData();
	}
	
//⑤STEP1　一時図形
	if(RequestParam=='reqTempItem')
	{
		transvalue = "0&type=tempAdd&geometry="+con_coords+"&style="+con_style;
	}
	
//⑦STEP1　計測 座標列を入れる。

	if(RequestParam=='reqMeasureResult')
	{
		transvalue = "0&type=measure&spatial="+con_measuretype+"&coords="+con_coords+con_style;	
	}
//⑩STEP1　URL取得

	if(RequestParam=='reqURL')
	{
		if(this.search_mode == "top" || this.search_mode == "cat")
		{
			transvalue = "&mode="+this.search_mode+"&xy=" + this.x + "," + this.y ;		
		}
		else
		{
			var Lv1ID = GetCheckedId('middle');
			transvalue = "&mode=map&xy=" + map_centerX + "," + map_centerY + "&scale=" +map_scale + "&lv1id=" + Lv1ID;		
		}
	}
	
//⑪STEP1 近隣施設表示
	if(RequestParam=='reqSearchNeighbor')
	{
//		rangeValue = GetSearchNeighborRange();
		transvalue =map_centerX + "," + map_centerY + "," + con_neighbor_search_dist;
	}
//⑫STEP1　近隣施設表示の前へボタンをクリック
	if(RequestParam=='reqPreNeighbor')
	{		
		transvalue = GetNeighborListPageNo('SearchNeighborListCreate_PrePageButton');
	}
//⑬STEP1 近隣施設表示の次へボタンをクリック
	if(RequestParam=='reqNextNeighbor')
	{		
		transvalue = GetNeighborListPageNo('SearchNeighborListCreate_NextPageButton');
	}
//⑭STEP1　近隣施設表示ピン描画
	if(RequestParam=='reqSearchNeighborPosition')
	{
		transvalue = "0&type=searchNeighbor&sKey="+con_skey;		
	}
	
//⑮STEP1　凡例表示	
	if(RequestParam=='reqLegend')
	{
		transvalue = LayerTreeTransData();		
	}
	
//⑯STEP1　投稿情報図形保存

	if(RequestParam=='reqPostAdd')
	{
		transvalue = con_mapurl+"&type=postAdd&geometry="+con_coords+"&style="+con_style;
	}
	
//【21】'   STEP1ルート検索
	if(RequestParam =='reqSearchRouteResult')
	{
		transvalue = "0&type=route&coords="+con_coords+"&goal="+routeGoalPoint+"&start="+routeStartPoint;//+"&rad="+con_routerad+"&style="+con_style ;	
		
	}
	
//【23】   STEP1全図形削除
	if(RequestParam=='reqItemRemove')
	{	
		transvalue = "0&type=removeAll";
	}
	
//【24】   STEP1強調図形IDセット
	if(RequestParam=='reqSetEmphasis')
	{	
		transvalue = con_emphasisid;
	}
//
	if(RequestParam=='reqSearchCircleRemove')
	{
		transvalue = "0&type=searchcircleRemove";
	}
	
	if(RequestParam =='reqMapShowScale')
	{
		transvalue = LayerTreeTransData();		
	}
	
	if(RequestParam=='reqRouteStart')
	{
		transvalue = "0&type=routeStart&start="+con_coords;//+"&style="+con_style;
	}
	if(RequestParam=='reqRouteStartRemove')
	{
		transvalue = "0&type=removeRouteStart";
	}
	
//サーバに送信する値を返す
	return transvalue;
}
/////////////////////////終わり/////////////////////////////
////////////////////////////////////////////////////////////


////////////////////////////////////////////////////////////
////////////////送信するデータを取得////////////////////////
//①②④⑮STEP2  レイヤツリーの送信データを取得



function LayerTreeTransData()
{
	//20060726 大堀　レイヤツリーのポップアップ対策のため追加
	var win = window.opener?window.opener:this;
	var node = win.document.getElementById(win.Lvl0DDL);
	if(node)
	{
		transvalue=node.value;	
	
		//メインウィンドウからの要求の場合は必ず画像が更新される

		//サブウィンドウからの要求の場合は、画像は更新せずレイヤツリーのみの要求

		if(this.document.getElementById("map_image")!=null)
		{
			//地図画像更新の待機画像をセット					
			setMapLoadingLayer();
		}
	}
	else
	{
		//TODO 万が一コントロールがなかった場合の処理

		transvalue = "";
	}
	return transvalue;
}
//③⑩STEP2  チェックされているカテゴリIDをカンマ区切りで返す
function GetCheckedId(TitleID)
{	
	var transvalue='';
	var vTitleID=TitleID+ '_title_0c';	
	for(i=0 ; document.getElementById(vTitleID)!=null ; ++i)
		{				
			vTitleID =TitleID + '_title_' + i + 'c';			
			if(document.getElementById(vTitleID))
			{						
				if(document.getElementById(vTitleID).checked)
				{
					if(transvalue=='')
					{
						transvalue= transvalue + document.getElementById(vTitleID).value;
					}
					else
					{
						transvalue= transvalue +  ',' + document.getElementById(vTitleID).value;
					}
				}		
			}
		}
	return transvalue;
}

function GetNeighborListPageNo(elementID)
{
	var node = document.getElementById(elementID);
	if(node)
	{
		var transvalue = node.name;	
		return transvalue;
	}
	else
	{
		//TODO 万が一コントロールがなかった場合の処理を記述すること
		return "";
	}
}

/////////////////////////終わり/////////////////////////////
////////////////////////////////////////////////////////////


////////////////////////始まり//////////////////////////////
/////////////////受信データの反映///////////////////////////
//受信したデータをパラメータによって
//反映場所を判断し、実行する



function Reflection(responseParam,data)
{
//①STEP3  レイヤツリーの場合
	if(responseParam=='reqLayerTree' )
	{	
	   //レイヤツリーを更新
	   var node = document.getElementById('resLayerTree');
	   if(node)
		{
			node.innerHTML=data;
		}
		//20060621 大堀修正
		//メインウィンドウからの要求の場合は必ず凡例が更新される

		//サブウィンドウからの要求の場合は、凡例は更新せずレイヤツリーのみの要求

		if(this.document.getElementById("map_image")!=null)
		{
			GetRequestItem('reqLegend'); 
		}
    }
    if(responseParam=='reqInitLayerTree')
    {
		var node = document.getElementById('resLayerTree');
	    if(node)
		{
			node.innerHTML=data;
		}
		GetRequestItem('reqLegend');
    }
    //20060621 大堀追加
    if(responseParam=='reqPopUpLayerTree' )
	{	
	   var node = document.getElementById('resLayerTree');
	   if(node)
		{
			node.innerHTML=data;
		}
    }
    
//③STEP3  レイヤの切り替えの場合(レイヤカテゴリを送信して地図を更新する場合)
    if(responseParam=='reqMapCategory')
	{	
		//20060726 大堀　レイヤツリーのポップアップ対策のため追加
		var win = window.opener?window.opener:this;
	   win.mapLayer.src = win.mapLayer.src + '&l'; 
    }
//④STEP3  レイヤツリーの場合

	if(responseParam=='reqSearchLayer')
	{	
	   //レイヤ一覧を更新
	   var node =  document.getElementById('ohori');
	   if(node)
	   {
			node.innerHTML=data;
		}
    }
    
//⑤⑦【21】STEP3　一時作図・計測結果・ルート検索結果を地図に反映    
    if(responseParam=='reqMeasureResult' || responseParam=='reqTempItem')
    {   
		mapLayer.src = mapLayer.src + "&l"
    }
    
//⑩STEP　URLを反映
	if(responseParam=='reqURL')
	{	
		if(this.search_mode == "top")
		{
			window.opener.location.href = data;
			//window.close();
		}
		else if(this.search_mode == "cat")
		{
			location.href = data;
		}
		else
		{
			//レイヤツリーを更新
			var node = document.getElementById('LinkUrlBox');
			if(node)
			{
				node.value=data;
			}
		}
    }
//⑪⑫⑬STEP3　近隣施設表示の一覧を反映
    if(responseParam=='reqSearchNeighbor' || responseParam=='reqPreNeighbor'|| responseParam=='reqNextNeighbor')
    {
		var node = document.getElementById('searchneighbor_result');
		if(node)
		{
			node.innerHTML=data;    
		}
    }
//⑭STEP3　近隣施設ピン描画を反映
    if(responseParam=='reqSearchNeighborPosition')
	{	   
		setViewSelectedItem(data);
    }
//⑮STEP3　凡例を表示
    if(responseParam=='reqLegend')
	{	   
		var node = document.getElementById('legend_contents');
		if(node)
		{
			node.innerHTML=data;
		}
		GetRequestItem('reqMapShowScale'); 
    }
//⑯STEP1　投稿情報図形保存

	if(responseParam=='reqPostAdd')
	{
		clearLoadingLayer(1);
		setItemAttribute();
	}
	
//【23】   STEP1全図形削除
	if(responseParam=='reqItemRemove')
	{	
		//2006.06.06　S.Kawame
		if(data == "top" || data == "cat")
		{
			var node = document.getElementById("clear_temp");
			if(node)
			{
				node.style.display = "inline";
			}
			
			figure_flg= true;
			var msg = clearSearchPin;	
			if(removeItemMsg.indexOf(msg,0) == -1)
			{
				removeItemMsg += msg;
			}	
		}
		else
		{
			mapLayer.src = mapLayer.src + '&l'; 
		}
	}
	
	if(responseParam=='reqSearchRouteResult')
	{
		mapLayer.src = mapLayer.src + '&l'; 
		if(data == "true")
		{
			figure_flg = true;
		
			if(removeItemMsg.indexOf(clearRoute,0) == -1)
			{
				removeItemMsg += clearRoute;
			}
			
			var node = document.getElementById("clear_temp");
			if(node)
			{
				node.style.display = "inline";
			}
		}
		else if(data == "false")
		{
			alert("ルートは検索できませんでした。")	;
		}
		modeChange(DEF_MODE);
		routeStart = false;
	}
	//【23】   STEP1全図形削除
	if(responseParam=='reqInitItemRemove')
	{
		//地図更新は、呼び出し元でやる
	}
	if(responseParam=='reqMapShowScale')
	{
		var f = setMapShowScale(data);
		if(endInitGis == false)
		{
			gis.viewManager.refresh();
		}
		else if(f==true)
		{
			gis.viewManager.refresh();
		}
		else
		{
			mapLayer.src = mapLayer.src + "&l";
		}
		endInitGis = true;
	}
	if(responseParam=='reqRouteStart')
	{		
		modeChange('search_route');
		mapLayer.src = mapLayer.src + '&l'; 
	}
	if(responseParam=='reqRouteStartRemove')
	{
		mapLayer.src = mapLayer.src + '&l'; 
	}
	
	
	// 20060731 大堀追記　"timeout"のヘッダが帰ってきたらセッション切れ。

	//エラーページに飛ばす。

	if(responseParam=='timeout')
	{
		var win = window.opener?window.opener:this;
		if(win==this)
		{	
			document.location.href="MapError.aspx";	
		}
		else
		{
			document.location.href="../MapError.aspx";			
		}
	}

	
	
}
////////////////////////終わり//////////////////////////////
////////////////////////////////////////////////////////////
