YAHOO.namespace('cn.onemouse.post');
YAHOO.cn.onemouse.post.view = function()
{
	var _util = YAHOO.util, _dom = _util.Dom, _event = _util.Event, _lang = YAHOO.lang;	
	var frm = _dom.get('reply-frm');
	var node = _dom.get('view-content');	
	var replys = _dom.getElementsByClassName('reply-all', 'div', node)[0];
	function addFormHandle()
	{
		_event.on(frm, 'submit', function(e){
			if(! check(frm) ) return false;
			reply(frm);
		});
		var user = getUser();
		if(user) 
		{
			frm.user_id.value = user.name;
			frm.user_email.value = user.email;
			frm.user_url.value = user.url;
		}
		var rds = _dom.getElementsByClassName('reply-delete','a', replys);
		_event.on(rds, 'click', function(e) {
			var target = _event.getTarget(e);				
			var ids = target.href.split('#')[1];
			var ids = ids.split(':');
			var pnode = target.parentNode;
			while(pnode.tagName !== 'LI' && pnode.tagName !== 'BODY')
				pnode = pnode.parentNode;
			deleteReply(ids, pnode);
		});
	}
	function deleteReply(ids, li)
	{
		var args = {
			'o' : 'reply',
			'a' : 'dodelete',
			'post_id' : ids[0],
			'id' : ids[1],
			'crumb' : ids[2]
		};
		var conn = new YAHOO.cn.onemouse.conn('/api.php', args, 
				function(data) {deleteReplyDone(data,li); } ,'POST');
		conn.conn();
	}
	function deleteReplyDone(data, li)
	{
		if(data.isErr) return alert('delete failed');	
		var pnode = li.parentNode;
		pnode.removeChild(li);
	}
	function reply(frm)
	{
		if(frm._ispost.value == '1') return false;
		saveUser(frm.user_id.value, frm.user_email.value, frm.user_url.value);
		frm._ispost.value = 1;
		var elements = frm.elements;
		var args = {'o':'reply', 'a':'doadd'};
		for(var i = 0, len = elements.length ; i < len; i++)
		{
			if(elements[i].type.toUpperCase() == 'CHECKBOX')
				args[elements[i].name] = elements[i].checked ? 1 : 0;
			else
				args[elements[i].name] = elements[i].value;
		}
		var conn = new YAHOO.cn.onemouse.conn('/api.php', args, replyDone,'POST');
		conn.conn();
	}
	function replyDone(param)
	{
		if(param.isErr)
			return alert('Reply Failed');
		var data = param.data;
		var ul = replys.getElementsByTagName('ul')[0];
		var newReply = "<div class='title'>";
		newReply += "<a href='" + data.user_url + "'>" + data.user_id + "</a> says:";
		newReply += "</div>";
		newReply += "<div class='meta'>" + Date.formatDate('F jS, Y H:i', data.create_time) + "</div>";
		newReply += "<div class='content'>" + data.content + "</div>";
		var li = document.createElement('li');
		li.innerHTML = newReply;
		if(ul.firstChild)
			ul.insertBefore(li, ul.firstChild);
		else
			ul.innerHTML = '<li>' + li.innerHTML + '</li>';
		// clear the content and reset the mark input.
		frm.content.value = '';
		frm._ispost.value = 0;
	}
	function showMessage(node, mesg)
	{
		var li = node.parentNode;	
		while(li.tagName.toLowerCase() != 'li' && li.tagName.toLowerCase() != 'body')
			li = li.parentNode;
		
		var em = li.getElementsByTagName('em')[0];
		em.innerHTML = mesg;
		if(node.tagName.toLowerCase() == 'input' && node.type.toLowerCase() == 'text')
			node.focus();
		return false;
	}
	function check(frm)
	{
		frm.user_id.value = _lang.trim(frm.user_id.value);	
		frm.user_email.value = _lang.trim(frm.user_email.value);
		frm.user_url.value = _lang.trim(frm.user_url.value);
		var idLen = frm.user_id.value.length;
		var emailLen = frm.user_email.value.length;
		var urlLen = frm.user_url.value.length;
		var contentLen = frm.content.value.length;
		if(idLen < 3)
			return showMessage(frm.user_id, 'Name长度应在 3-20');
		else
			showMessage(frm.user_id, '');
		if(emailLen > 0 && !/[\w\.]+/) 
			return showMessage(frm.user_email, 'Email格式错误');
		else 
			showMessage(frm.user_email, '');
		if(urlLen > 0 && !/^http:\/\/([a-zA-Z\-\.]+)\.[a-z]{2,4}\/?(.*)$/i.test(frm.user_url.value))
				return showMessage(frm.user_url, 'Invalid URL');
		else
			showMessage(frm.user_url, '');
		if(contentLen < 3 || contentLen > 1024)
			return showMessage(frm.content, '评论长度应在3-1k');
		else
			showMessage(frm.content, '');
		return true;
	}
	function saveUser(name,email,url)
	{
		var userCookie = 'n=' + encodeURIComponent(name);
		userCookie += '&e=' + encodeURIComponent(email);
		userCookie += '&u=' + encodeURIComponent(url);
		userCookie = encodeURIComponent(userCookie);
		var expires = new Date();
		expires.setTime(expires.getTime() + 86400 * 365);
		document.cookie = 'U=' + userCookie + '; expires=' + expires.toGMTString();
		return true;
	}
	function getUser()
	{
		var m = document.cookie.match(/U=([^;]*);/);
		if(m && m.length > 1)
		{
			var userCookie = decodeURIComponent(m[1]);	
			var name = userCookie.match(/n=([^&]*)/);
			var email = userCookie.match(/e=([^&]*)/);
			var url = userCookie.match(/u=([^&]*)/);
			return {
				'name' : (name && name.length > 1 ? decodeURIComponent(name[1]) : ''),
				'email' : (email && email.length > 1 ? decodeURIComponent(email[1]) : ''),
				'url' : (url && url.length > 1 ? decodeURIComponent(url[1]) : '')
			};
		}
		return false;
	}
	addFormHandle();
}
;(function(){
	var _loader = new YAHOO.util.YUILoader({
	require:['connection'],
	base:'http://cn.yui.yahooapis.com/2.7.0/build/',
	onSuccess: YAHOO.cn.onemouse.post.view,
	onFailure:function(o){}
});
_loader.insert();
})();
