//--------------------------------------------------------------------------------------------------
// メタ検索　　Ver1.00
//--------------------------------------------------------------------------------------------------
var metasearch__ua = {};
var metasearch__isAjaxUA = false;
var metasearch__setting_simultaneous = {};
var metasearch__setting_simultaneousCount = 0;
var metasearch__currentWindow = "";

//ブラウザのバージョン及び、AJAXの動作するか取得
var ua = navigator.userAgent;
if( ua.match( /Opera[\/\s]([0-9]\.[0-9]+)/ ) ){
	metasearch__ua.Opera = parseFloat( RegExp.$1 );
	if( metasearch__ua.Opera >= 8 ){ metasearch__isAjaxUA = true; }
} else { metasearch__ua.Opera	= 0; }

if( ua.match( /MSIE ([0-9]\.[0-9]+)/ ) && !metasearch__ua.Opera ){
	metasearch__ua.MSIE = parseFloat( RegExp.$1 );
	if( metasearch__ua.MSIE >= 6 ){ metasearch__isAjaxUA = true; }
} else { metasearch__ua.MSIE		= 0; }

if( ua.match( /Firefox[\/\s]([0-9]\.[0-9]+)/ ) ){
	metasearch__ua.Firefox = parseFloat( RegExp.$1 );
	if( metasearch__ua.Firefox >= 1 ){ metasearch__isAjaxUA = true; }
} else { metasearch__ua.Firefox	= 0; }

if( ua.match( /Netscape[0-9]?[\/\s]([0-9]\.[0-9]+)/ ) ){
	metasearch__ua.Netscape = parseFloat( RegExp.$1 );
	if( metasearch__ua.Netscape >= 7 ){ metasearch__isAjaxUA = true; }
} else { metasearch__ua.Netscape	= 0; }

if( ua.match( /Safari/ ) ){
	metasearch__ua.Safari = 1;
	if( metasearch__ua.Safari >= 1 ){ metasearch__isAjaxUA = true; }
} else { metasearch__ua.Safari	= 0; }

//□目的地エリアを表示
function showDesArea(){
	document.getElementById( "desArea" ).style.display = "block";
}
//□フォーム送信ボタン
function metasearch_submit(){
	return !metasearch__isAjaxUA;	//AJAX対応の場合は無効
}
//□値の変更
function metasearch_change( type ){
	metasearch_closePopup();	//全てのポップアップを閉じておく
	metasearch_keywordUpdate();

	if( !metasearch__isAjaxUA ){ return; }
	if( type == "desType" ){
		if( prev_desType == arguments[ 1 ] ){ return; } 
	else { 
		prev_desType = arguments[ 1 ]; }

		var elm = document.getElementById( "lay1" );
		elm.style.backgroundImage = ( arguments[ 1 ] == "japan" ? "url('" + path + "img/tab01_bg.gif')"	: "url('" + path + "img/tab02_bg.gif')" );
		elm.style.backgroundColor = ( arguments[ 1 ] == "japan" ? "#D5E1EA"						: "#DCEDD9" );
		elm.style.borderColor	  = ( arguments[ 1 ] == "japan" ? "#EEE"						: "#DDD" );
	}

	//GET値の生成
	var request = metasearch_makeGetValue( type );

	//フォームを一度初期化
	document.getElementById( "form-desLv1" ).innerHTML = "";
	document.getElementById( "form-desLv2" ).innerHTML = "";
	document.getElementById( "form-desLv3" ).innerHTML = "";

	//XMLファイルの読み込み
	metasearch_include( xmlfile + "?output=xml&" + request , metasearch_renew );
}
//□GET値の生成
function metasearch_makeGetValue( type ){
	//フォーム値の取得
	var formValue = metasearch_getFormValue();

	//リクエスト値の生成
	var request = "depPref=" + formValue.depPref + "&depYear=" + formValue.depYear + "&depMonth=" + formValue.depMonth + "&depDay=" + formValue.depDay + "&keyword=" + formValue.keyword + "&desType=" + formValue.desType;
	switch( type ){
		case "desType" : request += "";																								break;
		case "desLv1"  : request += "&desLv1=" + formValue.desLv1;																	break;
		case "desLv2"  : request += "&desLv1=" + formValue.desLv1 + "&desLv2=" + formValue.desLv2;									break;
		case "desLv3"  : request += "&desLv1=" + formValue.desLv1 + "&desLv2=" + formValue.desLv2 + "&desLv3=" + formValue.desLv3;	break;
		default		   : request += "&desLv1=" + formValue.desLv1 + "&desLv2=" + formValue.desLv2 + "&desLv3=" + formValue.desLv3;	break;
	}
	//その他
	request += "&targetBlank=" + ( metasearch__setting_targetBlank ? "1" : "0" );

	return request;
}
//□インクルード
function metasearch_include( filename , func ){
	filename += ( !filename.match( /\?/ ) ? "?" : "&" ) + "rand=" + String( Math.random() ).substring( 2 , 8 );	//キャッシュをオフにする

	//XMLHttpRequestオブジェクトを生成
	if( metasearch__ua.MSIE && metasearch__ua.MSIE < 7 ){ var request = new ActiveXObject("Msxml2.XMLHTTP"); }
	else { var request = new XMLHttpRequest(); }

	//XMLファイルを読み込む
	request.open( "GET" , path + filename );
	request.onreadystatechange = function(){
		if( request.readyState != 4 ){ return ;}
		var xmlDoc = request.responseXML;
		if( !xmlDoc.documentElement ){ alert( "データインポートエラー：ファイルが存在しないか、XMLファイルではありません。");  return false; }
		func.apply( null , new Array( xmlDoc ) );		//引数の関数実行
	}
	request.send( null );
}
//□フォームの更新
function metasearch_renew( xmlDoc ){
	//フォームを更新
	var temp_xmlData = xmlDoc.documentElement.getElementsByTagName( "form" );
	for( var i = 0 ; i < temp_xmlData.length ; i++ ){
		//値を整理
		var tempAttr  = tempConvAttributesToArray( temp_xmlData[ i ] )
		var tempValue = temp_xmlData[ i ].firstChild.nodeValue;

		//フォームに値を入れなおす
		document.getElementById( tempAttr.id ).innerHTML = tempValue;
	}

	//リンクを更新
	var temp_xmlData = xmlDoc.documentElement.getElementsByTagName( "link" );
	var linkExistFlag = false;
	for( var i = 0 ; i < temp_xmlData.length ; i++ ){
		//値を整理
		var tempAttr  = tempConvAttributesToArray( temp_xmlData[ i ] )
		var tempValue = temp_xmlData[ i ].firstChild.nodeValue;
		if( !document.getElementById( "section-" + tempAttr.id ) ){ continue; }

		//セクションの表示／非表示の切り替え
		document.getElementById( "section-" + tempAttr.id ).style.display = ( tempAttr.visibility == "1" ? "block" : "none" );
		//リンクの表示
		document.getElementById( "link-" + tempAttr.id ).style.display = ( tempAttr.exlink == "0" ? "inline" : "none" );
		//メッセージ
		document.getElementById( "message-" + tempAttr.id ).innerHTML = tempAttr.message.replace( /\t/g , "<br />" );
		//例外リンク
		document.getElementById( "exlink-" + tempAttr.id ).style.display = ( tempAttr.exlink == "1" ? "inline" : "none" );
		if( tempAttr.exlink == "1" ){
 document.getElementById( "exlink-" + tempAttr.id ).innerHTML = tempValue; }

		if( tempAttr.visibility == "1" ){ linkExistFlag = true; }
	}

	//機能
	document.getElementById( "resultFunction" ).style.display = ( linkExistFlag ? "block" : "none" );

	//連携サイト
	var temp_xmlData = xmlDoc.documentElement.getElementsByTagName( "cooperation" );
	for( var i = 0 ; i < temp_xmlData.length ; i++ ){
		//値を整理
		var tempAttr = tempConvAttributesToArray( temp_xmlData[ i ] );

		document.getElementById( "cooperation-" + tempAttr.id ).style.display = ( tempAttr.status == "1" ? "block" : "none" );
	}

	//デバッグが存在する場合
	var temp_xmlData = xmlDoc.documentElement.getElementsByTagName( "debug" );
	if( temp_xmlData.length ){
		var tempValue = temp_xmlData[ 0 ].firstChild.nodeValue;
		if( tempValue ){ debug( tempValue ); }
	}

	//属性を配列に入れなおす
	function tempConvAttributesToArray( xmlData ){
		var result = [];
		for( var i = 0 ; i < xmlData.attributes.length ; i++ ){ result[ xmlData.attributes.item( i ).nodeName ] = xmlData.attributes.item( i ).nodeValue; }
		return result;
	}
}
//□リンク
function metasearch_link( event , myElement , siteID , cooperationData ){
	metasearch_closePopup();	//全てのポップアップを閉じておく
	if( !metasearch__isAjaxUA ){ return; }
	if( !cooperationData ){ cooperationData = ""; }

	//広告URLの有無
	var adurl = ( adUrl[ siteID ] ? true : false );

	//フォーム値の取得
	var formValue = metasearch_getFormValue();

	//URLの生成
	var url = 
		path + linkfile + "?site=" + siteID +
//		"&deparea="  + formValue.depArea +
		"&deppref="  + formValue.depPref +
		"&depyear="  + formValue.depYear +
		"&depmonth=" + formValue.depMonth +
		"&depday="   + formValue.depDay +
		"&destype="  + formValue.desType +
		"&des1="     + formValue.desLv1 +
		"&des2="     + formValue.desLv2 +
		"&des3="     + formValue.desLv3 +
		"&keyword="  + formValue.keyword + 
		( cooperationData ? "&cooperation=" + cooperationData : "" );

	if( !cooperationData.match( /iframe/ ) ){	//通常リンク
		if( !metasearch__setting_simultaneousCount ){
			//一つだけ表示

			//開く
			if( metasearch__setting_targetBlank || !metasearch__currentWindow || metasearch__currentWindow.closed ){
				metasearch__currentWindow = window.open( url + ( adurl ? "&adurl=1" : "" ) , ( metasearch__setting_targetBlank ? "_blank" : "metasearch" ) , "" );
			} else {
				metasearch__currentWindow.location = url + ( adurl ? "&adurl=1" : "" );
			}

			//広告URLがある場合、リダイレクト
			if( adurl ){
				setTimeout( "metasearch__currentWindow.location = '" + url + "';" , 1000 );
				if( document.getElementById( "adimage-" + siteID ) ){ document.getElementById( "adimage-" + siteID ).src = document.getElementById( "adimage-" + siteID ).src; }
			}

			if( metasearch__ua.MSIE ){ event.returnValue = false; }		//IE
			else                     { event.preventDefault(); }		//IE以外
			return false;
		} else {
			//まとめて表示
			var temp = "width=600,height=600,directories=yes,location=yes,menubar=yes,resizable=yes,scrollbars=yes,status=yes,toolbar=yes";  var posX , posY;
			posX = posY = ( metasearch__setting_simultaneousCount - 1 ) * 30;
			temp += ( metasearch__ua.MSIE ? ",left=" + String( posX ) + ",top=" + String( posY ) : ",screenX="+ String( posX ) + ",screenY=" + String( posY ) );
			window.open( url , "_blank" , temp );
			metasearch__setting_simultaneousCount++;
			//	event.returnValue = false;  return false;
		}
	} else {									//iframeリンク
		document.getElementById( "iframe" ).style.display = "block";

		document.getElementById( "iframe-main" ).src = url;

		if( metasearch__ua.MSIE ){ event.returnValue = false; }		//IE
		else                     { event.preventDefault(); }		//IE以外
		return false;
	}
}
//□Google Mapsを開く
function metasearch_googlemaps( event , myElement , siteID ){
	metasearch_closePopup();	//全てのポップアップを閉じておく

//	document.getElementById( "googlemaps" ).style.display = "block";
//	document.getElementById( "googlemaps" ).style.visibility = "visible";

	//フォーム値の取得
	var formValue = metasearch_getFormValue();

	//リクエスト値の生成
	var request = 
		"&destype="  + formValue.desType +
		"&des1="     + formValue.desLv1 +
		"&des2="     + formValue.desLv2 +
		"&des3="     + formValue.desLv3;

	//XMLファイルの読み込み
	metasearch_include( xmlfile + "?output=xml&include=googlemaps&" + request , function( xmlDoc ){
		var label = xmlDoc.documentElement.getElementsByTagName( "label" )[ 0 ].firstChild.nodeValue;
		var lat   = parseFloat( xmlDoc.documentElement.getElementsByTagName( "lat" )[ 0 ].firstChild.nodeValue  );
		var lng   = parseFloat( xmlDoc.documentElement.getElementsByTagName( "lng" )[ 0 ].firstChild.nodeValue  );
		var zoom  = parseFloat( xmlDoc.documentElement.getElementsByTagName( "zoom" )[ 0 ].firstChild.nodeValue );

//		//ラベル指定及び移動
//		document.getElementById( "googlemaps-label" ).innerHTML = label;
//		KsGMapMap.gmap.setCenter( new GLatLng( lat , lng ) , zoom );

//		//一時的処理
//		var url = "http://mapcomi.jp/index.php?lat=" + lat + "&lng=" + lng + "&zoom=" + (17-zoom);
//		window.open( url , "_blank" , "" );

      //google を開く
      var url = "http://maps.google.co.jp/maps?ll=" + lat + "," + lng + "&z=" + zoom;
      window.open( url , "_blank" , "" );
	} );

	if( metasearch__ua.MSIE ){ event.returnValue = false; }		//IE
	else                     { event.preventDefault(); }		//IE以外
	return false;
}
//□フォーム値の取得
function metasearch_getFormValue(){
	var result = {}

//	result.depArea  = ( document.getElementById( "depArea"  ) ? document.getElementById( "depArea"  ).value : "" );
	result.depPref  = ( document.getElementById( "depPref"  ) ? document.getElementById( "depPref"  ).value : "" );
	result.depYear  = ( document.getElementById( "depYear"  ) ? document.getElementById( "depYear"  ).value : "" );
	result.depMonth = ( document.getElementById( "depMonth" ) ? document.getElementById( "depMonth" ).value : "" );
	result.depDay   = ( document.getElementById( "depDay"   ) ? document.getElementById( "depDay"   ).value : "" );
	result.desType  = prev_desType;
	result.desLv1   = ( document.getElementById( "desLv1"   ) ? document.getElementById( "desLv1"   ).value : "" );
	result.desLv2   = ( document.getElementById( "desLv2"   ) ? document.getElementById( "desLv2"   ).value : "" );
	result.desLv3   = ( document.getElementById( "desLv3"   ) ? document.getElementById( "desLv3"   ).value : "" );
	result.keyword  = ( document.getElementById( "keyword"  ).value ? encodeURIComponent( document.getElementById( "keyword" ).value ) : "" );

	return result;
}
//□キーワードのクリア
function metasearch_clearKeyword(){
	document.getElementById( "keyword" ).value = "";
	metasearch_change( '' );
}
//□すべて表示
function metasearch_simultaneous( event ){
	metasearch__setting_simultaneousCount = 1;

	//ターゲットが固定の場合は一時的に新規に変える
	var temp_targetBlank = metasearch__setting_targetBlank;
	metasearch__setting_targetBlank = true;	

	//リンク先をチェックして、メタ検索用リンクの場合はクリックしたことにする
	var elements = document.getElementsByTagName( "A" );
	for( var i = 0 ; i < elements.length; i++ ){
		//対象外
		if( !elements[ i ].id.match( new RegExp( "^link\-(.+-" + prev_desType + ")$" ) ) || 
        elements[ i ].innerHTML.match(/img/) ||
        elements[ i ].style.display == "none"){ continue; }
		var siteID = RegExp.$1;

		//設定でオフになっている場合
		if( metasearch__setting_simultaneous[ siteID ] === false ){ continue; }

		//非表示中の場合
		if( document.getElementById( "section-" + siteID ).style.display == "none" ){ continue; }

//		if( metasearch__ua.MSIE ){
//			elements[ i ].click();	//クリック！
//		} else {
			metasearch_link( event , elements[ i ] , siteID );
//		}
	}

	//ターゲットを元に戻す
	metasearch__setting_targetBlank = temp_targetBlank;

	metasearch__setting_simultaneousCount = 0;

	if( metasearch__ua.MSIE ){ event.returnValue = false; }		//IE
	else                     { event.preventDefault(); }		//IE以外
	return false;
}
//□キーワードをフォーカスから外れた場合
function metasearch_keywordUpdate(){
	var value = document.getElementById( "keyword" ).value;

	//ツアーサイトの表示切替（キーワードで検索できないサイト）
	switchSiteDisplay( "knt-japan" );
	switchSiteDisplay( "jalan-japan" );
	switchSiteDisplay( "knt-world" );
	switchSiteDisplay( "opendoor-world" );
	switchSiteDisplay( "yomiuriryokou-japan" );
	switchSiteDisplay( "yomiuriryokou-world" );
	switchSiteDisplay( "toptour2-japan" );

	//AB-ROADは、国指定時は、検索できない
	if( document.getElementById( "desLv2" ) ){
		if( document.getElementById( "desLv2" ).value ){ switchSiteDisplay( "abroad-world" ); }
		else { document.getElementById( "message-abroad-world-keyword" ).style.display = "none"; }
	}

	//連携サイトの表示切替
	switchCooperationDisplay( "tabicomi" );
	switchCooperationDisplay( "google" );
	switchCooperationDisplay( "marsflag" );
	switchCooperationDisplay( "travelnews" );



	//汎用関数：ツアーサイトの表示切替
	function switchSiteDisplay( id ){
		if( !document.getElementById( "message-" + id + "-keyword" ) ){ return; }
		document.getElementById( "message-" + id + "-keyword" ).style.display = ( value ? "inline" : "none" );
	}
	//汎用関数：連携サイトの表示切替
	function switchCooperationDisplay( id , suffix ){
		if( !suffix ){ suffix = "keyword"; }
		if( !document.getElementById( "cooperation-" + id + "-" + suffix ) ){ return; }

		document.getElementById( "cooperation-" + id + "-" + suffix ).style.display = ( value ? "inline" : "none" );
	}
}
//□設定を開く
function metasearch_openSetting(){
	metasearch_closePopup();	//全てのポップアップを閉じておく

	//新しいウィンドウのタイプ
	if( metasearch__setting_targetBlank ){ $( "setting-target-01" ).checked = true;   $( "setting-target-02" ).checked = false; }
	else                                 { $( "setting-target-01" ).checked = false;  $( "setting-target-02" ).checked = true;  }

	//まとめて表示
	for( var i = 0 ; i < siteID.length ; i++ ){
		var temp = $( "setting-simultaneous-" + siteID[ i ] );
		if( temp ){
			if( typeof( metasearch__setting_simultaneous[ siteID[ i ] ] ) == "undefined" ){ metasearch__setting_simultaneous[ siteID[ i ] ] = true; }
			temp.checked = metasearch__setting_simultaneous[ siteID[ i ] ];
		}
	}

	document.getElementById( "setting" ).style.display = "block";

	function $( id ){ return document.getElementById( id ); }
}
//□設定を適用
function metasearch_applySetting(){
	//新しいウィンドウのタイプ
	metasearch__setting_targetBlank = $( "setting-target-01" ).checked;

	//まとめて表示
	for( var i = 0 ; i < siteID.length ; i++ ){
		var temp = $( "setting-simultaneous-" + siteID[ i ] );
		if( temp ){ metasearch__setting_simultaneous[ siteID[ i ] ] = temp.checked; }
	}

	document.getElementById( "setting" ).style.display = "none";

	function $( id ){ return document.getElementById( id ); }

	metasearch_change( '' );
}
//□ポップアップを閉じる
function metasearch_closePopup(){
	document.getElementById( "setting"    ).style.display = "none";
	document.getElementById( "googlemaps" ).style.display = "none";
	document.getElementById( "iframe"     ).style.display = "none";
}

var adwindow = "";
function metasearch_adtest(){
	var url = "";
	adwindow = window.open( url , "_blank" );
	setTimeout( "metasearch_adtest2()" , 1000 );
}
function metasearch_adtest2(){
	adwindow.location = "http://www.google.co.jp";
}

//――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
function debug( value , option , level ){
	var resultHTML = "";  var maxLevel = false;
	if( !option ){ option = ""; }
	if( !level ){ level = 0; } else if( level >= ( option.match( /maxLevel:([0-9])/i ) ? parseInt( RegExp.$1 ) : 3 ) ){ maxLevel = true; }

	if( typeof( value ) == "object" ){ 				//オブジェクトの場合
		if( maxLevel ){ return "<span style=\"color: #888888\">～省略されました～</span><br />"; }
		for( var i in value ){ resultHTML += "<span style=\"font-weight: bold;\">" + i + "</span>　:　" + debug( value[ i ] , option + ( !option.match( /RECURSIVE/i ) ? " RECURSIVE" : "" ) , level + 1 ); }
		resultHTML = "<div style=\"margin-left:10px;\">" + resultHTML + "</div>";
	} else if( typeof( value ) == "function" ){		//関数の場合
		resultHTML = "<span style=\"color: #888888\">【関数】</span><br />";
	} else {										//文字列 / 数値の場合
		if( option.match( /HTML/i ) && typeof( value ) == "string" ){ value = value.replace( /</g , "&lt;" );  value = value.replace( />/g , "&gt;" ); }		//HTMLの<を&lt;に変換するオプション
		resultHTML = "<span title=\"typeof : " + typeof( value ) + "\">" + value + "</span><br />";
	}

	if( option.match( /RECURSIVE/i ) ){ return resultHTML; }

	if( option.match( /TIME/i ) ){
		var dd = new Date();
		resultHTML = "<span style=\"float: right;\">" + ( dd.getMilliseconds() ) + "</span>" + resultHTML;
	}

	if( !option.match( /ADD/i ) ){			//非追加（通常）
		var prevHTML		= "";
		var backgroundColor	= "#f8f8f8";
	} else {								//追加オプション
		var prevHTML		= document.getElementById( "debug" ).innerHTML;
		var backgroundColor = [ "#f8f8f8" , "#eeeeee" ][ document.getElementById( "debug" ).childNodes.length % 2 ];
	}
	document.getElementById( "debug" ).innerHTML = prevHTML + "<div style=\"background-color: " + backgroundColor + "\">" + resultHTML + "</div>";
}
