/**
* KAIRAZOR_APP
* @module Kairazor_App
* @require jQuery
* @author shunsuke hirota s.hirota@theoria.ne.jp
*/
var KAIRAZOR_APP = KAIRAZOR_APP || {};

/**
* Twitter クラス
* @class Twitter
*/
KAIRAZOR_APP.Twitter = function() {
	'use strict';
	this.DEBUG = false;
	this.TIMELINE_NUM = 10;
	this.SCREEN_NAME = this.DEBUG ? 'dev_theo' : 'kairazor';
	this.HASHTAG = 'kairazor_news';
	this.USER_TIMELINE = 'http://api.twitter.com/1/statuses/user_timeline.json';
	this.tweets = null;
	this.user = null;
};

/**
* タイムラインを読み込む
* @param $callback {Function}
*/
KAIRAZOR_APP.Twitter.prototype.loadTimeline = function($callback) {
	'use strict';
	var that = this;
	jQuery.support.cors = true;
	jQuery.ajax({
		url: this.USER_TIMELINE + '?screen_name=' + this.SCREEN_NAME + '&count=20&callback=?',
		dataType: 'json',
		crossDomain: true,
		scriptCharset: 'utf-8',
		success: function(d) {
			var i, len, count= 0, stat, result = [];
			len = d.length;
			if (len !== 0) {
				for (i = 0; i < len; ++i) {
					stat = d[i];
					if (stat.text.search(that.HASHTAG) !== -1) {
						++count;
						result[result.length] = stat;
						if (count === that.TIMELINE_NUM) {
							break;
						}
					}
				}
				that.tweets = result;
				that.user = d[0].user;
			}
			if ($callback) {
				$callback.apply(this, [result]);
			}
		},
		error: function(e) {
			
		}
	});
};

/**
* ユーザー情報を取得
* @return {Object} ユーザー情報
*/
KAIRAZOR_APP.Twitter.prototype.getUser = function() {
	'use strict';
	return this.user;
};

/**
* ニュースヘッドライン モジュール
* @class NewsHeadline
*/
KAIRAZOR_APP.newsHeadline = (function() {
	'use strict';
	
	var _twitter,
		_id,
		_overlay,
		exports = {};
	
	/**
	* ヘッドライン用テキストを配置
	* @param list {Array} ヘッドライン
	*/
	function setHeadline(list) {
		var i, len = list.length;
		for (i = 0; i < len; ++i) {
			$('#' + _id).append('<li>' + list[i].text + '</li>');
			$('#' + _id).append('<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>');
		}
		
		$('#' + _id).liScroll({travelocity: 0.04});
	}
	
	/**
	* タイムライン一覧を設置
	*/
	function setTimelineStatuses(datas) {
		var i, len = datas.length,
			_target = '#twitter-list',
			status, date,
			user = _twitter.getUser(),
			icon = user.profile_image_url,
			tmp = '';
		
		for (i = 0; i < len; ++i) {
			status = datas[i];
			tmp += '<li>\n';
			tmp += '<dl class="clearfix">\n';
			tmp += '<dt><img src="' + icon + '" alt=""></dt>\n';
			tmp += '<dd>\n';
			tmp += '<p class="tweetNameArea"><span class="tweetAccount"><a href="http:/' + '/twitter.com/' + user.screen_name + '" target="_blank">kairazor</a></span><span class="tweetName">KAI RAZOR</span></p>\n';
			tmp += '<p class="tweetMain">' + status.text + '</p>\n';
			
			var dat = status.created_at.replace(/[A-z]*\s/, '').split(' ');
			date = new Date(dat[0] + ' ' + dat[1] + ', ' + dat[4] + ', ' + dat[2]);
			tmp += '<p class="tweetDate">' + date.getFullYear() + '年' + Number(date.getMonth() + 1) + '月' + date.getDate() + '日</p>\n';
			tmp += '</dd>\n</dl>\n</li>';
		}
		$(_target).append(tmp);
	}
	
	function setupForIE6() {
		$('#twitter-ttlArea').css('background-image', 'url(/img/twitter-ttl-bg.gif)');
		$('#twitterBgBtm').css('background-image', 'url(/img/twitter-bg-btm.gif)');
		$('#twitter-ttlArea h3 img').attr('src', '/img/twitter-ttl.gif');
		$('#twitter-close-button img').attr('src', '/img/twitter-btn-close.gif');
	}
	
	/**
	* @param idname {String} 起動対象のID
	* @param overlay {String} コンテンツ情報レイヤーのID
	*/
	exports.initWithId = function(idname, overlay) {
		_id = idname;
		_overlay = overlay;
		_twitter = new KAIRAZOR_APP.Twitter();
		
		if (jQuery.browser.msie && jQuery.browser.version == 6) {
			setupForIE6();
		}
		
		
		_twitter.loadTimeline(function(d) {
			setHeadline(d);
			setTimelineStatuses(d);
			$('#headline-button a').click(function() {
				exports.showHeadlines();
			});
			$('#twitter-close-button').click(function() {
				$.colorbox.close();
			});
		});
		
		return true;
	};
	
	/**
	* ヘッドライン一覧を表示する
	*/
	exports.showHeadlines = function() {
		$('#' + _overlay).show();
		
		$.colorbox({
			transition: 'fade',
			fixed: true,
			speed: 300,
			rel: false,
			iframe: false,
			inline: true,
			initialWidth: 32,
			initialHeight: 32,
			innerWidth:740,
			innerHeight:500,
			title: '',
			href: '#' + _overlay,
			onClosed: function() {
				$('#' + _overlay).hide();
			}
		});
	}
	
	/**
	* ヘッドライン一覧を非表示にする
	*/
	exports.hideHeadline = function() {
		$.colorbox.close();
	}
	
	return exports;
}());

//main
$(function() {
	KAIRAZOR_APP.newsHeadline.initWithId('headline-list', 'twitterWrap')
});
