/*
	育成論、評価システム
*/

$(function(){
	var $theory_data = $("#theory_data");
	var nt = $theory_data.attr("data-nt");
	var $comment_field = $("#comment_field");
	
	var search_word = "";
	var lastTime = 0;
	
	var getCommentHTML = function($t){
		var vote = parseInt($t.find('vote').text(), 10);
		if(vote > 0){
			vote_list = [];
			for(var i = 1; i <= 5; i++) vote_list.push("<img src=\"http://img.yakkun.com/page/star"+(i<=vote?1:2)+".gif\" alt=\""+vote+"\" />");
			vote_v = "<dt class=\"vote\">"+vote_list.join("")+"</dt>";
		}
		else vote_v = "";
		var cno = $t.find('no').text();
		var $reaction = $t.find('reaction');
		return $('<dl id="c'+cno+'" data-cno="'+cno+'"><dt class="layout_right"><span class="needless">'+$t.find('time').text()+'</span><input type="checkbox" name="comment_no[]" value="'+cno+'" class="space_left" /></dt><dt><span class="no">'+$t.find('no').text()+'</span>'+$t.find('name').text()+'</dt>'+vote_v+'<dd><pre>'+$t.find('message').text()+'</pre><ul class="reaction"><li><a href="#" title="そう思う" class="pos">'+$reaction.find('pos').text()+'</a></li><li><a href="#" title="そう思わない" class="neg">'+$reaction.find('neg').text()+'</a></li></ul></dd></dl>');
	};
	
	
	var pager_func = function(start){
		var nowTime = new Date().getTime();
		if(lastTime !== undefined && lastTime + 1000 > nowTime){
			$comment_field.html("<p>検索は、1秒以上空けて下さい。</p>");
			return;
		}
		lastTime = nowTime;
		
		var load_flag = false;
		$comment_field.slideUp(500, function(){
			$comment_field.html("<p><img src=\"http://img.yakkun.com/page/loading.gif\" alt=\"読み込み中...\" class=\"space_right\" /></p>");
			$.ajax({
				url: '/xy/theory/comment_more',
				type: 'POST',
				dataType: 'xml',
				timeout: 10000,
				data: "no="+$theory_data.attr("data-no")+"&start="+start+"&word="+search_word,
				error: function(){
					$comment_field.empty();
					$comment_field.show();
					$comment_field.html("<p>アクセスが集中しています...</p>");
				},
				success: function(xml){
					$comment_field.empty();
					$comment_field.hide();
					var error = $(xml).find('error');
					if(error.length > 0){
						$comment_field.html("<p>"+error.text()+"</p>");
					}
					else{
						$(xml).find('comments comment').each(function(){ $comment_field.append(getCommentHTML($(this))); });
						
						var comment_record_num = Number($(xml).find('comments').attr("num"));
						var page_max = Number($theory_data.attr("data-page_max"));
						var page_list = Number($theory_data.attr("data-page_list"));
						var page_num = Math.ceil(comment_record_num / page_max);
						var now_page = Math.ceil(start / page_max);
						var end_page = now_page + page_list + Math.max(page_list - now_page, 0) + 1;
						var tmp = [];
						if(start > 0) tmp.push("<li class=\"pager_prev\"><a href=\"#pager_top\" start=\""+Math.max(start-page_max, 0)+"\" class=\"b\">前へ</a></li>");
						var count = tmp.length;
						for(i = Math.max(now_page - page_list, 0); i < page_num && i < end_page; i++){ tmp[count] = i + 1; if(i != now_page) tmp[count] = "<li><a href=\"#pager_top\" start=\""+(i * page_max)+"\">"+tmp[count]+"</a></li>"; else  tmp[count] = "<li><strong>"+tmp[count]+"</strong></li>"; count++; }
						if(start + page_max < comment_record_num) tmp.push("<li class=\"pager_next\"><a href=\"#pager_top\" start=\""+(start+page_max)+"\" class=\"b\">次へ</a></li>");
						$("ul.pager").html('<li class="pager_label">ページ</li>'+tmp.join(""));
					}
					$comment_field.slideDown(500);
				}
			});
		});
		
		return false;
	};
	$("ul.pager").click(function(e){
		var t = $(e.target);
		if(!(t.is("a"))) return false;
		var start = Number(t.attr("start"));
		pager_func(start);
	});
	$("input.search_button").click(function(){
		search_word = $(this).siblings("input.search_text").val();
		pager_func(0);
		return false;
	});
	$("input.search_text").keypress(function(e){
		var keycode = e.which != undefined ? e.which : e.keyCode;
		if(keycode == 13 || keycode == 10){
			search_word = search_word = $(this).val();
			pager_func(0);
			return false;
		}
	});
	
	var bookmark_result = $("#bookmark_result");
	
	var voteLastMessage = "";
	var lastPoint = 0;
	var voteSendFlag = false;
	var vote_field = $("#vote_field");
	var voteOverFunc = function(point){
		if(voteLastMessage == "") voteLastMessage = bookmark_result.html();
		if(point == -1){ bookmark_result.html("ポケ徹サービスにログインしてください。"); return; }
		if(point == -2){ bookmark_result.html("評価できません。"); return; }
		var imgs = $("#vote_field img");
		var i = Math.floor(Math.min(lastPoint, point));
		var j = 0;
		imgs.each(function(){
			if(i == j){
				$(this).attr("src", "http://img.yakkun.com/page/vote"+((i / 2 + 0.25 >= point) ? (i % 2 + 3) : (i % 2 + 1))+".gif");
				i++;
			}
			j++;
		});
		bookmark_result.html(point + "点で評価します。");
		lastPoint = point;
	};
	vote_field.mouseover(function(e){
		if(voteSendFlag) return;
		var t = $(e.target);
		var point = t.attr("data-point");
		voteOverFunc(point);
	});
	vote_field.mouseout(function(e){
		if(voteSendFlag) return;
		voteOverFunc($(this).attr("data-point"));
		if(voteLastMessage != ""){
			bookmark_result.html(voteLastMessage);
			voteLastMessage = "";
		}
	});
	vote_field.click(function(e){
		if(voteSendFlag) return false;
		var t = $(e.target);
		var point = t.attr("data-point");
		if(point <= 0) return false;
		
		if(confirm(point+"点で評価しますか？")){
		
			voteSendFlag = true;
			bookmark_result.html("お待ちください...");
			$.ajax({
				url: '/xy/theory/entry_rating',
				type: 'POST',
				dataType: 'xml',
				timeout: 10000,
				data: "no="+$theory_data.attr("data-no")+"&point="+point+"&nt="+nt,
				error: function(){
					bookmark_result.html("アクセスが集中しています...");
				},
				success: function(xml){
					var error = $(xml).find('error');
					var message = $(xml).find('message');
					if(error.length > 0){
						bookmark_result.html(error.text());
					}
					else if(message.length > 0){
						bookmark_result.html(message.text());
					}
				}
			});
		
		}
		return false;
	});
	
	
	var bookmark = $("#bookmark");
	var bookmarkFlag = bookmark.attr("flag");
	var bookmarkLastMessage = "";
	var bookmarkSendFlag = false;
	bookmark.mouseover(function(e){
		if(bookmarkSendFlag) return;
		
		if(bookmarkLastMessage == "") bookmarkLastMessage = bookmark_result.html();
		if(bookmarkFlag == -1){ bookmark_result.html("管理ページへ移動します。"); return; }
		if(bookmarkFlag == -2){ bookmark_result.html("ポケ徹サービスにログインしてください。"); return; }
		bookmark_result.html("ブックマークに登録します。");
	});
	bookmark.mouseout(function(e){
		if(bookmarkSendFlag) return;
		
		if(bookmarkLastMessage != ""){
			bookmark_result.html(bookmarkLastMessage);
			bookmarkLastMessage = "";
		}
	});
	bookmark.click(function(e){
		if(bookmarkSendFlag) return true;
		if(bookmarkFlag < 0) return true;
		
		bookmarkSendFlag = true;
		bookmark_result.html("お待ちください...");
		$.ajax({
			url: '/xy/theory/bookmark_entry',
			type: 'POST',
			dataType: 'xml',
			timeout: 10000,
			data: "no="+$theory_data.attr("data-no")+"&nt="+nt,
			error: function(){
				bookmark_result.html("アクセスが集中しています...");
			},
			success: function(xml){
				var error = $(xml).find('error');
				var message = $(xml).find('message');
				if(error.length > 0){
					bookmark_result.html(error.text());
				}
				else if(message.length > 0){
					bookmark_result.html(message.text());
					$("#bookmark a").attr("href", "/xy/theory/bookmark/");
					$("#bookmark img").attr("src", "http://img.yakkun.com/page/bookmarked.gif");
				}
			}
		});
		return false;
	});
	
	var tag_edit_field;
	var tag_edit_pass;
	var loading_img = $("<img src=\"http://img.yakkun.com/page/loading2.gif\" alt=\"読み込み中...\" />");
	var tag_edit_message = $("<span></span>").css("display","block");
	var auth_flag = false;
	var tag_lock = $theory_data.attr("data-lock") == "1" ? true : false;
	$("#tag_edit").click(function(){
		if($("#tag_edit_field").length > 0){
			$("#tag_edit_field").slideUp(function(){$(this).remove();});
			return false;
		}
		
		var tag_edit_field = $("<div id=\"tag_edit_field\"><div id=\"tag_lock\"><p><a href=\"#\">※投稿者はこちら</a></p></div><div id=\"tag_edit_list\"><span class=\"needless\">※ネガティブなタグ、育成論の評価に関するタグ、その他不適切なタグの登録は一切禁止いたします。</span></div><div class=\"dummy clear\"></div></div>");
		var max = $("#tag_list").attr("max");
		$("#tag_list").after(tag_edit_field);
		tag_edit_field.hide();
		tag_edit_field.slideDown();
		if(auth_flag) $("#tag_lock").remove();
		else $("#tag_lock a").click(function(){$(this).replaceWith("※管理用パスワードで認証してから編集してください。</p><p><input type=\"password\" id=\"tag_pass\" value=\""+$("#pass_now").val()+"\" /><input type=\"button\" id=\"auth_button\" value=\"認証\" /><span id=\"auth_message\"></span>");return false;});
		var tag_edit_list = $("#tag_edit_list");
		var tag = $("#tag_list li.tag");
		if(tag.length < max && (!tag_lock || auth_flag)){
			tag_edit_list.append("<p id=\"tag_add\"><input type=\"text\" class=\"tag_text\" /><input type=\"button\" value=\"追加\" no=\"0\" /></p><hr id=\"tag_hr\" />");
		}
		var lock_list = [];
		tag.each(function(){
			var t = $(this);
			if((t.attr("lock") == "1" || tag_lock) && !auth_flag){
				lock_list.push("<p class=\"lock\" no=\""+t.attr("no")+"\"><span>"+t.find("a").html()+"</span>&nbsp;<span class=\"needless\">(ロックされています)</span></p>");
			}
			else{
				tag_edit_list.append("<p><input type=\"text\" value=\""+t.find("a").html()+"\" class=\"tag_text\" /><input type=\"button\" value=\"変更\" no=\""+t.attr("no")+"\" /></p>");
			}
		});
		tag_edit_list.append(lock_list.join(""));
		tag_edit_field.click(function(e){
			var t = $(e.target);
			if(!(t.is(":button"))) return;
			var auth_message = $("#auth_message");
			if(t.is("#auth_button")){
				t.after(loading_img);
				t.css("display","none");
				tag_edit_pass = $("#tag_pass").val();
				auth_message.html();
	 			$.ajax({
	 				url: '/xy/theory/auth',
	 				type: 'POST',
	 				dataType: 'xml',
	 				timeout: 10000,
	 				data: "no="+$theory_data.attr("data-no")+"&pass="+tag_edit_pass,
	 				error: function(){
	 					loading_img.remove();
	 					t.replaceWith("エラー発生");
	 				},
	 				success: function(xml){
	 					loading_img.remove();
	 					t.css("display","block");
						var error = $(xml).find('error');
						if(error.length > 0){
							auth_message.html(error.text());
							return;
						}
						$("#tag_lock").html("<p>認証しました。</p>");
						tag_edit_field.find("p.lock").each(function(){
							var th = $(this);
							th.replaceWith("<p><input type=\"text\" value=\""+th.find("span:first").html()+"\" class=\"tag_text\" /><input type=\"button\" value=\"変更\" no=\""+th.attr("no")+"\" /></p>");
						});
						if($("#tag_add").length <= 0 && $("#tag_list li.tag").length < max) tag_edit_list.prepend("<p id=\"tag_add\"><input type=\"text\" class=\"tag_text\" /><input type=\"button\" value=\"追加\" no=\"0\" /></p><hr id=\"tag_hr\" />");
						auth_flag = true;
	 				}
	 			});
			}
			else{
				var input = t.parent().find(":text");
				var name = input.val();
				var no = t.attr("no");
				if(no=="0" && name=="") return;
				tag_edit_message.html("");
				t.after(loading_img);
				t.css("display","none");
	 			$.ajax({
	 				url: '/xy/theory/tag_edit',
	 				type: 'POST',
	 				dataType: 'xml',
	 				timeout: 10000,
	 				data: "theory_no="+$theory_data.attr("data-no")+"&pass="+tag_edit_pass+"&no="+no+"&name="+name+"&nt="+$theory_data.attr("data-nt"),
	 				error: function(){
	 					loading_img.remove();
	 					t.replaceWith("アクセスが集中しています...");
	 				},
	 				success: function(xml){
	 					loading_img.remove();
						t.css("display","inline");
						var error = $(xml).find('error');
						if(error.length > 0){
							tag_edit_message.html(error.text());
							t.after(tag_edit_message);
							return;
						}
						var success = $(xml).find('success');
						var mode = success.attr("mode");
						switch(mode){
							case "new":
								$("#tag_list li:last").before("<li class=\"tag\" no=\""+success.attr("no")+"\" lock=\""+(auth_flag ? "1":"0")+"\">"+(auth_flag ? "<span class=\"needless\">*</span>":"")+"<a href=\"/xy/theory/tag/"+success.attr("encode")+"\">"+success.text()+"</a></li>");
								t.parent().parent().append("<p><input type=\"text\" value=\""+success.text()+"\" class=\"tag_text\" /><input type=\"button\" value=\"変更\" no=\""+success.attr("no")+"\" /></p>");
								input.val("");
								break;
							case "update":
								$("#tag_list li.tag[no="+success.attr("no")+"]").html((auth_flag ? "<span class=\"needless\">*</span>":"")+"<a href=\"/xy/theory/tag/"+success.attr("encode")+"\">"+success.text()+"</a>");
								input.val(success.text());
								break;
							case "delete":
								$("#tag_list li.tag[no="+success.attr("no")+"]").remove();
								t.parent().remove();
								break;
						}
						if(!auth_flag){
							tag_edit_field.remove();
							return;
						}
						tag_edit_message.html("OK!");
						t.after(tag_edit_message);
						if($("#tag_list li.tag").length < max){
							if($("#tag_add").length <= 0) tag_edit_list.prepend("<p id=\"tag_add\"><input type=\"text\" class=\"tag_text\" /><input type=\"button\" value=\"追加\" no=\"0\" /></p><hr id=\"tag_hr\" />");
						}
						else {
							if($("#tag_add").length > 0){
								$("#tag_hr").remove();
								$("#tag_add").remove();
							}
						}
	 				}
	 			});
			}
		});
		return false;
	});
	
	$("ul.reaction a", $comment_field).live("click", function(){
		$this = $(this);
		if($this.closest("ul.reaction").is("[data-reactioned]")) return false;
		var preCount = parseInt($this.html());
		$this.html("処理中");
		$.ajax({
			url: '/xy/theory/entry_comment_reaction',
			type: 'POST',
			dataType: 'xml',
			timeout: 10000,
			data: "theory_no="+$theory_data.attr("data-no")+"&comment_no="+$this.closest("[data-cno]").attr("data-cno")+"&reaction="+($this.is(".pos")?1:0)+"&nt="+nt,
			error: function(){
				$this.html("アクセスが集中しています...");
			},
			success: function(xml){
				var error = $(xml).find('error');
				if(error.length > 0){
					alert(error.text());
					$this.html(preCount);
					return
				}
				$this.html(preCount + 1);
			}
		});
		$this.closest("ul.reaction").attr("data-reactioned", 1);
		return false;
	});
	
	$("#comment_delete").submit(function(){
		if($("#comment_pass").val() == ""){ alert("削除キーを入力してください。"); return false; }
		var checked = $("input[name=comment_no[]]:checked");
		if(checked.length <= 0){ alert("削除するコメントをチェックしてください。"); return false; }
		if(window.confirm("チェックしたコメントを削除します。宜しいですか？")) return true;
		return false;
	});
	
	var addBackComment = function($add, no){
		$("div.back_comment").remove();
		var $link = $('<div style="position:absolute;z-index:1000;left:'+($add.offset().left-20)+'px;top:'+($add.offset().top+13)+'px" class="back_comment"><a href="#c'+no+'" class="no_border"><img src="http://img.yakkun.com/page/back_comment.gif" alt="元のコメントに戻る" /></a></div>').one("click", function(){$(this).remove();$("#c"+no).smoothScroll();return false;});
		$("body").append($link);
	};
	$comment_field.click(function(e){
		var $target = $(e.target);
		var $dl = $target.closest("dl");
		if(!$target.is("a.re_link")) return true;
		var $moveTarget = $($target.get(0).hash);
		if($moveTarget.length > 0){
			addBackComment($moveTarget, $dl.attr("id").substr(1));
			$moveTarget.smoothScroll();
			return false;
		}
		else{
			var no = $target.get(0).hash.substr(2);
			var nowTime = new Date().getTime();
			if(lastTime !== undefined && lastTime + 1000 > nowTime){alert("検索は、1秒以上空けて下さい。");return false;}
			lastTime = nowTime;
			$loading = $("<div><p><img src=\"http://img.yakkun.com/page/loading.gif\" alt=\"読み込み中...\" class=\"space_right\" />読み込み中...</p></div>");
			$loading.hide();
			$dl.before($loading);
			$loading.slideDown();
			$loading.smoothScroll();
			$.ajax({
				url: '/xy/theory/comment_no',
				type: 'POST',
				dataType: 'xml',
				timeout: 10000,
				data: "no="+$theory_data.attr("data-no")+"&cno="+no,
				error: function(){
					$loading.html("<p>アクセスが集中しています...</p>");
				},
				success: function(xml){
					var $xml = $(xml);
					var $error = $xml.find('error');
					if($error.length > 0){
						$loading.html("<p>"+$error.text()+"</p>");
					}
					else{
						var $append;
						$xml.find('comments comment').each(function(){
							$append = getCommentHTML($(this));
							$append.hide();
							$dl.before($append);
							$append.slideDown();
						});
						$loading.remove();
						addBackComment($append, $dl.attr("id").substr(1));
					}
				}
			});
		}
		return false;
	});
});

