/**
 * 留言本
 * 
 * @author linxs@35.cn
 */
(function($) {
	$.fn.cavanFeedback = function(o) {
		// 默认参数
		o = $.extend({
			key: null,
			message: {
				msg_default: "谢谢您宝贵的留言，站点管理员将会尽快联系您。",
				err_mail: "邮箱不能为空",
				err_mail2: "电子邮件格式不正确",
				err_title: "标题不能为空",
				err_input: "输入超过20个字符",
				err_code: "验证码输入有误",
				err_message: "请输入留言内容",
				err_message2: "输入超过100个字符"
			}
		}, o || {});
		
		// 插件扩展
		return this.each(function() {
			var form = $(this);
			o.key = "cookie_" + form.attr('id');
			
			// 邮件列表
			guestbookList(form, 0);
			
			// 验证码
			createSafeCode(form);
			$(".safecode_con", form).css("cursor", "pointer").click(function() {
				createSafeCode(form);
			});
			
			// 邮件主体
			$(".emailbody", form)
			.focus(function() {
				if ($(this).val() == o.message.msg_default) {
					$(this).val("");
				}
			})
			.blur(function() {
				if ($(this).val() == "") {
					$(this).val(o.message.msg_default);
				}
			});
			
			// 验证表单
			form.submit(function() {
				// Input
				var falg = false;
				$("#input", form).each(function(i) {
					if (strLen($(this).val()) > 20) {
						falg = $(this);
						return false;
					}
				});
				if (falg) {
					var td = falg.parent("td").prev("td");
					var s = "";
					if (td) {
						s = td.html();
					}
					
					alert(s + o.message.err_input);
					falg.select();
					return false;	
				}
				
				// Title
				var title = $("input[name='title']", form);
				if (title.val().replace(/(^\s*)|(\s*$)/g, "") == '') {
					alert(o.message.err_title);
					title.select();
					return false;
				}
				
				// Email
				var useremail = $(".useremail", form);
				if (useremail.val() == "") {
					alert(o.message.err_mail);
					useremail.select();
					return false;
				}
				if (!isEmail(useremail.val())) {
					alert(o.message.err_mail2);
					useremail.select();
					return false;
				}
				
				// Body
				var emailbody = $(".emailbody", form);
				if (emailbody.val() == '') {
					emailbody.val(o.message.msg_default);
					return false;
				} else if (emailbody.val() == o.message.msg_default) {
					alert(o.message.err_message);
					emailbody.focus();
					return false;
				} else if (strLen(emailbody.val()) > 100) {
					alert(o.message.err_message2);
					emailbody.select();
					return false;
				}
				
				// Safecode
				var safecode = $(".safecode", form);
				if (requestCookies(o.key, form) != safecode.val()) {
					alert(o.message.err_code);
					safecode.select();
					return false;
				}
				
				var btnsubmit = $(":submit", form);
				btnsubmit.attr("disabled", true);
				$.ajax({
					type: "POST",
					url: $(this).attr("action"),
					data: $(this).formSerialize(),
					success: function(msg) {
						alert(msg);
						document.getElementById(form.attr("id")).reset();
						btnsubmit.attr("disabled", false);
						createSafeCode(form);
					}
				});
				
				return false;
			});
		});
		
		// 计算文本的字节数
		function strLen(content) {
			var length = 0;
			if (content != '' && content != undefined) {
				content = content.replace(/^\s+|\s+$/g, ''); 
				for (i = 0; i < content.length; i++) {
					if(content.charCodeAt(i) > 256) {   
						length += 2;
					} else {
						length += 1;
					}
				}
			}

			return length;
		}
		
		// 生成验证码
		function createSafeCode(form) {
			var code = Math.ceil(Math.random()*10000);
			while(code < 1000) {
				code = Math.ceil(Math.random()*10000);
			}
			
			$(".safecode_val", form).html(code);
			responseCookies(o.key, code, form);
		}

		// EMAIL格式验证
		function isEmail(value) {
			try {
				// var pattern=/^(([a-z A-Z \-_ 0-9]+)@[a-z A-Z \-_ 0-9]+\.([a-z A-Z]+(\.)?)*[a-z A-Z]+)$/;
				// var pattern = /^([a-zA-Z\-_0-9]+)@(([a-zA-Z\-_0-9]+\.)+([a-zA-Z]+))$/;
				
				var pattern = /^([a-z0-9]+[\.\-_]?)*[a-z0-9]+@([a-z0-9]+[\.\-_]?)*[a-z0-9]+\.[a-z]{2,4}$/i;
				return pattern.test(value);
			} catch(e) {
				return false;
			}
		};

		// 生成COOKIE
		function responseCookies(cookieName, cookieValue, form) {
			$(".safecode", form).data(cookieName, cookieValue);
		}

		// 取得COOKIE
		function requestCookies(cookieName, form) {
			return $(".safecode", form).data(cookieName);
		}
		
		// 邮件列表
		function guestbookList(form, nowPage) {
			var parentDiv = form.parent();
			
			$.ajax({
				type: "POST",
				dataType: "json",
				url: $(this).attr("action"),
				data: "action=guestbook&id=" + $("input[name='id']", form).val() + "&p=" + nowPage,
				success: function(data) {
					var pagination = data.pagination; // 导航信息
					var term = data.term; // 多语言翻译
					var list = data.list; // 内容
					var len = list.length;
					var dom = null;
					var id = form.attr("id") + "_guestbook";
					
					// 框架
					if (len > 0 && nowPage == 0) {
						dom = $("<div></div>").attr("id", id).attr("class", "guestbook feedback_con content");
						
						parentDiv.after(dom);
						parentDiv.after('<div class="com_title"><div class="com_title_in"><div class="com_title_inner"><h2>' + 
							term.guestbooklist + '</h2></div></div></div>');
					} else {
						dom = $("#"+id);
					}
					if (!dom) {
						return false;
					}
					
					// 主体
					dom.empty();
					for (var i = 0; i < len; i++) {
						cell = $("<div></div>").attr("class", "msg_cell clearfix");
						cell.append('<div class="msg_question clearfix"><div class="msg_question_con"><label class="msg_author">' + 
							'<a href="mailto:' + list[i].email + '">' + list[i].email + '</a>' + 
							'</label> ' + term.say + ' <label>' + 
							list[i].content + '</label></div>' + 
							'<span class="time">' + list[i].time + '</span>' + 
							'</div>');
						
						if (list[i].replyinfo != null) {
							cell.append('<div class="clear"></div>');
							cell.append('<div class="msg_answer clearfix">' + 
								'<div class="msg_answer_left"> ' + term.say2 + ' </div>' + 
								'<div class="msg_answer_r">' + list[i].replyinfo + '</div>' + 
								'</div>');
						}
						dom.append(cell);
					}
					
					// 导航
					if (pagination.count > 1) {
						var dom2 = $("<div></div>").attr("class", "page clearfix");
						
						//
						if (pagination.page == 1) {
							dom2.append('<span class="firstpage disabled">' + term.firstpage + '</span>');
							dom2.append('<span class="prepage disabled">' + term.prepage + '</span>');
						} else {
							dom2.append();
							$('<a class="firstpage" href="javascript:;">' + term.firstpage + '</a>')
								.appendTo(dom2).click(function() {
									guestbookList(form, 1);
								});
							$('<a class="prepage" href="javascript:;">' + term.prepage + '</a>')
								.appendTo(dom2).click(function() {
									guestbookList(form, pagination.page - 1);
								});
						}
						if (pagination.page == pagination.count) {
							dom2.append('<span class="nextpage disabled">' + term.nextpage + '</span>');
							dom2.append('<span class="lastpage disabled">' + term.lastpage + '</span>');
						} else {
							$('<a class="nextpage" href="javascript:;">' + term.nextpage + '</a>')
								.appendTo(dom2).click(function() {
									guestbookList(form, pagination.page + 1);
								});
							$('<a class="lastpage" href="javascript:;">' + term.lastpage + '</a>')
								.appendTo(dom2).click(function() {
									guestbookList(form, pagination.count);
								});
						}
						
						// SELECT
						var select = $("<select></select>");
						select.change(function() {
							guestbookList(form, $(this).val());
						});
						dom2.append(select);
						dom2.append("&nbsp;" + term.total);
						dom.append(dom2);
						for (var j = 1; j <= pagination.count; j++) {
							str = term.per;
							str = str.replace("%s", j);
							opt = $("<option></option>").val(j).html(str);
							if (j == pagination.page) {
								opt.attr("selected", true);
							}
							select.append(opt);
						}
					}
				}
			});
		}
	};
})(jQuery);
