var selectWord = "";

function SWFAddressChange(event)
{
	var key = event.path;
	if ( key != "" )
	{
		var parseStr = key.split( "/" );
		var targetOffset = $('#PGSSearchText').offset().top;
		if ( parseStr[ 1 ] == "key" )
		{
			selectWord = parseStr[ 2 ];
			searchObject.directPage( selectWord );
			$("#PGS-list-flow").css( { display:"none" } );
			$( $.browser.safari ? 'body' : 'html' ).animate( { scrollTop: targetOffset }, 800, "swing" );
		}
		else
			searchObject.searchKeywordCount();
	}
	else
		searchObject.searchKeywordCount();
}


searchObject = {
	labelNames : new Array(), 
	showpg : "",
	init : function ()
	{
		this.sortLabel = { wb:7, al:6, wl:5, cc:4, fl:3, tt:2, tl:1,
						mh:7, aw:6, pd:5, ld:4, ac:3, ml:2, mi:1,
						parkwide:0, etc:0 };

		this.searchOptionTextArray = [
		{ word: '利用制限', caption:'アトラクションをご利用の際、7歳未満のお子様には16歳以上の方の同伴が必要です。詳しくは各アトラクションのキャスト、および案内サインにてご確認ください。', park: 'tdl' },
		{ word: '小さな子供', caption: '「<a href="#/key/theater">シアタータイプのアトラクション</a>」「<a href="#/key/play">子供向け遊び場</a>」も併せてご利用ください。', park: '*' },
		{ word: 'テーブルサービス', caption: 'キャストがテーブル席にご案内して、メニューのご注文や料理の提供を行います。', park: '*' },
		{ word: 'カウンターサービス', caption: 'お好きな料理をお選びいただき、レジで会計の後、カウンターでお受け取りください。', park: '*' },
		{ word: 'バフェテリアサービス', caption: 'お好きな料理をトレーにのせてレジで会計してください。', park: '*' },
		{ word: 'ブッフェ', caption: 'レジで会計後、お好きな料理をお好きなだけお召し上がりいただけます。', park: '*' },
		{ word: 'デジタルカメラ', caption: '引渡しはカメラセンターのみです。', park: 'tdl' },
		{ word: '利用制限', caption:'アトラクションをご利用の際、7歳未満のお子様には16歳以上の方の同伴が必要です。また、身長制限のあるアトラクションをご利用予定のお子様を対象に、メディテレーニアンハーバーの<a href="/tds/service/in_parkinfoboard.html">パークインフォメーションボード</a>で身長を確認いたします。詳しくは各アトラクションのキャスト、および案内サインにてご確認ください。', park: 'tds' },
		{ word: 'デジタルカメラ', caption: '引渡しはフォトグラフィカのみです。', park: 'tds' }
		];

		this.specialSearchArray = [
		{ tags:"ポップコーン", link: "/tdl/japanese/menu/popcornwagon/index.html", title:"ポップコーンワゴン", titleimg:"", kana:"ポップコーンワゴン", text: "/tdl/etc/thumb_ti01.gif", theme:"etc", park: 'tdl' },
		{ tags:"ポップコーン", link: "/tds/japanese/menu/popcornwagon/index.html", title:"ポップコーンワゴン", titleimg:"", kana:"ポップコーンワゴン", text: "/tds/etc/thumb_ti01.gif", theme:"etc", park: 'tds' },

		{ tags:"ペットボトル,買い忘れた", link: "/tdl/service/ot_promenadegifts.html", title:"プロムナードギフト", titleimg:"thumb02.jpg", kana:"プロムナードギフト", text: "/tdl/etc/thumb_ti02.gif", theme:"etc", park: 'tdl' },
		{ tags:"ペットボトル,買い忘れた", link: "/tdl/service/ot_promenadegifts.html", title:"プロムナードギフト・イースト", titleimg:"thumb03.jpg", kana:"プロムナードギフト・イースト", text: "/tdl/etc/thumb_ti03.gif", theme:"etc", park: 'tdl' },
		{ tags:"ペットボトル,買い忘れた", link: "/tds/service/ot_parkwaygifts.html", title:"パークウェイギフト・サウス", titleimg:"thumb02.jpg", kana:"パークウェイギフト・サウス", text: "/tds/etc/thumb_ti02.gif", theme:"etc", park: 'tds' },
		{ tags:"ペットボトル,買い忘れた", link: "/tds/service/ot_parkwaygifts.html", title:"パークウェイギフト・ノース", titleimg:"thumb03.jpg", kana:"パークウェイギフト・ノース", text: "/tds/etc/thumb_ti03.gif", theme:"etc", park: 'tds' },

		{ tags:"宅配サービス", link: "/tdl/service/in_delivery.html", title:"宅配センター", titleimg:"", kana:"タクハイセンター", text: "/tdl/etc/thumb_ti04.gif", theme:"etc", park: 'tdl' },
		{ tags:"宅配サービス", link: "/tds/service/in_delivery.html", title:"宅配センター", titleimg:"", kana:"タクハイセンター", text: "/tds/etc/thumb_ti04.gif", theme:"etc", park: 'tds' },

		{ tags:"買い忘れた", link: "/tdr/bv.html", title:"ボン・ヴォヤージュ", titleimg:"", kana:"ボン・ヴォヤージュ", text: "/tdl/etc/thumb_ti05.gif", theme:"etc", park: 'tdl' },
		{ tags:"買い忘れた", link: "/tdr/bv.html", title:"ボン・ヴォヤージュ", titleimg:"", kana:"ボン・ヴォヤージュ", text: "/tds/etc/thumb_ti05.gif", theme:"etc", park: 'tds' }
		];

		this.searchOptReplaceArray = [
		{ word:"コース料理", name:"rst_east", title:"イーストサイド・カフェ（コースのみ）", post_text:"thumb_ti02" },
		{ word:"スープ", name:"rst_gazebo", title:"ザ・ガゼーボ（夏期を除く）", post_text:"thumb_ti02" },
		{ word:"スープ", name:"rst_plaza", title:"プラザ・レストラン（夏期を除く）", post_text:"thumb_ti02" }
		];
	},
	build : function ()
	{
		var themeShow = false;
		var sortText = this.getSortOptionText();

		var labels = this.searchOptionLabel();
		if( labels.length > 0 )
		{
			var text = "【検索条件】";
			
			var cation = "";
			var count = 1;
			var searchText = new Array();
			var cations = new Array();

			searchText.push( sortText );

			for( var i = 0; i < labels.length; i++ )
			{
				var seltext = labels[ i ].word;
				var label =  labels[ i ].label;
				
				for( var j in this.searchOptionTextArray )
				{
					var item = this.searchOptionTextArray[ j ];
					if( ( item.park == "*" || item.park == areaType ) && item.word == seltext )
					{
						var cc = '※' + count;
						cations.push( cc + ":" + item.caption );
						label += "(" + cc + ")";
						count++;
					}
				}
				searchText.push( label );
			}

			text += searchText.join( "," );
			$( "#PGSSearchText" ).html( text );

			if( cations.length > 0 )
			{
				cation += "<ul><li>" + cations.join( "</li><li>" ) + "</li></ul>";
				$( "#PGSSearchCation" ).html( cation );
			}
			else
				$( "#PGSSearchCation" ).empty();
		}
		else
		{
			$( "#PGSSearchText" ).html( "【検索条件】" + sortText );
			$( "#PGSSearchCation" ).empty();
		}

		var items = this.search();

		if( $( "input#PGS-50list" )[ 0 ].checked )
			items.sort( this.sort50 );
		else
		{
			themeShow = true;
			items.sort( this.sortTheme );
		}

		if( items.length > 0 )
			$( "#IndexList" ).html( this.buildHTML( items, themeShow ) );
		else
			$( "#IndexList" ).html( "<p>検索条件に一致する施設がみつかりませんでした。<br />検索条件を変更してもう一度検索してください。</p>" );
		fixHeightFunction();
	},
	
	search : function ()
	{
		var items = new Array();

		var l = itemArray.length;

		var values = this.searchOption();
		var m = values.length;

		if( m > 0 )
		{
			var i;
			for( i = 0; i < l; i++ )
			{
				var item = itemArray[ i ];
				var found = true;
				for( var j = 0; j < m; j++ )
				{
					var seltext = values[ j ];
					if( item.tags.indexOf( seltext ) < 0 )
					{
						found = false;
						break;
					}
				}
				if( found )
					items.push( item );
			}

			var n = this.specialSearchArray.length;
			for( i = 0; i < n; i++ )
			{
				var skey = this.specialSearchArray[ i ];
				var found = true;
				for( var j = 0; j < m; j++ )
				{
					var seltext = values[ j ];
					if( skey.park != areaType || skey.tags.indexOf( seltext ) < 0 )
					{
						found = false;
						break;
					}
				}
				if( found )
					items.push( skey );
			}

			return items;
		}
		else
		{
			return itemArray;
		}
	},
	
	buildHTML : function ( items, themeShow )
	{
		var itemHTML = new Array();

		this.searchOptReplace( items );

		if( themeShow )
		{
			var themeName = "";
			for( var i = 0; i < items.length; i++ )
			{
				var item = items[ i ];
				if( themeName != item.theme )
				{
					itemHTML.push( this.getThemeHTML( item.theme ) );
					themeName = item.theme;
				}
				var html = this.getHTML( item );
				itemHTML.push( html );
			}
		}
		else
		{
			for( var i = 0; i < items.length; i++ )
				itemHTML.push( this.getHTML( items[ i ] ) );
		}

		return itemHTML.join( "" );
	},
	searchOption : function ()
	{
		var values = new Array();
		$("#PGSearch input[type=checkbox]").each( function () 
		{
			if( this.checked )
				values.push( this.value );
		} );
		
		return values;
	},
	searchOptionLabel : function ()
	{
		var self = this;
		var values = new Array();
		$("#PGSearch input[type=checkbox]").each( function () 
		{
			if( this.checked )
				values.push( { label:self.labelNames[ this.id ], word: this.value } );
		} );
		
		return values;
	},
	sort50 : function ( a, b )
	{
		if( a.kana > b.kana )
			return 1;
		else if( a.kana < b.kana )
			return -1;
		else
			return 0;
	},
	sortTheme : function ( a, b )
	{
		var aa = searchObject.sortLabel[ a.theme ];
		var ab = searchObject.sortLabel[ b.theme ];
		
		if( aa < ab )
			return 1;
		else if( aa > ab )
			return -1;
		else
		{
			if( a.kana > b.kana )
				return 1;
			else if( a.kana < b.kana )
				return -1;
			else
				return 0;
		}
	},
	searchOptReplace : function ( items )
	{
		var values = this.searchOption();
		if( values.length > 0 )
		{
			for( var i = 0; i < items.length; i++ )
			{
				var item = items[ i ];
				this.searchOptReplaceItem( item, values );
			}
		}
		
		return items;
	},
	searchOptReplaceItem : function ( item, values )
	{
		for( var j = 0; j < this.searchOptReplaceArray.length; j++ )
		{
			var opt = this.searchOptReplaceArray[ j ];
			if( opt.name == item.name )
			{
				for( var k = 0; k < values.length; k++ )
				{
					var seltext = values[ k ];
					if( opt.word == seltext )
					{
						item.replace = opt.post_text;
						item.rtitle = opt.title;
						break;
					}
				}
			}
		}
		return item;
	},
	getHTML : function ( item )
	{
		var areaOption = this.getOptionHTML( item );


		var html = '<li><a name="%theme%-%post_name%" href="/%park%/%theme%/%post_name%.html">' +
		'<img src="/images/%park%/%theme%/%post_name%/thumb.jpg" alt="" width="95" height="71" class="Photo-C" /><br />' +
		'<img src="/images/%park%/%theme%/%post_name%/%post_text%.gif" alt="%post_title%" width="95" height="64" />' +
		'<div class="IC-Area">%option%</div></a></li>';

		if( item.theme == "etc" )
		{
			html = '<li><a href="%link%">' +
			'<img src="/images/%park%/etc/%titleimg%" alt="" width="95" height="71" class="Photo-C" /><br />' +
			'<img src="/images%text%" alt="%post_title%" width="95" height="64" />' +
			'<div class="IC-Area">%option%</div></a></li>';
			
			html = html.split( "%link%" ).join( item.link );
			html = html.split( "%text%" ).join( item.text );
			if( item.titleimg != "" )
				html = html.split( "%titleimg%" ).join( item.titleimg );
			else
				html = html.split( "%titleimg%" ).join( "thumb.jpg" );
		}
		else
		{
			html = html.split( "%theme%" ).join( item.theme );
			html = html.split( "%post_name%" ).join( item.name );

			if( item.replace != null )
			{
				html = html.split( "%post_text%" ).join( item.replace );
				html = html.split( "%post_title%" ).join( item.rtitle );
				item.replace = null;
				item.rtitle = null;
			}
			else
				html = html.split( "%post_text%" ).join( 'thumb_ti' );
		}

		html = html.split( "%park%" ).join( item.park );
		html = html.split( "%post_title%" ).join( item.title );
		html = html.split( "%option%" ).join( areaOption );

		return html;
	},
	getOptionHTML : function ( item )
	{
		var areaOption = "";

		if( item.tags.indexOf( "ファストパス" ) >= 0 )
		{
			areaOption += '<span class="IC-fp">ファストパスが利用可能</span>';
		}
		if( item.tags.indexOf( "利用制限" ) >= 0 )
		{
			areaOption += '<span class="IC-bf00">利用制限があるアトラクション</span>'
		}
		if( item.tags.indexOf( "アルコール提供" ) >= 0 )
		{
			areaOption += '<span class="IC-alc">アルコール提供</span>';
		}
		if( item.tags.indexOf( "お子様メニュー" ) >= 0 )
		{
			areaOption += '<span class="IC-c">お子様メニュー</span>';
		}
		if( item.tags.indexOf( "プライオリティ・シーティング" ) >= 0 )
		{
			areaOption += '<span class="IC-ps">プライオリティ・シーティング</span>';
		}
		if( item.tags.indexOf( "宅配サービス" ) >= 0 )
		{
			areaOption += '<span class="IC-deli">商品の発送受付</span>';
		}
		if( item.tags.indexOf( "フィルムプリント" ) >= 0 )
		{
			areaOption += '<span class="IC-pe">フォトエキスプレス</span>';
		}
		if( item.tags.indexOf( "デジタルカメラ" ) >= 0 )
		{
			areaOption += '<span class="IC-dpe">デジタル・フォトエキスプレス</span>';
		}
		return areaOption;
	},
	getThemeHTML : function ( id )
	{
		var name = themeArray[ id ];
		var html = '<li id="PGS-%id%" class="themeName">%name%</li>';
		html = html.split( "%id%" ).join( id );
		html = html.split( "%name%" ).join( name );
		
		return html;
	},
	searchKeywordCount: function ()
	{
		var self = this;
		var items = this.search();
		var values = this.searchOption();
		if( values.length == 0 )
			items = items.concat( this.specialSearchArray );

		$("#PGSearch input[type=checkbox]").each( function () 
		{
			var c = self.searchKeyword( items, this.value );
			$( "label[for=" + this.id + "]" ).text( self.labelNames[ this.id ] + "(" + c + ")" )
		} );
	},
	getSortOptionText : function ()
	{
		var selObj = $( "input#PGS-50list" )[ 0 ];
		
		if( selObj.checked )
			return $("label[for=PGS-50list]").text();
		else
			return $("label[for=PGS-thems]").text();
	},
	searchKeyword: function ( items, keyword )
	{
		var i;
		var c = 0;
		var l = items.length;
		for( i = 0; i < l; i++ )
		{
			var item = items[ i ];
			if( item.park == areaType && item.tags.indexOf( keyword ) >= 0 )
				c++;
		}
		return c;
	},
	directPage : function ( keyword )
	{
		$("#PGSearch input:checkbox").each( function(){
			this.checked = false;
			var lname = "label[for=" + this.id + "]";
			$( lname ).css( "color", "#0033FF" );
		} );

		var selObj = $("#PGSearch input[id=PGS-" + keyword + "]").each( function(){
			this.checked = true;
			$( "label[for=" + this.id + "]" ).css( "color", "#FF00FF" );
		} );
		if( selObj.length > 0 )
			this.build();

		this.searchKeywordCount();
	},
	clickAction : function ( selObj, event )
	{
		var id = selObj.name;

		if( this.showpg == id )
			return;
		this.showpg = id;

		var params = id.split( "-" );
		var theme = params[ 0 ];
		var name = params[ 1 ];

		var l = itemArray.length;
		for( var i = 0; i < l; i++ )
		{
			var item = itemArray[ i ];
			if( item.theme == theme && item.name == name )
			{
				var offset = $(selObj).offset();
				this.showIcon( item, offset.left + 42, offset.top + 31 );
				break;
			}
		}
	},
	showIcon : function ( item, left, top )
	{
		var self = this;
		var html = this.buildIcon( item );
		$( "#PGS-list-flow" ).html( html );
		$( "#PGS-list-flow" ).css( { left:left - 64, top:top - 48 } ).fadeIn( "fast" );
		$( "#PGS-list-flow" ).one( "mouseout", function ()
		{
			self.showpg = "";
			$("#PGS-list-flow").css( { display:"none" } );
		} );
	},
	buildIcon : function ( item )
	{
		var values = this.searchOption();
		if( values.length > 0 )
		{
			this.searchOptReplaceItem( item, values );
		}

		var html = '<a href="/%park%/%theme%/%post_name%.html">' +
		'<img src="/images/%park%/%theme%/%post_name%/thumb.jpg" alt="" width="128" height="96" class="Photo-C" /><br />' +
		'<img src="/images/%park%/%theme%/%post_name%/%post_text%.gif" alt="%post_title%" width="95" height="64" />' +
		'<div class="IC-Area">%option%</div></a>';

		var areaOption = this.getOptionHTML( item );

		html = html.split( "%park%" ).join( item.park );
		html = html.split( "%theme%" ).join( item.theme );
		html = html.split( "%post_name%" ).join( item.name );
		html = html.split( "%option%" ).join( areaOption );

		if( item.replace != null )
		{
			html = html.split( "%post_text%" ).join( item.replace );
			html = html.split( "%post_title%" ).join( item.rtitle );
			item.replace = null;
			item.rtitle = null;
		}
		else
		{
			html = html.split( "%post_text%" ).join( 'thumb_ti' );
			html = html.split( "%post_title%" ).join( item.title );
		}

		return html;
	}
};


$(function(){
	searchObject.init();

	var optionClickFunction = function(){
		var lname = "label[for=" + this.id + "]";
		if( this.checked )
			$( lname ).css( "color", "#FF00FF" );
		else
			$( lname ).css( "color", "#0033FF" );
		searchObject.searchKeywordCount();
	};

	$("#PGSearch input:checkbox").each( function(){
		this.checked = false;
		var lname = "label[for=" + this.id + "]";
		$( lname ).css( "color", "#0033FF" );
		searchObject.labelNames[ this.id ] = $( lname ).text();
	} );

	$("#PGSearch input:checkbox").click( optionClickFunction );

	var sortClickFunction =  function(){
		var selObj = $( "input#PGS-50list" )[ 0 ];
		
		if( selObj.checked )
		{
			$("label[for=PGS-50list]").css( "color", "#FF00FF" );
			$("label[for=PGS-thems]").css( "color", "#0033FF" );
		}
		else
		{
			$("label[for=PGS-thems]").css( "color", "#FF00FF" );
			$("label[for=PGS-50list]").css( "color", "#0033FF" );
		}
	};
	$("#PGSearch input:radio").click( sortClickFunction );

	var selObj = $( "input#PGS-50list" )[ 0 ];
	selObj.checked = true;
	sortClickFunction();

	var itemClickFunction = function ( event )
	{
		searchObject.clickAction( this, event );
	};
	
	$( "#PGSearch .PGSearch a" ).click( function ()
	{
		searchObject.build();
		showhide('PGSearch');
		$("#PGS-list-flow").css( { display:"none" } );
		SWFAddress.setValue( "" );

		$( '#IndexList a' ).live( 'mouseover', itemClickFunction );

		return false;
	} );

	$( '#IndexList a' ).live( 'mouseover', itemClickFunction );

	$( '#SearchBox .Btn-Cond, #PGSearch .PGClose' ).click( function (){
		$("#PGS-list-flow").css( { display:"none" } );
		showhide('PGSearch');
		if( $( '#PGSearch' ).css( "visibility" ) == "visible" )
			$( '#IndexList a' ).die( 'mouseover', itemClickFunction );
		else
			$( '#IndexList a' ).live( 'mouseover', itemClickFunction );
		
		return false;
	});

	var flowElement = document.createElement( "div" );
	flowElement.id = "PGS-list-flow";
	$( "body" ).append( flowElement );

	SWFAddress.addEventListener( SWFAddressEvent.CHANGE, SWFAddressChange );
});


