//////////////////////////////////////////////////////////////////////////////////////////
// GESTIÓN DE LA AYUDA
//////////////////////////////////////////////////////////////////////////////////////////
function clickHandler(srcElement,targetId) {
  var targetId, srcElement, targetElement;
  //srcElement = window.event.srcElement;

  if (targetId.style.display == "") 
  {
  	targetId.style.display = "none";
  } else {
    targetId.style.display = "";
  }
  event.cancelBubble = true;
	event.returnValue = false;
}

//////////////////////////////////////////////////////////////////////////////////////////
// VALIDACIONES DE LOS CAMPOS DE EDICIÓN
//////////////////////////////////////////////////////////////////////////////////////////
function quina_lletra (Dni){
	var lletra=new Array("T","R","W","A","G","M","Y","F","P","D","X","B","N","J","Z","S","Q","V","H","L","C","K","E");
	if (isNaN(Dni)) return false;
                else  return (lletra[Dni%23]); 
}

function CalculaNIF(nif) {
	var dni;
	var lletra;
	var lletra_correcta;
	nif=nif.toUpperCase( );
	if (isNaN(nif)) {
		if ((nif.length>2)&&(nif.length<10)) {	
			dni=nif.substring(0,nif.length-1); 
			lletra=nif.substring(nif.length-1,nif.length);
			if (isNaN(dni)) {
				alert ("El NIF no tiene un formato correcto: '99999999Q'. Si se escribe solo el DNI se calculará automáticament el NIF.");
			} else {	
				lletra_correcta=quina_lletra(dni);
				if (lletra_correcta==false){
					alert ("El NIF no tiene un formato correcto: ( 99999999Q ). Si se escribe solo el DNI se calculará automáticament el NIF.");
				}
				if (lletra!=lletra_correcta) {
					alert ("Se corregirá la letra del NIF. Le corresponde la ".concat(lletra_correcta)) ;
					return dni.concat(lletra_correcta);
				}
			}
		}
        } else  {
        		if(nif.length<10){
        			//return nif.concat(quina_lletra(nif)); 
        			return quina_lletra(nif);
        		}
        }
	return "";
}

function validaDecimal(decimal){	
	
	if(decimal.indexOf(',')>=0) return false;
	separador=decimal.indexOf('.');
	
	if (separador<1) {partEntera=decimal;partDecimal=0;
	}else{
		partEntera=decimal.substring(0,separador);
		partDecimal=decimal.substring(separador+1);
	}
	
	if (!(validaNumero(partDecimal)) || (partDecimal.length>2) ) return false;
	if (!(validaNumero(partEntera)) || (partEntera.length>3) ) return false;
	return true;
}
function validaNumero(num){
	
	for(i=0;i<num.length;i++){
		if (num.charAt(i)<'0' || num.charAt(i)>'9')return false;
	}
	return true;
}

function validaLetras(num){
	
	for(i=0;i<num.length;i++){
		if (num.charAt(i)<'a' || num.charAt(i)>'Z')return false;
	}
	return true;
}

function CampoObligatorio(valor){
  if (valor.length>0){
  } else{
  	alert ("Es necesario informar el campo");
  }
}

function ValidarDatos(){
	var coll = document.all;
	if (coll!=null) {
	    for (i=0; i<coll.length; i++) 
	        alert(coll.item(i).tagName);
	}
}

function showElements(theForm) {   
	var value;
	var name;
	var j;
	value=theForm.elements[0].value;
	for (i = 0; i < theForm.length; i++) {
		if (name!=theForm.elements[i].name){
			name=theForm.elements[i].name;
			value=theForm.elements[i].value;
			j=1;
		}else{
			if (j==5){
				if ((theForm.elements[i].value=="not null")&&(value.length==0)){
					alert ("Existen campos obligatorios que no estan informados");
					event.cancelBubble = true;
					event.returnValue = false;
					break;}
			}else{j++;}
		}	
	}				
}


//--------------------------------------------------------------------------------
//Funcions "Mascara" per a entrar dades en format de
//data i hora, i funcions per a validar aquestes dades.
//També una funció per entrar números.
// (Autor: Carlos Martínez Feliu).
//--------------------------------------------------------------------------------

//--------------------------------------------------
//	Mascara per escriure dates
//	Només permet dígits i '/'.
//  Invocar desde 'onKeyPress'.
//--------------------------------------------------
function MascaraData(oText){
var iNumero;
var sData = oText.value.split("/"); //0:Dia  1:Mes  2:Any					

	 //Tractament de la longitud
  if(oText.value.length>=10) window.event.keyCode=0;
  else{
	//Caràcters no permesos
	if((window.event.keyCode<47)||(window.event.keyCode>57))
		window.event.keyCode=0;
	else{
		//Barra
		if(window.event.keyCode==47){
			if((oText.value.length!=1)&&(oText.value.length!=2)&&
			   (oText.value.length!=4)&&(oText.value.length!=5))
					window.event.keyCode=0;
			else{
				//Tractament d'un sol dígit.  Ex.: '3/' -> '03/'
				if(oText.value.length==1) 
					if(sData[0]==0) window.event.keyCode=0;
					else oText.value="0"+oText.value;
				else if(oText.value.length==4)
					if(sData[1]==0) window.event.keyCode=0;
					else oText.value=sData[0]+"/0"+sData[1];
			}
		}
		//Número
		else{ 
			//Barra automàtica
			if((oText.value.length==2)||(oText.value.length==5))
					oText.value=oText.value + "/";
			//Tractament de números
			iNumero=window.event.keyCode-48;
			switch (oText.value.length){
				case 0:  //Posició: 0 (Primer dígit de dia)
					if(iNumero>3) oText.value="0"+oText.value;		  //Ex.: '5' -> '05'
					break;
				case 1:  //Posició: 1 (Segon dígit de dia)
					if((sData[0]==0)&&(iNumero==0)) 
						window.event.keyCode=0;
					else if((sData[0]==3)&&(iNumero>1))
						oText.value="0"+sData[0]+"/0";    //Ex.: '35'->'03/05'
					break;
				case 3:  //Posició: 3 (Primer dígit de mes)
					if(iNumero>1){ 
						//Restricció mesos per nº de dies (*)
						if((sData[0]==31)&&((iNumero==2)||(iNumero==4)||
						   (iNumero==6)||(iNumero==9)))
								window.event.keyCode=0; 
						//Restricció mesos per nº de dies (*) 
						else if((sData[0]==30)&&(iNumero==2))
								window.event.keyCode=0;
						else oText.value=sData[0]+"/0";   //Ex.:'14/5'->'14/05'
					}
					break;
				case 4:  //Posició: 4 (Segon dígit de mes)
					if((sData[1]==0)&&(iNumero==0)) 
						window.event.keyCode=0;
					else if((sData[1]==1)&&(iNumero>2))
						window.event.keyCode=0; 
					//Restricció mesos per nº de dies (*)
					else{
						if((sData[0]==31)&&(sData[1]==0)&&((iNumero==2)||
						   (iNumero==4)||(iNumero==6)||(iNumero==9)))
								window.event.keyCode=0;
						else if((sData[0]==31)&&(sData[1]==1)&&(iNumero==1))
								window.event.keyCode=0;
						else if((sData[0]==30)&&(sData[1]==0)&&(iNumero==2))
								window.event.keyCode=0;
					}
					break;
				case 6:  //Posició:6 (Primer dígit d'any)
					if((iNumero==0)||((iNumero>2)&&(iNumero<6)))  //20**
						oText.value=sData[0]+"/"+sData[1]+"/20";
					else if(iNumero>=6)						      //19**
						oText.value=sData[0]+"/"+sData[1]+"/19";
					break;
				case 7:  //Posició: 7 (Segon dígit d'any)
					if((sData[2]==1)&&(iNumero<9)) window.event.keyCode=0;
					break;
				//Restricció d'anys de traspàs (*)
				case 9:  //Posició: 9 (Quart dígit d'any)
					if((sData[0]==29)&&(sData[1]==2)&&
				       (!Traspas(sData[2]+iNumero))) window.event.keyCode=0;
					break;
				default:
			}
		}
		
	}
  }
}

//--------------------------------------------------
//	Funció que canvia el color del texte depenent
//	de si té o no un format de data correcte.
//  Invocar desde 'onBlur'.
//--------------------------------------------------
function SortirData(oText,ColorCorrecte,ColorErroni){

	if(Validar_Data(oText.value)){ oText.style.color=ColorCorrecte; return(true); }
	else{ oText.style.color=ColorErroni; return(false); }
}


//--------------------------------------------------
//	Mascara per comprovar que una data és correcte.
//	Només permet dígits i '/'.
//--------------------------------------------------
function Validar_Data(sData){
var bTraspas;

	sData = sData.split("/"); //0:Dia  1:Mes  2:Any
	//Comprovació del nombre de camps
	if(sData.length!=3) return(false); 
	else{ 
		//Comprovació de la longitud dels camps
		if((sData[0].length!=2)||(sData[1].length!=2)||(sData[2].length!=4)) 
						return(false);
		//Tractament d'any
		if((sData[2]<1900)||(sData[2]>2100)) return(false); 
		else{ 
			//Tractament de mes(amb 31 dies)
			if((sData[1]==1)||(sData[1]==3)||(sData[1]==5)||(sData[1]==7)||
			   (sData[1]==8)||(sData[1]==10)||(sData[1]==12)){
					if((sData[0]<1)||(sData[0]> 31)) return(false);
			} 
			//Tractament de mes (amb 30	dies) 
			else if((sData[1]==4)||(sData[1]==6)||(sData[1]==9)||(sData[1]==11)){
					if((sData[0]<1)||(sData[0]>30)) return(false);
			}
			//Tractament de Febrer (28 o 29 dies)
			else if(sData[1]==2){
					bTraspas=Traspas(sData[2]);
					if((bTraspas)&&((sData[0]<1)||(sData[0]>29))) 
							return(false);
					else if((!bTraspas)&&((sData[0]<1)||(sData[0]>28))) 
							return(false);
			}
		}
	}
	return(true);
}


//--------------------------------------------------
//	Funció que donada una data en format incorrecte
//	la transforma correctament.
//--------------------------------------------------
function Transformar_Data(sData){
var iDia;
var iMes;
var iAny;
	
	sData = sData.split("/"); //0:Dia  1:Mes  2:Any
	//Comprovació del nombre de camps
	if(sData.length!=3) return "";
	else{ 
		//Tractament de dia
		if(sData[0].length==1) iDia="0" + sData[0];
		else iDia=sData[0];
		
		//Tractament de mes
		if(sData[1].length==1) iMes="0" + sData[1];
		else iMes=sData[1];
		
		//Tractament d'any
		if(sData[2].length==2){
			if(sData[2][0]>=6) iAny="19" + sData[2];
			else iAny="20" + sData[2];
		}
		else iAny=sData[2];
	}
	return(iDia + "/" + iMes + "/" + iAny);
}


//--------------------------------------------------
//	Mascara per saber si un any és de traspàs.
//	Només permet un enter de fins a 4 dígits.
//--------------------------------------------------
function Traspas(iAny){
	if((iAny % 4)==0){
			if((iAny % 100)==0){
					if((iAny % 400)==0) return(true);
					else return(false);
			}
			else return(true);
    }
	else return(false);
}


//--------------------------------------------------
//  Funció que retorna la data actual
//  Invocar desde 'onFocusIn'
//--------------------------------------------------
function FechaActual(oText)
{
  var d,s;
   
  if (oText.value.length==0)
  {
    d=new Date();
    s = d.getDate() +  "/" +  (d.getMonth()+1) +  "/" +  d.getYear();  
    oText.value=Transformar_Data(s);
  }
}


//--------------------------------------------------
//	Mascara per escriure números [decimals] [negatius].
//	Només permet dígits, -..
//  Invocar desde 'onKeyPress'.
//--------------------------------------------------
function Mascara_Numero(oText,intMaxDecimals,blnNegatiu){
var intNumero = window.event.keyCode;
var strNumero = oText.value;
var intPosicioDecimal;

	//Caràcters no permesos
	if((intNumero<44)||(intNumero>57)) window.event.returnValue=0;
	else{
		//Comprovem on està el separador decimal
		intPosicioDecimal=strNumero.search(/[,]|[.]/);		
		//Signe menys (-)
		if(intNumero==45){ 
				if((!(blnNegatiu))||(strNumero.search(/-/)>=0))
						window.event.returnValue=0;
		} 
		//Separador decimal (,.) 
		else if((intNumero==44)||(intNumero==46)){ 
				if(intMaxDecimals>0){
					if(intPosicioDecimal>=0) window.event.returnValue=0;
				}
				else window.event.returnValue=0;
		}
		//Número
		else{ 
				if((intPosicioDecimal>=0)&&(intMaxDecimals>0)){
						//Màxim número de decimals cobert
						if(strNumero.length-intPosicioDecimal-1-intMaxDecimals>=0)	
							window.event.returnValue=0;
				}
		}
	}
}


//--------------------------------------------------
//	Funcions per ocultar les seccions que no es
//	volen imprimir
//--------------------------------------------------
function window.onbeforeprint()
{
  var oItm; 
  for(i = 0; i < document.all.length; i++)
  {
    oItm = document.all(i);
	  if ("clsNoImprimir" == oItm.className) oItm.className = "clsOcultarAlImprimir";
  }
}

function window.onafterprint()
{
  var oItm; 
  for(i = 0; i < document.all.length; i++)
  {
    oItm = document.all(i);
    if ("clsOcultarAlImprimir" == oItm.className) oItm.className = "clsNoImprimir";
  }
}

//--------------------------------------------------
//	Función para llenar el contenido de una lista
//	asociada a otra lista
//--------------------------------------------------
function LlenarListaAsociada(oSelect,sLista,sElemento)
{
  var i,oElemXML,oListas,oElemento,oListaElementos,oOption,sXPath,sCodElem;

	//Primero eliminamos todos los elementos
  while (oSelect.options.length>0)
    oSelect.options.remove(0);

  //Buscamos la sublista asociada al elemento de la lista indicada
  sCodElem="";
  for(i=0;i<sElemento.length;i++)
  {
    if ('-'==sElemento.substr(i,1)) break;
    else sCodElem=sCodElem.concat(sElemento.substr(i,1));
  }
  oElemXML=document.getElementById("oListasXml");
  if (oElemXML!=null)
  {
	  oListas=oElemXML.XMLDocument;
	  if (oListas!=null)
	  {
		  sXPath="listas/familia[@id='" + sLista + "']/elemento[@id='" + sCodElem + "']";
		  oElemento=oListas.selectSingleNode(sXPath);
	    if (oElemento!=null)
	    {
				if (oElemento.getAttribute("subfamilia")!=null)
	      {
					//Añadimos los elementos
					sXPath="listas/familia[@id='" + oElemento.getAttribute("subfamilia") + "']/elemento";
	        oListaElementos=oListas.selectNodes(sXPath);
	        for (i=0;i<oListaElementos.length;i++)
	        {
	          oElemento=oListaElementos.item(i);
						oOption = document.createElement("OPTION");
						oOption.text=oElemento.getAttribute("descripcion");
					  oOption.value=oElemento.getAttribute("id") & "-" & oElemento.getAttribute("descripcion");
					  oSelect.add(oOption);
				  }
	      }
	    }
    }
  }
}

function ActualizarListas()
{
	//Actualizamos todas las combos y los options
  aElementos=document.getElementsByTagName("SELECT");
  for(i=0;i<aElementos.length;i++)
  {
    if (aElementos(i).options.length>0) aElementos(i).value=aElementos(i).options.item(0).value;
    aElementos(i).fireEvent("onChange");
  }
  aElementos=document.getElementsByTagName("INPUT");
  for(i=0;i<aElementos.length;i++)
  {
	  if (aElementos(i).type=="radio")
    {
      aInpRad=document.getElementsByName(aElementos(i).name);
      if (aInpRad.length>0) aInpRad(0).checked=true;
      if (aElementos(i).checked) aElementos(i).fireEvent("onClick");
    }
  }
}
