// tweet.js charset UTF-8
// bit.ly account
var bitly_id  = 'avex';
var bitly_key = 'R_5005dd6a3b1cd8a77f396a1610f35b6f';
// artist name, document title, target link
var twartist = '';
var twtitle = '';
var twlink = '';
// method
function tweet(artist, title, link) {
    // get value
    twartist = artist;
    twtitle = title;
    // get link
    if (link != undefined) {
    	twlink = link;
    } else {
    	twlink = location.href;
    }
	// temp pop up window
	var twWindow = window.open('','tweet');
	// create api link
    api = 'http://api.bit.ly/shorten'
        + '?version=2.0.1'
        + '&format=json'
        + '&callback=tweetCallback'
        + '&login=' + bitly_id
        + '&apiKey=' + bitly_key
        + '&longUrl=';
	// create script tag
    var script = document.createElement('script');
    script.setAttribute('type', 'text/javascript');
    script.setAttribute('src',  api + encodeURIComponent(twlink));
    document.body.appendChild(script);
}
// bit.ly callBack
function tweetCallback(json) {
    var d = document;
    var w = window;
    var l = location;
    var e = encodeURIComponent;
    var sel = '';
    if (d.selection) {
        sel = d.selection.createRange().text;
    } else if (w.selection) {
        sel = w.selection.createRange().text;
    } else if (d.getSelection) {
        sel = d.getSelection();
    } else if (w.getSelection) {
        sel = w.getSelection();
    }
    var f = 'http://twitter.com/home/?status='
          + e(sel + twtitle + ' ' + json.results[twlink]['shortUrl'] + ' ' + '#' + twartist);
    if(!w.open(f,'tweet')) {
        l.href = f;
    }
}

// show Tweets with hash tag
var tweetBox = '';
var tweetChild = '';
var twSearchArtist = '';
var twRpp = '';
var twTimerID;
var tweetArray = [];
var reloadSec = '15';
var uAgent = navigator.userAgent;
var ie = uAgent.indexOf('MSIE');
if (ie != -1) {
	var strTop = ie + 5;
	var strEnd = uAgent.indexOf(";", strTop); 
	var vers = Number(uAgent.substring(strTop, strEnd));
	var ie6 = vers <= 6 ? true : false;
}

// Hash tag search method
function twHashSearch(twCol, artist, num) {	
	// get value
	tweetBox = twCol;
	twSearchArtist = artist;
	twRpp = num && num != undefined ? '&rpp=' + num : '';
	// remove child
	var elem = document.getElementById(tweetBox);
	// for IE6
	if (ie6) {
		var innerDiv = document.createElement('div');
		tweetBox = twCol + '-inner';
		innerDiv.setAttribute('id', tweetBox);
		elem.appendChild(innerDiv);
		elem = document.getElementById(tweetBox);
	}
	// create URL
    api = 'http://search.twitter.com/search.json'
        + '?callback=twSearchCallback'
        + '&q=' + artist
        + twRpp;
	// run this script
	var reloadTwit = function() {
		var script = document.createElement('script');
		script.setAttribute('type', 'text/javascript');
		script.setAttribute('src', api);
		elem.appendChild(script);
	}
	// remove all elements
	remove_children(tweetBox);
	// load at first
	reloadTwit();
	// show loading...
	var reloadDiv = document.createElement('div');
	reloadDiv.setAttribute('class', 'tweet');
	var reloadText = document.createTextNode('読み込み中...');
	reloadDiv.appendChild(reloadText);
	elem.appendChild(reloadDiv);
	// reload json
	if (reloadSec) {
		clearInterval(twTimerID);
		twTimerID = setInterval(reloadTwit, reloadSec * 1000);
	}
}
// 現在の表示内容をクリアする
function remove_children(id) {
	var div = document.getElementById(id);
	if (!ie6) {
		while (div.firstChild) {
			div.removeChild(div.lastChild);
		}
	} else {
		var clone = div.cloneNode(true);
		while (clone.firstChild) {
			clone.removeChild(clone.lastChild);
		}
		div.parentNode.replaceChild(clone, div);
	}
};
// hash tag search callBack
function twSearchCallback(json) {
	// current time
	var now = new Date();
	// remove all elements
	remove_children(tweetBox);
	// create elements
	var box = $('#' + tweetBox);
	// check NG
	$(json.results).each(function(i, v) {
		if(checkNG(v.text, v.from_user)) {
			v.jp_created_at = dateJp(v.created_at, now);
			v.retweetURL = 'http://twitter.com/home/?status=' + encodeURIComponent('RT @' + v.from_user + ' ' + v.text);
			var html = template('<div class="tweet wordBreak">\
<a href="http://twitter.com/#{from_user}" target="twitter"><img src="#{profile_image_url}" width="48" height="48" class="twProfileImg" \/></a>\
<div class="twComment">\
<span class="twUser"><a href="http://twitter.com/#{from_user}" target="twitter">#{from_user}</a>:<\/span> \
<span class="twCommentTxt">#{text}</span><br \/><span class="twDate">#{jp_created_at}<\/span> <span class="twRt"><a href="#{retweetURL}" target="_blank">RT</a><\/span><\/div>\
<\/div>', v);
			box.append(html);
		}
	});
}
// html template
function template(str, obj, replacement) {
	return str.replace(/#\{(.+?)\}/g, function() {
		try {
			if (arguments[1] == 'text') {
				var text = eval('obj.' + arguments[1]);
				text = urlActivate(text)
				return text;
			} else {
				return eval('obj.' + arguments[1]);
			}
		} catch (e) {
			return replacement ? replacement : '';
		};
	});
}
// date format
function dateJp(dateStr, now){
	var d = dateStr.split(" ");
	var post_date = d[0] + " " + d[2] + " " + d[1] + " " + d[3] + " " + d[4];
	var date = new Date(post_date);
	date.setHours(date.getHours() + 9);
	var diff = Math.floor((now - date) / (1000 * 60 * 60 * 24));
	if (diff <= 7) {
		var days = Math.floor((now - date) / (1000 * 60 * 60 * 24));
		var hours = Math.floor((now - date) / (1000 * 60 * 60));
		var minutes = Math.floor((now - date) / (1000 * 60));
		var seconds = Math.floor((now - date) / 1000);
		date = seconds > 59 ? minutes > 59 ? hours > 24 ? days + '日前' : '約' + hours + '時間前' : minutes + '分前' : seconds + '秒前';
	} else {
		var year = date.getFullYear();
		var month = date.getMonth() + 1;
		month = month < 10 ? '0' + month : month;
		var day = date.getDate();
		day = day < 10 ? '0' + day : day;
		var hour = date.getHours();
		hour = hour < 10 ? '0' + hour : hour;
		var minute = date.getMinutes();
		minute = minute < 10 ? '0' + minute : minute;
		date = year + "-" + month + "-" + day + ' ' + hour + ':' + minute;
	}
	return date.toString();
}
//
function array_unique(Arr){
	var storeArr = new Array;
	var ret = new Array;
	i = 0;
	f = 0;
	while (Arr[i] != null) {
		if (Arr[i] != "") {
			if (storeArr[String(Arr[i])]) {
			} else {
				storeArr[String(Arr[i])] = 1;
				ret[f] = Arr[i];
				f++;
			}
		}
		i++;
	}
	return ret;
}

//
function urlActivate(str) {
	var rStr = new RegExp(/((http|https):\/\/[\x21-\x7e]+)/g);
	if (str.match(rStr)) {
		var link = String(str.match(rStr)).split(",");
		link = array_unique(link);
		for(var i in link){
			str = str.replace(link[i], '<a href="' + link[i] + '" target="_blank" >' + link[i] + '</a>');
		}
	}

	var rStr = new RegExp(/@([\w-]+)/g);
	if (str.match(rStr)) {
		var link = String(str.match(rStr)).split(",");
		link = array_unique(link);
		for(var i in link){
			var name = link[i].split('@')[1];
			str = str.replace(link[i], '@<a href="http://twitter.com/' + name + '" target="_blank">' + name + '</a>');
		}
	}
	return str;
}

// NG Words
var ngWords = [
/[馬ばバﾊﾞ][鹿かカｶ]/,
/[ｴエえ][ｯッっ][ﾁチち]/,
/[せセｾ][くクｸ][すスｽ]/,
/[まマﾏ][んンﾝ][こコｺ]/,
/[ちチﾁ][んンﾝ][こコｺ]/,
/[おオｵ][めメﾒ][こコｺ]/,
/[ぱパﾊﾟ][くクｸ][りリﾘ]/,
/[ゔヴｳﾞ][ぁァｧ][かカｶ]/,
/[ゔヴｳﾞ][ぉォｫ][けケｹ]/,
/[きキｷ][ちチﾁ][がガｶﾞ][いイｲ]/,
/[せセｾ][っッｯ][くクｸ][すスｽ]/,
/[sｓＳ][eｅＥ][xｘＸ]/,
/[fｆＦ][uｕＵ][cｃＣ][kｋＫ]/,
/殺す/,
/死ね/,
/氏ね/,
/身障者/,
/基地外/,
/障害者/,
/低脳/,
/酒鬼薔薇/,
/ロリコン/,
/モモカス/,
/変態/
];
// NG Account
var ngAccounts = [
/samples001/,
/voltage999high/
];
//
function checkNG(text, from){
	var check = true;
	for (var i = 0, len = ngWords.length; i < len; i++) {
		if (text.match(ngWords[i])) check = false;
	}
	for (var i = 0, len = ngAccounts.length; i < len; i++){
		if (from.match(ngAccounts[i])) check = false;
	}
	return check;
}


//alert(ngWordArray[3]);
