﻿

JumpUrl = function(){
	this.jumpAnchorParamName = "scroll";
	this.init();
}

JumpUrl.prototype = {
	
	init: function(){
		//this._createIframe();
		this.setListener();
		this.menuData = MenuData.getInstance();
		
		this.isFirstChange = true;
		this.isFirstInit = true;
		
		this.cssArray = [];
	},
	
	_createIframe:function(){
		// create hidden iframe
		$("body").append('<iframe id="_parseIframe" style="display:none" src="/restaurant/restaurant_page.php?eid=8"></iframe>')
		this.iframe = $("#_parseIframe");
		
		return $("#_parseIframe");
	},
	
	setListener: function(){
		//this.iframe.load(delegate(this,this.onLoadCompFunction) )
		SWFAddress.addEventListener(SWFAddressEvent.CHANGE,delegate(this,this.hideContent));
		SWFAddress.addEventListener(SWFAddressEvent.INIT,delegate(this,this.initFunction));
	},
	
	hideContent: function(event){
		
		if ( this.isFirstChange ) {
			// first change -> do nothing
			this.isFirstChange = false;
			return;
			
		}else{
			var nextFunc = event ? delegate(this,this.contentChangeCommand) : undefined;
			$("#closeButton").fadeOut(500);
			$("#htmlContent").fadeOut(500,nextFunc);
		}
	},
	
	initFunction: function(event){
		if( this.isFirstChange ){
			return;
		}else{
			// second init is "first move end"
			this.addContent();
		}
	},
	
	contentChangeCommand: function(){
		this.addContent();
	},
	
	
	addContent: function(){
		switch(SWFAddress.getPathNames().length){
			case 0:
			
			// document root -> set panel visible false
			onChangePanelVisible(false)
			break;
			
			case 1:
			// 第1階層
			var data = this.menuData.getUrlDataFromPath(SWFAddress.getValue());
			if( data == null ) return;
			
			if( data.job == MenuData.SWF ){
				return;
			}else if( data.job != MenuData.LOAD ) return;
			
			
			
			if( data != null ){
				$.ajax({
					dataType:"text",
					success:delegate(this,this.onLoadCompFunction),
					url:data.accessUrl
				})
			}
			
			break;
			
			default:
			// 第2階層以上
			var path = SWFAddress.getPathNames();
			path.shift();
			path = path.join("/")
			
			$.ajax({
				dataType:"text",
				success:delegate(this,this.onLoadCompFunction),
				data:SWFAddress.getQueryString(),
				url:path
			})
			
			
			break;
		}
	},
	
	
	onLoadCompFunction:function(data){
		
		textData = data.split("\n").join("").split("\r").join("");
		
		// get title
		var d = /<title>(.+?)<\/title>/i.exec(textData);
		
		SWFAddress.setTitle(d[1]);
		/*
		// set css
		var link =  /<link.+?\/>/.exec(textData)[0];

		if(!this.hasStyle(link)){
			$("head").append($(link));
			this.cssArray.push(link)
		}
		*/
		
		// append 
		var htmlContent = $("#htmlContent").empty();
		htmlContent.append(/<body.*?>(.*)<\/body>/im.exec(textData)[0])
		
		
		// set exma content
		if($("#flashcontent2").length != 0){
			$("#flashcontent2").append('<script type="text/javascript">swfobject.embedSWF("/animalguide/approval.swf", "flashcontent2", "670", "500", "10.0.0","expressInstall.swf", {}, {}, {id:"flashcontent2",name:"flashcontent2"});</script>');
			
		}
		
		
		// setjs if qAndA
		if(SWFAddress.getPathNames()[0] == "amimalguide_qanda" || SWFAddress.getPathNames()[0] == "animalguide_qanda"){
			window.setHideAnswer();
		}
		
		
		this.setLinks();
	},
	
	hasStyle: function(linkTag){
		var l = this.cssArray.length;
		while(l--){
			if( $(this.cssArray[l]).attr("href") == $(linkTag).attr("href") ){
				return true;
			}
		}
		
		return false;
	},
	
	setLinks: function(){
		
		$("#htmlContent a").each(delegate(this,this.changeEachLink));
		
		if(SWFAddress.getPathNames()[0] == "animalguide_archive_miniinfo" || SWFAddress.getPathNames().join("").indexOf("mini_info") != -1){
			$("form :submit").attr("id","submitButton");
			$("form :text").attr("id","submitText");
			
			$("#submitButton").bind("click",delegate(this,function(){
				SWFAddress.setValue("/animalguide"+$("form").attr("action")+"/?"+$.param({keyword:$("#submitText").val()}));
				
			}));
			
			$("form").after('<div id="formDiv"></div>').hide()
			$("#formDiv").append($("form div"));
			
		}else{
			this.setButton();
		}
		
		this.showContent();
	},
	
	setButton:function(){
		// convert submit button -> button
		$("form :submit").hide().after('<input type="button" id="submitButton" value="設定" />')
		
		$("#submitButton").bind("click",delegate(this,function(){
			var data = this.checkDate()
			if(data){
				SWFAddress.setValue(SWFAddress.getPathNames()[0]+$("form").attr("action")+"/?"+$.param(data));
			}else{
				alert("日時が範囲外です。");
			}
			
		}));
	},
	
	checkDate: function(){
		var form = $("form")
		var year =  parseInt( form.find("[name='yyyy']").val());
		var month = parseInt( form.find("[name='mm']").val());
		var day =   parseInt( form.find("[name='dd']").val());
		
		var targetDate = new Date(year,month-1,day);
		
		//var maxDate = form.find("#maxdate:hidden").val().split(",");
		
		var reg = /(\d{4})年(\d{1,2})月(\d{1,2})/
		var maxDate = reg.exec($("p:contains('スケジュール')").text())
		maxDate = new Date(maxDate[1],maxDate[2]-1,maxDate[3]);
		
		var nowTime = new Date();
		if(maxDate.getTime() >= targetDate.getTime() && new Date(nowTime.getFullYear(),nowTime.getMonth(),nowTime.getDate()).getTime() <= targetDate.getTime() ){
			return {yyyy:year,mm:month,dd:day}
		}
		
		return false;
	},
	
	changeEachLink:function(num,data){
		var href = $(data).attr("href");
		if(href == undefined || href == "" ||  href.indexOf("javascript") != -1 ) return;
		
		if( href.indexOf("http") != -1 ){
			href = href.replace(SWFAddress.getBaseURL(),"");
		}
		
		// ターゲット属性が設定されているものも排除
		if($(data).attr("target")) return;
		
		if(href.indexOf("#top") != -1 ){
			$(data).attr("href","javascript:scrollToTop()");
		}else if(href.indexOf("#") != -1 && href.split("/").length == 1){
			$(data).attr("href","javascript:jumpTo('"+href+"')")
			
		}else{
			var urlArray = href.split("/");
			if( urlArray[0] == ""){
				urlArray.shift();
			}
			
			if( urlArray[0].indexOf("http") != -1){
				urlArray = urlArray.slice(3,urlArray.length)
			}
			
			
			
			
			//逆引きをチェック
			var firstLinkString = this.transFirstLinkString(urlArray.join("/"));
			if(firstLinkString){
				
				var targetString = firstLinkString.replace("#/","")
				
			}else{
				// #~ のpage内リンクを置き換える
				if( urlArray[urlArray.length-1].indexOf("#") != -1){
					var fileName = urlArray.pop();
					fileName = fileName.replace("#","/?scroll=");
					urlArray.push(fileName);
				}

				var targetCategory = this.menuData.getCageoryFromFirstLevel(urlArray[0]);

				// TODO get param from fileName

				if( targetCategory != ""){
					urlArray.unshift(targetCategory)
				}
				
				var targetString = urlArray.join("/");
			}
			
			
			
			
			if($.browser.msie && $.browser.version == 6){
				outString = 'javascript:SWFAddress.setValue("'+targetString+'")';
			}else{
				outString = "#/"+targetString
			}
			
			$(data).attr("href",outString)
		}
	},
	
	transFirstLinkString: function(url){
		var data = this.menuData.dataObject;
		for(var name in data){
			if(data[name].accessUrl == "/"+url){
				return data[name].deepLinkUrl;
			}
		}
		
		return false;
	},
	
	showContent: function(){
		var nextFunc;
		if( this.haveJumpAnchor() || jQuery.browser.mozilla ){
			nextFunc = delegate(this,this.jumpAnchor);
		}else{
			$("#htmlContent").scrollTop(0);
		}
		$("#closeButton").fadeIn(500);
		$("#htmlContent").fadeIn(500,nextFunc);
		
		onChangePanelVisible(true);
	},
	
	haveJumpAnchor: function(){
		//パラメーターリストに"scroll"が無ければfalse
		return Boolean(jQuery.inArray(this.jumpAnchorParamName,SWFAddress.getParameterNames()) +1)
	},
	
	jumpAnchor:function(jumpId){
	
		if(jQuery.browser.mozilla && !this.haveJumpAnchor()){
			$("#htmlContent").animate({scrollTop:0});
			return;
		}
		
		
		var scrollToId = jumpId == undefined ? SWFAddress.getParameter(this.jumpAnchorParamName) : jumpId;
		var targetObject = $("#"+scrollToId);
		
		//targetObjectがなければ　何もしない
		if(targetObject.length == 0) return;
		
		var scrollPageScrollTop = $("#htmlContent").scrollTop();
		$("#htmlContent").scrollTop(0);
		var targetPoistion = targetObject.position().top;
		$("#htmlContent").scrollTop(scrollPageScrollTop);
		
		$("#htmlContent").animate({scrollTop:targetPoistion});
	},
	
	
	
	toString: function(){
		return "class:JumpUrl"
	}
}

var delegate = function(scope,method){
	return function() {return method.apply(scope, arguments); };
}


$(document).ready(function(){
	window.j = new JumpUrl();
	window.setReadyFlag = true;
});

var hideContent = function(){
	//this.j.hideContent();
	
	// dispatchEvent for flash
	onChangePanelVisible(false);
	
	SWFAddress.setValue("");
	SWFAddress.setTitle("鴨川シーワールド");
}

var onChangePanelVisible = function(isShow){
	
	var f;
	if($.browser.msie){
		f = window["flashcontent"];
		if($.browser.version == 6 && f.length > 1 ){
				
				f = f[length-1];
				
				
		}
	}else{
		f = document["flashcontent"];
	}
	f.onChangePanelVisible(isShow);
}


var isFlashExternalInterfaceSetReady = function(){
	return this.setReadyFlag;
}

var scrollToTop = function(){
	$("#htmlContent").animate({scrollTop:$("#top").scrollTop()});
}

var jumpTo = function(id){
	var targetObject = $(id);
	if(targetObject.length == 0) return;
	
	var scrollPageScrollTop = $("#htmlContent").scrollTop();
	$("#htmlContent").scrollTop(0);
	var targetPoistion = targetObject.position().top;
	$("#htmlContent").scrollTop(scrollPageScrollTop);
	
	$("#htmlContent").animate({scrollTop:targetPoistion});
}


var historyBack = function(){
	if( SWFAddress ){
		SWFAddress.back();
	}else{
		history.back();
	}
}


var isSafariOrOpera = function(){
	return Boolean(jQuery.browser.safari || jQuery.browser.opera );
}



//////// file include /////////
month_length_array = new Array(0,31,29,31,30,31,30,31,31,30,31,30,31);
function changeDate(){
	var mm = document.getElementById( 'mm' );
	var dd = document.getElementById( 'dd' );
	var month_length = month_length_array[mm.options[mm.selectedIndex].value];
	dd.options.length = month_length;
	for(var i=0;i<month_length;i++){
		dd.options[i].text  = i + 1;
		dd.options[i].value = i + 1;
	}
}
