/**
 * SABRA utils
 * Copyright (c) 2009 KFW
 * Require: jQuery 1.3
 */
(function($) {
	
	if (!window.sabra) window.sabra = {};
	
	/**
	 * private params
	 */
	var _current = new Date();
	var _cid = sabra.CONTENTS_ID;
	var _category = {bb: "net BB", dvd: "DVD付き写真集", easy: "net easy", oneday: "1day ticket", sabra: "sabra本誌"};
	
	/**
	 * include banner
	 */
	$.fn.banner = function(dir) {
		var type = this.attr("class");
		return this.load(dir + type +".xml");
	};
	
	/**
	 * including tax
	 */
	$.fn.tax = function() {
		return this.each(function() {
			var $this = $(this);
			var price = $this.text();
			var value = price.substring(0, price.indexOf("円"))
			$this.html(new kakaku(value, sabra.ISP).hyoki);
		});
	};
	
	/**
	 * expires
	 */
	sabra.expires = {
		easy: 30,
		bb: 2,
		oneday: 1,
		strictly: 30
	};
	
	/**
	 * save expires
	 *
	 * @param cid {string} contents id
	 * @param span {number} day
	 */
	sabra.expires.save = function(cid, span) {
		span = this[span] || span;
		
		var y = _current.getFullYear();
		var m = _current.getMonth()+1;
		var d = _current.getDate();
		var h = _current.getHours();
		var t = _current.getMinutes();
		var e = _current.getTime() + span*1000*60*60*24;
		
		if (!$.cookie.get(cid)) $.cookie.set(cid, e +"/"+ y +"/"+ m +"/"+ d +"/"+ h +"/"+ t, {expires:span, path:"/"});
	}
	
	/**
	 * load expires
	 *
	 * @param cid {string} contents id
	 * @param span {number} day
	 * @return term,expires
	 */
	sabra.expires.load = function(cid) {
		var expires = $.cookie.get(cid);
		
		if (expires) {
			var hrs = expires.split("/")[0] - _current.getTime();
			return {term:hrs/1000/60/60, date:expires};
		} else {
			return false
		}
	}
	
	
	/**
	 * Count Down
	 *
	 * @param current {Date}
	 * @param end {String} YYYY年MM月DD日
	 * @return {Number} day
	 */
	function _countDown(current, term) {
		var end =  term.replace("年", "/").replace("月", "/").replace("日", "");
		var expire = end.split("/");
		var expires = new Date(expire[0], expire[1]-1, expire[2]);
		var diff = current.getTime() - expires.getTime();
		return Math.floor(diff / (1000*60*60*24)) * -1;
	}
	
	
	/**
	 * count down
	 *
	 * @return {jQuery}
	 */
	$.fn.countDown = function() {
		return this.each(function() {
			var $this = $(this);
			var term = $this.text().split("-")[1];
			var expire = _countDown(_current, term);
			
			if (expire==0) $this.html("本日終了!");
			else if (expire>0) $this.html("あと"+ expire +"日!");
		});
	};
	
	
	/**
	 * rss engine
	 *
	 * @param category {string} category id
	 * @return {jQuery}
	 */
	$.fn.rss = function(category, max) {
		var i = 0;
		var n = max || 2;
		var cat = category;
		var $this = $(this);
		var url = $this.find("a").attr("href");
		
		$.ajax({
			url: url,
			dataType: "xml",
			success: function(xml) {
				var html = "<dl>";
				
				$(xml).find("item").each(function() {
					var item = $(this);
					var c = item.find("category").text();
					
					if (c == cat && i < n) {
						i++;
						var t = item.find("description").text();
						var l = item.find("link").text();
						
						var date = new Date(item.find("pubDate").text());
						var year = String(date.getFullYear());
						var yy = year.substring(2)
						var mm = String(date.getMonth() + 1);
						if (mm<10) mm = "0" + mm;
						var dd = String(date.getDate());
						if (dd<10) dd = "0" + dd;
						
						html += "<dt>"+ yy +"."+  mm +"."+ dd +"</dt>";
						html += "<dd><a href='"+ l +"' target='_blank'>"+ t +"</a></dd>";
					}
					
				});
				
				html += "</dl>"
				
				$this.append(html);
			}
			
		});
		
		return this;
	}
	
	
	/**
	 * column engine
	 */
	$.fn.column = function(url) {
		
		this.each(function() {
			var self = this;
			
			$.ajax({
				url: url,
				dataType: "xml",
				success: function(xml) {
					var column = $(xml).find("column")
					if (column.length) {
						$(xml).find("column").each(function() {
							var text = $(this).text();
							if (text) $(self).html("<div class='column'><div class='frame'><h3><span>撮影ウラ話</span></h3><div class='text'>"+ text +"</div></div></div>")
						});
					} else $(self).remove();
				},
				
				error: function(e) {
					$(self).remove();
				}
				
			});
		});
		
		return this;
	};
	

	/**
	 * recommend engine
	 *
	 * @param url {String} URL of the XML
	 * @return {jQuery}
	 */
	$.fn.recom = function(url, contents, loading) {
		
		_onRecomXML.cntDirectory = contents
		
		this.each(function() {
			var recom = "<h3>オススメコンテンツ</h3><div class='inner'><div class='frame'>";
			recom += "<div id='Loading'><div class='loading'>ロード中</div></div>";
			recom += "<ul id='RecommendList' /></div></div>";
			
			$.ajax({
				url: url,
				cache: false,
				dataType: "xml",
				success: _onRecomXML,
				error: function(e) {
					//$("#RecommendList").remove();
					//$("#Loading").html("表示できるおすすめ情報がありませんでした。<br /><a href='http://sabra.jp/'>一覧から探してみてください。</a>");
					$("#Recommend").remove();
				}
			});
			
			$(this).html(recom);
		});
		
		return this;
	};
	
	/**
	 * success recommend xml
	 */
	function _onRecomXML(xml) {
		
		var container = $("#RecommendList").css({left: "2000px"});
		
		$("#Loading").fadeOut(function() {
			$(this).css({display:"none"});
			container.animate({left:"0px"});
		});
		
		var contents = $(xml).find("#"+ _cid);
		
		if (contents.length) {
			contents.find("item").each(function() {
				var li = $("<li><div class='status'><div class='loading'>ロード中</div></div></li>");
				
				$.ajax({
					url: _onRecomXML.cntDirectory + $(this).text() +".xml",
					dataType: "xml",
					success: _onRelatedXML(li),
					error: function(e) {
						li.html("");
					}
				});
				
				container.append(li);
			});
			
		} else {
			$("#Recommend").remove();
		};
	};
	
	
	/**
	 * success contents xml
	 */
	function _onRelatedXML(list) {
		
		return function(xml) {
			$(xml).find("contents").each(function() {
				var caption = $(this).find("caption").text();
				var category = $(this).find("category").text();
				var content = $(this).find("content").text();
				var date = $(this).find("date").text();
				var text = $(this).find("text").text();
				var title = $(this).find("title").text();
				var price = $(this).find("price").text();
				var subject = $(this).find("subject").text();
				var src = $(this).find("thumbnail").text();
				var url = $(this).find("url").text();
				
				var dl = "<dl class='"+ category +"'><dt>"+ _category[category] +"</dt><dd>";
				
				//thum
				dl += "<div><a href='"+ url +"'><img class='thumb' src='"+ src +"' alt='' /></a></div>";
				
				//text
				switch(category){
					case "easy":
						dl += "<h4>"+ subject +" 『"+ title +"』</h4><p>"+ caption +"</p>";
					break;
					case "oneday":
						dl += "<h4>"+ title +"</h4><h5>"+ subject +"</h5><p>"+ text +"</p>";
					break;
					case "bb":
						dl += "<h4>"+ title +"</h4><h5>"+ caption +"</h5><p>"+ text +"</p>";
					break;
					case "sabra":
						dl += "<h4>"+ title +"</h4><h5>"+ caption +"</h5><p>"+ text +"</p>";
					break;
					case "dvd":
						dl += "<h4>"+ title +"</h4><h5>"+ caption +"</h5><p>"+ text +"</p>";
					break;
					default:
						dl += "<h4>"+ title +"</h4>";
					break;
				};
				
				//price
				dl += "</dd><dd class='price'>";
				dl += "<table cellpadding='0' cellspacing='1' class='price'><tr class='head'><th>価格</th>";
				dl += "<td><span>"+ price +"</span></td></tr><tr>";
				if (content) dl += "<th>内容</th><td><span>"+ content +"</span></td>";
				else dl += "<th>発売日</th><td><span>"+ date +"</span></td>";
				dl += "</tr></table></dd></dl>";
				
				list.html(dl);
			});
		}
	};
	
})(jQuery);