// ********************************************************************************************************
// Coleccion de funciones para comprobar que una imagen de un campo de tipo file es correcta.
// ********************************************************************************************************
	// Sobresuponemos que va bien
	var imagenFueErronea=false;

	// Carga la imagen en un img oculto que DEBE existir en el formulario
	function compruebaImagen(imgSrc,imgTag)
	{
		testImage = new Image();
		testImage.src = imgSrc;
		imgTag.src=testImage.src;
	}
	// En el img oculto ponemos esta funcion en el evento onError ya que de esta manera sabemos 
	// que la imagen no se cargó.
	function imagenErronea()
	{
		alert("El archivo cargado no es una imágen");
		imagenFueErronea=true;
	}
	// En el img oculto ponemos esta funcion en el evento onLoad ya que de esta manera sabemos 
	// que la imagen se cargó correctamente.
	function imagenCorrecta()
	{
		imagenFueErronea=false;
	}

	// Si Tenemos un botón "ver imagen" podemos regula su funcionamiento desde aquí.
	function verImagen(imagen)
	{
		if(!imagenFueErronea && imagen!="")
		{			
			mostrarImagen(imagen);
		}
		else
		{
			alert("No hay una imagen válida cargada");
		}
	}

	//FUNCION QUE MUESTRA UNA IMAGEN
	function mostrarImagen(imagen)
	{
		
		// Creem una imatge a partir de la ruta i del parámetre
		var img = new Image();
		img.src= imagen;
		
		img.onLoad = (ven_imagen=window.open("","ventana","width=400,height=400,resizable")); //abrir_ventana_imagen(img);
		ven_imagen.document.write("<html><body style=\"margin:0px\"><img id=\"imag\" src=\""+imagen+"\"></body></html>");
		ven_imagen.window.resizeTo(img.width+10,img.height+53);
		
	}
	
	function abrir_ventana_imagen(imagen)
	{		
		var rutaImg = imagen.src.replace("file:///","");		
		alert(imagen.height);
		// Obrim una finestra, li fiquema la imatge al body (sense marges)
		// i li canviem la mida a la finestra a partir de la mida de la imatge.		
		ven_imagen=window.open(rutaImg,"ventana","resizable,width=400,height=400;");		
		//ven_imagen.document.write("<html><body style=\"margin:0px\"><img id=\"imag\" src="+url+"></body></html>");		
		ven_imagen.window.resizeTo(imagen.width+10,imagen.height+53);
		ven_imagen.focus();		
	}

	function recuperarIndiceOpcion(input)
	{
		for(i=0;i<input.length;i++)
		{
			if(input[i].checked)
			{
				return i;
			}
		}
		return -1;
	}

// ********************************************************************************************************
// Coleccion de funciones para forfaits
// ********************************************************************************************************
function generaCodigoForfait(tipo,destino,fecha,grupo,duracion)
{
	var date_fecha = new Date(fecha);
	var str_fecha;
	tipo = rightTrim(leftTrim(tipo.toUpperCase()));
	destino = rightTrim(leftTrim(destino.toUpperCase()));
	grupo = rightTrim(leftTrim(grupo.toUpperCase()));
	//str_fecha = rightTrim(leftTrim(date_fecha.getDate() + "" + date_fecha.getMonth() + "" + date_fecha.getFullYear()));
	str_fecha = rightTrim(leftTrim(fecha.replace("/","")))
	str_fecha = str_fecha.replace("/","")
	return tipo+destino+str_fecha+grupo+duracion;
}


// ********************************************************************************************************
// Coleccion de funciones genéricas
// ********************************************************************************************************
function leftTrim(sString)
{
	while (sString.substring(0,1) == ' ')
	{
		sString = sString.substring(1, sString.length);
	}
	return sString;
}

function rightTrim(sString)
{
	while (sString.substring(sString.length-1, sString.length) == ' ')
	{
		sString = sString.substring(0,sString.length-1);
	}
	return sString;
}


// Función que extrae la parte que no se debe repetir de un forfait cuyo código es TIPO+DESTINO+FECHA+GRUPO+DURACION
// No puede haber dos forfaits con mismo:
//  - tipo
// - destino
// - fecha
// - Grupo
function controlForfait(codigo,codigos,fActual)
{
	var actual, control;
	var res = false;
	
	actual = codigo.substring(0,13);
	fActual = fActual.substring(0,13);
	for(i=0;i<codigos.length;i++)
	{			
		control = codigos[i].substring(0,13);
		
		//alert(actual + "\n" + fActual);
		if(actual==control && actual!=fActual)
		{
			res = true;
		}
	}
	return res;
}

// A partir del array de codigos exsitentes y de la fecha escogida buscamos la letra que sigue
function recuperaSiguienteLetra(fecha,codigos,fActual)
{
	var control,letraAct,numLetraAct;
	// Quitamos la / para tener el mismo formato que en el array de códigos
	fecha = fecha.replace("/","");
	fecha = fecha.replace("/","");
	
	res = "A";
	for(i=0;i<codigos.length;i++)
	{			
		// Cogemos solo la fecha
		control = codigos[i].substring(4,12);
		
		if(control==fecha)
		{
			if(codigos[i]==fActual)
			{
				res = codigos[i].substring(12,13);
				return res;
			}
		
			letraAct = codigos[i].substring(12,13);
			numLetraAct = letraAct.charCodeAt(0);
			numLetraAct = numLetraAct +1;			
			letraAct = String.fromCharCode(numLetraAct);			
			res = letraAct;
		}		
	}
	return res;
}



/*=================================================================================================
FUNCIONES DE FECHAS
=================================================================================================*/
function Fecha(dia,mes,ano)
{
	this.dia = dia;
	this.mes = mes;
	this.ano = ano;
}

function compruebaFecha(fecha)
{
	if(fecha.value!="")
	{					
		fchFecha = new Fecha("","","");
		extraeFecha(fecha.value,fchFecha);
		if(validarFecha(fchFecha))
		{
			fecha.value=formatFecha(fchFecha,"dd/mm/aaaa");
		}				
		else
		{
			fecha.value="";
			alert("El campo " + fecha.nombre.toUpperCase() + " tiene un formato de fecha no válido");
			fecha.focus();
		}
	}
}

function formatFecha(fecha,format)
{
	var res = "";
	
	switch(format)
	{
		case "dd/mm/aaaa":
			// Miramos si el dia es un solo número, momento en que pondremos un 0 delante
			if(fecha.dia.length==1)
			{
				res += "0";
			}
			res += fecha.dia;
			
			res += "/";
			
			// Miramos si el mes es un solo número, momento en que pondremos un 0 delante
			if(fecha.mes.length==1)
			{
				res += "0";
			}
			res += fecha.mes;
			
			res += "/";
			
			res += fecha.ano;
			break;
	}
	
	return res;
}

function extraeFecha(fechaStr,fecha)
{				
	fechaStr;
	// miramos si contiene /
	if(fechaStr.match("/")!=null)
	{
		switch(fechaStr.length)	
		{
			case 5: // Formato d/m/a
				fecha.dia = fechaStr.substr(0,1);
				fecha.mes = fechaStr.substr(2,1);
				
				// Concatenaremos las 2 primeras cifrase del año actual
				var ara = new Date();
				var anoAct = ara.getFullYear();							
				anoAct = (anoAct.toString()).substr(0,3);
				fecha.ano = anoAct + fechaStr.substr(4,1);	
				break;
			case 6: // Formatos d/m/aa, dd/m/a y d/mm/a
				if(fechaStr.charAt(1)=='/' && fechaStr.charAt(4)=='/') // Formato d/mm/a
				{
					fecha.dia = fechaStr.substr(0,1);
					fecha.mes = fechaStr.substr(2,2);
					
					// Concatenaremos las 2 primeras cifrase del año actual
					var ara = new Date();
					var anoAct = ara.getFullYear();							
					anoAct = (anoAct.toString()).substr(0,3);							
					fecha.ano = anoAct + fechaStr.substr(5,1);
				}
				else if(fechaStr.charAt(2)=='/')	// Formato  dd/m/a
				{
					fecha.dia = fechaStr.substr(0,2);
					fecha.mes = fechaStr.substr(3,1);
					
					// Concatenaremos las 2 primeras cifrase del año actual
					var ara = new Date();
					var anoAct = ara.getFullYear();							
					anoAct = (anoAct.toString()).substr(0,3);							
					fecha.ano = anoAct + fechaStr.substr(5,1);
				}
				else	// Formato d/m/aa
				{
					fecha.dia = fechaStr.substr(0,1);
					fecha.mes = fechaStr.substr(2,1);
					
					// Concatenaremos las 2 primeras cifrase del año actual
					var ara = new Date();
					var anoAct = ara.getFullYear();							
					anoAct = (anoAct.toString()).substr(0,2);							
					fecha.ano = anoAct + fechaStr.substr(4,2);								
				}
				break;
			case 7: // formatos dd/m/aa,  d/mm/aa y dd/mm/a
				if(fechaStr.charAt(1)=='/') // Formato d/mm/aa
				{
					fecha.dia = fechaStr.substr(0,1);
					fecha.mes = fechaStr.substr(2,2);
					
					// Concatenaremos las 2 primeras cifrase del año actual
					var ara = new Date();
					var anoAct = ara.getFullYear();							
					anoAct = (anoAct.toString()).substr(0,2);							
					fecha.ano = anoAct + fechaStr.substr(5,2);
				}
				else if(fechaStr.charAt(4)=='/')	// Formato dd/m/aa
				{
					fecha.dia = fechaStr.substr(0,2);
					fecha.mes = fechaStr.substr(3,1);
					
					// Concatenaremos las 2 primeras cifrase del año actual
					var ara = new Date();
					var anoAct = ara.getFullYear();							
					anoAct = (anoAct.toString()).substr(0,2);							
					fecha.ano = anoAct + fechaStr.substr(5,2);
				}
				else	// Formato dd/mm/a
				{
					fecha.dia = fechaStr.substr(0,2);
					fecha.mes = fechaStr.substr(3,2);
					
					// Concatenaremos las 2 primeras cifrase del año actual
					var ara = new Date();
					var anoAct = ara.getFullYear();							
					anoAct = (anoAct.toString()).substr(0,3);							
					fecha.ano = anoAct + fechaStr.substr(6,1);
				}
				break;
			case 8: // Formano d/m/aaaa y dd/mm/aa
				if(fechaStr.charAt(1)=='/') // Formato d/mm/aaaa
				{
					fecha.dia = fechaStr.substr(0,1);
					fecha.mes = fechaStr.substr(2,1);
					fecha.ano = fechaStr.substr(4,4);	
				}
				else	// Formato dd/mm/aa
				{
					fecha.dia = fechaStr.substr(0,2);
					fecha.mes = fechaStr.substr(3,2);
					
					// Concatenaremos las 2 primeras cifrase del año actual
					var ara = new Date();
					var anoAct = ara.getFullYear();							
					anoAct = (anoAct.toString()).substr(0,2);							
					fecha.ano = anoAct + fechaStr.substr(6,2);
				}								
				break;
			case 9: // Formato d/mm/aaaa o dd/m/aaaa
				if(fechaStr.charAt(1)=='/') // Formato d/mm/aaaa
				{
					fecha.dia = fechaStr.substr(0,1);
					fecha.mes = fechaStr.substr(2,2);
					fecha.ano = fechaStr.substr(5,4);	
				}
				else // Formato dd/m/aaaa
				{
					fecha.dia = fechaStr.substr(0,2);
					fecha.mes = fechaStr.substr(3,1);
					fecha.ano = fechaStr.substr(5,4);	
				}
				break;
			case 10: // Formato dd/mm/aaaa
				fecha.dia = fechaStr.substr(0,2);
				fecha.mes = fechaStr.substr(3,2);
				fecha.ano = fechaStr.substr(6,4);					
				break;
			default:
				fecha.dia = "";
				fecha.mes = "";
				fecha.ano = "";
				break;
		}					
	}
	else // Entendemos que es sin nada
	{
		switch(fechaStr.length)	
		{
			case 3:	// formato dma
				fecha.dia = fechaStr.substr(0,1);
				fecha.mes = fechaStr.substr(1,1);					
				
				// Concatenaremos las 2 primeras cifrase del año actual
				var ara = new Date();
				var anoAct = ara.getFullYear();							
				anoAct = (anoAct.toString()).substr(0,3);							
				fecha.ano = anoAct + fechaStr.substr(2,1);
				break;
			case 6:	// formato ddmmaa
				fecha.dia = fechaStr.substr(0,2);
				fecha.mes = fechaStr.substr(2,2);					
				
				
				// Concatenaremos las 2 primeras cifrase del año actual
				var ara = new Date();
				var anoAct = ara.getFullYear();							
				anoAct = (anoAct.toString()).substr(0,2);
				fecha.ano = anoAct + fechaStr.substr(4,2);
				break;
			case 8:	// formato ddmmaaaa
				fecha.dia = fechaStr.substr(0,2);
				fecha.mes = fechaStr.substr(2,2);					
				fecha.ano = fechaStr.substr(4,4);
				break;
			default:							
				fecha.dia = "";
				fecha.mes = "";
				fecha.ano = "";
				break;
		}
	}				
}

function validarFecha(fecha)
{
	res = true;
	
	dia = fecha.dia;
	mes = fecha.mes;
	ano = fecha.ano;

	// Valido el año
	if (isNaN(ano) || ano.length<4 || parseFloat(ano)<1900){						
		res = false
	}
	// Valido el Mes
	if (isNaN(mes) || parseFloat(mes)<1 || parseFloat(mes)>12){					
		res = false
	}
	// Valido el Dia
	if (isNaN(dia) || parseInt(dia)<1 || parseInt(dia)>31){
		res = false
	}
	if (mes==4 || mes==6 || mes==9 || mes==11 || mes==2) {
		var dias = 30;
		if (mes==2) {						
			if(((ano % 4 == 0) && (ano % 100 != 0)) || (ano % 400 == 0)) {
				dias = 29;
			}
			else {
				dias = 28;
			}						
		}								
		
		if(dia > dias) {						
			res = false;
		}
	}	
	
	return res;
}



function canviaVis(id)
{
	
	itm = extrauControl(id);
	

	if (!itm) 
	{
	  // do nothing
	}
	else if (itm.style) 
	{
		if (itm.style.display == "none") 
		{
			itm.style.display = ""; 
		}
		else 
		{ 
			itm.style.display = "none"; 
		}
	}
	else 
	{ 
		itm.visibility = "show"; 
	}
}

function posaVis(id,vis)
{
	itm = extrauControl(id);

	if (!itm) 
	{
	  // do nothing
	}
	else if (itm.style) 
	{
		itm.style.display = vis; 
	}
	else 
	{ 
		itm.visibility = "show"; 
	}
}
function extrauControl(id)
{
	var itm = null;
	if (document.getElementById) 
	{
		itm = document.getElementById(id);
	}
	else if (document.all)
	{
		itm = document.all[id];
	}
	else if (document.layers)
	{
		itm = document.layers[id];
	}

	return itm;
}

function canviaDesplegable(id)
{
	img = extrauControl("img_" + id);
	
	if(img.src.match("/mas.gif")!=null)
	{
		img.src="/imagenes/iconos/menos.gif";
	}
	else
	{
		img.src="/imagenes/iconos/mas.gif";
	}
	
	canviaVis(id);
}


function cuentaLineas(txa,cont)
{
	itTxa = extrauControl(txa);
	itCont = extrauControl(cont);
	
	campo = itTxa.value;
	
	numLin = 1;
	numChars=0;
	for(i=0;i<campo.length;i++)
	{
		// Primero miramos is es un salto de linia
		if(campo.charCodeAt(i)==10 || numChars==40)
		{
			// sumamos una linia
			numLin++;
			// Reseteamos los caracteres
			numChars=0;
		}
		else
		{
			numChars++;
		}
	}
	
	itCont.value=numLin;
}