JSGestorComentarios = new Class({

	formularioComentarioAberto: false,
	formularioEnviarAmigoAberto: false,

	// ----------------------------------------------------------------------------------------------------
	initialize: function() {
	},

	// ----------------------------------------------------------------------------------------------------
	toggleFormularioComentario: function() {

		if(this.formularioComentarioAberto) {
			$('div_form_comentario').setStyle('display', 'none');
			this.formularioComentarioAberto = false;
		} else {
			$('div_form_comentario').setStyle('display', 'block');
			this.formularioComentarioAberto = true;
		}

	},

	// ----------------------------------------------------------------------------------------------------
	mostraComentarios: function(idArtigo, l, mostrarTodos) {

		this.idArtigo = idArtigo;
		this.l = l;
		this.mostrarTodos = mostrarTodos;
		new Request.HTML({
			url: 'modulos/comentarios/get_comentarios.ajax.php',
			update: $('div_comentarios')
		}).get({
			id_artigo: idArtigo,
			l: l,
			mostrar_todos: mostrarTodos ? '1' : '0'
		});

	},

	// ----------------------------------------------------------------------------------------------------
	validaComentario: function() {

		var errorArray = new Array();
		var idArtigo = $('id_artigo').value;
		var l = $('l').value;

		// Espera
		$('btn_submit').value = l == "pt" ? "Aguarde..." : "Wait...";

		// -------
		// Validar
		// -------

		// Nome
		var nome = $('nome').value = $('nome').value.clean();
		if(nome.length  < 2) {
			if(l == 'pt') errorArray.push("O nome tem menos que 2 caracteres");
			else errorArray.push("Your name has less than 2 chars");
		}

		// Email
		var email = $('email').value = $('email').value.clean();
		if(!this.emailCheck(email)) {
			if(l == 'pt') errorArray.push("O e-mail n&atilde;o &eacute; v&aacute;lido");
			else errorArray.push("The e-mail is not valid");
		}

		// Comentario
		var comentario = $('texto').value = $('texto').value.trim();
		if(comentario.length  < 2) {
			if(l == 'pt') errorArray.push("O coment&aacute;rio &eacute; demasiado curto");
			else errorArray.push("The comment is too short");
		}

		// Enviar ou reportar erros
		if(errorArray.length > 0) utils.mostraErrorArray(errorArray, 'enviar');
		else new Request.HTML({
			url: 'modulos/comentarios/gravar_comentario.ajax.php',
			onSuccess: function(responseTree, responseElements, responseHTML, responseJavaScript) {
				$('p_comentarios').setStyle('display', 'block');
				$('div_comentarios').innerHTML = responseHTML + $('div_comentarios').innerHTML;
				$('div_form_comentario').setStyle('display', 'none');
				gestorComentarios.formularioComentarioAberto = false;
				var btnSubmitValue, infoStr;
				if($('l').value == "pt") {
					btnSubmitValue = 'Enviar';
					infoStr = 'Obrigado pelo seu coment&aacute;rio';
				} else {
					btnSubmitValue = 'Send';
					infoStr = 'Thank you for your comment';
				}
				$('btn_submit').value = btnSubmitValue;
				msgr.show({
					tipo: 'info',
					html: infoStr
				});
			}
		}).post($('form_comentario'));

	},

	// ----------------------------------------------------------------------------------------------------
	editaComentario: function(idComentario) {

		// Buscar o texto por AJAX
		var texto = '';
		new Request.HTML({
			url: 'modulos/comentarios/get_texto_comentario.ajax.php',
			async: false,
			onSuccess: function(responseTree, responseElements, responseHTML, responseJavaScript) {
				texto = responseHTML;
			}
		}).get({id: idComentario});

		var td = $('td_texto_' + idComentario);
		td.textoOriginal = td.innerHTML;
		var textArea = new Element('textarea', {
			id: 'textarea_' + idComentario,
			html: texto,
			styles: {
				width: 500,
				height: 155
			}
		});

		var bSalvar = new Element('input', {
			type: 'button',
			'class': 'salvar',
			id: 'b_salvar_' + idComentario,
			value: 'Salvar',
			events: {
				click: function() {
					gestorComentarios.validaTextoComentario(idComentario);
				}
			}
		});
		var bCancelar = new Element('input', {
			type: 'button',
			id: 'b_cancelar_' + idComentario,
			value: 'Cancelar',
			events: {
				click: function() {
					gestorComentarios.cancelaTextoComentario(idComentario);
				}
			}
		});

		td.empty();
		td.grab(textArea);
		td.grab(bSalvar);
		td.appendText(' ');
		td.grab(bCancelar);

		$('a_editar_' + idComentario).setStyle('display', 'none');
		$('a_apagar_' + idComentario).setStyle('display', 'none');

	},

	// ----------------------------------------------------------------------------------------------------
	validaTextoComentario: function(idComentario) {
	// So para edicao por parte do admin

		var texto = $('textarea_' + idComentario).value = $('textarea_' + idComentario).value.trim();
		if(texto.length  < 2) utils.mostraErrorArray(["O coment&aacute;rio &eacute; demasiado curto"], 'enviar');
		else {
			$('textarea_' + idComentario).dispose();
			$('td_texto_' + idComentario).innerHTML = texto;
			$('a_editar_' + idComentario).setStyle('display', 'inline');
			new Request.HTML({
				url: 'modulos/comentarios/gravar_texto_comentario.ajax.php',
				onComplete: function() {
					utils.mostraAviso('O coment&aacute;rio foi salvo.');
					gestorComentarios.mostraComentarios(gestorComentarios.idArtigo, gestorComentarios.l, gestorComentarios.mostrarTodos);
				}
			}).post({id: idComentario, texto: texto});
		}

	},

	// ----------------------------------------------------------------------------------------------------
	cancelaTextoComentario: function(idComentario) {

		$('textarea_' + idComentario).dispose();
		$('td_texto_' + idComentario).innerHTML = $('td_texto_' + idComentario).textoOriginal;
		$('a_editar_' + idComentario).setStyle('display', 'inline');

	},

	// ----------------------------------------------------------------------------------------------------
	apagaComentario: function(idComentario, nome, data) {

		var div = $('div_comentario_' + idComentario);

		msgr.show({
			tipo: 'confirm',
			html: 'Apagar o coment&aacute;rio feito por <strong>' + nome + '</strong> em <strong>' + data + '</strong>?<br />',
			onComplete: function(ok) {
				if(!ok) return;
				var ComentarioRequest = new Class({
					Extends: Request.HTML,
					div: div,
					idComentario: idComentario
				});
				var request = new ComentarioRequest({
					url: 'modulos/comentarios/apagar_comentario.ajax.php',
					onSuccess: function(responseTree, responseElements, responseHTML, responseJavaScript) {
						$(this.div).dispose();
						utils.mostraAviso('O coment&aacute;rio foi apagado.');
					}
				});
				request.get({id: request.idComentario});
			}
		});

	},

	// ----------------------------------------------------------------------------------------------------
	toggleFormularioEnviarAmigo: function() {

		if(this.formularioEnviarAmigoAberto) {
			$('div_form_enviar_amigo').setStyle('display', 'none');
			this.formularioEnviarAmigoAberto = false;
		} else {
			$('div_form_enviar_amigo').setStyle('display', 'block');
			this.formularioEnviarAmigoAberto = true;
		}

	},

	// ----------------------------------------------------------------------------------------------------
	validaEnviarAmigo: function(l) {
	// :: TODO ::
	},

	// ----------------------------------------------------------------------------------------------------
	emailCheck: function(emailStr) {

		var emailPat = /^(.+)@(.+)$/;
		var specialChars = "\\(\\)<>@,;:\\\\\\\"\\.\\[\\]";
		var validChars = "\[^\\s" + specialChars + "\]";
		var quotedUser = "(\"[^\"]*\")";
		var ipDomainPat = /^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/;
		var atom = validChars + '+';
		var word = "(" + atom + "|" + quotedUser + ")";
		var userPat = new RegExp("^" + word + "(\\." + word + ")*$");
		var domainPat = new RegExp("^" + atom + "(\\." + atom + ")*$");
		var matchArray = emailStr.match(emailPat);

		if(matchArray == null) return false;
		var user = matchArray[1];
		var domain = matchArray[2];

		if(user.match(userPat) == null) return false;

		var IPArray = domain.match(ipDomainPat);
		if(IPArray != null) {
			// this is an IP address;
			for(var i = 1;i <= 4; i++) {
				if(IPArray[i] > 255) return false;
			}
			return true;
		}

		var domainArray = domain.match(domainPat);
		if(domainArray == null) return false;

		var atomPat = new RegExp(atom, "g");
		var domArr = domain.match(atomPat);
		var len = domArr.length;
		if(domArr[domArr.length-1].length < 2 || domArr[domArr.length-1].length > 3) return false;

		if(len < 2) return false;

		return true;

	},

	// ----------------------------------------------------------------------------------------------------
	contaCaracteres: function(entrada, salida, texto, caracteres) {

		var entradaObj = this.getObject(entrada);
		var salidaObj = this.getObject(salida);
		var longitud = caracteres - entradaObj.value.length;
		if(longitud <=  0) {
			longitud = 0;
			texto = '<span class = "disable"> ' + texto + ' </span>';
			entradaObj.value = entradaObj.value.substr(0, caracteres);
		}
		salidaObj.innerHTML = texto.replace("{CHAR}", longitud);

	},

	// ----------------------------------------------------------------------------------------------------
	getObject: function(obj) {

		var theObj;
		if(document.all) {
			if(typeof obj=="string") {
				return document.all(obj);
			} else {
				return obj.style;
			}
		}
		if($) {
			if(typeof obj=="string") {
				return $(obj);
			} else {
				return obj.style;
			}
		}
		return null;

	}

});
