/*
(c) 2011 Naphthalene Co.,Ltd.
tvdog
http://naph.jp

thai.js

以下のライブラリに依存
jquery-1.4.4.min.js
jquery.masonry.min.js
jquery.cookie.js

これより良いソースコード書ける人募集中！
ココを見ているような人も募集中！
*/

var thai = function(){
	
	//グリッドの数値
	var margin = 10;
	var blockW = 300;
	var grid = blockW + margin;
	
	//フローターナビ
	var floater;
	
	var uaAnd = true;
	
	T = {
		addBlocks: 0,
		init : function() {
			if ($('html').hasClass('ua-android')) uaAnd = false;
			
			task = [];
			
			task.push(function(){
				//フローターナビを作製
				thai.creatFloaterNav();
				
				//ウィンドウのリサイズとスクロール時のイベントをセット
				$(window).resize(onResize).scroll(onScroll);
				onResize();
				onScroll();
			});
			
			//トップへボタンをセット
			task.push(function(){$('#to_page_top').click(totop);});
			
			//プリント
			task.push(thai.printBt.init);
			
			//施設ブロックの設定
			task.push(thai.site.init);
			
			//スペシャルバナー
			task.push(function(){thai.inner.init()});
			
			//外部バナー
			task.push(function(){thai.outer.init()});
			
			//リストのオブジェクト
			task.push(thai.list.init);
			
			//メインイメージのスライド
			task.push(function(){thai.mainImages.init()});
			
			//並び替えライブラリをセット
			//task.push(thai.reMasonry);
			
			//外部リンクへのトラッキング
			task.push(thai.outerLinkTracking.init);
			
			//追跡
			task.push(thai.tracking.init);
			
			//実行
			taskDoing();
			
			masonry();
		},
		
		//並び替えライブラリをセット
		masonry : function() {
			--thai.addBlocks;
			if (this.addBlocks == 0) {
				$('article').masonry('reload');
				this.addBlocks = -10;
			} else if (this.addBlocks < 0) {
				$('article').masonry('reload');
			}
		},
		
		creatFloaterNav : function() {
			creatFloaterNav();
		}
	};
	
	function masonry() {
		$('article').masonry({
			columnWidth:grid,
			itemSelector:'section'
		});
	}
	
	//遅延処理(仮)
	var task = [];
	var taskID = 0;
	function taskDoing() {
		var func = task[taskID];
		func();
		if (task.length > taskID + 1) {
			++taskID;
			setTimeout(taskDoing,1);
		}
	}
	
	//ウィンドウサイズ変更された時
	function onResize() {
		var ww = $(window).width();
		var wg = Math.floor(ww / grid);
		wg = (wg < 1) ? 1 : wg;
		var wi = wg * grid;
		
		if (!$('body').hasClass('g' + wg)) closeNav();
		
		//bodyのクラス替え
		$('body').attr('class','');
		if (wg == 2) {
			$('body').addClass('range_two multi_grid');
		} else if (wg == 1) {
			$('body').addClass('range_one single_grid');
		} else {
			$('body').addClass('range_fre multi_grid');
		}
		$('body').addClass('g' + wg);
		
		//フロートナビを移動させる
		floater.css('left',(ww - wi) / 2 + 5);
		onScroll();
	}
	
	//ウィンドウがスクロールした時
	function onScroll() {
		if (!uaAnd) return;
		var w = $(window);
		var sc = w.scrollTop();
		var nt = floater.position().top;
		var mg = 7;
		var dry = 300;
		
		if ($('body').hasClass('range_fre')) {
			sc = -40;
			if (nt != '-40px') floater.stop().animate({'top':-40},{duration:dry});
			return;
		}
		
		var fh = 15 + $('#fl_body').height() + 34;
		var wh = w.height();
		
		if (floater.hasClass('closeNav')) {
			floater.stop().animate({'top':sc + mg},{duration:dry});
		} else {
			if (sc + mg < nt) {
				floater.stop().animate({'top':sc + mg},{duration:dry});
			} else if (sc + wh > nt + fh - mg) {
				floater.stop().animate({'top':sc + wh - fh - mg},{duration:dry});
			} else if ($(document).height() < nt + fh) {
				floater.stop().animate({'top':sc + wh - fh - mg},{duration:dry});
			}
		}
	}
	
	//ページのトップへ
	function totop() {
		var h = $("body").height() * 0.2;
		$(this).blur();
		$('html,body').animate({
				scrollTop: 0
			}, {
				duration:h,
				complete:onScroll
			});
		return false;
	}
	
	//フローターナビを作製
	function creatFloaterNav() {
		var f = $(document.createElement("div"))
		.attr('id', 'floater')
		.addClass('closeNav');
		
		var f_h = $(document.createElement("div"))
		.attr('id', 'fl_h');
		f.append(f_h);
		
		var f_w = $(document.createElement("div"))
		.attr('id', 'fl_wrap');
		f.append(f_w);
		
		var f_b = $(document.createElement("div"))
		.attr('id', 'fl_body');
		
		f_w.append(f_b);
		
		/*---------------------------------------------------------------------- NAVIGATION */
		f_b.append( '<p>NAVIGATION</p>' );
		
		var uln = $(document.createElement("ul"));
		var li1 = $(document.createElement("li"))
		.append($('#main_nav h2 a').eq(0).clone());
		var li2 = $(document.createElement("li"))
		.append($('#main_nav h2 a').eq(1).clone());
		uln.append(li1).append(li2);
		f_b.append(uln);
		
		/*---------------------------------------------------------------------- ABOUT */
		f_b.append( '<p>ABOUT</p>' );
		
		var ula = $('#sub_nav ul').eq(0).clone();
		ula.find('li').addClass('low');
		var lia = $(document.createElement("li"))
		.append($('#sub_nav h3 a').eq(0).clone());
		ula.prepend(lia);
		f_b.append(ula);
		
		/*---------------------------------------------------------------------- THEME */
		f_b.append( '<p>THEME</p>' );
		
		var ult = $('#sub_nav ul').eq(1).clone();
		ult.find('li').addClass('low');
		var lit = $(document.createElement("li"))
		.append($('#sub_nav h3 a').eq(1).clone());
		ult.prepend(lit);
		f_b.append(ult);
		
		/*---------------------------------------------------------------------- SEARCH */
		f_b.append( '<p>SEARCH<a href="/search/map/">MAP SEARCH</a></p>' );
		
		var uls = $('#search_nav ul').clone();
		f_b.append(uls);
		
		
		/*---------------------------------------------------------------------- ナビオープン用*/
		
		var ulf = $(document.createElement("ul"))
		.attr('id', 'fl_fl');
		
		var fl_home = $(document.createElement("li"))
		.attr('id', 'fl_home')
		.click(function(){window.location.href = "/";});
		ulf.append(fl_home);
		
		var fl_nav = $(document.createElement("li"))
		.attr('id', 'fl_nav')
		.click(toggleNav);
		ulf.append(fl_nav);
		
		var fl_top = $(document.createElement("li"))
		.attr('id', 'fl_top')
		.click(totop);
		ulf.append(fl_top);
		
		f.append(ulf);
		
		$("body").prepend(f);
		
		floater = f;
	}
	
	//ナビが閉じるとかのボタン
	function toggleNav() {
		if (floater.hasClass('closeNav')) {
			openNav();
		} else {
			closeNav();
		}
	}
	
	//ナビが開く
	function openNav() {
		floater.removeClass('closeNav').addClass('openNav');
		$('#fl_wrap').stop().animate({
				height:$('#fl_body').height()
			});
		onScroll();
	}
	
	//ナビが閉じる
	function closeNav() {
		if (floater.attr('class') == 'closeNav') return;
		$('#fl_wrap').stop().animate({
				height:0
			}, {
				complete:function(){
					floater.removeClass('openNav').addClass('closeNav');
				}
			});
		if (!uaAnd) $('html,body').animate({scrollTop: 0},{duration:300});
	}
	
	return T;
	
}();

/*------------------------------------------------------------------------------*/
//スペシャルのバナー
thai.inner = function() {
	//var nsId = 'bl_inner_ns';
	var divName = 'bl_inner';
	
	//このブロック自体
	var block;
	
	//ナビ
	var navi;
	
	//ラップ
	var wrap;
	
	//長さ
	var len = 0;
	
	//タイムアウト関係
	var timeID = 0;
	var dura = 1000 * 13;
	
	//現在の写真
	var phtoID = 0;
	
	//自分自身
	var sp;
	
	S = {
		init : function() {
			sp = this;
			block = $('#' + divName);
			
			if (block.get(0)) {
				block.addClass('on_nav');
				
				var lis = block.find('li');
				len = lis.length;
				if (len < 2) return;
				
				navi = $("<div>",{'class':'img_pager'});
				block.append(navi);
				
				wrap = block.find('ul').width(len * 300);
				
				var liar = [];
				lis.each(function(i){
					var n = $("<div>")
					.click(function(){naviBottan(i)});
					navi.append(n);
					liar.push({s:Math.random(),obj:this});
				});
				
				liar.sort(function(a,b){return a.s-b.s;});
				
				$(liar).each(function(i){
					wrap.append(this.obj);
				});
				
				navi.find('div:first').addClass('on');
				
				timeOutStart();
			}
		},
		
		onTimeOut : function(o) {
			var n = phtoID + 1;
			if (n >= len) n = 0;
			naviBottan(n);
		}
		
	};
	
	function naviBottan(i) {
		var size = 300;
		
		wrap.animate({left:-size * i});
		
		navi.find('div')
		.removeClass('on')
		.eq(i)
		.addClass('on');
		
		phtoID = i;
		timeOutStart();
	}
	
	function timeOutStart() {
		var o = sp;
		clearTimeout(timeID);
		timeID = setTimeout(function(){o.onTimeOut(o)}, dura);
	}
	
	return S;
}();



/*------------------------------------------------------------------------------*/
//外部のバナー
thai.outer = function() {
	var divName = 'bl_outer';
	
	//このブロック自体
	var block;
	
	//ナビ
	var navi;
	
	//ラップ
	var wrap;
	
	//長さ
	var len = 0;
	
	//タイムアウト関係
	var timeID = 0;
	var dura = 1000 * 13;
	
	//現在の写真
	var phtoID = 0;
	
	//自分自身
	var sp;
	
	S = {
		init : function() {
			sp = this;
			block = $('#' + divName);
			
			if (block.get(0)) {
				block.addClass('on_nav');
				
				var lis = block.find('li');
				len = lis.length;
				if (len < 2) return;
				
				navi = $(document.createElement("div"))
				.attr({'class':'img_pager'});
				block.append(navi);
				
				wrap = block.find('ul').width(len * 300);
				
				var liar = [];
				lis.each(function(i){
					var n = $("<div>")
					.click(function(){naviBottan(i)});
					navi.append(n);
					liar.push({s:Math.random(),obj:this});
				});
				
				liar.sort(function(a,b){return a.s-b.s;});
				
				$(liar).each(function(i){
					wrap.append(this.obj);
				});
				
				navi.find('div:first').addClass('on');
				
				timeOutStart();
			}
		},
		
		onTimeOut : function(o) {
			var n = phtoID + 1;
			if (n >= len) n = 0;
			naviBottan(n);
		}
		
	};
	
	function naviBottan(i) {
		var size = 300;
		
		wrap.animate({left:-size * i});
		
		navi.find('div')
		.removeClass('on')
		.eq(i)
		.addClass('on');
		
		phtoID = i;
		timeOutStart();
	}
	
	function timeOutStart() {
		var o = sp;
		clearTimeout(timeID);
		timeID = setTimeout(function(){o.onTimeOut(o)}, dura);
	}
	
	return S;
}();


/*------------------------------------------------------------------------------*/
//施設のオブジェクト
thai.addBlocks += 1;
thai.site = function() {
	//自分自身
	var me;
	
	L = {
		init : function() {
			me = this;
			if ($('.bl_tags').get(0)) {
				$('.bl_tags').addClass('close');
				$('.bl_tags h3').click(tagListSwich);
			}
			thai.masonry();
		}
		
	};
	
	function tagListSwich(e) {
		$(this).parent().toggleClass("close");
		thai.masonry();
	}
	
	return L;
}();


/*------------------------------------------------------------------------------*/
//リストのオブジェクト
thai.addBlocks += 1;
thai.list = function() {
	//自分自身
	var me;
	
	//リストのナビの名前
	var id = 'list_nav';
	
	//リストのナビ
	var nav;
	
	//ナビのクッキー名
	var areaCookie = 'areaCookie';
	var advCookie = 'advCookie';
	
	L = {
		init : function() {
			me = this;
			var nav = $('#' + id);
			if (nav.get(0)) {
				
				if ($.cookie(areaCookie) != 'true') {
					$('#area_select_bt').addClass('close');
					$('#area_select').addClass('close');
				}
				
				if ($.cookie(advCookie) != 'true') {
					$('#adv_search_bt').addClass('close');
					$('#adv_search').addClass('close');
				}
				
				$('#area_select_bt').click(areaToggle);
				$('#adv_search_bt').click(advToggle);
			}
			thai.masonry();
		}
		
	};
	
	function areaToggle(e) {
		$('#area_select_bt').toggleClass("close");
		$('#area_select').toggleClass("close");
		
		if ($('#area_select').hasClass("close")) {
			$.cookie(areaCookie, null);
		} else {
			$.cookie(areaCookie, 'true');
		}
		
		thai.masonry();
	}
	
	function advToggle(e) {
		$('#adv_search_bt').toggleClass("close");
		$('#adv_search').toggleClass("close");
		
		if ($('#adv_search').hasClass("close")) {
			$.cookie(advCookie, null);
		} else {
			$.cookie(advCookie, 'true');
		}
		
		thai.masonry();
	}
	
	return L;
}();


/*------------------------------------------------------------------------------*/
//詳細のイメージスライドショー
thai.mainImages = function() {
	
	var dirl = '/common/photo/610x300/';
	var dirs = '/common/photo/300x150/';
	var divId = 'bl_main_img';
	var warpId = 'bl_main_imgwp';
	var xmlPath = '/common/xml/imagelist/';
	
	//xmlパースデータ
	var data;
	
	//jq変換後のオブジェクト
	var block;
	
	//jq変換後のオブジェクト
	var wrap;
	
	//ナビ
	var navi;
	
	//タイムアウト関係
	var timeID = 0;
	var dura = 1000 * 13;
	
	//現在の写真
	var phtoID = 0;
	
	//自分自身
	var me;
	
	T = {
		init : function() {
			me = this;
			block = $('#' + divId);
			wrap = $('#' + warpId);
			var url = $('article hgroup').attr('id');
			var wg = Math.floor($(window).width() / 310);
			if (block.get(0) && wg > 2 && url != '') {
				url = url.replace('_','/');
				url = xmlPath + url + '.xml';
				$.ajax({url:url,success:onXmlComp});
			}
		},
		
		onTimeOut : function(o) {
			var n = phtoID + 1;
			if (n >= data.find('img').length) n = 0;
			naviBottan(n);
		}
		
	};
	
	//xmlを読み込んだ時
	function onXmlComp(d, t) {
		data = $(d);
		
		if (data.find('img').length < 2) return;
		
		navi = $(document.createElement("div"))
		.attr({'class':'img_pager'});
		block.append(navi);
		
		wrap.empty();
		
		var dir = dirl;
		var size = 610;
		if ($('body').hasClass('range_one')) {
			dir = dirs;
			size = 300;
		}
		
		//var imgs = '';
		$(data).find('img').each(function(i){
			var p = $(document.createElement("img"))
			.attr({'src':dir + $(this).attr('filename')});
			
			wrap.append(p);
			
			var n = $(document.createElement("div"))
			.click(function(){naviBottan(i)});
			navi.append(n);
		});
		
		//$('#bl_main').after(imgs);
		
		if (thai.detail) thai.detail.setSmallImage(data);
		
		wrap.width(size * data.find('img').length);
		navi.find('div:first').addClass('on');
		
		timeOutStart();
		
		$(window).resize(onResize);
	}
	
	function naviBottan(i) {
		var size = 610;
		if ($('body').hasClass('range_one')) size = 300;
		
		wrap.animate({left:-size * i});
		
		navi.find('div')
		.removeClass('on')
		.eq(i)
		.addClass('on');
		
		phtoID = i;
		timeOutStart();
	}
	
	function timeOutStart() {
		var o = me;
		clearTimeout(timeID);
		timeID = setTimeout(function(){o.onTimeOut(o)}, dura);
	}
	
	//ウィンドウサイズ変更された時
	function onResize() {
		var wg = Math.floor($(window).width() / 310);
		var d = dirl;
		var size = 610;
		
		if (wg < 2) {
			d = dirs;
			size = 300;
		}
		
		wrap.find('img').each(function(i){
			$(this).attr({'src': d + data.find('img').eq(i).attr('filename')});
		});
		wrap.css({left:-size * phtoID});
	}
	
	return T;
}();


/*------------------------------------------------------------------------------*/
//プリントボタン
thai.printBt = function() {
	//idの名前
	var className = 'bt_print';
	
	//print
	var printURL = '/common/print/';
	
	//ボタン
	var bt;
	
	P = {
		init : function() {
			hp = this;
			bt = $('.' + className);
			
			if (bt.get(0)) {
				bt.click(printOpen);
			}
		}
		
	};
	
	function printOpen() {
		var h = 800;
		if (screen.height < h) h = screen.height;
		window.open(printURL + "?su=" + encodeURIComponent(location.pathname + location.search), "print", 'width=650, height='+h+', menubar=no, toolbar=no');
		return false;
	}
	
	return P;
}();


/*------------------------------------------------------------------------------*/
//外部リンクへのトラッキング
thai.outerLinkTracking = function() {
	ME = {
		init : function() {
			$.each($('a[href^=http://], a[href^=https://]'), function() {
				thai.outerLinkTracking.setTracking(this);
			});
		},
		
		setTracking : function(obj) {
			var h = $(obj).attr('href');
			var m = location.href;
			m = m.replace(/^http.*thailandtravel.or.jp/,'');
			if (h.indexOf('thailandtravel.or.jp') < 0) {
				$(obj).click(function() {
					_gaq.push(['_trackEvent', 'outer_link', m, h]);
				});
			}
		}
	};
	
	return ME;
}();


/*------------------------------------------------------------------------------*/
//トラッキング
thai.tracking = function() {
	T = {
		init : function() {
			trackingClick( $(".tracking_click") );
		},
		
		trackingClick: function(obj) {
			trackingClick(obj);
		}
	};
	
	function trackingClick(obj) {
		obj.click(function(){
			var me = $(this);
			var target = me.attr("target");
			$.ajax({
				url     : "/common/api/click.cgi",
				data    : { q : me.attr("rel") },
				type    : "POST",
				success : function() { onTracked(me); },
				error   : function() { onTracked(me); }
			});
			
			if (target && target == "_blank") {
			} else {
				return false;
			}
		});
	}
	
	function onTracked(obj) {
		var target = obj.attr("target");
		if (target && target == "_blank") {
		} else {
			window.location = obj.attr("href");
			return false;
		}
	}
	
	return T;
}();

$(document).ready(thai.init);

