var UGTwitter = {
	// settings start ----------------

	hashTag : 'ESPer2009',
	messageFooter : "http://bit.ly/6Ueshv",
	moderator : "utagoe",

	// settings end   ----------------

	version : '1.0.0',
	base : 'http://search.twitter.com/search.json?random=' + Math.random() + '&callback=UGTwitter.twitterSearch',
	hash : '&q=%23',

	//user_name : null,
	/*
	 * %40 == @
	 * 
	 * %23 == #
	 * &q=%26UGLive
	 * 
	 */
	count : '&rpp=10',

	swapForm : function() {
		$("#loginform").animate( {
			opacity : "hide"
		}, "slow", "linear", function() {
			$("#postform").animate( {
				opacity : "show"
			}, "slow");

		});
		/*
		 * var loginform = document.getElementById("loginform");
		 * loginform.style.visibility = "hidden"; loginform.style.display =
		 * "none";
		 */
		/*
		 * 
		 * $("#postform").animate({opacity: "toggle"},"slow");
		 * 
		 * var postform = document.getElementById("postform");
		 * postform.style.visibility = "visible"; postform.style.display =
		 * "inline";
		 */
	},

	logout : function() {
		UGTwitter.logined = false;
		UGTwitter.clearck();
		$("#postform").animate( {
			opacity : "hide"
		}, "slow", "linear", function() {
			$("#loginform").animate( {
				opacity : "show"
			}, "slow");
		});
	},
	
	enterLogin:function(e,f){
		if(!e) var e = window.event;
		
		if(e.keyCode ==13){
			UGTwitter.twitterlogin(f);
		}
	},

	login : function(obj) {
		UGTwitter.logined = true;
		UGTwitter.setck();
		user_name = obj[0].user.screen_name;
		user_icon = obj[0].user.profile_image_url;
		user_URL = "http://twitter.com/" + user_name;
		user_posttedAt = obj[0].user.created_at;
		$("#user").text(user_name);
		UGTwitter.swapForm();
		/*
		 * alert(user_name); alert(user_icon); alert(user_URL);
		 * alert(user_posttedAt);
		 */

		/*
		 * var sendform = document.getElementById("sendform");
		 * 
		 * //input�t�H�[���쐬 var inputelem = document.createElement('input');
		 * inputelem.id = "textbox"; inputelem.type = "text"; inputelem.name =
		 * "status"; inputelem.value = ""; sendform.appendChild(inputelem);
		 * 
		 * var post_button = document.createElement('input'); post_button.type =
		 * "button"; post_button.value = "Post"; post_button.onclick =
		 * this.post(inputelem.value); sendform.appendChild(post_button);
		 * 
		 * var reload_button = document.createElement('input');
		 * reload_button.type = "button"; reload_button.value = "Reload";
		 * reload_button.onclick = this.reload();
		 * sendform.appendChild(reload_button);
		 * 
		 * //login�{�^�����폜������
		 * sendform.removeChild(sendform.childNodes.item(0));
		 */

	},
	twitterCallback : function(obj) {
		//obj={"request":"/statuses/user_timeline/utagoe.json?random=0.9029008121201435&callback=UGTwitter.twitterCallback&rpp=1","error":"Rate limit exceeded. Clients may not make more than 150 requests per hour."};
		// var tDiv = document.getElementById("twitter");
		var tDiv = document.getElementById("owner");
		// var tDiv =
		// document.frames['twitter_frame'].document.getElementById("twitter");
		var user, bgcolor, tweet, postedAt, icon, userURL;

		// start the ul
		// tDiv.innerHTML = "<ul>";
		tDiv.innerHTML = "";
		// var ulelem = document.createElement('ul');

		if (!!obj.error) {
			//UGTwitter.twitterCallback({"request":"/statuses/user_timeline/utagoe.json?random=0.9029008121201435&callback=UGTwitter.twitterCallback&rpp=1","error":"Rate limit exceeded. Clients may not make more than 150 requests per hour."})
			// tDiv.innerHTML ="<div class='error'>"+obj.error+"</div>";
			tDiv.innerHTML = "<div class='error'>" + obj.error + "</div>";

		} else {

			// for (i = 0; i < obj.length; i++) {
			for (i = 0; i < 1; i++) {
				//bgcolor = "#FFFFFF";

				icon = obj[i].user.profile_image_url;
				user = obj[i].user.screen_name;
				userURL = "http://twitter.com/" + user;
				tweet = obj[i].text;
				postedAt = obj[i].created_at;
				// and here I mash it all up into a fancy li

				var element = document.createElement('div');
				// element.className = "tlist";
				element.style.backgroundColor = bgcolor;
				element.style.backgroundImage = "url(" + icon + ")";

				var strelem = document.createElement('strong');
				var aelem = document.createElement('a');
				aelem.href = userURL;
				aelem.target = "_blank";
				aelem.innerHTML = user;
				strelem.appendChild(aelem);
				element.appendChild(strelem);
				element.innerHTML += ": " + tweet;

				var spelem = document.createElement('span');
				spelem.className = "tweettime";
				// spelem.setAttribute("class", "tweettime");
				spelem.innerHTML = "  ("
						+ (UGTwitter.fuzzyTime(new Date(postedAt))) + ")"
				element.appendChild(spelem);
				// ulelem.appendChild(element);
				tDiv.appendChild(element);

			}
		}
		//and close the UL
		// tDiv.innerHTML += "</ul>";
		// tDiv.appendChild(ulelem);

	},
	twitterSearch : function(obj) {
		var tDiv = document.getElementById("twitter");
		var user, bgcolor, tweet, postedAt, icon, userURL;

		// start the ul
		tDiv.innerHTML = ""
		// var ulelem = document.createElement('ul');
		// ulelem.id = "p_tlist";

		for (i = 0; i < obj.results.length; i++) {
			tweet = obj.results[i].text;
			UGTwitter.match(tweet);
		}

		for (i = 0; i < UGTwitter.tmpMessageCount; i++) {

			icon = user_icon;
			user = user_name;
			userURL = user_URL;
			tweet = UGTwitter.tmpMessageList[i];
			postedAt = user_posttedAt;

			var element = document.createElement('div');
			element.className = "tlist";
			element.style.backgroundColor = bgcolor;
			element.style.backgroundImage = "url(" + icon + ")";

			var strelem = document.createElement('strong');
			var aelem = document.createElement('a');
			aelem.href = userURL;
			aelem.target = "_blank";
			aelem.innerHTML = user;
			strelem.appendChild(aelem);
			element.appendChild(strelem);
			element.innerHTML += ": " + tweet;

			var spelem = document.createElement('span');
			// spelem.class = "time";
			spelem.className = "tweettime";
			// spelem.setAttribute("class", "tweettime");
			spelem.innerHTML = "  ("
					+ (UGTwitter.fuzzyTime(new Date(postedAt))) + ")"
			element.appendChild(spelem);
			// ulelem.appendChild(element);
			//tDiv.appendChild(element);
			var twitter_element = document.getElementById("twitter");
			twitter_element.insertBefore(element, twitter_element.firstChild);

		}

		for (i = 0; i < obj.results.length - UGTwitter.tmpMessageCount; i++) {

			//Look at me use the JavaScript modulus operator to do even/odd rows.
			/*
			 * if (i % 2) { bgcolor = "#efefef" } else { bgcolor = "#ddd" }
			 */

			icon = obj.results[i].profile_image_url;
			user = obj.results[i].from_user;
			userURL = "http://twitter.com/" + user;
			tweet = obj.results[i].text;
			postedAt = obj.results[i].created_at;

			var element = document.createElement('div');
			element.className = "tlist";
			element.style.backgroundColor = bgcolor;
			element.style.backgroundImage = "url(" + icon + ")";

			var strelem = document.createElement('strong');
			var aelem = document.createElement('a');
			aelem.href = userURL;
			aelem.target = "_blank";
			aelem.innerHTML = user;
			strelem.appendChild(aelem);
			element.appendChild(strelem);
			element.innerHTML += ": " + tweet;

			var spelem = document.createElement('span');
			// spelem.class = "time";
			spelem.className = "tweettime";
			// spelem.setAttribute("class", "tweettime");
			spelem.innerHTML = "  ("
					+ (UGTwitter.fuzzyTime(new Date(postedAt))) + ")"
			element.appendChild(spelem);
			// ulelem.appendChild(element);
			tDiv.appendChild(element);

		}
		// tDiv.innerHTML += "</ul>";
		// tDiv.appendChild(ulelem);
	},
	//this is basically the same function I was using before
	// with the changed search URL
	twitter : function() {
		var twitterJSON = document.createElement("script");
		twitterJSON.type = "text/javascript"
		// here's the search URL
		twitterJSON.src = "http://search.twitter.com/search.json?random="
				+ Math.random() + "&callback=UGTwitter.twitterSearch&q=%23css"
		document.getElementsByTagName("head")[0].appendChild(twitterJSON);
		return false;
	},

	addElement : function() {
		var element = document.createElement('script');
		var element2 = document.createElement('script');
		element.type = "text/javascript";
		element2.type = "text/javascript";
		element.src = "http://twitter.com/statuses/user_timeline/"
				+ UGTwitter.moderator + ".json?random=" + Math.random()
				+ "&callback=UGTwitter.twitterCallback&rpp=1";
		element2.src = this.base + this.hash + this.hashTag + this.count;
		var objBody = document.getElementsByTagName("body").item(0);
		objBody.appendChild(element);
		objBody.appendChild(element2);
	},
	reload : function() {
		var element = document.createElement('script');
		var element2 = document.createElement('script');
		element.type = "text/javascript";
		element2.type = "text/javascript";
		element.src = "http://twitter.com/statuses/user_timeline/"
				+ UGTwitter.moderator + ".json?random=" + Math.random()
				+ "&callback=UGTwitter.twitterCallback&rpp=1";
		element2.src = this.base + this.hash + this.hashTag + this.count;

		var objBody = document.getElementsByTagName("body").item(0);

		objBody.appendChild(element);
		objBody.appendChild(element2);

		/*
		 * alert(user_name); alert(user_icon); alert(user_URL);
		 * alert(user_posttedAt);
		 */

	},

	fuzzyTime : function(date) {
		var now = new Date();
		var secs = (now - date) / 1000;
		if (secs < 5) {
			return 'less than 5 seconds ago';
		} else if (secs < 10) {
			return 'less than 10 seconds ago';
		} else if (secs < 20) {
			return 'less than 20 seconds ago';
		} else if (secs < 60) {
			return 'half a minute ago';
		} else if (secs < 120) {
			return '1 minute ago';
		} else if (secs < 60 * 60) {
			var minutes = Math.floor(secs / 60);
			return minutes + ' minutes ago';
		} else if (secs < 24 * 60 * 60) {
			var hours = Math.floor(secs / (60 * 60));
			if (hours == 1) {
				return 'about 1 hour ago';
			} else {
				return 'about ' + hours + ' hours ago';
			}
		} else {
			return date.toDateString();
		}
	},
	
	submitEnter:function(e,f){
		if(!e) var e = window.event;
		
		if(e.keyCode ==13)
			UGTwitter.post(f);
	},

	//this function uses TwitterAPI, which is defined in twitterapi_0.9.2.js
	// "post" sends message to Twitter
	post : function(f) {
		if (typeof user_name == "undefined") {
			alert("ログインしてください。");
			return;
		}
		if (f.status.value == "")
			return;
		var status = "#" + UGTwitter.hashTag + " " + f.status.value + " "
				+ UGTwitter.messageFooter;
		// TwitterAPI.statuses.update(status);
		UGTwitter.twitterupdate(status);

		// UGTwitter.tmpMessageListへ要素を格納
		UGTwitter.insert(status);

		// var p_element = document.getElementById("p_tlist");
		var twitter_element = document.getElementById("twitter");

		var element = document.createElement('div');
		element.className = "tlist";
		//element.style.backgroundColor = "#ffffff";
		element.style.backgroundImage = "url(" + user_icon + ")";

		var strelem = document.createElement('strong');
		var aelem = document.createElement('a');
		aelem.href = user_URL;
		aelem.innerHTML = user_name;
		strelem.appendChild(aelem);
		element.appendChild(strelem);
		element.innerHTML += ": " + status;

		var spelem = document.createElement('span');
		// spelem.class = "time";
		spelem.innerHTML = "  ("
				+ (UGTwitter.fuzzyTime(new Date(user_posttedAt))) + ")"
		element.appendChild(spelem);

		// p_element.removeChild(p_element.childNodes.item(4));
		// p_element.insertBefore(element, p_element.firstChild);
		
		if (twitter_element.childNodes.length > 9) twitter_element.removeChild(twitter_element.childNodes.item(9));
		twitter_element.insertBefore(element, twitter_element.firstChild);

		f.status.value = "";
		UGTwitter.update();
	},
	twitterCallback2 : function(twitters) {
		var statusHTML = [];
		for ( var i = 0; i < twitters.length; i++) {
			var username = twitters[i].user.screen_name;
			var status = twitters[i].text
					.replace(
							/((https?|s?ftp|ssh)\:\/\/[^"\s\<\>]*[^.,;'">\:\s\<\>\)\]\!])/g,
							function(url) {
								return '<a href="' + url + '">' + url + '</a>';
							}).replace(
							/\B@([_a-z0-9]+)/ig,
							function(reply) {
								return reply.charAt(0)
										+ '<a href="http://twitter.com/'
										+ reply.substring(1) + '">'
										+ reply.substring(1) + '</a>';
							});
			statusHTML
					.push('<div><span>'
							+ status
							+ '</span> <a style="font-size:85%" href="http://twitter.com/'
							+ username + '/statuses/' + twitters[i].id + '">'
							+ relative_time(twitters[i].created_at)
							+ '</a></div>');
		}
		document.getElementById('twitter_update_list').innerHTML = statusHTML
				.join('');
	},

	twitterlogin : function(form) {
		UGTwitter.username = form.username.value;
		UGTwitter.password = form.password.value;

		$.post("twaccount.php", {
			u : UGTwitter.username,
			p : UGTwitter.password
		}, function(data) {
			if (!!data && !!data.success && data.success) UGTwitter.login(data.result);
		}, "json");

		$("#loginform").animate( {
			opacity : "toggle"
		}, "slow");
		setTimeout( function() {
			if (!UGTwitter.logined) {
				$("#loginform").animate( {
					opacity : "toggle"
				}, "slow");
			}
		}, 1500);
	},

	twitterupdate : function(status) {
		$.post("twupdate.php", {
			u : UGTwitter.username,
			p : UGTwitter.password,
			status : status
		}, function(data) {
			;// console.log(data);
			}, "json");
	},

	setHeight : function() {
		var windowHeight = (UGTwitter.isSafari || UGTwitter.isOpera) ? window.innerHeight
				: (document.documentElement.clientHeight
						|| document.body.clientHeight || document.body.scrollHeight);
		document.getElementById("twitter").style.height = (windowHeight - 220)
				+ "px";
	},

	remainingChars : function() {
		var length = $("#textbox").val().length
				+ (UGTwitter.hashTag.length + 2)
				+ UGTwitter.messageFooter.length + 1;
		return 140 - length;
	},

	update : function() {
		$("#charcount").text(UGTwitter.remainingChars());
	},

	//isWin9X : (navigator.appVersion.toLowerCase().indexOf('windows 98')+1),
	//isIE : (navigator.appName.toLowerCase().indexOf('internet explorer')+1?1:0),
	isOpera : (navigator.userAgent.toLowerCase().indexOf('opera') + 1 ? 1 : 0),
	//if (isOpera) isIE = false;
	isSafari : (navigator.appVersion.toLowerCase().indexOf('safari') + 1 ? 1
			: 0),
	main : function() {
		UGTwitter.getck();
		UGTwitter.addElement();
		UGTwitter.setHeight();
		UGTwitter.initialize();
		setInterval("UGTwitter.addElement()", 60000);
		setInterval("UGTwitter.setHeight()", 1000);

		if ($("#usernamefield").val() != 'username') {
			$("#usernamefield").attr('class', 'usernamefield');
		} else {
			$("#usernamefield").focus( function() {
				$("#usernamefield").val('');
				$("#usernamefield").attr('class', 'usernamefield');
			});
		}
		if ($("#passwordfield").val() != '') {
			$("#passwordfield").attr('class', 'passwordfield');
			// document.getElementById("loginform").passwordfield.type='password';

			$('#passwordFieldOver').css('display', 'none').css('visibility',
					'hidden');

		} else {
			$("#passwordfield").focus( function() {
				$("#passwordfield").val('');
				$("#passwordfield").attr('class', 'passwordfield');
				// document.getElementById("loginform").passwordfield.type='password';
					$('#passwordFieldOver').css('display', 'none').css(
							'visibility', 'hidden');
				});
			$("#passwordFieldOver").click( function() {
				$("#passwordfield").val('');
				$("#passwordfield").attr('class', 'passwordfield');
				// document.getElementById("loginform").passwordfield.type='password';
					$('#passwordFieldOver').css('display', 'none').css(
							'visibility', 'hidden');
				});
		}

		$("#postform").animate( {
			opacity : "hide"
		}, 0);
		// UGTwitter.swapForm();

		$("#textbox").keyup(UGTwitter.update);
		$("#textbox").keypress(UGTwitter.update);
		UGTwitter.update();
		$("#textbox").attr('maxlength', UGTwitter.remainingChars());
	},
	//クッキーに情報を書き込むメソッド
	setck : function() {
		UGTwitter.ckary = new Array();

		UGTwitter.ckary[0] = UGTwitter.username;
		UGTwitter.ckary[1] = UGTwitter.password;

		// alert('フォームの内容\n' + UGTwitter.ckary[0]+' '+UGTwitter.ckary[1]);

		exp = new Date();
		exp.setTime(exp.getTime() + 1000 * 60 * 60 * 24 * 1);

		ckstr = escape(UGTwitter.ckary[0]);

		i = 1;
		while (UGTwitter.ckary[i]) {
			ckstr += "%00" + escape(UGTwitter.ckary[i]);
			i++;
		}

		//alert('escapeされた文字列' + ckstr);

		document.cookie = "ugtwitter=" + ckstr + "; expires="
				+ exp.toGMTString();
	},

	//クッキーを読み込むメソッド
	getck : function() {
		UGTwitter.ckary = new Array();
		// alert('cookie文字列全体\n' + document.cookie);
		cklng = document.cookie.length;
		UGTwitter.ckary = document.cookie.split(";");
		ckstr = "";
		i = 0;
		while (UGTwitter.ckary[i]) {
			if (UGTwitter.ckary[i].substr(0, 10) == "ugtwitter=") {
				ckstr = UGTwitter.ckary[i]
						.substr(10, UGTwitter.ckary[i].length);
				break;
			}
			i++;
		}

		UGTwitter.ckary = ckstr.split("%00");
		// alert('ckary[0]:'+UGTwitter.ckary[0]+'
		// '+'ckary[1]:'+UGTwitter.ckary[1]);

		if (UGTwitter.ckary[0] && UGTwitter.ckary[1]) {
			$("#usernamefield").attr('value', unescape(UGTwitter.ckary[0]));
			$("#passwordfield").attr('value', unescape(UGTwitter.ckary[1]));

			var obj = document.getElementById("sendmessage");
			var obj1 = obj.getElementsByTagName('form');
			UGTwitter.twitterlogin(obj1[0]);
		}

	},

	//クッキー情報を消すメソッド（賞味期限は残ります：パスワードとユーザネームは消える）
	clearck : function() {
		UGTwitter.ckary = new Array();

		UGTwitter.ckary[0] = "";
		UGTwitter.ckary[1] = "";

		// alert('フォームの内容\n' + UGTwitter.ckary[0]+' '+UGTwitter.ckary[1]);

		exp = new Date();
		exp.setTime(exp.getTime() + 1000 * 60 * 60 * 24 * 1);

		ckstr = escape(UGTwitter.ckary[0]);

		i = 1;
		while (UGTwitter.ckary[i]) {
			ckstr += "%00" + escape(UGTwitter.ckary[i]);
			i++;
		}

		//alert('escapeされた文字列' + ckstr);

		document.cookie = "ugtwitter=" + ckstr + "; expires="
				+ exp.toGMTString();
	},
	tmpMessageList : null,
	tmpMessageCount : null,

	//tmpMessageList,tmpMessageCountの初期化を行う関数
	initialize : function() {
		UGTwitter.tmpMessageList = new Array();
		UGTwitter.tmpMessageCount = 0;
	},

	//tmpMessageListに要素を追加する関数
	insert : function(message) {
		UGTwitter.tmpMessageList[UGTwitter.tmpMessageCount] = message;
		UGTwitter.tmpMessageCount++;

	},

	//tmpMessageListから要素を削除する関数
	remove : function(index) {
		if (UGTwitter.tmpMessageList[index] != "undefined"
				&& UGTwitter.tmpMessageList[index] != null) {
			if (UGTwitter.tmpMessageList[index + 1] != "undefined"
					&& UGTwitter.tmpMessageList[index + 1] != null) {
				var message = UGTwitter.tmpMessageList[index + 1];
				UGTwitter.tmpMessageList[index] = message;
				// tmpMessageList[index + 1] = null;
				UGTwitter.remove(index + 1);
			} else {
				UGTwitter.tmpMessageList[index] = null;
				UGTwitter.tmpMessageCount--;
			}

		} else {
			//alert("you can not remove!");
		}
	},

	//tmpMessageListの要素から、messageとマッチするものを削除する。
	match : function(message) {
		for ( var i = 0; i < UGTwitter.tmpMessageCount; i++) {
			if (UGTwitter.tmpMessageList[i] == message) {
				UGTwitter.remove(i);
				break;
			}
		}
	}

};
