var _FEEDREADER = new Object;
_FEEDREADER.instNum = 0;
_FEEDREADER.week = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];
_FEEDREADER.month = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];
_FEEDREADER.entryArray = new Array;
_FEEDREADER.NumEntries = new Array;
_FEEDREADER.DateFormat = new Array;
_FEEDREADER.Order = new Array;
_FEEDREADER.FeedLink = new Array;
_FEEDREADER.FeedTemplate = new Array;
_FEEDREADER.EntryLink = new Array;
_FEEDREADER.EntryTemplate = new Array;
_FEEDREADER.pushArray = function(context, result)
{
	var instNum;
	var flag;
	var resMatch = context.match(/^([0-9]+)(_([\w]+))?$/);
	instNum = resMatch[1];
	flag = resMatch[3];
	
	try {
		if(!result.error){
			for (var i = 0; i < result.feed.entries.length; i++) {
				var date = new Date(result.feed.entries[i].publishedDate);
				result.feed.entries[i].time = date.getTime();
				result.feed.entries[i].feedTitle = result.feed.title;
				result.feed.entries[i].feedLink = result.feed.link;
				_FEEDREADER.entryArray[instNum].push(result.feed.entries[i]);
			}
			if(flag){
				_FEEDREADER.draw(_FEEDREADER.entryArray[instNum], flag, instNum);
			}
		}
	} catch(e){
		setTimeout(location.reload, 10000);
	}
}
_FEEDREADER.draw = function(entryArray, target, instNum)
{
	document.getElementById('_feedReaderMask_' + instNum).style.display = 'none';
	
	var tsort = function (array, order){
		if(order.match(/DESC/i)){
			return array.sort ( function (a, b) { return a['time'] > b['time'] ? -1 : 1; } );//降順
		}else{
			return array.sort ( function (b, b) { return b['time'] > b['time'] ? 1 : -1; } );//昇順
		}
	}
	var template = function(template, rec){
		if(rec){
			return template.replace(/\{\{([^}]+)\}\}/g, function(a, b)
				{
					if(typeof(eval('rec.' + b))=='undefined'){
						return;
					} else {
						if(b=='publishedDate'){
							var date = dateFormat(_FEEDREADER.DateFormat[instNum], new Date(rec.publishedDate));
							return date;
						}else{
							return eval('rec.' + b);
						}
					}
				}
			);
		}else{
			return template.replace(/\{\{([^}]+)\}\}/g, '');
		}
	}
	var dateFormat = function(pattern, date){
		return pattern.replace(/([a-zA-Z])/g, function(a, b)
			{
				switch(b){
					case 'd':
						var d = '00' + String(date.getDate());
						return d.slice(-2); 
						break;
					case 'D':
						return _FEEDREADER.week[date.getDay()].substr(0, 3);
						break;
					case 'j':
						return String(date.getDate());
						break;
					case 'l':
						return _FEEDREADER.week[date.getDay()];
						break;
					case 'N':
						return (date.getDay() == 0) ? 7 : date.getDay();
					case 'w':
						return date.getDay();
					case 'F':
						return _FEEDREADER.month[date.getMonth()];
						break;
					case 'm':
						var d = '00' + String(date.getMonth() + 1);
						return d.slice(-2); 
						break;
					case 'M':
						return _FEEDREADER.month[date.getMonth()].substr(0, 3);
						break;
					case 'n':
						return String(date.getMonth() + 1)
						break;
					case 'Y':
						return String(date.getFullYear());
						break;
					case 'y':
						return String(date.getFullYear()).slice(-2);
						break;
					case 'a':
						return (date.getDate() < 12) ? 'am' : 'pm';
						break;
					case 'A':
						return (date.getDate() < 12) ? 'AM' : 'PM';
						break;
					case 'g':
						return (date.getHours() < 12) ? date.getHours() : date.getHours() - 12;
						break;
					case 'G':
						return date.getHours();
						break;
					case 'h':
						var d = (date.getHours() < 12) ? date.getHours() : date.getHours() - 12;
						d = '00' + d;
						return d.slice(-2); 
						break;
					case 'H':
						var d = '00' + String(date.getHours());
						return d.slice(-2); 
						break;
					case 'i':
						var d = '00' + String(date.getMinutes());
						return d.slice(-2); 
						break;
					case 's':
						var d = '00' + String(date.getSeconds());
						return d.slice(-2); 
						break;
					case 'u':
						return String(date.getMilliseconds());
						break;
					case 'c':
						return String(date.toGMTString());
						break;
					case 'r':
						return String(date.toUTCString());
						break;
					default :
						return b;
				}
			}
		);
	}
	var container = document.getElementById(target);
	entryArray = tsort(entryArray, _FEEDREADER.Order[instNum]);
	var div_results = document.createElement('DIV');
	div_results.className = 'gfc-results';
	for (var i = 0; i < _FEEDREADER.NumEntries[instNum]; i++) {
		if(typeof(entryArray) != "undefined"){
			var entry = entryArray[i];
			if(typeof(entry) != "undefined"){
				var date = dateFormat(_FEEDREADER.DateFormat[instNum], new Date(entry.publishedDate));
				var div_result = document.createElement('DIV');
				if(_FEEDREADER.EntryTemplate[instNum]){
					div_result.innerHTML += template(_FEEDREADER.EntryTemplate[instNum], entry);
				}else{
					var div_result = document.createElement('DIV');
					div_result.className = 'gfc-result';
					div_result.innerHTML = '<div class="gf-result">';
					div_result.innerHTML += '<div class="gf-relativePublishedDate">' + date + '</div>';
					if(_FEEDREADER.FeedLink[instNum]){
						div_result.innerHTML += '<div class="gf-blog"><a href="'+ entry.feedLink +'" class="gf-bloglink" target="_blank">' + entry.feedTitle + '</a></div>';
					}else{
						div_result.innerHTML += '<div class="gf-blog">'+ entry.feedTitle +'</div>';
					}
					div_result.innerHTML += '<div class="gf-categories">'+ entry.categories +'</div><div class="gf-title"><a href="' + entry.link + '" class="gf-titlelink" target="_blank">' + entry.title + '</a></div><div class="gf-snippet">'+ entry.contentSnippet +'</div><div class="gf-content">'+ entry.content +'</div><div class="gf-author">'+ entry.author +'</div></div>';
				}
				div_results.appendChild(div_result);
			}
		}
	}
	container.appendChild(div_results);
}




function feedReader()
{
	this.initialize();
}
feedReader.prototype = {
	initialize: function()
	{
		this.instNum = _FEEDREADER.instNum;
		this.NumFeedEntries = 4;
		_FEEDREADER.entryArray[this.instNum] = [];
		_FEEDREADER.NumEntries[this.instNum] = 5;
		_FEEDREADER.Order[this.instNum] = 'DESC';
		_FEEDREADER.FeedLink[this.instNum] = false;
		_FEEDREADER.EntryLink[this.instNum] = true;
		_FEEDREADER.DateFormat[this.instNum] = 'Y-m-d H:i:s';
		_FEEDREADER.instNum++;
		this.feedArray = new Array();
		this.cache = 'd';
	},
	setAPIkey: function(Gkey)
	{
		if(Gkey.length){
			this.Gkey = '&key=' + Gkey;
		}
	},
	setTarget: function(target)
	{
		if(target.length){
			this.target = target;
		}
	},
	setFeedLink: function(boolean)
	{
		if(boolean){
			_FEEDREADER.FeedLink[this.instNum] = true;
		}else{
			_FEEDREADER.FeedLink[this.instNum] = false;
		}
	},
	setEntryLink: function(boolean)
	{
		if(!boolean){
			_FEEDREADER.EntryLink[this.instNum] = false;
		}else{
			_FEEDREADER.EntryLink[this.instNum] = true;
		}
	},
	setNumEntries: function(num)
	{
		if(num>0){
			_FEEDREADER.NumEntries[this.instNum] = num;
		}
	},
	setNumFeedEntries: function(num)
	{
		if(num>0){
			this.NumFeedEntries = num;
		}
	},
	setOrder: function(order)
	{
		if(order.length){
			_FEEDREADER.Order[this.instNum] = order;
		}
	},
	setDateFormat: function(str)
	{
		if(str.length>0){
			_FEEDREADER.DateFormat[this.instNum] = str;
		}
	},
	setFeedTemplate: function(template)
	{
		if(template.length>0){
			_FEEDREADER.FeedTemplate[this.instNum] = template;
		}
	},
	setEntryTemplate: function(template)
	{
		if(template.length>0){
			_FEEDREADER.EntryTemplate[this.instNum] = template;
		}
	},
	setFeed: function(url)
	{
		this.feedArray.push(url);
	},
	setCache: function(str)
	{
		if(str.match(/^[ymdhis]$/i)){
			this.cache = str;
		}
	},
	createCacheStr: function(){
		var mynow = new Date();
		var Y = String(mynow.getFullYear());
		var M = String('0' + (mynow.getMonth() + 1)).slice(-2);
		var D = String('0' + mynow.getDate()).slice(-2);
		var H = String('0' + mynow.getHours()).slice(-2);
		var I = String('0' + mynow.getMinutes()).slice(-2);
		var S = String('0' + mynow.getSeconds()).slice(-2);
		var str = this.cache.match(/^[ymdhis]$/i);
		var mode = str[0].toUpperCase();
		var res;
		switch(mode){
			case 'Y' :
				res = Y;
			break;
			case 'M' :
				res = Y + M;
			break;
			case 'D' :
				res = Y + M + D;
			break;
			case 'H' :
				res = Y + M + D + H;
			break;
			case 'I' :
				res = Y + M + D + H + I;
			break;
			case 'S' :
				res = Y + M + D + H + I + S;
			break;
			default :
				res = Y + M + D;
			break;
		}
		return res;
	},
	draw: function()
	{
		var div = document.createElement('div');
		div.id = '_feedReaderMask_' + this.instNum;
		div.appendChild(document.createTextNode('取得中…'));
		div.style.border = '1px #000000 solid';
		//div.style.fontSize = '1em';
		div.style.backgroundColor = '#EEEEEE';
		div.style.color = '#000000';
		div.style.display = 'inline';
		div.style.padding = '3px';
		document.getElementById(this.target).appendChild(div);
		
		for(var key in this.feedArray){
			this.feedArray[key] += '&' + this.createCacheStr();
			var flag = '';
			if(this.feedArray.length - 1 == key){
				flag = '_' + this.target;
			}
			var scheam = (("https:" == document.location.protocol) ? "https://" : "http://");
			var script = document.createElement('script');
			script.src = scheam + 'ajax.googleapis.com/ajax/services/feed/load?q=' + encodeURIComponent(this.feedArray[key]) + '&v=1.0&callback=_FEEDREADER.pushArray&context=' + this.instNum + flag + '&hl=ja&output=json' + this.Gkey + '&num=' + this.NumFeedEntries;
			document.getElementsByTagName('head')[0].appendChild(script);
		}
	}
}

