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

(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'
	}, 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 + '&' + $('.commentsPaginationVar', masterElement).val() + '=1';		
			
			$.get(url, null, function(data) {
				$('.commentsContainer', masterElementList).html(data.comments);
				initPagination();
				initCommentsReport();
		
			}, 'json');		
		};
		
		function initPagination() {

			$('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 + '&' + $('.commentsPaginationVar', masterElement).val() + '=' + $(this).attr('title');
				$.get(url, null, function(data) {
					$('.commentsContainer', masterElementList).html(data.comments);
					initPagination();
					initCommentsReport();
					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);
		
		if (useCaptcha == 1) {
			var showCaptchaButton = $('.commentsShowCaptcha', masterElement);

			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;	
			});	
		}

		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();
		
							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;
		});
		
		getFirstPage();
	

	});
	
};

})(jQuery);

var commentsCaptchaRequested = new Array();
function enableCaptcha(id, state) {
	if ('undefined' == commentsCaptchaRequested[id])
	{
		commentsCaptchaRequested[id] = false;
	}
	if (state && !commentsCaptchaRequested[id] && !getCookie('user_name') && document.getElementById('commentsDetails'+ id).value.length > 0 && 'Eu spun NU pentru ca...' != document.getElementById('commentsDetails'+ id).value && 'Eu spun DA pentru ca...' != document.getElementById('commentsDetails'+ id).value) {
		document.getElementById("imgCaptcha"+ id).src = "/cms/images/captcha.jpg.php?" + Math.random();
		document.getElementById('divCaptcha'+ id).style.display = 'block';
		commentsCaptchaRequested[id] = true;
	}
}
function getCookie(sName)	{
	var i, v = document.cookie.split(';'), vT;
	for (i = 0; i < v.length; i++) {
		vT = v[i].split(sName + '=');
		if (vT.length > 1) {
			return vT[1];
		}
	}
	return "";
}

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