/**
 * Ajax to support the comment posting system
 */

PageCommentInterface = Class.create();

PageCommentInterface.prototype = {
	initialize: function() {
		Behaviour.register({
			'#PageCommentInterface_Form_PageCommentsPostCommentForm_action_postcomment' : {
				onclick : this.postComment
			},
			'#PageCommentInterface_Form_PageCommentsPostCommentForm_action_postcomment_en' : {
				onclick : this.postComment
			},
			'#PageCommentInterface_Form_PageCommentsPostCommentForm_action_closecomment' : {
				onclick : this.closeComment
			},
			'#PageComments a.deletelink' : {
				onclick : this.deleteComment
			},
			'#PageComments a.spamlink' : {
				onclick : this.reportSpam
			},
			'#PageComments a.hamlink' : {
				onclick : this.reportHam	
			},
			'#PageComments a.approvelink' : {
				onclick : this.approveComment	
			},
			'#PageComments a.newPost' : {
				onclick : this.newPost	
			},
			'[name=action_saveit]' :{
				onclick : this.action_saveit	
			},
			'[name=action_cancel]' :{
				onclick : this.action_cancel	
			}
		})
	},
		
	newPost: function() {
		//alert('hier');
	},
	
	loadSpamQuestion: function(response) {
		var spamQuestionDiv = $('Math');
		var mathLabel = spamQuestionDiv.getElementsByTagName('label')[0];
		mathLabel.innerHTML = response.responseText;
	},
	
	postComment: function() {
		
		//Get language
		var actlang=document.getElementsByTagName('html')[0].attributes[0].nodeValue;
		// Form		
		var form = $("PageCommentInterface_Form_PageCommentsPostCommentForm");
		// For messages
		var message = $("PageCommentInterface_Form_PageCommentsPostCommentForm_error");
		
		//alert(message);
		
		if(form.elements.Title.value && form.elements.Name.value && form.elements.Comment.value) {
			if(noComments = $('NoComments')) {
				Element.remove(noComments);
				var pageComments = document.createElement('ul');
				pageComments.id = 'PageComments';
				$('CommentHolder').appendChild(pageComments);
			}
			
			message.style.display = 'none';
		
			// Create a new <li> for the post
//			var pageComments = $('PageComments').getElementsByTagName('li');
//			var __newComment = document.createElement('li');

			// Add it to the list with a 'loading' message
//			$('PageComments').insertBefore(__newComment, pageComments[0]);
//			__newComment.innerHTML = '<p><img src="cms/images/network-save.gif" /> Laden...</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"){
//								__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.";
//						
//					}
					
					// Post error message
					message.style.display = '';
					if (form.elements.ActLang.value=="en"){
						message.innerHTML = "Your contribution will be published after being checked!";
					}else{
						message.innerHTML = "Ihr Beitrag wird freigeschaltet, nachdem er &uuml;berpr&uuml;ft wurde!";
					}
				},
				onFailure : function(response) {
					alert(response.responseText);
				}
			});
			
			// Clear the fields
			form.elements.Title.value = "";
			form.elements.Name.value = "";
			form.elements.Comment.value = "";
			
		} else {
			// Post error message
			message.style.display = 'block';
			if (form.elements.ActLang.value=="en"){
				message.innerHTML = "Please enter a title, your name and text to be posted to the site.";
			}else{
				message.innerHTML = "Bitte geben Sie den Titel, Ihren Namen und den Text ein.";
			}		
		}
		
		return false;
	},
	
	/**
	 * Ajax handler of moderation removal
	 */
	deleteComment: function() {
		
		var __comment = this.parentNode.parentNode.parentNode;
		
		__comment.getElementsByTagName('span')[0].innerHTML = "Removing...";
		
		new Ajax.Request(this.href + '?ajax=1', {
			onSuccess : function(response) {
					// Clear our wee status message
					__comment.getElementsByTagName('span')[0].innerHTML = "Removing...";

					// Remove it using Scriptaculous
					new Effect.Highlight(__comment, { 
						startcolor: '#cc9999' , endcolor: '#e9e9e9', duration: 0.5,
						afterFinish : function () { 
							var commentList = __comment.parentNode;
							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.parentNode;
	 	
	 	__comment.getElementsByTagName('span')[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 = __comment.parentNode;
							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.parentNode;
	 	
	 	__comment.getElementsByTagName('span')[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.parentNode;
	 	
	 	__comment.getElementsByTagName('span')[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;
	},
	
	action_saveit: function() {
		
		// Generate parts of the inputs id
		var idparts=this.id.split('_');
		// Build form-id out of this parts
		var formid=idparts[0]+"_"+idparts[1]+"_"+idparts[2];
		// Message
		var errorid=idparts[0]+"_"+idparts[1]+"_"+idparts[2]+"_error";
		var message = $(errorid);
		// formular
		var form=$(formid);
		
//		alert(formid);
//		alert(form.elements.Title.value);
		
		// Check inputs
		if(form.elements.Title.value && form.elements.Name.value && form.elements.CommentText.value) {
			
			//alert(form.elements.Title.value);
			//alert(form.elements.Name.value);
			//alert(form.elements.CommentText.value);
			
			form.elements.Title.value=sanitizeChar(form.elements.Title.value);
			form.elements.Name.value=sanitizeChar(form.elements.Name.value);
			form.elements.CommentText.value=sanitizeChar(form.elements.CommentText.value);
			
			//alert(form.elements.Title.value);
			//alert(form.elements.Name.value);
			//alert(form.elements.CommentText.value);
			
			// see above var message
			message.style.display = 'none';
			
			// Get ID of the slide
			var slideid = "abd"+idparts[2];
			// Get ID of the commentlink for inserting new comment with js
			var commentlinkid = "Fblink"+idparts[2];
			//alert(commentlinkid);
			// Get div containing form to close it
			var testformselector ='tf'+idparts[2]; 
			var testform=document.getElementById(testformselector);
			
			// Close form
			new Effect.Shrink(testform, { 
				direction: 'top-left',
				duration: 0.2,
				afterFinish : function() {
					// Add posted by and name to the list
					var now = new Date();
					var created=now.format("dd.mm.yyyy");
					// Create a new elements
					var __newCommentUser = document.createElement('p');
					__newCommentUser.innerHTML=form.elements.Name.value + ', ' + created;
					document.getElementById(commentlinkid).insertBefore(__newCommentUser, document.getElementById(commentlinkid).firstChild);
					var __newCommentText = document.createElement('p');
					__newCommentText.innerHTML=form.elements.CommentText.value;
					document.getElementById(commentlinkid).insertBefore(__newCommentText, document.getElementById(commentlinkid).firstChild);
					var __newCommentTitle = document.createElement('h3');
					__newCommentTitle.innerHTML=form.elements.Title.value;
					document.getElementById(commentlinkid).insertBefore(__newCommentTitle, document.getElementById(commentlinkid).firstChild);
					
					// Clear the fields	
					form.elements.Title.value = "";
//					form.elements.Name.value = "";
					form.elements.CommentText.value = "";
				}
			});
			
			// Submit the form via ajax
			Ajax.SubmitForm(form, "action_saveit", {
				
				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"){
//						__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);
				}
				
			});
		
			
		} else {
			
			message.style.display = '';
			if (form.elements.ActLang.value=="en"){
				message.innerHTML = "Please enter a title, your name and text to be posted to the site.";
			}else{
				message.innerHTML = "Bitte geben Sie den Titel, Ihren Namen und den Text ein.";
			}
				
		}
		
		return false;
	},
	
	action_cancel: function() {
		
		// Generate parts of the inputs id
		var idparts=this.id.split('_');
		// Build form-id out of this parts
		var formid=idparts[0]+"_"+idparts[1]+"_"+idparts[2];
		// form
		var form=$(formid);
		// Message
		var errorid=idparts[0]+"_"+idparts[1]+"_"+idparts[2]+"_error";
		var message = $(errorid);

		// Get div containing form
		var testformselector ='tf'+idparts[2]; 
		var testform=document.getElementById(testformselector);
		
		// Close form
		new Effect.Shrink(testform, { 
			direction: 'top-left',
			duration: 0.2}
		);
		
		// Submit the form via ajax
		Ajax.SubmitForm(form, "action_cancel", {		
			onSuccess : function(response) {	
			},
			onFailure : function(response) {
				alert(response.responseText);
			}
		});
			
		// Clear the fields	
		form.elements.Title.value = "";
		form.elements.Name.value = "";
		form.elements.CommentText.value = "";
		message.innerHTML = "";
		
		return false;
	}
	
}
 
PageCommentInterface.applyTo("#PageComments_holder");
function loadSpamQuestion(response) {
	var spamQuestionDiv = $('Math');
	var mathLabel = spamQuestionDiv.getElementsByTagName('label')[0];
	mathLabel.innerHTML = response.responseText;
}

function sanitizeChar(theString){
	var strFound=theString.match(/<|>/);
	if (strFound){
		theString=theString.replace(/</g, "&lt;");
		theString=theString.replace(/>/g, "&gt;");
	}
	return theString;
}



