/**
*	Next Comments Plugin
*	
*	@author Dan Rades ( dan.rades@gmail.com )
*	@version 0.9
* 	@lastmod 15.10.2009	
*/

(function($) {                                         
$.fn.nextComments = function(o) {   
	var randNr = randNum = Math.floor(Math.random() * 30000);
    o = $.extend({
		url : '/?ajax_service=1&rnd=' + randNr,
		captchaPath : '/cms/images/captcha.jpg.php',
		commentsLimit : 500
	}, o || {});
	return this.each(function(i){
		var masterElement = $(this);
		
		var masterElementList = '';
		if (typeof o.commentsListParent != 'undefined')
		{
			masterElementList = $(o.commentsListParent).get(i);
		}
		else
		{
			masterElementList = $(this);
		}
		
		function validate() {
			$('label, input, textarea').removeClass('error');
			
			
			var author  = $('.commentsAuthor', masterElement);
			var email   = $('.commentsEmail', masterElement);		
			var details = $('.commentsDetails', masterElement);

			var hasError = false;	
			if (author.val() == '' ) {
				$('label, input', author.parent()).addClass('error');
				hasError = true;
			}

		   var regxp = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
		   var emailVal = email.val();
			
			if (emailVal != '' && emailVal != 'adresa ta de mail...' && regxp.test(emailVal) == false ) {
				$('label, input', email.parent()).addClass('error');
				
				hasError = true;
			}
			if (details.val() == '' ) {
				$('label, textarea', details.parent()).addClass('error');
				hasError = true;
			}				
			if (hasError) {
				$('.commentsValidationError', masterElement).show();
			}
			else {
				$('.commentsValidationError', masterElement).hide();
			}
			
			return !hasError;
		};
		
		
		function resetCaptcha() {
			var randNr = randNum = Math.floor(Math.random() * 30000);
			$('.commentsCaptchaImage', masterElement).eq(0).attr('src', o.captchaPath + '?rnd=' + randNr);
		};
		
		function initCommentsReport() {
			$('a.commentsReport').click(function(){
				var _self = $(this);
				var id = _self.attr('title');
				var url = o.url + '&boxID=' + boxId + '&reportId='+id;
				var _parent = _self.parent();
				_parent.html('<b>Raportam...</b>');
				$.get(url, null, function() {
					_parent.html('<b>Comentariu raportat!</b>');				
				});
			});
		};
		
		function getFirstPage() {
			$('.commentsContainer', masterElementList).html('Se incarca comentariile...');		
			var url = o.url + '&item=' + itemId + '&boxID=' + boxId + '&cp=1';		
			
			$.get(url, null, function(data) {
				$('.commentsContainer', masterElementList).html(data.comments);
				initPagination();
				initCommentsReport();
		
			}, 'json');		
		};
		
		function initPagination() {
			var x=$('a', $('.commentsPagination', masterElementList));
			
			$('a', $('.commentsPagination', masterElementList)).click(function(){
				$('.commentsContainerOverlay', masterElementList).block({
					message: '<h3 style="font-size:14px;font-weight:bold;">Incarc comentariile</h3>',
					css: {
						border: '2px solid #a00'
					}
				});		
				var url = o.url + '&item=' + itemId + '&boxID=' + boxId + '&cp=' + $(this).attr('title');
				$.get(url, null, function(data) {
					$('.commentsContainer', masterElementList).html(data.comments);
					initPagination();
					initCommentsReport();
					window.location.hash = 'comments';
					setTimeout(function(){
						$('.commentsContainerOverlay', masterElementList).unblock();
					}, 700);
				}, 'json');
			});
		};


		var form = $('form', $('.commentsForm', masterElement)).eq(0);
		
		var container = $('.commentsContainer', masterElementList);	
		var boxId = $('.commentsBoxId', masterElement).val();
		var itemId = $('.commentsItemId', masterElement).val();
		
		var ajaxSubmit = true;
		var ajaxPagination = ($('.commentsAjaxPagination', masterElement).val() == 1) ? true : false;
		var useCaptcha = parseInt($('.commentsUseCaptcha', masterElement).val());
		var captchaContainer = $('.commentsCaptchaContainer', masterElement);
		var captchaImage = $('.commentsCaptchaImage', masterElement);
		
		if (useCaptcha == 1) {
			var showCaptchaButton = $('.commentsShowCaptcha', masterElement);

			captchaImage.click(function()
			{
				this.src = o.captchaPath + '?' + Math.random()
			});
			
			showCaptchaButton.click(function() {
				captchaContainer.show();
				showCaptchaButton.hide();
				return false;	
			});			
			
			$('.commentsCancel', masterElement).click(function() {
				captchaContainer.hide();
				showCaptchaButton.show();
				return false;	
			});	

			$('.commentsDetails', masterElement).bind('keyup', function() {			
				captchaContainer.show();
				showCaptchaButton.hide();
				return false;	
			});	
		}

		$('.commentsDetails', masterElement).bind('keyup', function() 
		{			
			if (this.value.length > o.commentsLimit)
			{
				this.value = this.value.substring(0,o.commentsLimit);
			}
			else
			{
				$('.commentsCountChars',masterElement).html(o.commentsLimit - this.value.length);
			}
		});

		if (ajaxPagination) {			
			initPagination();
		}

		initCommentsReport();

		form.submit(function() {				
			var v = validate();
			if (v == true) {			
				if (ajaxSubmit) {
					var url = o.url + '&boxID=' + boxId;
					$('.commentsForm', masterElement).block({  
						message: '<h3 style="font-size:14px;font-weight:bold;">Postam comentariul</h3>',  
						css: { 
							border: '2px solid #a00'
						}  
					});				
					$.post(o.url, form.serialize(), function(data){
						
						if (typeof data.captcha_error != 'undefined') {
							resetCaptcha();
							$('.commentsCaptchaError', masterElement).show();
							$('.commentsForm', masterElement).unblock();
						}
						else {
							$('.commentsCaptchaError', masterElement).hide();
							$('.commentsCount', masterElement).html(data.count_comments);
							container.html(data.comments);
							form.get(0).reset();
							window.location.hash = 'comments';
							if (useCaptcha == 1) {
								captchaContainer.hide();
								resetCaptcha();
								showCaptchaButton.show();				
							}	
							$('.captchaContainer').hide();
							commentsCaptchaRequested = new Array();
							
							initCommentsReport();
							initPagination();	
							
							
							setTimeout(function(){
								$('.commentsForm', masterElement).unblock();
							}, 700);
				
						}
						
					}, 'json');
					return false;
				}
				else {
					return true;
				}
			}
			return false;
		});
			

	});
	
};

})(jQuery);

$(document).ready(function() 
{
	$('.masterComments').nextComments();
});