/**
 * Next Comments Plugin 
 * 
 * @author Dan Rades  dan.rades@gmail.com
 * @lastmod 13.03.2008
 * 
 * 
 */

(function($) {                                         
$.fn.nextComments = function(o) {   
    o = $.extend({
		url : '/?ajax_service=1',
		captchaPath : '/cms/images/captcha.jpg.php'
	}, o || {});

	var author  = $('#commentsAuthor');
	var email   = $('#commentsEmail');	
	var title   = $('#commentsTitle');		
	var details = $('#commentsDetails');
	var website = $('#commentsWebsite');

	details.bind('keyup', function () {
		enableCaptcha();
	});

	function validate() {
		$('label, input, textarea').removeClass('error');

		var hasError = false;	

		var authorVal = author.val();
		if ('' == authorVal || 'nume autor' == authorVal) {
			author.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 && 'email' != emailVal && regxp.test(emailVal) == false ) {
			email.addClass('error');
			hasError = true;
		}
		if (title.val() == '') {
			title.addClass('error');
			hasError = true;
		}				
		if (details.val() == '' || 'comentariu' == details.val()) {
			details.addClass('error');
			hasError = true;
		}				
		if (hasError) {
			$('#commentsValidationError').show();
		}
		else {
			$('#commentsValidationError').hide();
		}

		return !hasError;
	};
	
	
	function resetCaptcha() {
		var randNr = randNum = Math.floor(Math.random() * 30000);
		$('#imgCaptcha').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').html('Se incarca comentariile...');		
		var url = o.url + '&item=' + itemId + '&boxID=' + boxId + '&cp=1';		
		
		$.get(url, null, function(data) {
			$('#commentsContainer').html(data.comments);
			initPagination();
			initCommentsReport();
	
		}, 'json');		
	};
	
	function initPagination() {

		$('a', $('#commentsPagination')).click(function(){
			$('#commentsContainerOverlay').block({
				message: '<h3 style="font-size:13px;font-weight:bold;">Incarc comentariile</h3>',
				css: {
					border: '1px solid #80977D'
				}
			});		
			var url = o.url + '&item=' + itemId + '&boxID=' + boxId + '&cp=' + $(this).attr('title');
			$.get(url, null, function(data) {
				
				$('#commentsContainer').html(data.comments);
				initPagination();
				initCommentsReport();
				setTimeout(function(){
					$('#commentsContainerOverlay').unblock();
				}, 300);
			}, 'json');
		});
	};

	function enableCaptcha() {
		var user = $('#userSessionKey').val();
		var state = $('#commentsUseCaptcha').val();
		if (state && !commentsCaptchaRequested && !getCookie(user) && ('comentariu' != details.val() && details.val().length > 0)) {
			$("#imgCaptcha").attr('src', "/cms/images/captcha.jpg.php?" + Math.random());
			$("#divCaptcha").show();
			commentsCaptchaRequested = true;
		}
	}


	var commentsCaptchaRequested = false;
	var form = $('form', $('#commentsForm')).eq(0);
	var container = $('#commentsContainer');	
	var boxId = $('#commentsBoxId').val();
	var itemId = $('#commentsItemId').val();
	
	var ajaxSubmit = true;
	var ajaxPagination = ($('#commentsAjaxPagination').val() == 1) ? true : false;
	var useCaptcha = parseInt($('#commentsUseCaptcha').val());
	var useAjax = parseInt($('#commentsUseAjax').val());
	var captchaContainer = $('#commentsCaptchaContainer');

	if (ajaxPagination) {
		initPagination();
	}

	initCommentsReport();

	form.submit(function() {
		$('#commentAdded').hide();					
		var v = validate();
		if (v == true) {
			if (ajaxSubmit) {
				var url = o.url + '&boxID=' + boxId;
	            $('#commentsForm').block({  
	                message: '<h3 style="font-size:14px;font-weight:bold;">Postam comentariul</h3>',  
	                css: { 
						border: '2px solid #80977D'
					}  
	            });
	            				
				$.post(o.url, form.serialize(), function(data){
					if (typeof data.captcha_error != 'undefined') {
						resetCaptcha();
						$('#commentsCaptchaError').show();
						$('#commentsForm').unblock();
					}
					else {
						$('#commentsCaptchaError').hide();
						$('#commentAdded').show();
						$('#commentsCount').html(data.comments_count);
						commentsCaptchaRequested = false;
						container.html(data.comments);
						form.get(0).reset();
	
						$('div.captcha').hide();

						initCommentsReport();
						initPagination();	
						
						
						setTimeout(function(){
							$('#commentsForm').unblock();
						}, 700);
			
					}
					
				}, 'json');
				return false;
			}
			else {
				return true;
			}
		}
		return false;
	});
	
	if (useAjax)
	{
		initPagination();
	}
	
};

})(jQuery);