/* --------------------------------
	Twitter
-------------------------------- */
var twitterAjax={

	//-----------------------------------------------------------
	// 設定 本番用
	//-----------------------------------------------------------
	requestFile: '/twitter_lib/gettwitter.php',

	// トップページ公式エリア
	officialAccount: 'honolulu_run',				// 公式アカウント
	officialTarget: '#officialArea .timelineArea',	// 公式アカウント挿入先
	pageNum:		1,								// ページ番号
	cache:			null,
		
	// トップページメンバーエリア
//	memberAccount: 'club_kukini',					// メンバーアカウント
	memberTarget: '#membersArea .timelineArea',		// メンバーアカウント挿入先
	memberHash: 'clubkukini',						// メンバーハッシュ

	// トップページハッシュ検索用
	hashTag: ['2011hm',						// ハッシュタグ(#不要)
				'honolulutter',
				'ホノルルマラソン',
				],
	hashArea: ['#tab1',					// 挿入先
				'#tab2',
				'#tab3'
				],

	hashType: ['tag',					// 検索タイプ
				'tag',
				'keyword'
				],

	// スペシャルページ用
	spPageTag:'2011hm',						// #不要
	spPageArea:'#twitterArea .timelineArea',

	rootMoreImg: '<img width="87" height="23" class="btnMoreImg" alt="もっと読む" src="resources/images/home/twitter_btn_more.gif" />',
	spMoreImg: '<img width="180" height="43" class="btnMoreImg" alt="もっと読む" src="../../resources/images/special/100727_1/twitter_btn_more.gif" />',


	// ------------------------------------------------------------------------
	// トップページ
	// ------------------------------------------------------------------------
	initRoot: function() {
		var self = this;
		// 公式タイムライン
		self.timeLineLoader(self.officialAccount,self.officialTarget);

		self.memberFlg=0;
		// メンバータイムライン
		self.searchLoader(self.memberHash,self.memberTarget,'tag','root');


		// ハッシュ/キーワード検索
		for(i=0;i<self.hashTag.length;i++){
			self.searchLoader(self.hashTag[i],self.hashArea[i],self.hashType[i],'root');
		}
	},

	// ------------------------------------------------------------------------
	// スペシャルページページ
	// ------------------------------------------------------------------------
	initSP: function() {
		var self = this;
		self.searchLoader(self.spPageTag,self.spPageArea,'tag','sp');
	},

	// ------------------------------------------------------------------------
	// タイムライン
	// ------------------------------------------------------------------------
	timeLineLoader : function(account,domTarget){
		var self = this;
		$.ajax({
			type:'post',
			url: this.requestFile,
			data:{
				type:'timeline',
				timeLine:account
			},
			dataType :'json',
			success: function(json){
					var dom=self.createList(json,'root');
					$(domTarget).html(dom.join(''));
					// 続きを読む
					self.searchNextpage(domTarget);
			}
		});
	},

	// 次ページ検索
	searchNextpage: function(domTarget){
		var self=this;
		self.cache=null;
		self.pageNum++;
		var u='http://twitter.com/statuses/user_timeline/'+self.officialAccount+'.json?page=';

		jQuery.getJSON(u+self.pageNum+'&callback=?',
		function(json){
			self.cache="";
			if(json.length>0){
				self.cache=json;
				$('<p class="btnMore"><a href="'+u+self.pageNum+'">'+self.rootMoreImg+'</a></p>').appendTo(domTarget).bind('click',function(){
					dom=self.createList(self.cache,'root');
					$(domTarget).append(dom.join(''));
					$(domTarget).find('p.btnMore').remove();
					self.searchNextpage(domTarget);
					return false;
				});
				self.rollover_img(".btnMoreImg", "_ov");
			}else{
			}
		});
	},



	// ------------------------------------------------------------------------
	// ハッシュ/キーワード
	// ------------------------------------------------------------------------
	searchLoader : function(hashTag,domTarget,searchType,page){
		var self = this;

		var encHashTag=encodeURIComponent(hashTag);

		var moreImg= 'Read More';
		switch(page){
			case 'sp':
				moreImg = self.spMoreImg;
				break;
			case 'root':
			default:
				moreImg = self.rootMoreImg;
				break;
		}
		$.ajax({
			type:'post',
			url: this.requestFile,
			data:{
				type:searchType,
				query: encHashTag
			},
			dataType :'json',
			success:
				function(json){
					var dom = self.createList(json.results,page);
					$(domTarget).html(dom.join(''));
					if ( (typeof(json.next_page)) != 'undefined' ){
						$('<p class="btnMore"><a href="http://search.twitter.com/search.json'+json.next_page+'">'+moreImg+'</a></p>').appendTo(domTarget);
						self.getNextpage(page);
						self.rollover_img(".btnMoreImg", "_ov");
					}
				}
		});
	},

	// 続きを読む
	getNextpage:function(page){

		var self = this;
		var moreImg= 'Read More';
		switch(page){
			case 'sp':
				moreImg = self.spMoreImg;
				break;
			case 'root':
			default:
				moreImg = self.rootMoreImg;
				break;
		}

		$('.btnMore a').click(function(e){
			var url = $(this).attr('href');
			var tmp=$(this).parent().parent();
			$.ajax({
				type:'get',
				url: url,
				dataType :'jsonp',
				success:
					function(data){
						var dom=self.createList(data.results,page);
						tmp.append(dom.join('')).find('.btnMore').remove();
						if ( (typeof(data.next_page)) != 'undefined' ){
							$('<p class="btnMore"><a href="http://search.twitter.com/search.json'+data.next_page+'">'+moreImg+'</a></p>').appendTo(tmp);
							self.getNextpage(page);
							self.rollover_img(".btnMoreImg", "_ov");
						}
					}
			});
			return false;
		});
	},

	// ------------------------------------------------------------------------
	// リスト生成
	// ------------------------------------------------------------------------
	createList: function(json,page){
		var self=this;
		var src = [
			'<ul class="timeline">'
		];
		var nextpage='';
		$(json).each(function(i){
			var name ='';
			var icon ='';
			var next_page='';

			try{
				if ( (typeof(this.from_user)) != 'undefined' ){
					name = this.from_user;
				}else{
					name = this.user.screen_name;
				}
				
				if ( (typeof (this.profile_image_url)) != 'undefined'  ){
					icon = self.getIcon(this.profile_image_url);
				}else{
					icon = self.getIcon(this.user.profile_image_url);
				}

				if ( (typeof (this.next_page)) != 'undefined'  ){
					next_page=this.next_page;
				}else{
					next_page='';
				}
			
				var text = self.checkLink(this.text);
				var td = this.created_at;
				re=/^(.+) (.+) (..) (..):(..):(..) (.+) (.+)$/;
				pat="$2 $3, $8 $4:$5:$6 UTC+0000";
				rep=new Date(td.replace(re,pat));
				var date = rep.toLocaleString();

				if ( (typeof this.from_user) != 'undefined' ){
					var rt = self.relative_time(this.created_at);
				}else{
					var rt = self.relative_time(this.created_at.replace(/^([^\s]+) ([^\s]+) ([^\s]+) ([^\s]+) ([^\s]+) ([^\s]+)$/, '$1, $3 $2 $6 $4 $5'));
				}
				var id = this.id;
				var source = this.source;
				source = source.replace(/&quot;/g,'"');
				source = source.replace(/&lt;/g,'<');
				source = source.replace(/&gt;/g,'>');

				switch(page){
					case 'root':					// トップページ用フォーマット
						src = src.concat([
							'<li class="clearfix">',
							'<p class="icon"><a href="http://twitter.com/'+name+'" target="_blank"><img src="'+icon+'" alt="'+name+'" width="48" height="48" /></a></p>',
							'<div class="content txt10">',
							'<p class="tweet">'+'<a href="http://twitter.com/'+name+'" target="_blank">'+name+'</a> '+text+'</p>',
							'<p class="footer">'+date+' '+source+' から</p>',
							'</div>',
							'</li>'
						]);
					break;

					case 'sp':					// スペシャルページ用フォーマット
					default:
						src = src.concat([
							'<li class="clearfix">',
							'<p class="icon"><a href="http://twitter.com/'+name+'" target="_blank"><img src="'+icon+'" alt="'+name+'" width="48" height="48" /></a></p>',
							'<div class="content txt12">',
							'<p class="tweet">'+'<a href="http://twitter.com/'+name+'" target="_blank">'+name+'</a> '+text+'</p>',
							'<p class="footer">-| '+date+' '+ rt +' |- <a href="http://twitter.com/'+name+'/status/'+id+'">Twitterで見る</a></p>',
							'</div>',
							'</li>'
						]);
						break;
					}
				}catch(e){}
			});
			src.push('</ul>');
		
		return src;
	},



	// -------------------------------------------
	// 相対時間
	// -------------------------------------------
	relative_time: function(time_value) {
		var time = new Date().getTime() - new Date(time_value).getTime();
		return (time < 1000 * 60) ? Math.floor(time / 1000) + '秒前'
			: (time < 1000 * 60 * 60) ? Math.floor(time / (1000 * 60)) + '分前'
			: (time < 1000 * 60 * 60 * 24) ? Math.floor(time / (1000 * 60 * 60)) + '時間前'
			: Math.floor(time / (1000 * 60 * 60 * 24)) + '日前';

	},
	// -------------------------------------------
	// リンク
	// -------------------------------------------
	checkLink: function(txt){
		var tweet = txt.replace(/((ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?)/g,'<a href="$1" target="_blank">$1</a>');
		tweet = tweet.replace(/(@|＠)(\w+)/g,'$1<a href="http://twitter.com/$2" target="_blank">$2</a>');
		return tweet.replace(/(#|＃)(\w+)/g,'<a href="http://twitter.com/search?q=%23$2" target="_blank">#$2</a>');
	},
	// -------------------------------------------
	// アイコンサイズ取得
	// -------------------------------------------
	getIcon: function(imgSrc){
		var icoSize='normal';
		var newIco=imgSrc;
		imgSrc.match('(\.gif|\.jpg|\.png)([\?].*|$)');
		var ext = RegExp.$1;
		var normal = '_normal' + ext;
		var mini = '_mini'+ ext;
		if(icoSize=='mini'){
			newIco = imgSrc.replace(normal, mini);
		}else{
			newIco = imgSrc.replace(mini, normal);
		}
		return newIco;
	},

	rollover_img:function (selector, suffix){
		$(selector).each(function(i){
			var defaultImg = $(this).attr("src");
			if (!defaultImg.match((suffix))) {
				var point = defaultImg.lastIndexOf(".");
				var rolloverImg = defaultImg.slice(0, point) + suffix + defaultImg.slice(point);
				var preloadImg = new Image();
				preloadImg.src = rolloverImg;
				$(this).hover(function(){
					$(this).attr("src", rolloverImg);},function(){
						$(this).attr("src", defaultImg);
						}
					)
				}
			})
		}
}










