/*-------------------------------------------------------------
 Tweeter feed JavaScript

[require library]
	jquery.js
	jquery.cookie.js
	prettyprint.js
	parseuri.js


[example]

<script src="jquery.js" type="text/javascript" charset="utf-8"></script> 
<script src="jquery.cookie.js" type="text/javascript" charset="utf-8"></script> 
<script src="prettyprint.js" type="text/javascript" charset="utf-8"></script> 
<script src="parseuri.js" type="text/javascript" charset="utf-8"></script> 
<script src="tweets.js" type="text/javascript" charset="utf-8"></script> 
<div id="tweet"></div> //<---- tweetline show here (tag id required naming is "tweet")
<script type="text/javascript">
<!--
$.getTweet(); //<---- tweet feed function call
//-->
</script>


--------------------------------------------------------------*/

//----------------------------------------
// APIURL
//
//----------------------------------------
//var TweetApiUrl = 'http://search.twitter.com/search.json';
var TweetApiUrl = 'http://search.twitter.com/search.json';
var TweetHash 	= '#hakamagirlsnet';
 
var LongUrlApiUrl = 'http://api.longurl.org/v2/expand';
//var ProdInfoApiUrl = 'http://test.hakama-girls.net/search/prodinfo/';
var ProdInfoApiUrl = 'http://www.hakama-girls.net/search/prodinfo/';
 
var delaySec 		= 5000;
 
//----------------------------------------
// Tweet取得
//
//----------------------------------------
/*
$(function() {
	  //var tweeturl='http://search.twitter.com/search.json?callback=?&q=%23hakamagirlsnet';
	  //$.getJSON( TweetApiUrl,perseTweetJson );
	 
		$.ajax({
			  url : TweetApiUrl  // 短縮URL変換APIUrl
			, data 			: { callback: "?" , q : TweetHash }
			, type			: 'GET'
			, scriptCharset	: 'utf-8'
			, dataType 		: 'jsonp'
			, success		: function( data ){ perseTweetJson( data  );  }
	 
		} );
	 
});
*/
(function($){
	$.getTweet = function(){
	  //var tweeturl='http://search.twitter.com/search.json?callback=?&q=%23hakamagirlsnet';
	  //$.getJSON( TweetApiUrl,perseTweetJson );

		$.ajax({
			  url : TweetApiUrl  // 短縮URL変換APIUrl
			, data 			: { callback: "?" , q : TweetHash }
			, type			: 'GET'
			, scriptCharset	: 'utf-8'
			, dataType 		: 'jsonp'
			, success		: function( data ){ perseTweetJson( data );  }
	 
		} );
	};
})(jQuery);
//---------------------
// HTMLエスケープ関連
//---------------------
(function($){
	$.escapeHtml = function(val) {
				var ret = val.replace(/\r\n/g, "___#br#___"); 
				ret = val.replace(/[\n\r]/g, "___#br#___");
				ret = $("<div/>").text(ret).html();
				ret = ret.replace(/___#br#___/g, "<br />");
				return ret;
			 };
	//$.escapeHtml = function(val) { return $("<div/>").text(val).html(); };
	$.escapeHtmlNoBr = function(val) {
				var ret = val.replace(/\r\n/g, "___#br#___"); 
				ret = ret.replace(/[\n\r]/g, "___#br#___");
				ret = $("<div/>").text(ret).html();
				ret = ret.replace(/___#br#___/g, "\n");
				return ret;
			 };
})(jQuery);
 
//----------------------------------------
// TweetJson解析
//
//----------------------------------------
function perseTweetJson( data  ){
 
	$.each(data.results, function( i, tweet ){
		tweet = data.results[i];
		// Tweet
		//alert( tweet.text );
//<div id="tweet" class="profile_image"><img src="" alt="" /></div>					
//<div id="prod_thumb" class="prod_thumb"><a href=""><img src="" width="66"></a></div>
//<div id="tweet_mes" class="tweet_mes"></div>
//<div id="prod_title" class="prod_title"><a href=""></a></div>
//<div class="tweet_meta"><span class="tweet_user"><a href="#">ユーザ名</a></span><span class="tweet_time"></span></div>


		$("#tweet").append("<li id='tweet"+tweet.id+"'>");
		

		$("#tweet"+tweet.id).append("<div class='profile_image'><img src='" + tweet.profile_image_url + "'>");

		// 製品サムネイル
		$("#tweet"+tweet.id).append("<div id='prod_thumb" + tweet.id + "' class='prod_thumb'></div>");
		
		// Tweetプロファイル
 
		// Twitter
		$("#tweet"+tweet.id).append("<div id='tweet_mes" + tweet.id + "' class='tweet_mes'></div>");
 
		// 製品タイトル
		$("#tweet"+tweet.id).append("<div id='prod_title" + tweet.id + "' class='prod_title'>loading.....</div>");
		// 日付
		$("#tweet"+tweet.id).append("<div class='tweet_meta'><span class='tweet_user'>" + $.escapeHtml(tweet.from_user) + "</a></span><span class='tweet_time'>"+ twitterCreateDateTimeDriftStr( tweet.created_at ) +"</span></div>");
 
 
		// 製品情報要DIV
		$("#tweet"+tweet.id).append("<div id='prod_url" + tweet.id + "'></div>");
		//alert( "*"+$('#tweet li').length );
		// 請品情報解析＋表示
		parseTweetProdId( tweet.text , tweet.id , ((data.results.length - i) * delaySec - delaySec) );

   	});
}
//----------------------------------------
// tweetコメント解析
// 製品URL取得
//----------------------------------------
function parseTweetProdId( tweet , tweet_id , delay ) {
	// 短縮URL取得
	shortUrls = (tweet).match(/http:\/\/t\.co[^\r\n\s]{1,64}/g);
 
 
	var shortUrl = shortUrls[ shortUrls.length - 1 ];
 
	if( $.cookie( shortUrl ) ){
		setProdInfo( $.cookie( shortUrl ) , tweet_id ,delay );
	}
	else{
		// URLデコード -> 製品データセット
		if( shortUrls[ shortUrls.length - 1 ] ){
			$.ajax({
				  url			: LongUrlApiUrl  
				, data 			: { format: "json" , url : shortUrl  }
				, type			: 'GET'
				, scriptCharset	: 'utf-8'
				, dataType 		: 'jsonp'
				, success		 	: function( data ){
														$.cookie( shortUrl , data['long-url'] );
														setProdInfo(  data['long-url'] , tweet_id ,delay );

													  }
			} );
		}
	}	
	tweet = (tweet).replace( /http:\/\/[\s\S]*$/ , '' );
 
	$("#tweet_mes"+tweet_id).html( $.escapeHtml(tweet) );


}
 
 
//----------------------------------------
// 製品情報セット
//
//----------------------------------------
function setProdInfo(  url , tweet_id ,delay ){
	// URLパース
	u = parseUri(url);
 
	// prod_idパラメータ取得
	if( u['queryKey']['prod_id'] ){
		var prod_id = u['queryKey']['prod_id'];
		if( $.cookie( prod_id+":name" ) && $.cookie( prod_id+":thumb_img_url" ) ){
			//var_dump( prod_id );
			var data = new Object;
			data.name = $.cookie( prod_id+":name" );
			data.thumb_img_url = $.cookie( prod_id+":thumb_img_url" );
 
			displayProdInfo( data , url , tweet_id ,delay );
		}
		else{
			// 製品情報取得設定
			$.ajax({ 
				 url : ProdInfoApiUrl // 製品情報APIUrl
				, data 			: { prod_id : prod_id  }
				, type			: 'GET'
				, scriptCharset	: 'utf-8'
				, dataType 		: 'jsonp'
				, success		: function( data ){ 
									$.cookie( prod_id+":name" , data.name );
									$.cookie( prod_id+":thumb_img_url" , data.thumb_img_url );
 
									displayProdInfo( data  , url , tweet_id ,delay );
 
				  }
			} );
		}
	}
 
	//$('#prod_url'+tweet_id).append( $.escapeHtml(url) );
}
 
//----------------------------------------
// 製品情報セット
//
//----------------------------------------
function displayProdInfo( data  , url , tweet_id ,delay ){
 
 
 
	// 名称
	if( data.name ){
		$("#prod_title" + tweet_id ).html( "<a href='" + url + "'>" + $.escapeHtml(data.name) + "</a>" );
	}
	else{
		$("#prod_title" + tweet_id ).html( "" );
 
	}
	// 画像
	if( data.thumb_img_url ){
		$("#prod_thumb" + tweet_id ).html( "<a href='" + url + "'><img src='" + $.escapeHtml(data.thumb_img_url) + "' width='66'></a>" );
	}
	else{
		$("#prod_thumb" + tweet_id ).html( "<a href='" + url + "'><img src='twitter_noimage.gif' width='66'></a>" );
	}
 
	//$("#tweet"+tweet_id).show();
	setTimeout( function(){ $("#tweet"+tweet_id).fadeIn(800); } , delay );
 
}
 
 
//----------------------------------------
// Twitter create_at drift
//
//----------------------------------------
function twitterCreateDateTimeDriftStr(created_at){
 
	var now_dt 	  = new Date();
	var create_dt = new Date( (created_at).replace(/\+0000/, 'GMT') );
 
	var drift_str = (create_dt.getMonth()+1)+"月"+create_dt.getDate()+"日";
 
	var dt_drift = now_dt.getTime() - create_dt.getTime();
 
	if( dt_drift < ( 3600 * 1000 ) ){
		var drift_str = Math.floor( dt_drift / ( 1000 * 60 ) ) + "分前";
 
	}
	else if( dt_drift < ( 24 * 3600 * 1000 ) ){
		var drift_str = Math.floor( dt_drift / ( 1000 * 3600 ) ) + "時間前";
	}
 
	return( drift_str );
}
