//@charset "shift_jis";
//
(function($){
	//
	var APILocation = {
		INFOS		: "/shared/xml/cms/search/infos.rb",
		CALENDAR	: "/shared/xml/cms/search/calendar.rb",
		DETAIL		: "/shared/xml/cms/search/detail.rb"
	};
	var ERROR_MESSAGE = {
		"9999"		: "INVALID DATA",
		"unknown"	: "UNKNOWN ERROR"
	};
	var Events = {
		TODAY_LOAD    : "onloadtoday",
		UPCOMING_LOAD : "onloadupcoming",
		LATEST_LOAD   : "onloadlatest",
		CALENDAR_LOAD : "onloadcalendar",
		PAGE_COMPLETE : "onpagecomplete"
	};
	var HASH_DIR = "/detail/";
	//
	function randomQuery() { return Math.ceil(Math.random()*1000000).toString(); }
	var todaydiv, latestdiv, upcomingdiv, calendardiv, todayobj = new Date();
	var flashmode = false;
	$(function(){
		flashmode = $("#flashcontent").size()&&typeof(window['SWFAddress'])!="undefined";
		if(flashmode) {
			window.showDetail = Detail;
			return false;
		}
		todaydiv  = $("#conceptbar-today");
		latestdiv = $("#latest-diary");
		upcomingdiv = $("#upcoming-events");
		calendardiv = $("#cal-table");
		var l = window.location;
		if(
			$.browser.safari &&
			parseInt($.browser.version) < 412 &&
			l.href.indexOf('#')>=0 &&
			l.search!=''
		) {
			d.open();
			d.write('<html><head><meta http-equiv="refresh" content="0;url=' + l.href.substr(0, l.href.indexOf('#')) + '" /></head></html>');
			d.close();
			return false;
		}
		else if($("body").attr("id")=="conceptbar-calendar") Calendar();
		else if(todaydiv.size()) TopPage();
		$().bind(Events.PAGE_COMPLETE,function(){
			initAnchors("a[@rel='detail']");
			Detail();
		})
	});
	function TopPage() {
		showDate();
		$().bind(Events.TODAY_LOAD,function(){
			setTimeout(function(){ $().trigger(Events.PAGE_COMPLETE); },99);
		});
		Today();
	}
	function Calendar() {
		showDate();
		var init = false;
		var curdate;
		var actdate;
		var navi = $("ul.navi",calendardiv);
		var table = $("table",calendardiv);
		var h2 = $("h2",calendardiv);
		var h2_width = h2.width();
		$("li.next a",navi).click(nextMonth);
		$("li.back a",navi).click(prevMonth);
		function showCalendar(y,m) {
			if(isNaN(m)||isNaN(y)) {
				y = todayobj.getFullYear();
				m = todayobj.getMonth();
				curdate = new Date(y,m,1);
			}
			h2.html([
				curdate.getFullYear()," ",
				["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"][curdate.getMonth()]
			].join(""));
			h2.css("background-position",-h2_width*curdate.getMonth()+"px 0px");
			function load() {
				navi.addClass("hidden");
				table.addClass("hidden");
				var params = {
					rnd   : randomQuery(),
					month : curdate.getMonth()+1,
					year  : curdate.getFullYear()
				};
				$.get(APILocation.CALENDAR, params, callback);
			}
			function callback(d) {
				table.empty();
				var ddate = new Date(curdate.getFullYear(),curdate.getMonth(),1);
				var bday = ddate.getDay();
				var ht = [];
				var infos = [];
				if(bday>0) ht.push("<tr><td class='blank' colspan='"+bday+"'>&nbsp;</td>");
				while(ddate.getMonth()==curdate.getMonth()) {
					if(ddate.getDay()==0) ht.push("<tr>");
					var dnum = ddate.getDate();
					var strd = dnum<10?"0"+dnum:dnum;
					var titles = [], ids = [];
					var info = $("calendar item[@date='"+strd+"']",d);
					var inode = $("*[@info='true']",info);
					var b = inode.size() > 0;
					if(b) inode.each(function(){
						titles.push($(this).attr("title"));
						ids.push($(this).attr("id"));
					});
					var stag = b?"<a href='#"+HASH_DIR+ids.join(",")+"' title='"+titles.join($.browser.msie?"\n":" / ")+"'"+(isActive(ddate)?" class='active'":"")+" rel='list-events'>":"<strike>";
					var etag = b?"</a>":"</strike>";
					if(b) infos.push({ xml:$(info), date:new Date(ddate.getFullYear(),ddate.getMonth(),dnum) });
					
					ht.push([
						"<td class='d",dnum,"'>",
							stag,
							"<span class='c' style='background-position:",-(dnum-1)*40,"px 50%;'>",
								dnum,
							"</span>",
							etag,
						"</td>"
					].join(""));
					ddate.setDate(dnum+1);
					if(ddate.getDay()==0) ht.push("</tr>");
				}
				bday = ddate.getDay();
				if(bday>0) ht.push("<td class='blank' colspan='"+(bday-1)+"'>&nbsp;</td></tr>");
				table.html(ht.join(""));
				$("a[@rel='list-events']",table).each(function(i){
					$(this).click(function(){
						$("a.active",table).removeClass("active");
						$(this).addClass("active");
						showList(infos[i].xml,infos[i].date);
						return false;
					});
				});
				navi.removeClass("hidden");
				table.removeClass("hidden");
				$().trigger(Events.CALENDAR_LOAD);
			}
			load();
		}
		function nextMonth() {
			curdate.setMonth(curdate.getMonth()+1);
			showCalendar(curdate.getFullYear(),curdate.getMonth());
			return false;
		}
		function prevMonth() {
			curdate.setMonth(curdate.getMonth()-1);
			showCalendar(curdate.getFullYear(),curdate.getMonth());
			return false;
		}
		function showList(xml,date) {
			var ctg = $("*[@info='true']",xml);
			if(!ctg.size()||isActive(date)) return false;
			actdate = date;
			var ul = $("ul",todaydiv);
			ul.empty();
			var ht = [];
			ctg.each(function(){
				var type = this.tagName.toLowerCase();
				var title = $(this).attr("title");
				var id = $(this).attr("id");
				ht.push([ "<li class='",type,"'><a href='#",HASH_DIR,id,"' rel='detail'>", title, "</a></li>" ].join(""));
			});
			setTimeout(function(){
				todaydiv.removeClass("hidden");
				var img = $("h2 img",todaydiv);
				var dir = img.attr("src").split("/");
				dir.pop();
				dir = dir.join("/");
				img.attr("src",dir+"/h2_info.gif");
				ul.html(ht.join(""));
				showDate(date,todaydiv);
				initAnchors("ul li a[@rel='detail']",todaydiv);
			},1);
			return false;
		}
		function isActive(d) {
			return (d&&actdate&&actdate.getTime()==d.getTime());
		}
		$().bind(Events.TODAY_LOAD,UpComing);
		$().bind(Events.UPCOMING_LOAD,LatestDiary);
		$().bind(Events.LATEST_LOAD,function(){ showCalendar(); });
		$().bind(Events.CALENDAR_LOAD,function(){
			if(!init) {
				$().trigger(Events.PAGE_COMPLETE);
				init = true;
			}
		});
		Today();
	}
	function Today(e,d) {
		function load() {
			var params = {
				rnd : randomQuery()
			};
			$.get(APILocation.INFOS, params, callback);
		}
		function callback(d) {
			todayobj = parseDate($("infos",d).attr("today"));
			$().trigger(Events.TODAY_LOAD,[d]);
			var d = $(d);
			var err = getError(d);
			if(err) return false;
			var infos = $("todays_info item",d);
			if(!infos.size()) return false;
			var o = getInfoObj(infos[0]);
			if(o&&o.dates.start) showDate(o.dates.start,todaydiv);
			$("ul",todaydiv).html(getUListHTML(infos));
			todaydiv.removeClass("hidden");
		}
		if(d) callback(d);
		else load();
	}
	function UpComing(e,d) {
		function load() {
			var params = {
				rnd : randomQuery()
			};
			$.get(APILocation.INFOS, params, callback);
		}
		function callback(d) {
			var d = $(d);
			var err = getError(d);
			$().trigger(Events.UPCOMING_LOAD,[d]);
			if(err) return false;
			var infos = $("coming_soon item",d);
			var o = getInfoObj(infos[0]);
			var dt = o.dates.start&&o.dates.start>todayobj ?
			    o.dates.start:
			    new Date(todayobj.getFullYear(),todayobj.getMonth(),todayobj.getDate()+1);
			if(!infos.size()) return false;
			if(dt) showDate(dt,upcomingdiv);
			$("ul",upcomingdiv).html(getUListHTML(infos));
			upcomingdiv.removeClass("hidden");
		}
		if(d) callback(d);
		else load();
	}
	function LatestDiary(e,d) {
		function load() {
			var params = {
				rnd : randomQuery()
			};
			$.get(APILocation.INFOS, params, callback);
		}
		function callback(d) {
			var d = $(d);
			var o = getInfoObj($("staff_diary item",d));
			$().trigger(Events.LATEST_LOAD,[d]);
			if(!o.summary&&!o.title) return false;
			if(o.dates.start) showDate(o.dates.start,latestdiv);
			$("blockquote.summary",latestdiv).html([
				"<p class='text'>",
					"<strong>", o.title, "</strong>",
					"<span>", o.summary, "</span>",
				"</p>",
				"<p class='more'>",
					"<a href='#",HASH_DIR,o.id,"' rel='detail'>続きを読む</a>",
				"</p>"
			].join(""));
			latestdiv.removeClass("hidden");
		}
		if(d) callback(d);
		else load();
	}
	function Detail(id) {
		if(!id&&!flashmode) {
			var hash = window.location.hash;
			if(hash) hash = hash.split(HASH_DIR);
			if(hash.length==2) id = hash.pop();
			if(id) setTimeout(function(){ Detail(id) },500);
			return false;
		}
		var url = [
			APILocation.DETAIL,"?id=",id,
			"&rnd=",randomQuery(),
			"&TB_iframe=true&KeepThis=true&height=423&width=359&noframe=true"
		].join("");
		tb_show("",url);
		$("#TB_overlay").unbind("click");
		$("#TB_overlay").click(function(){
			DetailClose();
			tb_remove();
			$("#TB_overlay").unbind("click");
		});
		//if(flashmode) setWmode("opaque");
		if(!flashmode) window.location.hash = HASH_DIR+id;
	}
	function DetailClose() {
		var h;
		if(flashmode) {
			//setWmode("transparent");
			var swf = window.document["index"];
			if(
				$.browser.msie&&parseInt($.browser.version)<7&&
				typeof(swf["disdetail"])=="function"&&swf.disdetail()
			) return;
			h = SWFAddress.getValue().split(HASH_DIR)[0];
			SWFAddress.setValue(h+"/");
		}else {
			h = window.location.hash.split(HASH_DIR)[0];
			window.location.hash = h;
		}
	}
	function showDate(d,ele) {
		var tdy = d;
		if(!(d&&typeof(d["getMonth"])=="function"))
			tdy = parseDate($("*",d).attr("today"));
		if(!tdy) tdy = new Date();
		$("p.today",ele).html([
			"<strong>", tdy.getMonth()+1,"/",tdy.getDate(), "</strong>",
			"<span> (" , ["SUN","MON","TUE","WED","THU","FRI","SAT"][tdy.getDay()],")</span>"
		].join(""));
		if(ele) $("p.today",ele).removeClass("hidden");
		//todayobj = tdy;
		return tdy;
	}
	function getUListHTML(infos,fixfuture) {
		var ht = [];
		infos.each(function(){
			var o = getInfoObj(this);
			if(!fixfuture||o.dates.start>todayobj)
				ht.push([ "<li class='",o.type,"'><a href='#",HASH_DIR,o.id,"' rel='detail'>", o.title, "</a></li>" ].join(""));
		});
		return ht.join("");
	}
	function getInfoObj(ele) {
		ele = $(ele);
		var dates = {};
		$.each(["end","start"],function(){
			dates[this] = parseDate($(this+"_date",ele).text());
		});
		return {
			type    :$("type",ele).text(),
			title   :$("title",ele).text(),
			id      :$("id",ele).text(),
			summary :$("summary",ele).text(),
			dates   :dates
		}
	}
	function parseDate(tdy) {
		if(!tdy) return false;
		tdy = tdy.split('/');
		$.each(tdy,function(i){
			var s = this.toString();
			s = s.indexOf("0") == 0 ? s.substr(1,1) : s;
			var n = parseInt(s);
			tdy[i] = n;
			if(isNaN(n)) return false;
		})
		if(tdy.length<3) return false;
		tdy = new Date(tdy[0],tdy[1]-1,tdy[2]);
		return tdy;
	}
	function initAnchors(ele) {
		$(ele).click(function(){
			Detail($(this).attr("href").split(HASH_DIR).pop());
				return false;
		});
	}
	function getError(ele) {
		var status = $("*",ele).attr("status");
		var rtn = [];
		if(status=="OK") return false;
		$("error_code",ele).each(function(){
			var cd = $(this).text();
			var msg = ERROR_MESSAGE[cd];
			var o = {};
			if(!cd||!msg) msg = ERROR_MESSAGE["unknown"];
			o.message = msg;
			o.code = cd;
			rtn.push(o);
		});
		return rtn;
	}
	function Error(msg,code) {
		return false;
	}
	function setWmode(v) {
		$("embed#index").attr("wmode",v);
		if($("object#index").size()&&!$("object#index param[@name='wmode']").size())
			$("object#index").append("<param name=\"wmode\" value=\""+v+"\" \/>");
		else $("object#index param[@name='wmode']").attr("value",v);
		alert($("object#index").size()&&!$("object#index param[@name='wmode']").size());
	}
})(jQuery.noConflict());