/*
	infogenerator.js (ver 1.1)
	2010.11.19
	Author: Takada Koji
*/

google.load("feeds", "1");

var feedSet;

//オブジェクト FeedSet
function FeedSet(infoData){
	
	this.feedUrl = infoData.feedUrl;
	this.num = infoData.num;
	this.selector = infoData.selector;
	this.linkUrl = infoData.linkUrl;
	this.target = infoData.target;
	this.date = infoData.date;
	this.anime = infoData.anime;
	this.trimCount = infoData.trimCount;
	this.speed = infoData.speed;
	
}

//起動
function init(){
	var feed = new google.feeds.Feed(feedSet.feedUrl);
	feed.setNumEntries(feedSet.num);	//指定された数だけFeedを取得
	var el = $(feedSet.selector);	//生成領域取得
	
	feed.load(function(result) {
		if (!result.error) {
			
			try{
				if(!feedSet.date){
					el.append("<ul>");
				}
				for (var i = 0; i < result.feed.entries.length; i++) {
					var entry = result.feed.entries[i];
					var title = entry.title;
					
					if(feedSet.anime == "loop"){
						//"loop"の場合、最初の1件以外をトリミング
						if(i != 0){
							title = triming(title);
						}
					}else if(feedSet.anime == "trim"){
						//"trim"の場合、全件トリミング
						title = triming(title);
					}
					
					if(feedSet.date){
						//日付有の場合
						var date = entry.publishedDate.split(" ");
					
						switch(date[2]){
							case "Jan": date[2]=1; break;
							case "Feb": date[2]=2; break;
							case "Mar": date[2]=3; break;
							case "Apr": date[2]=4; break;
							case "May": date[2]=5; break;
							case "Jun": date[2]=6; break;
							case "Jul": date[2]=7; break;
							case "Aug": date[2]=8; break;
							case "Sep": date[2]=9; break;
							case "Oct": date[2]=10; break;
							case "Nov": date[2]=11; break;
							case "Dec": date[2]=12; break;
						}
						
						//日付有info生成
						el.append("<dl id='generatedInfo"+ (i+1) +"' class='generatedInfo'><dt>"+date[3]+"."+date[2]+"."+date[1]+"</dt><dd><p><a href='"+ feedSet.linkUrl +"' target='"+ feedSet.target +"'>"+title+"</a></p></dd></dl>");
					}else {
						
						//日付無info場合
						el.children().append("<li id='generatedInfo"+ (i+1) +"' class='generatedInfo'><p><a href='"+ feedSet.linkUrl +"' target='"+ feedSet.target +"'>" + title + "</a></p></li>");
					}
				}
				
				//各アニメ設定に合わせて、クラスを追加。
				if(feedSet.anime == "loop"){
					el.addClass("loopInfo");
					loopAnime();
				}else if (feedSet.anime == "over"){
					el.addClass("overInfo");
					overAnime();
				}else if (feedSet.anime == "trim"){
					el.addClass("trimInfo");
				}
			} catch(error) {
				el.append("<p>Feedの出力中にエラーが発生しました。<br />" + error.message +"</p>");
			}
		}else {
			el.append("<p>Feedの読み込みに失敗しました。<br />"+ result.error.message +"</p>")
		}
	});
}

//トリミング処理
function triming(title) {
	if(feedSet.trimCount == null){
		return;
	}
	var titletemp = "";
	var count = 0;
	for(var j = 0; j < title.length; j++){
		/* 解説。
		エスケープ文字に変換した時、4文字以上の場合は全角、
		3文字以下の場合は半角と判断して文字数をカウントする。 */
		var len = escape(title.charAt(j)).length;
		if(len>=4){
			if(count + 2 <= feedSet.trimCount){
				titletemp = titletemp + title.charAt(j);
				count = count + 2;
			}
		}else {
			if(count + 1 <= feedSet.trimCount){
				titletemp = titletemp + title.charAt(j);
				count = count + 1;
			}
		}
	}
	if(count == feedSet.trimCount){ title = titletemp + "..."; }
	else if(count == feedSet.trimCount - 1){ title = titletemp + " ..."; }
	return title;
}

function loopAnime() {
	
	if(feedSet.date){
		var moveel = "dl#generatedInfo1 dd p";
	}else {
		var moveel = "li#generatedInfo1 p";
	}
	
	var time;
	var width = $(moveel).children().width();
	var wrapWidth = $(moveel).parent().width();
	$(moveel).parent().click(function() {
		location.href = $(moveel).children().attr("href")
	});
	$(moveel).parent().css("cursor", "pointer");
	
	if(feedSet.speed == "fast") {
		time = width * 10;
	}else if(feedSet.speed == "medium") {
		time = width * 20;
	}else if(feedSet.speed == "slow") {
		time = width * 30;
	}
	animeStart();
	
	$(document).everyTime(time + 1000, animeStart);
	
	function animeStart() {

		if(width > wrapWidth){
			width = (-1)*width;
			$(moveel).animate({left: width + "px"}, time, "linear", function(){
				$(moveel).css("left", "0");
			});
			width = (-1)*width;
		}
	}
}

function overAnime() {
	if(feedSet.date){
		var moveel = "dl.generatedInfo dd p";
	}else {
		var moveel = "li.generatedInfo p";
	}
	$(moveel).each(function() {
		$(this).parent().click(function() {
			location.href = $(this).children().children().attr("href")
		});
		$(this).parent().css("cursor", "pointer");
	});
	
	
	$(moveel).hover(
		function(){
			
			var width = $(this).children().width();
			var time;
			
			if(feedSet.speed == "fast") {
				time = width * 10;
			}else if(feedSet.speed == "medium") {
				time = width * 20;
			}else if(feedSet.speed == "slow") {
				time = width * 30;
			}
			
			var wrapWidth = $(this).parent().width();
			if(width > wrapWidth){
				$(this).animate({left: "-" + width + "px"}, time, "linear", function(){
					$(this).css("left", 0);
				});
			}
		},
		function(){
			$(this).stop();
			$(this).css("left", 0);
		}
	);
}
