/**
 * Ajax to support the comment posting system
 */

ArticleCommentInterface = Class.create();

ArticleCommentInterface.prototype = 
{
	initialize: function() 
	{
		Behaviour.register(
		{
			'#ArticleCommentInterface_Form_ArticleCommentsPostCommentForm_action_postcomment' : 
			{
				onclick : this.postComment
			},

			'#PageComments a.deletelink' : 
			{
				onclick : this.deleteComment
			},
			'#PageComments a.spamlink' : 
			{
				onclick : this.reportSpam
			},
			'#PageComments a.hamlink' :
			{
				onclick : this.reportHam	
			},
			'#PageComments a.approvelink' :
			{
				onclick : this.approveComment	
			}
		});
	},
	
	loadSpamQuestion: function(response) 
	{
		var spamQuestionDiv = $('Math');
		var mathLabel = spamQuestionDiv.getElementsByTagName('label')[0];
		mathLabel.innerHTML = response.responseText;
	},
	
	postComment: function() 
	{
		var form = $("ArticleCommentInterface_Form_ArticleCommentsPostCommentForm");
		var message = $("ArticleCommentInterface_Form_ArticleCommentsPostCommentForm_error");
		
		if(form.elements.Name.value && form.elements.Comment.value) 
		{
			var noComments;
			if(noComments = $('NoComments')) 
			{
				Element.remove(noComments);
				var pageComments = document.createElement('ol');
				pageComments.id = 'PageComments';
				$('CommentHolder').appendChild(pageComments);
			}
			
			message.style.display = 'none';
		
			
			var __newComment = document.createElement('li');
			
			// Create a new <li> for the post
			
			var pComments = document.getElementById('PageComments');
			var comLis = pComments.getElementsByTagName('li');
			//alert(comLis.length);
			if(comLis.length < 1)
			{
				window.scrollTo(0, getY(pComments));
			}
			else
			{
				window.scrollTo(0, getY(comLis[comLis.length-1]));
			}
	
						// Add it to the list with a 'loading' message
			$('PageComments').appendChild(__newComment);
			__newComment.innerHTML = '<p><img src="cms/images/network-save.gif" /> Loading...</p>';

			
			// Submit the form via ajax
			Ajax.SubmitForm(form, "action_postcomment", 
			{
				onSuccess : function(response) 
				{
					
					// Create an Ajax request to regenerate the spam protection question
					//need to check if there is actually a spam question to change first
					
					
					if(form.elements.Math)
					{
						new Ajax.Request(document.getElementsByTagName('base')[0].href+'PageCommentInterface_Controller/newspamquestion', { onSuccess: loadSpamQuestion, onFailure: Ajax.Evaluator });
					}
					
					if(response.responseText != "spamprotectionfalied")
					{
						if($("PageComments").getElementsByTagName('li').length %2 == 0)
						{
							__newComment.className = "even";
						}
						
						// Load the response into the new <li>
						__newComment.innerHTML = response.responseText;
						Behaviour.apply(__newComment);
							
						// Flash it using Scriptaculous
						new Effect.Highlight(__newComment, { endcolor: '#e9e9e9' } );
						if(response.responseText.match('<b>Spam detected!!</b>')) 
						{
							__newComment.className = 'spam';
						}
					}
					else
					{
						__newComment.innerHTML = "";
						Behaviour.apply(__newComment);
						message.style.display = '';
						message.innerHTML = "You got the spam question wrong.";
							
					}
						
						
				},
				
				onFailure : function(response) 
				{
						alert(response.responseText);
				}
			});
			
			// Clear the fields
			
			// form.elements.Name.value = "";
			form.elements.Comment.value = "";
			

			
		} 
		
		else 
		{
			message.style.display = '';
			message.innerHTML = "Please enter your name, your email and a comment to be posted to the site.";
		}
		return false;
	},
	
	/**
	 * Ajax handler of moderation removal
	 */
	deleteComment: function() 
	{
		var __comment = this.parentNode.parentNode.parentNode;
		
		__comment.getElementsByTagName('h4')[0].innerHTML = "Removing...";
		
		new Ajax.Request(this.href + '?ajax=1', 
		{
			onSuccess : function(response) 
			{
					// Clear our wee status message
					__comment.getElementsByTagName('h4')[0].innerHTML = "Removing...";

					// Remove it using Scriptaculous
					new Effect.Highlight(__comment, { 
						startcolor: '#cc9999' , endcolor: '#e9e9e9', duration: 0.5,
						afterFinish : function () { 
							var commentList = $('PageComments');
							commentList.removeChild(__comment);
							if(!commentList.firstChild) {
								$('CommentHolder').innerHTML = "<p id=\"NoComments\">No one has commented on this page yet.</p>";
							}
						}
					} );
			},
			
			onFailure : function(response) 
			{
				alert(response.responseText);
			}
		});
		
		return false;
	},
	
	/**
	 * Ajax handler of spam reporting
	 */
	 reportSpam: function() 
	 {
	 	var __comment = this.parentNode.parentNode.parentNode;
	 	
	 	__comment.getElementsByTagName('h4')[0].innerHTML = "Reporting spam...";
	 	
	 	
	 	new Ajax.Request(this.href + '?ajax=1', 
		{
	 		onSuccess : function(response) 
			{
	 			if(response.responseText != '') 
				{
	 				// Load the response into the <li>
	 				__comment.innerHTML = response.responseText;
					Behaviour.apply(__comment);
				
					// Flash it using Scriptaculous
					new Effect.Highlight(__comment, { endcolor: '#cc9999' } );
					
					__comment.className = 'spam';
				} 
				else 
				{
					new Effect.Highlight(__comment, { 
						startcolor: '#cc9999' , endcolor: '#e9e9e9', duration: 0.5,
						afterFinish : function() {
	 						var commentList = $('PageComments');
							commentList.removeChild(__comment);
							if(!commentList.firstChild) {
								$('CommentHolder').innerHTML = "<p id=\"NoComments\">No one has commented on this page yet.</p>";
							}
						}
					} );
				}
			},

			onFailure : function(response) 
			{
				alert(response.responseText);
			}
		});
		
		return false;
	},
	
	/**
	 * Ajax handler of ham reporting
	 */
	 reportHam: function() {
	 	var __comment = this.parentNode.parentNode.parentNode;
	 	
	 	__comment.getElementsByTagName('h4')[0].innerHTML = "Reporting as not spam...";
	 	
	 	new Ajax.Request(this.href + '?ajax=1', {
	 		onSuccess : function(response) {
	 			// Load the response into the <li>
	 			__comment.innerHTML = response.responseText;
				Behaviour.apply(__comment);
				
				// Flash it using Scriptaculous
				new Effect.Highlight(__comment, { endcolor: '#e9e9e9' } );
				__comment.className = 'notspam';
			},
			
			onFailure : function(response) {
				alert(response.responseText);
			}
		});
		
		return false;
	},
	
	/**
	 * Ajax handler of ham reporting
	 */
	 approveComment: function() {
	 	var __comment = this.parentNode.parentNode.parentNode;
	 	
	 	__comment.getElementsByTagName('h4')[0].innerHTML = "Marking comment as approved...";
	 	
	 	new Ajax.Request(this.href + '?ajax=1', {
	 		onSuccess : function(response) {
	 			// Load the response into the <li>
	 			__comment.innerHTML = response.responseText;
				Behaviour.apply(__comment);
				
				// Flash it using Scriptaculous
				new Effect.Highlight(__comment, { endcolor: '#e9e9e9' } );
				__comment.className = 'notspam';
			},
			
			onFailure : function(response) {
				alert(response.responseText);
			}
		});
		
		return false;
	}
}
 
ArticleCommentInterface.applyTo("#PageCommentsHolder");
function loadSpamQuestion(response) {
	var spamQuestionDiv = $('Math');
	var mathLabel = spamQuestionDiv.getElementsByTagName('label')[0];
	mathLabel.innerHTML = response.responseText;
}

function getY( oElement )
{
	var iReturnValue = 0;
	while( oElement != null ) {
	iReturnValue += oElement.offsetTop;
	oElement = oElement.offsetParent;
	}
	return iReturnValue;
}
