// JavaScript Document
 
/* ------------------------------------------------------------------
   editor.js - Funciones relacionado con los formularios a la hora de
			   editarlo.	
   ------------------------------------------------------------------

   Version: 1.0        Fecha: 22 de Abril de 2005
   
   Autor: Gonzalo Déniz Acosta
   
   Descripción:
        Contiene funciones para poder tener un mayor control a la hora
		de verificar lo que se escribe en los formularios, así como para
		darle formatos como negrita, itálica, o ponerlo en minúscula...

	Descripción de funciones:
		in_array(aguja,pajar)					- Busca un elemento en un vector
		array_search(aguja, pajar				- Devuelve la posición de un elemento en un vector
		NoMayuscula(str, PorcentajeMayuscula)	- Pasa un texto a minúsculas
		titulo(cuadro)							- añade [T]
		nuevo(cuadro)							- añade [N]
		negrita()								- añade [b][/b]
		cursiva()								- añade [i][/i]
		cita()									- añade [quote][/quote]
		enlace()								- añade [url=http://][/url]
		email()									- añade [email=][/email]
		LinkImagen(imagen,enlace, sentido)		- inserta el código para mostrar un link de una imagen
		imagen(imagen, sentido)					- inserta el código para mostrar una imagen
		derecha()								- añade [right][/right]
		color()									- Abre el panel de colores
		poncolor(color)							- inserta el color en el formulario
		referencia()							- abre la ayuda
		ficheros(now, sentido)					- abre la ventana de Upload
		SubirFicheros(now, sentido)				- abre la ventana de Upload
		ficheros_fiesta(now, sentido)			- abre la ventana de Upload para fiestas
		muestraCalendario(raiz,formulario_destino,campo_destino,mes_destino,ano_destino) - Muestra un calendario
		ValidarEditorNoticias()					- Comprueba que todos los campos requeridos del formulario de noticias están completos
		VistaPreviaNoticias(titulo,intro,Enlace,cuerpo,FechaHoy) - Abre una ventana con la vista previa de la noticia
		ValidarEditorFiesta()					- Comprueba que todos los campos requeridos del formulario de fiestas están completos
		VistaPreviaFiesta(titulo,intro,fecha,lugar,precio,organiza,cuerpo) - Abre una ventana con la vista previa de la fiesta
		ConservaTextarea(CampoOculto,ValorTextarea) - Convierte los saltos de líneas en <br>
		validarFormLibro()						- Verifica los datos del libro de visita.
		validarFormLinks()						- Verifica los datos de un link.
		ValidarCrearAlbum()						- No tengo ni idea.

   ------------------------------------------------------------------
*/


 	// ------------------------------------------------------------------
	//
	//	in_array(aguja,pajar)
	//
	//  Busca un elemento (aguja) en un vector (pajar) devolviendo 1 si lo encuentra
	//	y 0 si no lo encuentra
	//
	//  Parámetro:
	//      aguja	-	Elemento a buscar.
	//      pajar	-	Vector donde se va a buscar el elemento.
	//
	//	Valor devuelto:
	//		1 - si el elemento es encontrado.
	//		0 - si el elemento no es encontrado.
	//
	// ------------------------------------------------------------------
	function in_array(aguja,pajar)
	{
		var i=0;
		for(i=0;i<pajar.length;i++)
		{
			if(aguja==pajar[i])
				return 1;
		}
		return 0;
	}


	// ------------------------------------------------------------------
	//
	//	array_search(aguja, pajar)
	//
	//  Busca un elemento (aguja) en un vector (pajar) devolviendo la posición
	//	donde lo encuentra.
	//
	//  Parámetro:
	//      aguja	-	Elemento a buscar.
	//      pajar	-	Vector donde se va a buscar el elemento.
	//
	//	Valor devuelto:
	//		Posición del elemento si el elemento es encontrado.
	//		-1  si el elemento no es encontrado.
	//
	// ------------------------------------------------------------------
	function array_search(aguja, pajar)
	{
		var i=-1;
		for(i=0;i<pajar.length;i++)
		{
			if(aguja==pajar[i])
				return i;
		}
		return -1;

	}




	// ------------------------------------------------------------------
	//
	// 	NoMayuscula(str, PorcentajeMayuscula)
	//
	//  Formatea a minúsculas las letras en mayúsculas menos el comienzo
	//  de cada frase que se deja en mayúscula. Esta acción se produce si
	//	el número de letras en mayúscula llega al límite impuesto por el
	//  parámetro PorcentajeMayuscula
	//
	//  Parámetro:
	//      str					-		Texto que se quiere formatear a minúsculas en caso
	//									que sea necesario
	//      PorcentajeMayuscula	-		Límite de letras en mayúsculas necesarias que tenga
	//									str para que comience el formateado.
	//									Ej.: 100 significa 100%, es decir, q hace falta que
	//									todas las letras sean mayúsculas para realizar el
	//									formateo.
	//
	//	Valor devuelto:
	//		Texto formateado a minúscula excepto las letras primeras de cada frase.
	//
	//	Requisitos:
	//		Hace falta las funciones:
	//			in_array(aguja,pajar)		- Devuelve 1 si encuentra un elemento en un vector.
	//			array_search(aguja, pajar)	- Devuelve la posición donde está un elemento en un vector.
	//
	// ------------------------------------------------------------------
	function NoMayuscula(str, PorcentajeMayuscula)
	{
		var may=new Array('','A','B','C','D','E','F','G','H','I','J','K','L','M','N','Ñ','O','P','Q','R','S','T','U','V','W','X','Y','Z','Á','É','Í','Ó','Ú');

		var min= new Array('','a','b','c','d','e','f','g','h','i','j','k','l','m','n','ñ','o','p','q','r','s','t','u','v','w','x','y','z','á','é','í','ó','ú');

		var fin_frase=new Array('','?','.',';','!',':');

		// Comprueba si todas las letras están en mayusculas

		var num_mayuscula=0;
		var num_letras=0;
		var i=0;
		var nuevo_string="";
		for(i=0;i<str.length;i++)
		{
			if(in_array(str[i],may))
			{	num_mayuscula++;
				num_letras++;
			}

			if(in_array(str[i],min))
				num_letras++;
		}


		if(num_letras==0)
				return str;
			else
				var porciento_calculado=(num_mayuscula/num_letras)*100;




		// En caso que todo sea mayúscula, lo formatea poniéndolo en minúscula excepto
		// las primeras letras de la frase.
		if(porciento_calculado>=PorcentajeMayuscula)
		{
			var primera_letra=true;		// Si es verdadero indica q es la primera letra
										// de una frase y por lo tanto no se puede
										// pasar a minúscula.

			// Recorremos todo el texto.
			for(i=0;i<str.length;i++)
			{

				// Si es una letra mayúscula comprueba que sea la primera letra de una frase
				// y si es así lo sustituye. En caso que no sea mayúscula, comprueba
				// que sea un caracter de fin de frase y si es así, vuelve a poner la
				// variable $primera_letra a verdadero.
				var key=array_search(str[i],may);

				if(key>0)
				{
					if(primera_letra==true)
					{	nuevo_string=nuevo_string+str[i];
						primera_letra=false;
					}
					else
					{ 	nuevo_string=nuevo_string+min[key];
					}
				}else
				{
					if(in_array(str[i],fin_frase))
					{	primera_letra=true;

					}
					nuevo_string=nuevo_string+str[i];
				}

			}
			return nuevo_string;
		}else
			return str;

	}

	function titulo(cuadro)
	{	(document.getElementById(cuadro)).value += "[T]";  
	}

	function nuevo(cuadro) 
	{	(document.getElementById(cuadro)).value += "[N]";
	}

	function negrita() {

		FormEditor.cuerpo.value += "[b][/b]";

	}

	function cursiva() {

		FormEditor.cuerpo.value += "[i][/i]";

	} 

	function cita() {

		FormEditor.cuerpo.value += "[quote][/quote]";

	}

	function enlace() {

		FormEditor.cuerpo.value += "[url=http://][/url]";

	}

	function email() {

		FormEditor.cuerpo.value += "[email=][/email]";

	}
	/* imagen = Nombre del dibujo (normalmente uno pequeño */
	/* enlace = Dirección de la imagen más grande */
	/* sentido = posición de la foto. Solo pueden ser dos valores: right o left */
	function LinkImagen(imagen,enlace, sentido)
	{	FormEditor.cuerpo.value+= "[url=" + enlace +"][img "+sentido+"]" + imagen +"[/img][/url]";
		ventana.close();
	    FormEditor.cuerpo.focus();
	}

	function imagen(imagen, sentido) {

		FormEditor.cuerpo.value += "[img "+sentido+"]"+imagen+"[/img]";
		ventana.close();
	    FormEditor.cuerpo.focus();
	}

	
	function derecha()
	{	FormEditor.cuerpo.value += "[right][/right]";
	}
	

	function color() {

		ventana=window.open("./php/colores.php", "Colores", "toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=no,resizable=no,copyhistory=no,width=220,height=170");

	}

	function poncolor(color) {

		FormEditor.cuerpo.value += "[color="+color+"][/color]";
		ventana.close();

	}
	

	function ponfichero(fichero) {

		FormEditor.FotoPortada.value = fichero;

	}

	function referencia() {

		ventana=window.open("./php/AyudaEditor.html", "ReferenciaUBB", "toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=yes,resizable=no,copyhistory=no,width=600,height=450");

	}
	function ficheros(now, sentido) {

		ventana=window.open("./php/VentanaUpload.php?now="+now+"&sentido="+sentido, "Imagenes_y_Ficheros", "toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=yes,resizable=no,copyhistory=no,width=570,height=400,left=300,top=200");

	}
	function ficheros_fiesta(now, sentido) {

		ventana=window.open("./php/VentanaUpload_fiesta.php?now="+now+"&sentido="+sentido, "Imagenes_y_Ficheros", "toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=yes,resizable=no,copyhistory=no,width=570,height=400,left=300,top=200");

	}
	

//Funcion que intenta subir ficheros de la forma más general posible
	function SubirFicheros(now, sentido) 
	{

		ventana=window.open("./php/VentanaUpload.php?now="+now+"&sentido="+sentido, "Imagenes_y_Ficheros", "toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=yes,resizable=no,copyhistory=no,width=570,height=400,left=300,top=200");

	}

	
	

/*=====================================================
	muestraCalendario(raiz,formulario_destino,campo_destino,mes_destino,ano_destino)
  =====================================================	*/
  	
var ventanaCalendario=false

function muestraCalendario(raiz,formulario_destino,campo_destino,mes_destino,ano_destino){
	//funcion para abrir una ventana con un calendario.
	//Se deben indicar los datos del formulario y campos que se desean editar con el calendario, es decir, los campos donde va la fecha.
	if (typeof ventanaCalendario.document == "object") {
		ventanaCalendario.close()
	}
	ventanaCalendario = window.open("calendario/index.php?formulario=" + formulario_destino + "&nomcampo=" + campo_destino,"calendario","width=300,height=300,left=100,top=100,scrollbars=no,menubars=no,statusbar=NO,status=NO,resizable=YES,location=NO")
}


/*=====================================================
	ValidarEditorNoticias()
  =====================================================	*/

function ValidarEditorNoticias()
{	
		var Aviso="";
		
		if(FormEditor.titulo.value=="")
			Aviso+="Título no puede estar vacio.\n"
		if(FormEditor.intro.value=="")
			Aviso+="Introducción no puede estar vacio. \n";
		if(FormEditor.link.value=="" && FormEditor.cuerpo.value=="")
		{	Aviso+="No pueden estar el link y el cuerpo vacío al mismo tiempo.\n"
			Aviso+="Rellene uno de los dos.\n"	
		}
		if(Aviso!="")
		{	alert(Aviso);
			return false;
		}
		else
			return true;
}
	

/*=====================================================
	VistaPreviaNoticias(titulo,intro,Enlace,cuerpo)
  =====================================================	
 Abre una ventana nueva al enlace en caso que no haya cuerpo, o bien, el titular,
 la introduccion, el cuerpo... de la noticia.*/
 
function VistaPreviaNoticias(titulo,intro,Enlace,cuerpo,FechaHoy)
{		if(Enlace!="" && cuerpo=="")		
			ventana=window.open("http://"+Enlace,"VistaPrevia","location=yes,width=800,height=600 ,left=100,top=100,scrollbars=yes,menubars=yes,statusbar=yes,status=yes,resizable=YES");				
		else
			ventana=window.open("./php/VistaPreviaNoticia.php?titulo="+titulo+"&intro="+intro+"&link="+Enlace+"&cuerpo="+cuerpo+"&now="+FechaHoy, "VistaPrevia", "width=516,height=300,left=100,top=100,scrollbars=yes,menubars=no,statusbar=NO,status=NO,resizable=YES,location=NO");		
		return false;
}

/*=====================================================
	ConservaTextarea(CampoOculto,ValorTextarea)
  =====================================================	

 Permite visualizar correctamente un textarea en html, conservando los saltos de lineas.
   CampoOculto -> Es un campo en el formulario que tendrá el código convertido (\n a <br>)
   ValorTextarea-> Es   textarea que queramos transformar. */
   
function ConservaTextarea(CampoOculto,ValorTextarea)
{
        intro = new RegExp (String.fromCharCode(10),"g")
        intro2 = new RegExp (String.fromCharCode(13),"g")
        texto = ValorTextarea.replace(intro,"[br]")
        texto = texto.replace (intro2,"")
        CampoOculto.value = texto;
	
}

/*=====================================================
	ValidarEditorFiesta()
  =====================================================	*/

function ValidarEditorFiesta()
{	
		var Aviso="";
		
		if(FormEditor.titulo.value=="")
			Aviso+="Título no puede estar vacio.\n"
		if(FormEditor.intro.value=="")
			Aviso+="Introducción no puede estar vacio. \n";
		if(FormEditor.Fecha.value=="")
			Aviso+="Fecha no puede estar vacio. \n";			
		if(FormEditor.Lugar.value=="")
			Aviso+="Lugar no puede estar vacio. \n";

		if(Aviso!="")
		{	alert(Aviso);
			return false;
		}
		else
			return true;
}
	

/*=====================================================
	VistaPreviaFiesta(titulo,fecha,intro,lugar,precio,organiza,cuerpo)
  =====================================================	
 Abre una ventana nueva al enlace en caso que no haya cuerpo, o bien, el titular,
 la introduccion, el cuerpo... de la noticia.*/
 
function VistaPreviaFiesta(titulo,intro,fecha,lugar,precio,organiza,cuerpo)
{		ventana=window.open("./php/VistaPreviaFiesta.php?titulo="+titulo+"&intro="+intro+"&fecha="+fecha+"&cuerpo="+cuerpo+"&lugar="+lugar+"&precio="+precio+"&Organiza="+organiza, "VistaPrevia", "width=516,height=300,left=100,top=100,scrollbars=yes,menubars=no,statusbar=NO,status=NO,resizable=YES,location=NO");		
		return false;
}


/*=====================================================
	validarFormLibro()
  =====================================================	
 Comprueba la correctitud de los datos pasados durante
 la firma del Libro de Visitas.*/

function validarFormLibro(){
	if (formLibro.nomFirma.value==""){
		alert("Debe especificar un nombre en su firma.");
		return false;}
	else{
		if (formLibro.firma.value==""){
			alert("Debe incorporar un texto en su firma.");
			return false;}
		else{
			if (formLibro.correoFirma.value!=""){
				if (formLibro.correoFirma.value.indexOf("@")==(-1)){
					alert("Entre una direccion de correo válida.\nFormato: nombre@servidor.dom");
					return false;}
				else{
					if (formLibro.urlFirma.value!=""){
						if (formLibro.urlFirma.value.indexOf("http://")==(-1)){
							formLibro.urlFirma.value = "http://"+formLibro.urlFirma.value;
							return true;}}
					else
						return true;}}}}}

/*=====================================================
	validarFormLinks()
  =====================================================
   Comprueba la correctitud de los datos pasados durante
 el envio de un nuevo link.*/

 function validarFormLinks() 
 {
	 if (formLinks.direccionURL.value=="")	
	 {	 alert("Debe especificar una dirección de destino.");
		 return false;}
	 else 
	 {	 if (formLinks.direccionURL.value.indexOf("http://")==(-1))
			 formLinks.direccionURL.value = "http://"+formLinks.direccionURL.value;
		 if (formLinks.descripcionURL.value=="")
		 {	 alert("Debe especificar una descripción del sitio.");
			 return false;
		 }
		 else
		 {	return true; 
		 }
	}
}

/*
=====================================================
	ValidarCrearAlbum()
  =====================================================	
  */

function ValidarCrearAlbum()
{	
		var Aviso="";
		
		if(FormEditor.titulo.value=="")
			Aviso+="Título no puede estar vacio."

		if(Aviso!="")
		{	alert(Aviso);
			return false;
		}
		else
			return true;
}
