$(function(){
	var stations = ["nhk","etv","ntv","ex","tbs","tx","cx", "mx"];

	$("#search").submit(function(){
			var word	= $("#search-word").val() ;
			window.location = '/programs/search?q=' + word ;
	});

	var accountmenu = $("#account_menu");
	var accountbox  = $("#account_menu dt.menu");

	function toggleLoginbox() {
		accountbox.next("dd.toggle-on:not(:animated)").slideToggle("fast");
		accountbox.toggleClass("active");
	}

	accountmenu.hover(function(){
		toggleLoginbox();
	},function(){
		toggleLoginbox();
	})

	var contentsmenu = $("#contents_menu");
	var contentsbox = $("#contents_menu dt.menu");
	function toggleContentsbox() {
		contentsbox.next("dd.toggle-on:not(:animated)").slideToggle("fast");
		contentsbox.toggleClass("active");
	}

	contentsmenu.hover(function(){
		toggleContentsbox();
	},function(){
		toggleContentsbox();
	})


	updateGraph();
	updateCurrentPrograms();

	function updateGraph() {
		$.ajax({
			dataType: "json",
			url: "http://api.tvz.in/1/",
			data: "func=program_current&callback=?",
			async: true,
			cache: false,
			type: "GET",
			success: function (result) {
				if(result.data.length > 0) {
					$.each(result.data, function(i) {
						return drawMeterGraph(this);
					});
				}
				setTimeout(function(){
					updateGraph();
				},5000);
			}
		});//ajax
	}

	function updateCurrentPrograms() {
		$.ajax({
				dataType: "json",
				url: "http://api.tvz.in/1/",
				data: "func=program_current&callback=?",
				async: true,
				cache: false,
				type: "GET",
				success: function (result) {
					//ticker_data = $.merge(ticker_data , result);
					if(result.data.length == 0) return false;
					$.each(result.data, function(i) {
						var program = this;
						var parent = $("#current_program_" + program.station);

						//順位変更
						parent.animate({ 
							"top": (72 * i) + "px",
						}, 1000, function() {
						});
						
						//ツイートの順位変更
						$("#tweets_" + program.station).animate({ 
							"top": (72 * i) + "px",
						}, 1000, function() {
						});

						parent.find("img.genre").attr('src', "/img/genre_" + program.genre + ".gif");
						parent.find("h3.title").html(program.title + program.sub_title);
						parent.find("a.link").attr("href", "/pgm/"+ program.id);

						var date = program.start_time.split(" ");
						var start_time = date[1].split(":");
						var date = program.end_time.split(" ");
						var end_time = date[1].split(":");
						parent.find("span.schedule").html(start_time[0]  + ":" + start_time[1] + " ～ " + end_time[0]  + ":" + end_time[1]);

						var data = parent.find("div.data");
						if(data.find("span.speed").html() != program.log_average) {
							data.fadeOut(500, function() {
								data.html("<span class=\"watch\"><span class=\"speed\">" + program.log_average + "</span>コメ/分</span>");
								data.fadeIn(500);
							});
						}

						//画像の差し替え
						var thumbnail = parent.find("img.thumbnail");
						if(thumbnail.attr('src') != program.image_url[320]) {
							thumbnail.fadeOut(500,function() {
								thumbnail.attr('src', program.image_url[320]);
								thumbnail.load(function(){
									thumbnail.fadeIn(500);
								});
							});
						}

					});
					setTimeout(function(){
						updateCurrentPrograms();
					},5000);
				}
		});
	}

	var ticker_data = [];
	var ticker_order = [];
	function updateTweet(station, since_id) {
		var data = "func=tweet_list&limit=20&station=" + station;
		if(since_id != undefined) {
			data = data + "&since_id=" + since_id;
		}
		data = data + "&callback=?";
		$.ajax({
			dataType: "json",
			url: "http://api.tvz.in/1/",
			data: data,
			async: true,
			cache: false,
			success: function (result) {
				if(result.data.length > 0) {
					ticker_data[station] = result.data.reverse();
					ticker_order[station] = 0;
					updateTicker(station);
				} else {
					setTimeout(function(){
						updateTweet(station, since_id);
					}, 5000);
				}
			}
		});
	}

	//Tickerを呼び出す
	$.each(stations,function(i) {
		updateTweet(this);
//			updateTicker(this);
	}); 

	function updateTicker(station) {
		var i = 0;
		var ul = $("#tweets_" + station);
		var li = $("<li />");
		var tweet = ticker_data[station][ticker_order[station]];
		var date = new Date();
		var time = tweet.time.split(" ");
		var s = "<div class=\"tweet\" onclick=\"popup('http://twitter.com/" + tweet.name + "/status/" + tweet.id + "');\"><img src=\"http://img.tweetimag.es/i/" + tweet.name + "_m\" /><span>" + tweet.name + "</span><div class=\"time\">" + time[1] + "</div><div class=\"description\">" + tweet.description + "</div></div>";
		li.html(s);
		ul.append(li);
		li.show();
		$("#tweets_"+ station +" li").animate({ 
			left: "+=300px"
		}, 1000);

		if(ul.find('li').length > 3){
			var last_li = ul.find('li:first');
			last_li.empty().remove(); 
		}
		ticker_order[station] = ticker_order[station] + 1;
		if(ticker_data[station].length == ticker_order[station])  {
			setTimeout(function(){
				updateTweet(station, tweet.id);
			}, 5000);
		} else {
			setTimeout(function(){
				updateTicker(station);
			}, 5000);
		}
	}
});

/*
function open(url){
	location.href = url;
}
*/
function popup(url){
	window.open(url, '_blank');
	return false;
}
//増減の数字の表示
function drawMeterData(program, differ) {
	var height = program.log_average;
	var tv_meter_updown = $("#tv_meter_updown_" + program.station);
	tv_meter_updown.css("opacity", 1);
	tv_meter_updown.css("bottom", height + 10);

	if(differ > 0) {
		tv_meter_updown.css("color", "#FF0000");
		tv_meter_updown.html("+" + differ);
		var next_height = height + 15 + "px";
	} else if(differ < 0) {
		tv_meter_updown.css("color", "#0000FF");
		tv_meter_updown.html("-" + differ);
		var next_height = height - 15 + "px";
	} else {
		return true;
	}

	tv_meter_updown.animate({ 
			bottom: next_height
	}, 1000, function() {
		tv_meter_updown.animate({ 
			opacity: "0"
		}, 500);
	});
	return true;
}

//グラフの表示
function drawMeterGraph(program) {
	var tv_meter_graph  = $("#tv_meter_graph_" + program.station);
	var tv_meter_data   = $("#tv_meter_data_" + program.station);
	if(tv_meter_data.html() == program.log_average) return true;
	var scale = 1;
	var height = program.log_average / scale;
	var differ = height * scale - tv_meter_data.html();

	tv_meter_graph.animate({ 
		height: height + "px"
	}, 1000, function() {
		if(tv_meter_data.css("bottom") == "0px") {
			tv_meter_data.css("bottom", height + "px");
			tv_meter_data.html(program.log_average);
		} else {
			tv_meter_data.animate({ 
				bottom: height + "px"
			}, 1000, function(){
				tv_meter_data.html(program.log_average);
				return drawMeterData(program, differ);
			});
		}
	});
	return true;
}


