// LIBRERÍA FIELDS.JS CONTROL DE CAMPOS DE FORMULARIO Y INTERFAZ DE PLANTILLAS 
// PARA EL GESTOR DE FORMULARIOS 2.0 Y DEVELOPER.

// AUTORES:
//	ALEJANDRO CLARAMONTE NAVARRO
//	PATRICIO BARRAL
//	PABLO ORIGLIA

// SEPTIEMBRE 21 DE 2006 SE AGREGARON LAS FUNCIONES:
// VALIDANUMERIC: (SANDRA OSPINA - Colombia - Developer - sospina@maat-g.com)
// DIAJULIANO(RAFAEL MANTILLA - Colombia - Banca - Servicios - rmantilla@maat-g.com)
// DOGETCARETPOSITION(BORIS SUAREZ - Colombia - Banca - Activos - bsuarez@maat-g.com)
// SE REALIZARON CAMBIOS EN LA FUNCION ONLYNUMBERS(BORIS SUAREZ - Colombia - Banca - Activos - bsuarez@maat-g.com):
// 1. Detecta la posición del cursor y al momento de colocar el punto no deja que seán más de los decimales definidos para el campos.
// 2. Elimina la visualización de alerts de forma másiva cuando se escribían caracteres diferentes a numeros.
// 3. Se puede utilizar el Delete, las flechas y backspace para modificar los datos y no visualiza error.
// 4. Si se escribe un punto solo, automáticamente agrega un 0 para que el valor no quede .56 sino 0.56. 

// ########################### FUNCIONES DE CONTROL DE CAMPOS, RESTRICCIONES Y FORMATOS ###########################

// CHEQUEAR RADIO BUTTONS Y DEVOLVER EL VALOR DEL SELECCIONADO.
function valorRadio(radioid) {
	result='';
	radio=document.getElementsByName(radioid);
	for (var i = 0; i < radio.length; i++) {
        	if (radio[i].checked) { result=radio[i].value; break; }
        }
	return result;   
}

// SELECCIONARRADIO: CHEQUEAR RADIO BUTTONS Y MARCAR EL SELECCIONADO.
function seleccionarRadio(radioid,zona) {

	radio=document.getElementsByName(radioid);
	for (var i = 0; i < radio.length; i++) {
        if (radio[i].checked) {
             document.getElementById(zona).className='on';            
        }
        else { 
        	document.getElementById('t'+i+radioid).className='off'; 
        }
    }   
}


// SELECCIONARCHECK: CHEQUEAR/DESCHEQUEAR CHECKBUTTONS Y MARCAR O DESMARCAR EL SELECCIONADO.
function seleccionarCheck(checkid) {
	check=document.getElementsByName(checkid);
	for (var i = 0; i < check.length; i++) {
        if (check[i].checked) {
             document.getElementById('t'+i+checkid).className='on';      
        }
        else { document.getElementById('t'+i+checkid).className='off'; }
    }   
}


// CHEQUEAR CHECK BUTTONS A PARTIR DE UNA LISTA DE VALORES.
function seleccionarChecks(checkid,valores) {
	valor=valores.split(",");
	check=document.getElementsByName(checkid);
	for (var i = 0; i < check.length; i++) {
		for (var j = 0; j < valor.length; j++){
        	if (check[i].value == valor[j]) { check[i].checked=true; break; }
        }
	}
}


// ANULAR  CHECKS BUTTONS A PARTIR DE UN ID. 
function anularChecks(checkid) {
	checks=document.getElementsByName(checkid);
	for (var i = 0; i < checks.length; i++) { checks[i].value=''; }
}


// RELLENAR un valor a partir de CHECKS BUTTONS A PARTIR DE UN ID.
function rellenarChecks(checkid) {
	result='';
	checks=document.getElementsByName(checkid);
	for (var i = 0; i < checks.length; i++) { 
		if (checks[i].checked == true){ result+=checks[i].value+','; }
	}
	return result;
}


// RELLENA UN TEXTAREA ESPECIFICO DE LA PLANTILLA mediante SU ID, Y SU CAMPO ASOCIADO.
function cargarTxtarea (id,valor){
	
	var inputtxt=document.getElementById(id); //llamo al input hidden del campo que se vincula con el txtarea
	var txtarea=document.getElementById(id+"txtarea"); //llamo al text area en concreto
	//y le paso el nuevo valor
	inputtxt.value=valor;
	txtarea.value=valor;
	
}

 

 



// CHEQUEO DE CHECKBOXES Y CAMBIO DE IMAGEN PARA EL SELECCIONADOR.
var allchecks_flag=0;
function selectAllChecks(objid,ruta,msg1,msg2){
	
	obj=document.getElementsByName(objid);
	objimg=document.getElementById(objid+'img');
	objimgtext=document.getElementById(objid+'imgtxt');
	
	 if (!(obj)){return;}
	 if (isNaN(obj.length)){
		 if (allchecks_flag==0){ allchecks_flag=1; obj.checked=true; document.getElementById('t0'+objid).className='on'; } else { allchecks_flag=0; obj.checked=false; document.getElementById('t0'+objid).className='off'; }
     }
     else{  
    	nchecks=obj.length;
    	if (allchecks_flag==0) {
	    	allchecks_flag=1;
	    	for (var i=0;i<nchecks;i++){obj[i].checked=true; document.getElementById('t'+i+objid).className='on'; }
	    }
    	else { 
	    	allchecks_flag=0;
	    	for (var i=0;i<nchecks;i++){obj[i].checked=false; document.getElementById('t'+i+objid).className='off';}
	    }   
    }  
	
	
	if (allchecks_flag == 0){ 
		objimg.src=ruta+'/seleccionar.gif';
		objimgtext.innerHTML=msg1;		
	}
	else { 
		objimg.src=ruta+'/deseleccionar.gif'; 
		objimgtext.innerHTML=msg2;
		
	}
		
}

// CHEQUEAR RADIO, CHECKS o SELECTS POR VALOR EN EDICION O INSERCION
function chequearporValor(objname,valor,tipo) {
	celda='';
	result=valor.split(",");
	elemento=document.getElementsByName(objname);
	if (tipo == 'combo'){ document.getElementById(objname).value=valor;  return; } 
		
	for (var i = 0; i < elemento.length; i++) {
						
		for (var j=0; j< result.length; j++){
			if (elemento[i].value == result[j]) {
				
				if (tipo == 'radio')   { elemento[i].checked=true; alert('objname'); celda='t'+i+objname; seleccionarRadio(objname,celda); }
				if (tipo == 'checkbox'){ elemento[i].checked=true; document.getElementById('t'+i+objname).className='on'; }
				break;
			}
    	}
    }		
}


// DEVUELVE EL OBJETOID CUYO VALOR COINCIDE CON EL VALOR PASADO [ CHECKS Y RADIOS ].
function objetoValor(objname,valor) {
	result='';
	objeto=document.getElementsByName(objname);
	for (var i = 0; i < objeto.length; i++) {
        	if (objeto[i].value == valor) { result=objeto[i].id; break; }
        }
	return result;   
}


// FUNCION DE CONTROL NUMERICO DE CAMPOS, CON ESTA NUEVA VERSIÓN SE PUEDEN CONTROLAR DECIMALES.
// PARA COMPATIBILIDAD CON LA ANTERIOR ONLYNUMBERS, SI NO SE PASA EL TERCER PARAMETROS, EL NUMERO NO ACEPTARÁ DECIMALES
// SI SE PASA EL PARÁMETRO, ESE NÚMERO SERÁ EL NUMERO DE DECIMALES A ACEPTAR.



// VALIDA EL AÑO BISIESTO

function diajuliano(fecha)
{
var V_diasmes=new Array(0,31,59,90,120,151,181,212,243,273,304,334);
fecha=fecha.split("/");
dia=fecha[2];
mes=fecha[1];
ano=fecha[0];
dias=V_diasmes[parseInt(mes,10)-1]+parseInt(dia,10);
if ((bisiesto(ano)) && (dias>59))
	{
	dias=dias+1;
	}
return dias;
}

//VALIDA SI EL CAMPO BUSCADOR ES NUMERICO O NO

function validanumeric(evento,idinput){
  	if (esnumerico == 1){
  		
  		var numericovar = onlyNumbers(evento,idinput);
  		
  		entrarie();
  		
  		return numericovar;
  		
  		}
  	else {
  		
  		entrarie();
  		
  		return true;
  		
  		}	
 	}

//VALIDA DUPLICIDAD DE PUNTOS EN LOS CAMPOS CON DECIMAL

function doGetCaretPosition(oField) {
     // Initialize
     var iCaretPos = 0;
     // IE Support
     if (document.selection) {
       // Set focus on the element
       //oField.focus ();
       // To get cursor position, get empty selection range
       var oSel = document.selection.createRange();
       // Move selection start to 0 position
       oSel.moveStart ('character', -oField.value.length);
       // The caret position is selection length
       iCaretPos = oSel.text.length;
     }
      // Firefox support
     else if (oField.selectionStart || oField.selectionStart == '0')
       iCaretPos = oField.selectionStart;
     // Return results
     return (iCaretPos);
     
}

//FUNCTION THAT VALIDATES THE NUMERIC INPUT AFTER THE USER WROTE IT.
function checkDec(campo,dec){
eval("var field = document.getElementById('"+campo+"').value;");
var _tilde = new Array();
_tilde = field.split('.')
field = '';
if ( dec == 0 ){ var contdec = 1; }else{ var contdec = 2; };
for (var j = 0 ; j < contdec ; j++){
	if (isNaN(_tilde[j])){
		for (var i = 0; i < _tilde[j].length; i++ ){
			if ( !isNaN( _tilde[j][i] ) ){ field += _tilde[j][i]; };
		}
		field += '.';
	}else{ field += _tilde[j]+'.'; };
}

if ( field == ''){ eval("var field = document.getElementById('"+campo+"').value;"); 
}else{ field = field.substring(0,field.length-1); };

if ( dec == 0 ) return;

var cone = field.indexOf(".",0);
if ( cone >= 0 ){
	var _piece = new Array();
   _piece = field.split('.');
	if ( _piece[1].length < dec ){
		var _miss = dec - _piece[1].length;
		for ( var i = 0; i < _miss; i++){
		  field += '0'; 
		}
	}
	if ( _piece[0].length == 0 ){
	var tempfield = field;
	field = '0'+ tempfield;
	}
	eval("document.getElementById('"+campo+"').value='"+ field +"';");

}else{
if ( field.length > 0 ) { 
	field += '.'; 
	for ( var i = 0; i < dec; i++){
		field += '0';
		}
		eval("document.getElementById('"+campo+"').value='"+ field +"';");
	 }
}

} 

// NUMERIC DATA VALIDATION INCLUDING FLOAT OR INTEGER DETECTION
/*
function onlyNumbers(evt,campo,dec){
	
	var b1=0;
	var cont=0;
		
	if(dec==undefined) {  dec = 0; }
	eval("var field = document.getElementById('"+campo+"').value;");
	evt = (evt) ? evt : event;
	
	if (navigator.appName == 'Microsoft Internet Explorer') { var retFFIE = "evt.returnValue = false;"; }
   if (navigator.appName == 'Netscape') { var retFFIE = "evt.preventDefault();"; }
		
   var charCode = (evt.charCode) ? evt.charCode : ((evt.keyCode) ? evt.keyCode : ((evt.which) ? evt.which : 0));
	if (charCode > 31  && (charCode < 48 || charCode > 57)  && charCode!= 8  && charCode!= 37 && charCode!= 39 && charCode!= 46 ) {
		eval(retFFIE);
		return false;
	}
	
	if ( charCode == 39 && evt.keyCode == 0 && navigator.appName == 'Netscape' ){
	   eval(retFFIE);
		return false;
	}
	
	if ( charCode == 39 && evt.keyCode == 39 && navigator.appName == 'Microsoft Internet Explorer' ){
	   eval(retFFIE);
		return false;
	}
		
	if (navigator.appName == 'Microsoft Internet Explorer'){ var keyData = 46; };
   if (navigator.appName == 'Netscape') { var keyData = 0 ; }
	
	b1= field.indexOf(".",0);
	// CONTROL PARA LA HABILITACIÓN DE DECIMALES EN EL CAMPO NUMÉRICO	
	if(dec != 0){
   
   //CONTROL DEL PRIMER .	var _piece = new Array();  
	_piece = field.split('.');
	//alert( charCode+ ' '+evt.keyCode );
	if ( _piece[0].length == 0 && charCode==46 && evt.keyCode == keyData ){
		eval("document.getElementById('"+campo+"').value ='0.';");
		eval(retFFIE);
	  	return false;
	}
	if(b1 != -1){
			// CONTROL PARA EVITAR UN SEGUNDO . INCORRECTO.
			if(charCode==46 && evt.keyCode == keyData ){
				alert("No se acepta otro punto");
				eval(retFFIE);
				return false;
			
			}
			else{
				// CONTADOR DE DECIMALES
			 var _flag = 0;
			 if (navigator.appName == 'Microsoft Internet Explorer'){ _flag = 0; }
          if (navigator.appName == 'Netscape'){
           		if ( evt.charCode == 0 && evt.keyCode == 46 ){ _flag = 1; };
           		           
           }	
				var _pcar = doGetCaretPosition(document.getElementById(campo));
				cont=field.length-b1;
				var _piece = new Array();  
				_piece = field.split('.');
								
				// CONTROL DE DECIMALES, NO PUEDE SUPERAR LA CANTIDAD ESPECIFICADA EN DEC.
				if(cont > dec && _piece[1].length == 2 && _pcar > _piece[0].length && _flag == 0 ){
				    if ( charCode!= 8 && charCode!= 37 && charCode!= 39 && charCode!= 9 && charCode != 13 ) {
					alert("Sobrepasa la cantidad de los aja "+dec+" decimales");
					eval(retFFIE);
			      return false;
			      
					
					}
				}
			} 
		}
		else{
		var _longcamp = field.length;
		var _pcarr = doGetCaretPosition(document.getElementById(campo));
			if ( ( _pcarr < _longcamp - dec ) && ( charCode==46 && evt.keyCode == keyData ) ){
				alert("Sobrepasa la cantidad de los "+dec+" decimales");
				eval(retFFIE);
				return false;
			}
		
		}
	}
	else{
	   // CONTROL PARA CAMPOS SIN DECIMALES
		if( charCode==46 && evt.keyCode==keyData ){
			alert("El campo "+campo+" debe ser Entero");
			eval(retFFIE);
			return false;
		}
	}
	return true;
}
*/

function onlyNumbers(evt,campo,dec){
	
	var b1=0;
	var cont=0;
	var m1=-1;
	if(dec==undefined){	dec=0; }
	var  field = document.getElementById(campo).value;
	evt = (evt) ? evt : event;
	var charCode = (evt.charCode) ? evt.charCode : ((evt.keyCode) ? evt.keyCode : ((evt.which) ? evt.which : 0));
	
	if (charCode > 31  && (charCode < 48 || charCode > 57) && charCode!= 46  && charCode!= 45 ) {
		alert(show_message('4',campo));
		return false;
	}
	
	b1= field.indexOf(".",0); //UBICACION DEL "." EN EL STRING
	m1=field.indexOf("-",0); //UBICACION DEL "-" EN EL STRING

	if(charCode == 45)
	{
			if(m1!=-1)
			{
					alert("NO SE ACEPTA OTRO SIGNO");
					return false;
			}else{
					if(field.length != 0)
					{
							alert("EL LUGAR DEL SIGNO ES INCORRECTO");
							return false;
					}
			}
			
	}
	var entero=0;
	if(dec != 0)
	{
			
			// CONTROL DEL PRIMER .
			if(b1 != -1)
			{
					
					// CONTROL PARA EVITAR UN SEGUNDO . INCORRECTO.
					if(charCode==46)
					{
							alert("NO SE ACEPTA OTRO PUNTO");
							return false;
					}else{
							// CONTADOR DE DECIMALES
							cont=field.length-b1;
							// CONTROL DE DECIMALES, NO PUEDE SUPERAR LA CANTIDAD ESPECIFICADA EN DEC.
							if(cont > dec)
							{
									if (charCode!=8)
									{
											alert("SOBREPASA LA CANTIDAD DE LOS "+dec+" DECIMALES");
											return false;
									}//end if char code
							}// end if cont >dec
					}// end if char code == 46 
			}//end if b1!= -1
	}else{
			// CONTROL PARA CAMPOS SIN DECIMALES
			if(charCode==46)
			{
					alert("EL CAMPO "+campo+" DEBE SER ENTERO");
					return false;
			}
	}//end if dec !=0
	return true;
}

// ####################### FUNCIONES DE INTERFAZ DE PLANTILLA Y CAMPOS ESPECIALES DE BÚSQUEDA ##################### 


// FOCO: APLICADO A INPUTS TYPE=TEXT
function foco(obj) { obj.className='inputFOCUS'; }

// SELECCION: APLICADO A INPUTS TYPE=TEXT 
function seleccion(obj) { if (obj.value == '') { obj.className='inputSELECTION'; }  }

// DEJAR: APLICADO A INPUTS TYPE=TEXT
function dejar(obj) { if (obj.value =='') { obj.className='input';} else { obj.className='inputSELECTION'; } }

// OCULTAR / MOSTRAR OBJETOS POR CSS: MENUS, PROCESOS, ETC... 
var aux;
function menu(objid) {
	obj=document.getElementById(objid);
	
	if (document.getElementById(objid).className == 'mostrar') {
		document.getElementById(objid).className = 'ocultar';
	} else if (document.getElementById(objid).className == 'ocultar') {
		document.getElementById(objid).className = 'mostrar';
	} else if (document.getElementById(objid).style.display == 'block') {
		document.getElementById(objid).style.display = 'none';
	} else {
		document.getElementById(objid).style.display = 'block';
	}
	if ((aux)&&(aux != obj)) {
    		if (aux.className == 'mostrar') {
			aux.className = 'ocultar';
	} else if (aux.className == 'ocultar') {
			aux.className = 'ocultar';
	} else if (aux.style.display == 'block') {
			aux.style.display = 'none';
	} else {
			//aux.style.display = 'block';
	}
  	}
    	aux=obj;
}

 // Si el archivo actual esta en favoritos TRUE sino FALSE.
 function isFavorite(){
   // Nombre del Archivo.
   var nestpl = document.forms[0].elements['nestpl'].value;
   // Obtenemos el DIV del menú favoritos.
   var favorites = document.getElementById('favorites');
   var links = favorites.getElementsByTagName('A');
   var nLinks = links.length;

   for (var i = 0; i < nLinks; i++) {
     var href = links[i].getAttribute('href');
     if (href != '#') {
       var fileName = href.substr(href.lastIndexOf('/')+1)
       if (fileName == nestpl) {         
         return true;         
       }
     }
   }
   return false;
 }


 // Se encarga de agregar el item del Favorito al menú.
 function addFavoritesItem(tplUrl, title) {
  // Obtenemos el DIV del menú favoritos.
  var favorites = document.getElementById('favorites');
  // Creamos el anchor para el link.
  var link = document.createElement('A');
  // Creamos el list item para el item del menú.
  var item = document.createElement('LI');
  item.setAttribute('id', tplUrl.substr(tplUrl.lastIndexOf('/')+1));
  // Seteamos el href del anchor.
  link.setAttribute('href', tplUrl);
  // Agregamos el título al anchor del item del menú.
  link.innerHTML = title;
  // Agrgamos el anchor dentro del list item.
  item.appendChild(link);

  // Agregamos el list item en el menú.
  for (var i = 0; i < favorites.childNodes.length; i++) {
    if(favorites.childNodes[i].nodeName == 'UL') {
      favorites.childNodes[i].appendChild(item);
      break;
    }
  }  

 }

 // Se encarga de guardar los datos del Favorito en la clase,
 // Para poder recuperarlo posteriormente.
 function addFavorites(userDk, cgiurl, templ) {
   if (isFavorite()) {
     alert('Menú ya agregado'); 
     return; 
   }
   var myFavorites = new callServer();
   // Nombre del Archivo.
   var nestpl = document.forms[0].elements['nestpl'].value;
   // URL al Archivo.
   var tplUrl = cgiurl + '/v.cgi?D.templ='+ templ + nestpl;

   // Construimos los parámetros para grabar.
   myFavorites.sendValues  = 'D.dataformat=XML&';
   myFavorites.sendValues += 'D.action=critinsert&';
   myFavorites.sendValues += 'D.y=devfavoritos&';
   myFavorites.sendValues += 'tipo=item&';
   myFavorites.sendValues += 'user-OID=' + userDk + '&';
   myFavorites.sendValues += 'etiqueta=' + document.title + '&';
   myFavorites.sendValues += 'nombre=' + nestpl;
 
   myFavorites.onLoad = function(ok) {
     if (ok) {
       error = myFavorites.getValue('id',0);
       if (error == 0) {
         // Si no hubo errores agregamos el Item al Menú.
         addFavoritesItem(tplUrl, document.title);
       } 
       else {
         // Si hubo errores mostramos el mensaje.
         msg = 'No se pudo agregar a Favoritos.\n'+ myFavorites.getValue('descripcion',0);
         alert(msg);
       }  	  
     }
   };
   myFavorites.loadXMLhttp( cgiurl + "/a.cgi?","POST");
 }

 // Elimina la plantilla actual de la clase y el menú Favoritos.
 function removeFavorite(cgiurl, userDk) {
   var myFavorites = new callServer();
   // Nombre del Archivo.
   var nestpl = document.forms[0].elements['nestpl'].value;

   // Construimos los parámetros para grabar.
   myFavorites.sendValues  = 'D.dataformat=XML&';
   myFavorites.sendValues += 'D.action=remove&';
   myFavorites.sendValues += 'D.y=devfavoritos&';
   myFavorites.sendValues += 'user-OID=' + userDk + '&';
   myFavorites.sendValues += 'nombre=' + nestpl;
 
   myFavorites.onLoad = function(ok) {
     if (ok) {
       error = myFavorites.getValue('id',0);
       if (error == 0) {
         // Si no hubo errores borramos el Item al Menú.
         removeFavoriteItem();
       } 
       else {
         // Si hubo errores mostramos el mensaje.
         msg = 'No se pudo eliminar de Favoritos.\n'+ myFavorites.getValue('descripcion',0);
         alert(msg);
       }  	  
     }
   };
   myFavorites.loadXMLhttp( cgiurl + "/a.cgi?","POST");
 }

 // Elimina el item del menu actual de Favoritos.
 function removeFavoriteItem() {
   // Nombre del Archivo.
   var nestpl = document.forms[0].elements['nestpl'].value;
   // Obtenemos el DIV del menú favoritos.
   var favorites = document.getElementById('favorites');
   var links = favorites.getElementsByTagName('A');
   var nLinks = links.length;

   for (var i = 0; i < nLinks; i++) {
     var href = links[i].getAttribute('href');
     if (href != '#') {
       var fileName = href.substr(href.lastIndexOf('/')+1)
       if (fileName == nestpl) {         
         links[i].parentNode.parentNode.removeChild(links[i].parentNode);
         break;
       }
     }
   }
 }


// TOGGLE TABLA PRINCIPAL DE DATOS
function toggleTabla(navtid,imgid,objid,imgpath){

	if (objid == 'last'){ objid=lastsee; }
	
	navt=document.getElementById(navtid);
 	img=document.getElementById(imgid);
 	obj=document.getElementById(objid);

 	if (obj.className == 'tabla' ) { 
		changeimg=imgpath+'/container_arrowdown.gif';
		img.src=changeimg;
		navt.className='navbar';	
		obj.className='ocultar'; 
	} 
	else { 
		changeimg=imgpath+'/container_arrowup.gif';
		img.src=changeimg;
		navt.className='navbar2';	
		obj.className='tabla'; 	
	}
 }
 
// TOGGLE PARA LAS PESTAÑAS DINÁMICAS DE LA PLANTILLA
 var lastsee='t1';
 var lasttab='1';
 function toggleTag(navtid,objid,tabnumber){

  	navt=document.getElementById(navtid);
 	obj=document.getElementById(objid);
 	
 	// Busca la última pestaña activa
 	var tabobj = document.getElementById('tab' + lasttab);
 	while (tabobj.className !== 'cab2') {
 		++lasttab;
 		tabobj = document.getElementById('tab' + lasttab);
 	} 
 	lastsee = 't' + lasttab;
 
    if ((lastsee != '')&&(lastsee != objid )) { 
    	lastobj=document.getElementById(lastsee);
    	lastsee=objid;
    	lasttab=tabnumber;
    	if (lastobj.className == 'tabla') {
			navt.className='navbar';	
			lastobj.className='ocultar';				
		}
		if (tabobj.className == 'cab2'){ tabobj.className='cab'; }		
		navt.className='navbar2';	
		obj.className='tabla';
		document.getElementById('tab'+tabnumber).className='cab2';
	}
 }

 
// TOGGLE PARA LAS PESTAÑAS DE OPCION DE PLANTILLAS DE LISTADO.
// FALTA HACER LA CARGA DE LOS IFRAMES QUE CONTENDRAN ...
 var lastopt='';
 function toggleOpt(objid,optnumber){

  	obj=document.getElementById(objid);
 	optobj=document.getElementById('topt'+optnumber);
 	textobj=document.getElementById('ttoolbar_opt'+optnumber);
 	
 	// SI NO HAY NINGUNA OPCION CARGADA LA CARGAMOS
    if (lastopt == '') { 
	    
	    obj.className='tabla';
	    lastopt=optnumber;
	    textobj.className='ttoolbar_on';
    }
    else {
	    // SI HAY UNA OPCION Y NO ES LA QUE ESTAMOS CARGANDO, LA OCULTAMOS Y CARGAMOS LA OPCION CORRESPONDIENTE
	    if ( lastopt != optnumber ){
		    
		    // ultima tabla de opciones abierta
		    lastoptobj=document.getElementById('topt'+lastopt);
		    // td donde esta el texto de esta ultima opcion
		    textoffobj=document.getElementById('ttoolbar_opt'+lastopt);
		    // cambiamos la class a off de esa ultima tabla de opciones
		    textoffobj.className='ttoolbar_off';
		    
		    textobj=document.getElementById('ttoolbar_opt'+optnumber);
		    textobj.className='ttoolbar_on';
		    
		    lastoptobj.className='ocultar';
		    lastopt=optnumber;
		    obj.className='tabla';
		    
		}
		// SI LA OPCION QUE QUEREMOS CARGAR YA ESTA CARGADA LA OCULTAMOS
		else { 
			if (obj.className == 'tabla'){ 
				obj.className='ocultar';
				textobj=document.getElementById('ttoolbar_opt'+optnumber);
		   		textobj.className='ttoolbar_off';
		   	}
		   	else {
			    obj.className='tabla';
				textobj=document.getElementById('ttoolbar_opt'+optnumber);
		   		textobj.className='ttoolbar_on';	
			   	
			}
		}	  
	}
	
 }
 
 
// CLOSE MAIN MENU ON CLICK ACTION  
 function cerrarMenu(){
	if (document.getElementById('nav').className == 'mostrar') {  document.getElementById('nav').className='ocultar'; } }

// TOGGLE OCULTAR / MOSTRAR ON CLICK ACTION 
function Procesos(objid){
if (document.getElementById(objid).className == 'procesos') {  document.getElementById(objid).className='ocultar'; } else { document.getElementById(objid).className='procesos'; } }


// mostrar / ocultar / habilitar / deshabilitar / chequear/ deschequear elementos, uno o varios separados por comas.
function visibilidad(accion,listfields,ids){

	if (ids == undefined) { ids=''; }
	if (accion == '') { return; }
	if (listfields == '') { return; }
	var i=0;
	var j=0;
	acciones=accion.split(",");
	elementos=listfields.split(",");
	
	for (i=0;i<acciones.length;i++){
		
		for (j=0;j<elementos.length;j++){ 
			if (acciones[i].toLowerCase() == 'mostrar') { document.getElementById(ids+elementos[j]).className='mostrar'; }
			if (acciones[i].toLowerCase() == 'ocultar') { document.getElementById(ids+elementos[j]).className='ocultar'; }  
			if (acciones[i].toLowerCase() == 'deshabilitar') {
				if ((document.getElementById(ids+elementos[j]).type == 'radio')||(document.getElementById(ids+elementos[j]).type == 'checkbox')){
					// PARA RADIO O PARA CHECKS HAY QUE RECORRER EL ARRAY DE ELEMENTOS SI HAY MAS DE UNO.
					habilitacion(ids+elementos[j],'deshabilitar');
					}
				else{ document.getElementById(ids+elementos[j]).disabled=true; }
			}
			if (acciones[i].toLowerCase() == 'habilitar') { 
				if ((document.getElementById(ids+elementos[j]).type == 'radio')||(document.getElementById(ids+elementos[j]).type == 'checkbox')){
					// PARA RADIO O PARA CHECKS HAY QUE RECORRER EL ARRAY DE ELEMENTOS SI HAY MAS DE UNO.
					habilitacion(ids+elementos[j],'habilitar');
					}
				else{ document.getElementById(ids+elementos[j]).disabled=false; }
			} 
			if (acciones[i].toLowerCase() == 'chequear') {  document.getElementById(ids+elementos[j]).checked=true; } 
			if (acciones[i].toLowerCase() == 'deschequear') { document.getElementById(ids+elementos[j]).checked=false; } 
			if (acciones[i].toLowerCase() == 'asignarClase') { document.getElementById(elementos[j]).className=ids; } 
		}	
	}
}

// DESHABILITAR/HABILITAR CHECKS O RADIO BUTTONS A PARTIR DE UN ID. 
function habilitacion(objid,accion) { 
	if (accion == '') { return; }
	obj=document.getElementsByName(objid);
	for (var i = 0; i < obj.length; i++) { 
		if ( accion.toLowerCase() == 'habilitar'){
			obj[i].disabled=false; 
		}
		if ( accion.toLowerCase() == 'deshabilitar'){
			obj[i].disabled=true; 
		}
		
	}
}


// FUNCION QUE HABILITA CAMPOS DESHABILITADOS.
function HabilitarCampos(valor,listfields,enabledValue){
	enabledVector=enabledValue.split(",");
	listfieldVector=listfields.split(",");
	var k = 0;
	
	for ( k = 0; k < listfieldVector.length; k++ ) {
		if(enabledVector.length > 1) {
			// NOVACIO
			if (enabledVector[k] == 'novacio') {
				if (valor != '') {
					visibilidad('habilitar',listfieldVector[k],'');
				} else {
					visibilidad('deshabilitar',listfieldVector[k],'');
				}		
			}
			// VACIO		
			if (enabledVector[k] == 'vacio') { 
				if (valor == '') {
					visibilidad('habilitar',listfieldVector[k],'');
				} else {
					visibilidad('deshabilitar',listfieldVector[k],'');
				}				
			}
			// VALOR
			if ((enabledVector[k] != 'novacio')&&(enabledVector[k] != 'vacio')){
				if (valor == enabledVector[k]) {
					visibilidad('habilitar',listfieldVector[k],'');
				} else {
					visibilidad('deshabilitar',listfieldVector[k],'');
				}
			}

		} else {
			
			if (enabledVector[0] == 'novacio') {
				if (valor != '') {
					visibilidad('habilitar',listfieldVector[k],'');
				} else {
					visibilidad('deshabilitar',listfieldVector[k],'');
				}		
			}
			// VACIO		
			if (enabledVector[0] == 'vacio') { 
				if (valor == '') {
					visibilidad('habilitar',listfieldVector[k],'');
				} else {
					visibilidad('deshabilitar',listfieldVector[k],'');
				}				
			}
			// VALOR
			if ((enabledVector[0] != 'novacio')&&(enabledVector[0] != 'vacio')){
				if (valor == enabledVector[0]) {
					visibilidad('habilitar',listfieldVector[k],'');
				} else {
					visibilidad('deshabilitar',listfieldVector[k],'');
				}
			}
		
		}
	}		
} 


// FUNCION QUE HABILITA BOTONES DESHABILITADOS.
function HabilitarBotones(valor,listbuttons,enabledValue){
	enabledVector=enabledValue.split(",");
	listButtonsVector=listbuttons.split(",");
	var k = 0;
	
	for ( k = 0; k < listButtonsVector.length; k++ ) {
		if(enabledVector.length > 1) {
			// NOVACIO
			if (enabledVector[k] == 'novacio') {
				if (valor != '') {
					eval( 'myBtn' + listButtonsVector[k] + '.setEnabled(true);');
					
				} else {
					eval( 'myBtn' + listButtonsVector[k] + '.setEnabled(false);');
				}		
			}
			// VACIO		
			if (enabledVector[k] == 'vacio') { 
				if (valor == '') {
					eval( 'myBtn' + listButtonsVector[k] + '.setEnabled(true);');
				} else {
					eval( 'myBtn' + listButtonsVector[k] + '.setEnabled(false);');
				}				
			}
			// VALOR
			if ((enabledVector[k] != 'novacio')&&(enabledVector[k] != 'vacio')){
				if (valor == enabledVector[k]) {
					eval( 'myBtn' + listButtonsVector[k] + '.setEnabled(true);');
				} else {
					eval( 'myBtn' + listButtonsVector[k] + '.setEnabled(false);');
				}
			}

		} else {
			
			if (enabledVector[0] == 'novacio') {
				if (valor != '') {
					eval( 'myBtn' + listButtonsVector[k] + '.setEnabled(true);');
				} else {
					eval( 'myBtn' + listButtonsVector[k] + '.setEnabled(false);');
				}		
			}
			// VACIO		
			if (enabledVector[0] == 'vacio') { 
				if (valor == '') {
					eval( 'myBtn' + listButtonsVector[k] + '.setEnabled(true);');
				} else {
					eval( 'myBtn' + listButtonsVector[k] + '.setEnabled(false);');
				}				
			}
			// VALOR
			if ((enabledVector[0] != 'novacio')&&(enabledVector[0] != 'vacio')){
				if (valor == enabledVector[0]) {
					eval( 'myBtn' + listButtonsVector[k] + '.setEnabled(true);');
				} else {
					eval( 'myBtn' + listButtonsVector[k] + '.setEnabled(false);');
				}
			}
		
		}
	}		
} 


// FUNCION DE AGRUPACION DE CAMPOS. AGRUPA CAMPOS Y LOS UNE EN UN HIDDEN CON EL FORMATO ESPECIFICADO.
// AGRUPAR(LISTFIELDS,RESULTFIELD,GROUPTYPE,GROUPFORMAT)
	// GROUPFIELDS: LISTA DE IDS DE LOS CAMPOS QUE FORMAN LA AGRUPACION DE CAMPOS
	// RESULTFIELD: ID DEL CAMPO RESULTADO DONDE SE ALMACENA EL GRUPO DE DATOS
	// GROUPTYPE: INDICA EL TIPO DE AGRUPACION: [N] NUMÉRICA; [AN] ALFANUMÉRICA.
	// GROUPFORMAT: FORMATO DE AGRUPACION DE LOS CAMPOS EN EL CAMPO RESULTADO, POR DEFECTO NADA. 
	
var grupos=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');  
function agrupar(groupfields,resultfield,grouptype,groupformat){
	expresion=new String();
 	var arrayfields=groupfields.split(",");
 	for (var i=0;i<arrayfields.length;i++) {
  
		if (arrayfields[i] != '') {
  	
  			if (document.getElementById(arrayfields[i]).value == "") { return; }
  			if (grouptype.toUpperCase() == 'N'){
  				if (isNaN(document.getElementById(arrayfields[i]).value)){ alert(show_message('4',arrayfields[i])); return; }
  				// DEFINIMOS EL VALOR COMO NUMERO
  				eval("var "+grupos[i]+"="+parseFloat(document.getElementById(arrayfields[i]).value));

  			}
  			// DEFINIMOS EL VALOR COMO STRING
  			else{ eval("var "+grupos[i]+"="+"'"+document.getElementById(arrayfields[i]).value+"'"); }			
  		}

  	}
  	// DEFAULT FORMAT
  	if ((groupformat == '')||(groupformat == undefined)){
  		// SAVE RESULT VALUE IN RESULT FIELD FOR DEFAULT FORMAT
  		document.getElementById(resultfield).value='';
  		for (var i=0;i<arrayfields.length;i++) {
  			document.getElementById(resultfield).value+=document.getElementById(arrayfields[i]).value+'';
  		}	
  	}
  	else {
  		// USER OWN FORMAT
  		expresion=groupformat;
  		var result='';
  		if (grouptype.toUpperCase() == 'N'){
  			// NUMERIC USER OWN EXPRESION
  			// FIRST REMOVE # IF EXISTS
  			resultado='';
  			if (expresion.indexOf('#') != -1 ) { re = eval("/\\#/g"); expresion=expresion.replace(re,''); }
  			resultado=eval(expresion);
		}  		
  		else{
  			// ALPHANUMERIC USER OWN EXPRESION
  			resultado='';
  			for (var i=0;i<arrayfields.length;i++) {
  				if (eval(grupos[i]) == '') { alert('nulo'); }
  				else {
	  				re = eval("/\\#"+grupos[i]+"/g");
	  				aux=document.getElementById(arrayfields[i]).value;
	  				resultado=expresion.replace(re, aux);
	  				expresion=resultado;
	  			}
  				
  			}  		
  		
  		}
  		// SAVE RESULT VALUE IN RESULT FIELD FOR USER OWN FORMAT
  		document.getElementById(resultfield).value=resultado;		 	
  	}
  	//alert(document.getElementById(resultfield).value);
 
}




// CARGADORES DE IFRAMES DINÁMICOS
// IFRAME,DIV,IMG MOSTRAR,IDENTIFICADOR GLOBAL DE TODA LA OPERACION.
function dinamico(marcoid,divid,imgid,kid,tpl,ubicacion){   

	// DEFINICION DE LAS IMAGENES DE MOSTRAR/OCULTAR, CARGADOR Y ESPACIO TRANSPARENTE.
	var loader = new Image();
	var spacer = new Image();
	
	loader.src=ubicacion+"/loader.gif";
	spacer.src=ubicacion+"/spacer.gif";
	
	
	
	// FOUNDING OBJECTS
	marcoobj=document.getElementById(marcoid);
	divobj=document.getElementById(divid);
	imgobj=document.getElementById(imgid);
	//alert('iframe: '+marcoobj+' celda contenedora: '+divid+' img loader: '+imgobj);
	
	// CHECKING IFRAME STATUS
	if ( marcoobj.src != 'about:blank' ) {
	
		// IFRAME LOADED
		// CHECKING DIV STATUS
		if (divobj.className == 'mostrar'){ 			
			// DIV VISIBLE
			imgobj.src=spacer.src;
			divobj.className='ocultar';		
		}
		else {			
			// DIV NOT VISIBLE
			imgobj.src=spacer.src;
			divobj.className='mostrar';
			return 1;	
		}	
	}
	else {
		//IFRAME NOT LOADED
		imgobj.src=loader.src;
		// IFRAME SRC HTML PAGE
		// SE DEBE PASAR EL D.K DE REGISTRO AQUI CUANDO LA FUNCION TRABAJA DE FORMA DINÁMICA
		marcoobj.src=tpl;
		marcoobj.datavalue=kid;
		return 1;
		}
}


// RECIBE LA CONFIRMACIÓN DE LA PÁGINA, UNA VEZ QUE ESTÁ CARGADA Y LISTA PARA SER MOSTRADA.
// EL NUMERO ES EL INDENTIFICADOR GLOBAL DE LA OTRA FUNCION. DINAMICAMENTE ES EL D.K DEL REGISTRO.
function aviso(identificador,ubicacion){ 
	
	var spacer = new Image();
	spacer.src=ubicacion+"/spacer.gif";
	
	// FOUNDING OBJECTS
	imgobj=document.getElementById(identificador+'_loader');
	divobj=document.getElementById(identificador+'_contenido');
	
	// COLLAPSE DIV TO SHOW IFRAME LOADED CONTENT
	divobj.className='mostrar';
	imgobj.src=spacer.src;
	
}



// FUNCIONES PARA CAMPOS DE BUSQUEDA #################################################################


// AUTO COMPLETA CAMPOS PASADOS A UN Q2XML AL SELECCIONAR UN VALOR DE SELECTOR RESULTADO.
// LOS CAMPOS A RELLENAR DEBEN POSEER COMO ID EN PREFIJO auto_ + SU NAME
function AutoCompletar(clase,valordk,selectorid,indice) {
		
numeroFilas=eval(selectorid+'_'+clase+'_filas');
elementos_arr=eval(selectorid+'_'+clase+'_elementos');
var elementos='';

	// TRNSFORMO LOS ELEMENTOS DEL ARRAY EN UN STRING
	elementos = elementos_arr[0];	
	for (var contador=1;contador<elementos_arr.length;contador++)	{
		elementos = elementos + ',' + elementos_arr[contador]; 
	}

//elementosval=eval(selectorid+'_'+clase+'Array');

//alert("ELEMENTOS: "+elementos);
//alert("VALORES DE ELEMENTOS: "+elementosval);
//alert("VALORDK: "+valordk);
//alert('autocompletar_'+selectorid+'_resultado');

if (valordk == '') {
	// OCULTAMOS LAS FILAS MOSTRADAS POR OTROS ELEMENTOS ANTERIORES
	for (i=0; i<numeroFilas;i++){
		document.getElementById('autocompletar_'+selectorid+'_resultado'+i).className='ocultar';
		}
	// VACIAMOS LOS VALORES DE OTROS ELEMENTOS ANTERIORES
	for (j=0; j<elementos.length;j++){
		//alert('document.getElementById(\'auto_'+elementos[j]+').value = "";');
		eval('document.getElementById(\'auto_'+selectorid+'_'+elementos[j]+'\').value = "";');
	}
	return; 
		
} 			
 		var numerobuscador = selectorid.split("buscador"); 
        //alert('micarg: miCargador' + numerobuscador[1]);
	
		micarg = eval('miCargador'+numerobuscador[1]);
		micarg.xmlToAllObjPrefix(elementos,indice-1,'','auto_'+selectorid+'_');
 		for (i=0; i<numeroFilas;i++){ 		
			document.getElementById('autocompletar_'+selectorid+'_resultado'+i).className='mostrar';
		}	  
 }


// FIN FUNCION AUTOCOMPLETADO

// FIN FUNCION AUTOCOMPLETADO




// CAMBIA EL INDICE DE FORMA CICLICA DEL CAMPO DE BÚSQUEDA ASI COMO LA ETIQUETA INFORMATIVA DENTRO DEL CAMPO.
function cambiaBusqueda(objid,clase,imgobj,selectorid,numbuscador){
	
	if ((numbuscador == '')||(numbuscador == undefined)){ numbuscador=1; }
	obj=document.getElementById(objid);	
	
   	vector=eval(selectorid+'_'+clase+'_vector');
   	//alert("OBJID: "+objid);	
	//alert("VECTORID: "+vector);
	// TRAMIENTO DE INDICES: indiceI INICIAL, indiceF FINAL, indiceA ACTUAL
	
   	indiceI=eval(selectorid+'_'+clase+'_indiceI'+numbuscador);
   	indiceF=eval(selectorid+'_'+clase+'_indiceF'+numbuscador);
   	indiceA=eval(selectorid+'_'+clase+'_indiceA'+numbuscador);

   	//alert("INDI: "+indiceI);
   	//alert("INDF: "+indiceF);   	
   	//alert("INDA: "+indiceA); 
   	
   	indiceA++;
   	if (indiceA > indiceF){ indiceA=indiceI; }
   	eval(selectorid+'_'+clase+'_indiceA'+numbuscador+'='+indiceA);
   	// DETECTAMOS LOS CAMPOS CON -OID.campo (XPATH)
   	label=vector[indiceA].split("-OID.");
   	if (label.length == 2){ label=label[1].toUpperCase()+' de la clase '+label[0].toLowerCase(); } else { label=label[0].toUpperCase(); }
	obj.value='Buscar '+clase+' por '+label;
	imgobj.title='Configurar Búsqueda de '+clase.toUpperCase()+'. [Selección Actual: '+label+']';	
}


// CAMBIA EL INDICE DE BUSQUEDA A EL INDICE CORRESPONDIENTE AL VALOR DE CAMPO DE BUSQUEDA PASADO COMO REFERENCIA.
function CambiarIndice(vectorid,clase,campo){

 vector=eval(vectorid);
 for(i=0;i<vector.length;i++){  if (vector[i] == campo){ indice=i; break; } }
 eval(clase+'_indice='+indice);
 //alert(empleado_indice);
}

// MANEJADOR DE LOS RADIOS DE LOS CAMPOS SELECTOR
function selector(clase,selectorid,mostrarid,ocultarid){
 // OCULTAR EL RESULTADO FINAL INICIALMENTE.
 document.getElementById(selectorid+'_resultado').className='ocultar';
 filas=eval(clase+'_filas');
 AutoCompletar(clase,'');
 
 // BORRAR PREVIAS SI EXISTEN
 nivelprevia=eval(selectorid+'_'+ocultarid+'_nivel');

 if (nivelprevia == 2){ document.getElementById(selectorid+'_previo_'+ocultarid).className='ocultar'; }
 
 mostrar=document.getElementById(selectorid+'_'+mostrarid);
 ocultar=document.getElementById(selectorid+'_'+ocultarid);
 if (ocultar.className == 'mostrar'){ ocultar.className='ocultar'; }
 mostrar.className='mostrar';

}


// BORRA LA INFORMACIÓN EN LOS CAMPOS BUSCADOR AL CAMBIAR INDICES O AL ENTRAR
function borra(obj,clase,selectorid,numbuscador) {
	
	if ((numbuscador == '')||(numbuscador == undefined)){ numbuscador=1; }
	objv=obj.value;
	vector=eval(selectorid+'_'+clase+'_vector');
   	indiceA=eval(selectorid+'_'+clase+'_indiceA'+numbuscador);
   	
	//alert("OBJVALUE "+objv);
	//alert(vector);
   	//alert(indiceA);

   	// DETECTAMOS LOS CAMPOS CON -OID.campo (XPATH) para la etiqueta del campo.
   	label=vector[indiceA].split("-OID.");
   	if (label.length == 2){ label=label[1].toUpperCase()+' de la clase '+label[0].toLowerCase(); } else { label=label[0].toUpperCase(); }
	if (objv == 'Buscar '+clase+' por '+label) { obj.value=''; }

}

// ######################### FUNCIONES DE FECHA #############################


// TESTEA LA FECHA CON SU FORMATO DE CONTROL CORRESPONDIENTE Y RELLENA LOS CAMPOS CORRESPONDIENTES A LA FECHA Y SUS COMPONENTES.
// DEL FORMATO DE ALMACENAMIENTO FINAL SE ENCARGA LA FUNCION SAVEDATETIMES() EN CHECKINPUT CUANDO TODOS LOS DATOS SON CORRECTOS.
// DATEID: 		ID DEL CAMPO FECHA
// DATEFORMAT:	FORMATO G DE FECHA EN MAYUSCULAS. [D1,D2]
function formatDate(dateid,dateformat){

		if (document.getElementById(dateid) == null) { alert('No existe el campo '+dateid); return; }
		
		// DEPENDIENDO DEL FORMATO G DE LA FECHA SE UTILIZAN UNAS FUNCIONES DE TEST U OTRAS PARA COMPROBAR LA VALIDEZ DE LA MISMA.
		if (dateformat.toUpperCase() == 'D1'){
			// COGEMOS EL OBJETO ANTES DE QUITARLE EL TIME
			objdate=document.getElementById(dateid);
			// LE QUITO EL TIME YA QUE DAY,MONTH Y YEAR NO LO LLEVAN.
			dateid=dateid.substring(4);
			if ((document.getElementById('day'+dateid).value == '')||(document.getElementById('month'+dateid).value == '')||(document.getElementById('year'+dateid).value == '')) { return; } 
			
			objdate.tested=0;
			objday=document.getElementById('day'+dateid);
			objmonth=document.getElementById('month'+dateid);
			objyear=document.getElementById('year'+dateid);
			if (validafecha(objday,objmonth,objyear)){  objdate.tested=1;  objdate.value=objday.value +'/'+objmonth.value +'/'+objyear.value; } else { objdate.value='';  document.getElementById('day'+dateid).value=''; document.getElementById('month'+dateid).value=''; document.getElementById('year'+dateid).value=''; return; }
			
		} 
		// FORMATO D2: 1CAMPO 
		if (dateformat.toUpperCase() == 'D2'){
			if (document.getElementById(dateid).value == '') { return; }
			objdate=document.getElementById(dateid);
			objdate.tested=0;
			// CONTROL DE CARACTERES 
			caracteresfecha(objdate);
			// CONTROL DE FORMATO Y VALIDACIÓN
			formatofecha(objdate);
			objdate.tested=1;	
		} 
		
		// FORMATO D3: 1CAMPO para fechas de nacimiento
		if (dateformat.toUpperCase() == 'D3'){			
			if (document.getElementById(dateid).value == '') { return; }
			objdate=document.getElementById(dateid);
			objdate.tested=0;
			// CONTROL DE CARACTERES 
			caracteresfecha(objdate);
			// CONTROL DE FORMATO Y VALIDACIÓN
			formatofechaNac(objdate);
			objdate.tested=1;	
		} 
}
// END FORMAT ANY DATE TIME FIELD      


// CHANGE THE TIME FORMAT DD/MM/YYYY TO G FORMAT YYYY/MM/DD BEFORE SUBMIT THE DATA
function savedatetimes(datelist,dateformat){

	// VECTOR DE CAMPOS DATE
	var timefields = new Array();	
	timefields=datelist.split(",");
	
	// VECTOR DE FORMATOS DATE
	var timeformats = new Array();	
	timeformats=dateformat.split(",");

	for(i=0;i<timefields.length;i++){
		// CHEQUEAR SI EL CAMPO FECHA HA SIDO YA TESTEADO, SINO LO TESTEAMOS.
		var mytimefield=document.getElementById(timefields[i]);				
		if ((mytimefield.getAttribute("tested") == undefined)||(mytimefield.getAttribute("tested") == 0)) { formatDate(timefields[i],timeformats[i]);  }
		
		// CAMBIAR EL FORMATO DE DD/MM/AAAA A AAAA/MM/DD PARA SU CORRECTO ALMACENAMIENTO.
		mydate=document.getElementById(timefields[i]).value;
		//alert(mydate);
		if (mydate != ''){
			mynewdate=mydate.split("/")[2] + '/' + mydate.split("/")[1] + '/' + mydate.split("/")[0];
			if(mynewdate == '//'){mynewdate="";}
			//alert('G DATE FORMAT FOR '+timefields[i]+':'+mynewdate);
			document.getElementById(timefields[i]).value=mynewdate;
		}
		else { document.getElementById(timefields[i]).value=''; }
	}
	
}
// END SAVE DATE TIMES FUNCTION



// GRABA LAS FECHAS CUANDO SE RETORNAN VIA Q2XML DENTRO DE FMANAGER, RECIBE EL TIPO DE FECHA D1 O D2 EL ID DEL CAMPO TIME Y EL VALOR DE LA FECHA.
function cargarDate(datetype,dateid,datevalue){
	
		// alert('dentro de cargarDate');
		// DATE FORMAT 1: 3 SELECTFIELDS (DAY,MONTH AND YEAR) AND 1 HIDDEN TIME FIELD
		if (datetype == 'D1'){
			
			// GET DAY,MONTH AND YEAR OBJ
			objday=document.getElementById('day'+dateid);
			objmonth=document.getElementById('month'+dateid);
			objyear=document.getElementById('year'+dateid);
			
			// GET DATE OBJ
			timeid='time'+dateid;
			objdate=document.getElementById(timeid);
			
			//TRANSFORM DE DATE TO DD/MM/YYYY AND DAY, MONTH AND YEAR VALUES.
			
			if (datevalue == '') { return; }
			
			day_value=datevalue.split("/")[2];
			month_value=datevalue.split("/")[1];
			year_value=datevalue.split("/")[0];
						
			date_value=datevalue.split("/")[2]+'/'+datevalue.split("/")[1]+'/'+datevalue.split("/")[0];
			// FILL THE OBJ VALUES.
			objday.value   = day_value; 
			objmonth.value = month_value;
			objyear.value  = year_value;
			objdate.value  = date_value;		
	
		}
		
		// DATE FORMAT 2: 1 TIME TEXTFIELD AND 3 HIDDEN FIELDS (DAY,MONTH AND YEAR)
		if (datetype == 'D2'){
			
			// GET DAY,MONTH AND YEAR OBJ
			objday=document.getElementById('day'+dateid);
			objmonth=document.getElementById('month'+dateid);
			objyear=document.getElementById('year'+dateid);
			
			// GET DATE OBJ
			timeid='time'+dateid;
			objdate=document.getElementById(timeid);
			
			//TRANSFORM DE DATE TO DD/MM/YYYY AND DAY, MONTH AND YEAR VALUES.
			
			if (datevalue == '') { return; }
			
			day_value=datevalue.split("/")[2];
			month_value=datevalue.split("/")[1];
			year_value=datevalue.split("/")[0];
						
			date_value=datevalue.split("/")[2]+'/'+datevalue.split("/")[1]+'/'+datevalue.split("/")[0];
			
			// FILL THE OBJ VALUES.
			objday.value   = day_value; 
			objmonth.value = month_value;
			objyear.value  = year_value;
			objdate.value  = date_value;		
		}
	}

	
// BORRA LAS FECHAS CUANDO SE NECESITA EN BLANQUEARCAMPOS VIA Q2XML DENTRO DE FMANAGER, RECIBE EL TIPO DE FECHA D1 O D2 EL ID DEL CAMPO TIME Y EL VALOR DE LA FECHA. 	
function borrarDate(dateid){
	
	// GET DAY,MONTH AND YEAR OBJ
	objday=document.getElementById('day'+dateid);
	objmonth=document.getElementById('month'+dateid);
	objyear=document.getElementById('year'+dateid);
			
	// GET DATE OBJ
	timeid='time'+dateid;
	objdate=document.getElementById(timeid);
	
	// REMOVE DATE FIELD
	objday.value='';
	objmonth.value='';
	objyear.value='';
	objdate.value='';
		
	}


// CALCULA EL NUMERO DE DIAS ENTRE DOS FECHAS EN BASE A LOS MILISEGUNDOS.
function daysBetween(date1, date2) {
   
	var DSTAdjust = 0;
    // constants used for our calculations below
    oneMinute = 1000 * 60;
    var oneDay = oneMinute * 60 * 24;
    // equalize times in case date objects have them
    date1.setHours(0);
    date1.setMinutes(0);
    date1.setSeconds(0);
    date2.setHours(0);
    date2.setMinutes(0);
    date2.setSeconds(0);
    // take care of spans across Daylight Saving Time changes
    if (date2 > date1) {
        DSTAdjust = 
            (date2.getTimezoneOffset( ) - date1.getTimezoneOffset( )) * oneMinute;
    } else {
        DSTAdjust = 
            (date1.getTimezoneOffset( ) - date2.getTimezoneOffset( )) * oneMinute;    
    }
    var diff = Math.abs(date2.getTime( ) - date1.getTime( )) - DSTAdjust;
    return Math.ceil(diff/oneDay);

}

function autocalculoFechaPlazo(fecha,dias,calculo){
	
	// SI FALTA ALGUN VALOR SALIMOS.
	if ((fecha == '')||(dias == '')){ return; }
	fecha = fecha.split("/");
	dia1 = fecha[0];
	mes1 = fecha[1];
	ano1 = fecha[2];
		
	// paso los dias a restar o sumar a milisegundos 
	var diasInMs = dias * 24 * 60 * 60 * 1000;
	
	// creo un nuevo objeto DATE donde voy a alojar la fecha que paso por url
	var targetDate = new Date();
	targetDate.setDate(dia1);
	targetDate.setMonth(mes1-1);
	targetDate.setFullYear(ano1);
	targetDate.setHours(0)
	targetDate.setMinutes(0)
	targetDate.setSeconds(0)
	
	// paso la fecha a milisegundos
	var date1InMs = targetDate.getTime();
	
	// hago las suma teniendo la fecha y los dias en milisegunods
	if (calculo == "+"){
	NewDateInMs = date1InMs + diasInMs;
	}else{
	NewDateInMs = date1InMs - diasInMs;
	}
	
	// creo el objeto DATE para la fecha de salida
	targetNewDate = new Date();
	// cargo al objecto la fecha producida por los milisegundos
	targetNewDate.setTime(NewDateInMs);
	
	var NewMonth = targetNewDate.getMonth() + 1;
	var NewDay = targetNewDate.getDate();
	if (NewMonth < 10) { NewMonth = '0' + NewMonth; }
	if (NewDay < 10) { NewDay = '0' + NewDay; }
	
	//return( targetNewDate.getFullYear() + '/' + NewMonth + '/' + NewDay);
	return( NewDay + '/' + NewMonth + '/' + targetNewDate.getFullYear());
}


function autocalculoFecha(date1,date2,resultfield,format,dateformat){
	
	if ((document.getElementById(date1).value == '')||(document.getElementById(date2).value == '')) { return;}
	plazo=0;
	// COMPROBACION DE LA FECHA 1, PUEDE QUE SEA UN PLAZO, EN TAL CASO REDIRECCIONAMOS A LA FUNCION CORRESPONDIENTE
	if (( format == '+' )||( format == '-' )){
		fecha1=document.getElementById(date1).value;
		plazo=1;
	}
	else {
		// COMPROBAR QUE LA FECHA FUE TESTEADA MEDIANTE SU PROPIEDAD TESTED
		if ((document.getElementById(date1).getAttribute("tested") == undefined)||(document.getElementById(date1).getAttribute("tested") == 0)) { 
			formatDate(date1,dateformat);
		}
		fecha1=document.getElementById(date1).value;
	} 
	
	// COMPROBAR QUE LA FECHA FUE TESTEADA MEDIANTE SU PROPIEDAD TESTED	
	if ((document.getElementById(date2).getAttribute("tested") == undefined)||(document.getElementById(date2).getAttribute("tested") == 0)) { 
		 formatDate(date2,dateformat);
	}
	fecha2=document.getElementById(date2).value;
	
	// CAMPO DE RESULTADO DE LA FUNCION.	
	resultado=document.getElementById(resultfield);

	
	
	// SI FALTA ALGUNO DE LOS DOS VALORES NO SEGUIMOS CON LA FUNCION
	if ((fecha1 == '') || (fecha2 == '')) {	return; }
	
	// date2 siempre es una fecha dd/mm/aaaa
	d2year=fecha2.split("/")[2];
	d2month=fecha2.split("/")[1];
	d2month--;
	d2day=fecha2.split("/")[0];
	
	
	// si no tiene / entonces tomamos la date1 como un plazo
	if (plazo == 1){
		resultado.value = autocalculoFechaPlazo(fecha2,fecha1,format);
		
		// RELLENAMOS LOS CAMPOS HIDDEN DAY MONTH Y YEAR DEL CAMPO RESULTADO
		var resultaux = resultfield;
		resultaux = resultaux.substring(4);
		diaaux='day'+ resultaux;
		mesaux='month'+ resultaux;
		yearaux='year'+ resultaux;	
		
		resultadoplazo=resultado.value;
		dia=resultadoplazo.split("/")[0];
		mes=resultadoplazo.split("/")[1];
		anyo=resultadoplazo.split("/")[2];
			
		document.getElementById(diaaux).value=dia;
		document.getElementById(mesaux).value=mes;
		document.getElementById(yearaux).value=anyo;			
	}
	else{
		// date 1 puede ser una fecha o un plazo
		d1year=fecha1.split("/")[2];
		d1month=fecha1.split("/")[1];
		d1month--;
		d1day=fecha1.split("/")[0];
		
		// comprobar si la fecha2 es mayor que la fecha1 sino salir!.
		
		d1=new Date(d1year,d1month,d1day);
		d2=new Date(d2year,d2month,d2day);
		
		if (d2 >= d1){
		
			// DEFAULT RESULT IN DAYS
			total=daysBetween(d1,d2);
			resulttime=total;
			
			// YEAR RESULTS
			if (format == 'year' ) { resulttime=Math.round(total/365);  }
			// MONTH RESULT TAKING 30 DAYS/MONTH.
			if (format == 'month' ) { resulttime=Math.round(total/30); }
	
			resultado.value=resulttime;
		}
		else{
			d1month++;
			d2month++;
			alert('La fecha '+d1day+'/'+d1month+'/'+d1year+' es Mayor a la fecha '+d2day+'/'+d2month+'/'+d2year);
		}	
	}
}


// FUNCIONES PARA LANZAR EL CALENDARIO DE LOS CAMPOS FECHA ( FORMATO DE FECHA 1: 3 SELECTORES Y 1 HIDDEN )
function calendario(campo,formulario){
	
	IdCalendario='C'+campo;
	addCalendar(IdCalendario,"Calendario",campo,formulario);
	showCal(IdCalendario);
}

// FUNCIONES PARA LANZAR EL CALENDARIO DE LOS CAMPOS FECHA ( FORMATO DE FECHA 2: 1CAMPO TEXT Y 3 HIDDEN )
function calendarioF2(campo,formulario){
	IdCalendario='C'+campo;
	addCalendarF2(IdCalendario, "Calendario",campo,formulario);
	showCal(IdCalendario); 
}





function bisiesto(anyo){
if(anyo % 4 ==0 &&(!(anyo % 100 ==0)||(anyo % 400 ==0))) return 1;
else return 0;
}

function validafecha(dia,mes,anyo){
// valida que la fecha introducida sea correcta

// validacion para campos fecha formato 1
if (fechaformat == 0) {
	ddia=dia.value;
	dmes=mes.value;
	danyo=anyo.value;
}
// validacion para campos fecha formato 2
else {
	ddia=dia;
	dmes=mes;
	danyo=anyo;	
	}
		
if (ddia>31) { alert(show_message('2')); return 0;}
if (dmes>12) { alert(show_message('26')); return 0;}

if ((ddia=='')&&(dmes=='')&&(danyo=='')){return 1;}
if ((dmes==1)||(dmes==3)||(dmes==5)||(dmes==7)||(dmes==8)||(dmes==10)||(dmes==12)){
	if (ddia>31){ return 0; }
}
if (dmes==2){
	if (ddia>29){alert(show_message('2')); return 0; }
	if ((ddia==29)&&(!bisiesto(danyo))){ alert(show_message('3')); return 0;}
}
if ((dmes==4)||(dmes==6)||(dmes==9)||(dmes==11)){
	if (ddia>30) {alert(show_message('2')); return 0;}
}
if ((ddia=='')||(dmes=='')||(danyo=='')){return 0;}
return 1;
}

function caracteresfecha(obj){
   dato=obj.value;
   var cadenatexto="0123456789-/";
   var estecaracter;
   var contador=0;
   var esnumero=0;
   while ((esnumero!=-1)&&(contador<dato.length)){
	estecaracter=dato.charAt(contador);
	esnumero=cadenatexto.indexOf(estecaracter);
	contador++;
   }
   if (esnumero==-1) { alert(show_message('24')); obj.value=''; return 0; }
   else return 1;   
}


function formatofecha(obj){
	formato=0;
	
	dato=obj.value;
	if (dato == '') { return 0; }
		
	// CONTROL PARA FORMATO DE FECHA: ES POSIBLE ENCONTRAR UN AAAA/MM/DD  AL HACER UN GO BACK DESPUES DE UNA INSERCIÓN 
	// EN UNA ACCIÓN FORTUITA O MAL INTENCIONADA.
	
	formatfecha=1;
	
	var r1 = /\d\d\d\d\/\d\d\/\d\d/;
	if (r1.test(dato)) {
		
		redia=dato.substring(8,10);
		remes=dato.substring(5,7);
		reanyo=dato.substring(0,4);
		fecha=''+redia+''+remes+''+reanyo;
		digitos=8;
		formatfecha=0;	
		
	} 
	
	// CONTROL PARA FORMATO DE FECHA: ES POSIBLE ENCONTRAR UN DIA O UN MES SIN EL 0 DELANTE CUANDO NO LLEGAN A 10 CON
	// FORMATO DE FECHA EN / O EN - INDEPENDIENTEMENTE DEL FORMATO FINAL (4,6 O 8 DIGITOS)
	
	var r2 = /^\d(\/|\-)\d\d/;
	if (r2.test(dato)) { dato='0'+dato; }
	
	var r3 = /^\d\d(\/|\-)\d{1}(\/|\-)/;
	if (r3.test(dato)) { 
		
		redia=remes=reanyo='';
		redia=dato.substring(0,2);
		remes='0'+dato.substring(3,4);		
		reanyo=dato.substring(5,dato.length);
		fecha=''+redia+''+remes+''+reanyo;
		digitos=fecha.length;
		formatfecha=0;		
	}
	
	var r4 = /^\d{1}(\/|\-)\d{1}(\/|\-)/;
	if (r4.test(dato)) {
		
		dato='0'+dato;
		redia=dato.substring(0,2);
		remes='0'+dato.substring(3,4);
		reanyo=dato.substring(5,dato.length);
		fecha=''+redia+''+remes+''+reanyo;
		digitos=fecha.length;
		formatfecha=0;		
	}
		
	if (formatfecha) {
		
		fecha=dato.replace(/\//g,'');
		fecha=fecha.replace(/\-/g,'');
		digitos=fecha.length;
	}
	

	
	// FORMATOS POSIBLES: CON O SIN / ó -
	// F1: 8 DIGITOS: DDMMAAAA
	// F2: 6 DIGITOS: DDMMAA
	// F3: 4 DIGITOS: DDMM
	
	if (digitos == 8) { formato=1; }
	if (digitos == 6) { formato=2; }
	if (digitos == 4) { formato=3; }
	if (formato == 0) { alert(show_message('25')); obj.value=''; return 0; }
	
	// CHEQUEADO DE FECHA SEGUN FORMATO
	if (formato == 1) {
		
		dia=fecha.substring(0,2);
		mes=fecha.substring(2,4);
		anyo=fecha.substring(4,8);
		fechaformat=1;
				
		if (!validafecha(dia,mes,anyo)) { obj.value=''; return 0; }	
			
	}
		
	if (formato == 2) {
		
		dia=fecha.substring(0,2);
		mes=fecha.substring(2,4);
		anyo='20'+fecha.substring(4,6);
		fechaformat=1;
		
		if (!validafecha(dia,mes,anyo)) {  obj.value=''; return 0; }
		
		
	}
		
	if (formato == 3) {
		
		now=new Date();
		dia=fecha.substring(0,2);
		mes=fecha.substring(2,4);
		anyo=now.getFullYear();
		fechaformat=1;
		
		if (!validafecha(dia,mes,anyo)) {  obj.value=''; return 0; }
	
	}
		
	if (formato != 0) {
		var nombre = obj.id;
		nombre = nombre.substring(4);
		diaaux='day'+ nombre;
		mesaux='month'+ nombre;
		yearaux='year'+ nombre;	
	
		document.getElementById(diaaux).value=dia;
		document.getElementById(mesaux).value=mes;
		document.getElementById(yearaux).value=anyo;	
		obj.value=dia+'/'+mes+'/'+anyo;	
		
		
	}	
	return 1;
	}

function formatofechaNac(obj){
	formato=0;
	
	dato=obj.value;
	if (dato == '') { return 0; }
		
	// CONTROL PARA FORMATO DE FECHA: ES POSIBLE ENCONTRAR UN AAAA/MM/DD  AL HACER UN GO BACK DESPUES DE UNA INSERCIÓN 
	// EN UNA ACCIÓN FORTUITA O MAL INTENCIONADA.
	
	formatfecha=1;
	
	var r1 = /\d\d\d\d\/\d\d\/\d\d/;
	if (r1.test(dato)) {
		
		redia=dato.substring(8,10);
		remes=dato.substring(5,7);
		reanyo=dato.substring(0,4);
		fecha=''+redia+''+remes+''+reanyo;
		digitos=8;
		formatfecha=0;	
		
	} 
	
	// CONTROL PARA FORMATO DE FECHA: ES POSIBLE ENCONTRAR UN DIA O UN MES SIN EL 0 DELANTE CUANDO NO LLEGAN A 10 CON
	// FORMATO DE FECHA EN / O EN - INDEPENDIENTEMENTE DEL FORMATO FINAL (4,6 O 8 DIGITOS)
	
	var r2 = /^\d(\/|\-)\d\d/;
	if (r2.test(dato)) { dato='0'+dato; }
	
	var r3 = /^\d\d(\/|\-)\d{1}(\/|\-)/;
	if (r3.test(dato)) { 
		
		redia=remes=reanyo='';
		redia=dato.substring(0,2);
		remes='0'+dato.substring(3,4);		
		reanyo=dato.substring(5,dato.length);
		fecha=''+redia+''+remes+''+reanyo;
		digitos=fecha.length;
		formatfecha=0;		
	}
	
	var r4 = /^\d{1}(\/|\-)\d{1}(\/|\-)/;
	if (r4.test(dato)) {
		
		dato='0'+dato;
		redia=dato.substring(0,2);
		remes='0'+dato.substring(3,4);
		reanyo=dato.substring(5,dato.length);
		fecha=''+redia+''+remes+''+reanyo;
		digitos=fecha.length;
		formatfecha=0;		
	}
		
	if (formatfecha) {
		
		fecha=dato.replace(/\//g,'');
		fecha=fecha.replace(/\-/g,'');
		digitos=fecha.length;
	}
	

	
	// FORMATOS POSIBLES: CON O SIN / ó -
	// F1: 8 DIGITOS: DDMMAAAA
	// F2: 6 DIGITOS: DDMMAA
	// F3: 4 DIGITOS: DDMM
	
	if (digitos == 8) { formato=1; }
	if (digitos == 6) { formato=2; }
	if (digitos == 4) { formato=3; }
	if (formato == 0) { alert(show_message('25')); obj.value=''; return 0; }
	
	// CHEQUEADO DE FECHA SEGUN FORMATO
	if (formato == 1) {
		
		dia=fecha.substring(0,2);
		mes=fecha.substring(2,4);
		anyo=fecha.substring(4,8);
		fechaformat=1;
				
		if (!validafecha(dia,mes,anyo)) { obj.value=''; return 0; }	
			
	}
		
	if (formato == 2) {
		
		dia=fecha.substring(0,2);
		mes=fecha.substring(2,4);
		anyo='19'+fecha.substring(4,6);
		fechaformat=1;
		
		if (!validafecha(dia,mes,anyo)) {  obj.value=''; return 0; }
		
		
	}
		
	if (formato == 3) {
		
		now=new Date();
		dia=fecha.substring(0,2);
		mes=fecha.substring(2,4);
		anyo=now.getFullYear();
		fechaformat=1;
		
		if (!validafecha(dia,mes,anyo)) {  obj.value=''; return 0; }
	
	}
		
	if (formato != 0) {
		var nombre = obj.id;
		nombre = nombre.substring(4);
		diaaux='day'+ nombre;
		mesaux='month'+ nombre;
		yearaux='year'+ nombre;	
	
		document.getElementById(diaaux).value=dia;
		document.getElementById(mesaux).value=mes;
		document.getElementById(yearaux).value=anyo;	
		obj.value=dia+'/'+mes+'/'+anyo;	
		
		
	}	
	return 1;
}
	
// #################### FIN FUNCIONES DE FECHA #################################



// FUNCION PARA LANZAR LOS LINKS EXTERNOS CENTRADOS EN LA PAGINA.    
var myWindow;
function openCenteredWindow(url,where) {
	
    var width = 800;
    var height = 600;
    var left = parseInt((screen.availWidth/2) - (width/2));
    var top = parseInt(((screen.availHeight/2) - (height/2))-15);
    var windowFeatures = "width=" + width + ",height=" + height + 
        ",status,resizable,left=" + left + ",top=" + top + 
        ",screenX=" + left + ",screenY=" + top;
    myWindow = window.open(url,where,windowFeatures);
}


// LANZAR URLs DE CAMPOS WEB.
function lanzarUrl(objid){
	
	url=document.getElementById(objid);
	if (url == '') { return; }
	
	var rurl = "^http:\/\/";
	var regurl = new RegExp(rurl , "i");
	var theurl=url.value;
	
	if (!regurl.test(theurl)) { theurl='http://'+url.value; }
		
	if ((url.target == '')||(url.target == undefined)){ url.target='_blank'; location.href=theurl; }
	else { url.target='_blank'; openCenteredWindow(theurl,url.target); }
	
}


// FUNCION QUE VALIDA EL CAMPO MAIL SI ES DIFERENTE DE VACIO
function checkmail(id) {
	var mailok = true;
	var idmail = document.getElementById( 'id' + id );
	var domainmail = document.getElementById( 'domain' + id );
	var patronid =  new RegExp('^([0-9a-z]+([\._-]{1}[0-9a-z]*)*)$');
	var patrondomain = new RegExp('^([0-9a-z]+)(([\._-]{1}[a-z]+)*[\.]{1}[a-z]{2,3})$');
	if( idmail.value == '' ) {
	//idmail.className = 'inputERROR';
	mailok = true;
	}
	else {
		if(patronid.test(idmail.value)==false){
		   alert("Usuario Incorrecto");
		   idmail.className = 'inputERROR';
		   //idmail.value="";
		   //idmail.focus();
		   mailok = false;
	          }
	}
	if( domainmail.value == '' ) {
		//domainmail.className = 'inputERROR';
		mailok = true;
	}
	else {
		if(patrondomain.test(domainmail.value)==false){
		alert("Dominio Incorrecto");
		domainmail.className = 'inputERROR';
		//domainmail.value="";
		//domainmail.focus();	
		mailok = false;
	     }
	}
return mailok;
}

function checkmail2(id1,id2)
 {
	var mailok = true;
	var idmail = document.getElementById(id1);
	var domainmail = document.getElementById(id2);
	var patronid =  new RegExp('^([0-9a-z]+([\._-]{1}[0-9a-z]*)*)$');
	var patrondomain = new RegExp('^([0-9a-z]+)(([\._-]{1}[a-z]+)*[\.]{1}[a-z]{2,3})$');
	if( idmail.value != '' ) 
	{
	if(patronid.test(idmail.value)==false)
	{
		   alert("Usuario de correo Incorrecto");
		   idmail.className = 'inputERROR';
		   mailok = false;
	}
	}
	if( domainmail.value != '' ) 
	{
	if(patrondomain.test(domainmail.value)==false)
	{
		alert("Dominio de Correo Incorrecto");
		domainmail.className = 'inputERROR';
		mailok = false;
	}
	}
	return mailok;
}


// FUNCION BUSCAR PARA LOS CAMPOS SEARCH QUE USAN Q2XML
function Buscar(claseresultado,claseprevia,valorid,selectorid,numbuscador,cgiurl,campos_visualizacion,tiposalida,tiporelacion){
  // valido algunas variables de entrada //	
  if ((numbuscador == '')||(numbuscador == undefined)){ numbuscador=1; }
  if (claseprevia == ''){ claseprevia=claseresultado; nivel=1; } else { nivel=2; }
       
  // evaluo el vector y el indice //
  vector=eval(selectorid+'_'+claseprevia+'_vector'); 
  indice=eval(selectorid+'_'+claseprevia+'_indiceA'+numbuscador);  
 
 
 
  // tomo el valor del objecto del cual voy a hacer el filtro de la busqueda // 
  objvalor=document.getElementById(valorid);
 
  // SI SE TRATA DE UN SELECTOR SALTAMOS EL VALOR MULTIPLE 
  if ((objvalor.type == 'select-one')||(objvalor.type == 'text')){ valor=objvalor.value; ; }
  else {
    objvalor=document.getElementsByName(valorid); 
  	if (objvalor.length == 1){ 
		 if (objvalor[0].checked == true) { valor=objvalor[0].value; } else { return; }
  	}else{ 
	  	// CHECK DE VALOR MULTIPLE (OID) 
	  	valorchecks=objvalor.length;
    	valor='';
    	for (var i=0;i<valorchecks;i++){ if (objvalor[i].checked == true) { valor=valor+objvalor[i].value+','; } }
	}
  }
 
  
  // SI NO HAY VALOR SALGO DE LA FUNCION //
  if (valor == ''){ return; }
 
 // BUSQUEDA Q2XML
 // al final de la llamada al Q2 hay que pasar un parametro más con un número random para evitar el cacheado de navegador.  
 //var miCargador = new callServer();
 var listfields=campos_visualizacion;
 
// buscador1_noticias_elementos
 //alert(autorreleno);
  
  // SOLO PARA BUSCADORES DE NIVEL 2 ////////////////////////////////////////
  // TRATO EL CAMPO QUE VA A IR COMO VALOR EN EL SELECTOR O EN EL CHECK
  // Y TAMBIEN TRATO EL CAMPO POR EL CUAL SE VA A BUSCAR (EL INDICE DE BUSQUEDA)
  // PORQUE DEPENDIENDO DE SI LA BUSQUEDA EN DIRECTA O INDIRECTA.
  // DIRECTA: el campo intermedio contiene el OID de la clase final y la clase final el K
  // INDIRECTA: el campo intermedio contiene el K y la clase final contiene el OID de la clase intermedio
   
  //alert('Nivel: ' + nivel + ' tiporelacion: ' + tiporelacion);
  if (nivel == 2) {
	  	if (tiporelacion == 'directa')	{		  	
		  	campovalue = claseresultado + '-OID';
		  	campo=vector[indice];
	  	}else{
	  		campovalue = 'D.k';
		  	campo=vector[indice];
		}
  }else{
	  if (tiporelacion == 'directa') {
		 campovalue = 'D.k';
		 campo='D.k'; 
	  }else{
		 campovalue = 'D.k';
		 campo=vector[indice];		  
	  }
  }
  /////////////////////////////////////////////////////////////////////////////////
  //alert('SALE: CampoValue: ' + campovalue + ' campo: ' + campo);
  
  
  // GENERAMOS EL Q2XML  
  //stringQuery=cgiurl + "/q2XML.cgi?type="+claseprevia+"&campos="+campovalue+","+listfields+"&where="+campo+"="+valor;
  stringQuery=cgiurl + "/q2XML.cgi?type="+claseprevia+"&campos="+campovalue+","+listfields+"&where="+campo+"=<<"+valor;
  //alert(stringQuery)
   var numerobuscador = selectorid.split("buscador");  
  //alert('miCargador' + numerobuscador[1]);
  miCargador=eval('miCargador' + numerobuscador[1]); 
  
	miCargador.onLoad=function(ok){
		if (ok){
		// ACA VA TODO LO QUE SE TIENE QUE HACER SI SE CARGO EL Q2
			/////////////////////////////////////////////////////////////////////////////////////////////////////	
			////// TIPO DE SALIDA TOCOMBO ///////////////////////////////////////////////////////////////////////
			/////////////////////////////////////////////////////////////////////////////////////////////////////
			if (tiposalida == 'TOCOMBO'){
				var campos_vi_arr = campos_visualizacion.split(",");	
				if (nivel == 1)	{
				miCargador.xmlToCombo(selectorid + '_resultado_select',campos_vi_arr[0],campovalue,1);
				}else{
				miCargador.xmlToCombo(selectorid + '_resultado_select_previo',campos_vi_arr[0],campovalue,1);	
				}
			}
			///////////////////////////////////////////////////////////////////////////////////////////////////// 
			////// TIPO DE SALIDA TO CHECKS  ////////////////////////////////////////////////////////////////////
			/////////////////////////////////////////////////////////////////////////////////////////////////////
			 if (tiposalida == 'TOCHECK'){		 

					var numRegistros=miCargador.getCampo(campovalue).length;	
					if (numRegistros == 0) { 
						//cuando no recupera nada.
						html_str='Esta función no tiene Parametros';
					}
					else {
						// cuando recupera registros. (0 SIEMPRE ES D.K) ETIQUETA,NOMBRE[fijo]=nameCheck,VALOR
						if (valor == '') { return; }
						labelfield=miCargador.getCampo(campos_visualizacion.split(",")[0]);	
						valuefield=miCargador.getCampo(campovalue);
						html_str='<table border=0 cellspacing=0 cellpadding=0 width=100%>';				
						var contador = 0;
						for (i=0; i<=numRegistros-1; i++){
							if (contador == 0) { html_str+='<tr>'; }							
							
							if (nivel == 1)	{
								selectoridchk = selectorid + '_lista_checks'
							}else{
								selectoridchk = selectorid + '_lista_checks_previo'
							}
							html_str+='<td width=1px><input type=checkbox ID="' + selectoridchk + '" name='+claseresultado+'-OID class=checkbutton value='+valuefield[i].firstChild.nodeValue +' onclick="multiple(this,\'t'+i+claseresultado+'\',\''+labelfield[i].firstChild.nodeValue+'\')" ></td>';					
							html_str+='<td aling=left class=chklabel id=t'+i+claseresultado+' >&nbsp;'+labelfield[i].firstChild.nodeValue+'</td>';					
							if (contador == 1) { html_str+='</tr>'; } else { contador=0; }					
							contador++;
						}
						html_str+='</table>';
					}
					// escritura de la salida en la celda resultado.											
					if (nivel == 1)	{
						document.getElementById(selectorid + '_resultado_check').innerHTML=html_str;
					}else{	 			
						document.getElementById(selectorid + '_resultado_check_previo').innerHTML=html_str;
					} 		 		
					//document.getElementById(selectorid + '_resultado_check').innerHTML=html_str;		
			}
	
		}
	}; // END FUNCTION CONTROLADORA
	miCargador.loadXMLhttp(stringQuery);
			  
	if (nivel == 1){ 
		mostrar=document.getElementById(selectorid+'_resultado');
		if( mostrar.className == 'ocultar') { mostrar.className='mostrar'; }
	}
	if (nivel == 2){ 
		mostrar=document.getElementById(selectorid+'_resultado_previo');
		if( mostrar.className == 'ocultar') { mostrar.className='mostrar'; }
	}
}


/*

// FUNCION BUSCAR PARA LOS CAMPOS DOCUMENT QUE USAN Q2XML
function BuscarDocs(campo,clase,numcolumnas,docs,docsid,cgiurl,imgurl){
	alert("CLASE: "+clase+" NUMCOLUMNAS: "+numcolumnas+" CARPETAS DOCS: "+docs+" ID VOLCADO: "+docsid);
	loaded=0;
	var CargadorDocs=eval('Cargador_'+campo);
	// GENERAMOS EL Q2XML
	stringQuery=cgiurl + "/q2XML.cgi?type="+clase+"&campos=D.k,D.filepath,D.filename,titulo&where=repositorio-OID="+docs;
	alert(stringQuery);
	//alert(stringQuery);
	//CargadorDocs.loadXMLhttp(stringQuery);
	if (CargadorDocs.controlLoad==0){
		CargadorDocs.loadXMLhttp(stringQuery);
	} else { 
		loaded=1; 
	}
	
	// ACA VA TODO LO QUE SE TIENE QUE HACER SI SE CARGO EL Q2
	// UTILIZANDO TU FUNCION DE CONTROLLOAD, RECUERDAS?
	
	// SINO RETORNA NADA, MENSAJE NO HAY DOCS.
	if (loaded == 0){
		var numDocs=CargadorDocs.getCampo('D.k').length;	
		if (numDocs == 0) { 
		//cuando no recupera nada.
		alert('No hay Documentos.');
		}
		
		// SI RETORNA DOCS LOS MONTAMOS EN LA ESTRUCTURA.
		else {
			html_str='';
			if (numcolumnas > numDocs) { numcolumnas=numDocs; }
			// AJUSTE DE COLUMNADO 
			if (numcolumnas == 1) { tam='84%'; tamtotal='100%';}
			if (numcolumnas == 2) { tam='32%'; tamtotal='60%'; }
			if (numcolumnas == 3) { tam='27%'; tamtotal='100%';}
			
			// AJUSTE DEL TAMAÑO DEL CONTENEDOR DE DOCUMENTOS			
			if (numDocs > 6) { html_str+='<div class=oidmultiple>'; }
			
			html_str+='<table border=0 cellspacing=1 cellpadding=3 width='+tamtotal+'>';				
			var contador = 0;
			valuefield=CargadorDocs.getCampo('D.k');	
			pathfield=CargadorDocs.getCampo('D.filepath');
			namefield=CargadorDocs.getCampo('D.filename');
			titlefield=CargadorDocs.getCampo('titulo');

			for (i=0; i<=numDocs-1; i++){
				if (contador == 0) { html_str+='<tr>'; }							
				file_path=pathfield[i].firstChild.nodeValue+'/'+namefield[i].firstChild.nodeValue;
				checkid=''+campo+i;
				html_str+='<td width=2%><input id="'+checkid+'" type=checkbox name='+campo+' value='+valuefield[i].firstChild.nodeValue+' class=radio ></td>';
       	    	html_str+='<td width=4%><img src='+imgurl+'/docmini.gif class=imgdoc></td>';
       		    html_str+='<td width='+tam+' id=t'+i+campo+' class=mini>'+titlefield[i].firstChild.nodeValue+'<br><span id=doc>'+namefield[i].firstChild.nodeValue+'</span></td>';
            	contador++;
				if (contador == numcolumnas) { html_str+='</tr>'; contador=0; } 
				
			}
			if (contador != numcolumnas) { html_str+='</tr>'; }
			html_str+='</table>';
			if (numDocs > 6) { html_str+='</div>'; }		
			document.getElementById(docsid).innerHTML='';
			document.getElementById(docsid).innerHTML=html_str;			
		} // FINALIZA TRATAMIENTO DE CAMPOS DE RETORNO.
	} // FINALIZA EL LOADER HASTA AQUI.
} // FINALIZALA FUNCION
*/  


// FUNCION BUSCAR PARA LOS CAMPOS DOCUMENT QUE USAN Q2XML
function BuscarDocs(campo,clase,docs,docsid,cgiurl,imgurl,files){
	//alert("campo: "+campo+" clase: "+clase+" docs: "+docs+" docsid: "+docsid+" cgiurl: "+cgiurl+" imgurl: "+imgurl+" files: "+files);
	loaded=0;
	var CargadorDocs;
	if (campo==campo.replace('asociada','')){
		CargadorDocs=eval('Cargador_'+campo);
	}else{
		CargadorDocs=eval('Cargador_imagenasociada');
	}
	
	// GENERAMOS EL Q2XML
	var stringQuery = cgiurl + "/q2XML.cgi?type=" + clase + "&campos=D.k,D.filepath,D.filename,titulo&where=repositorio-OID=" + docs.replace(/,/g, '|');
	//alert(stringQuery);
	//CargadorDocs.loadXMLhttp(stringQuery);
	
	CargadorDocs.onLoad = function(done) {
		if (done) {
			// ACA VA TODO LO QUE SE TIENE QUE HACER SI SE CARGO EL Q2
			// UTILIZANDO TU FUNCION DE CONTROLLOAD, RECUERDAS?
			
			// SINO RETORNA NADA, MENSAJE NO HAY DOCS.
			if (loaded == 0) {
				var numDocs = CargadorDocs.getCampo('D.k').length;	
				if (!numDocs) {
					//cuando no recupera nada.
					alert('No hay Documentos.');
				}
				// SI RETORNA DOCS LOS MONTAMOS EN LA ESTRUCTURA.
				else {
					var result = this.xmlToArray('D.k,D.filepath,D.filename,titulo');
					for (var i = 0, j = result.D_k.length; i < j; ++i) {
						files.push({ value: result.D_k[i], path: result.D_filepath[i], name: result.D_filename[i], title: result.titulo[i] });
					}
					//alert('antes de updFileList campo '+campo+' docsid '+docsid+' imgurl '+imgurl+' files '+files);
					updFileList(campo,docsid,imgurl,files);
				}
			} // FINALIZA EL LOADER HASTA AQUI.
		}
	};
	CargadorDocs.loadXMLhttp(stringQuery);
} // FINALIZALA FUNCION


// FUNCION QUE LLAMA A LA CARGA DEL BUSCAR DOCUMENTOS.
function cargarDocs(campo,valor,docsid,doc,cgiurl,imgurl){
// HACE LOS PASOS NECESARIOS PARA SELECCIONAR EL RADIO DE CARGA
// FUNCION DE BUSQUEDA
// VISUALZACION DE LA MISMA
// EN LA RECARGA DE LA BUSQUEDA SI YA ESTA CARGADA SOLO VISUALIZA
	
	// CONTROL CONTRA LA NO EXISTENCIA DE CARPETAS DE DOCUMENTOS.
	if (doc == ''){ alert('No existen carpetas de Documentos Asignadas a la Clase Actual. Vaya a la Configuración Correspondiente'); return; }

	// CARGA DE DOCUMENTOS	
	if(valor == 'si'){
	//alert('pintando');
		seleccionlabel='seleccion_'+campo;
		seleccionlabel0='t0seleccion_'+campo;
		seleccionlabel1='t1seleccion_'+campo;
		doclabel='doc_'+campo;
		//alert('pintando');
		seleccionarRadio(seleccionlabel,seleccionlabel0);
		// BUSQUEDA: CLASE D.y=documentos FILTRO repositorio-OID=docs
		BuscarDocs(campo,'documentos','3',doc,docsid,cgiurl,imgurl);
		visibilidad('mostrar',doclabel,''); 
	}	
	// NO CARGA DE DOCUMENTOS
	else {
		
		seleccionarRadio(seleccionlabel,seleccionlabel1);
		visibilidad('ocultar',doclabel,'');
	
	
	}
}




// FUNCION QUE LLAMA A LA CARGA DEL BUSCAR DOCUMENTOS.
function loadDocImg(campo,valor,docsid,doc,cgiurl,imgurl,files,clase){
	//alert('Campo: '+campo+' Valor: '+valor+' docsid: '+docsid+' doc: '+doc+' cgiurl: '+cgiurl+' imgurl: '+imgurl+' files: '+files+' clase: '+clase);

// HACE LOS PASOS NECESARIOS PARA SELECCIONAR EL RADIO DE CARGA
// FUNCION DE BUSQUEDA
// VISUALZACION DE LA MISMA
// EN LA RECARGA DE LA BUSQUEDA SI YA ESTA CARGADA SOLO VISUALIZA
	
	// CONTROL CONTRA LA NO EXISTENCIA DE CARPETAS DE DOCUMENTOS.
	if (doc == ''){ alert('No existen carpetas de Documentos Asignadas a la Clase Actual. Vaya a la Configuraci? Correspondiente'); return; }

	var seleccionlabel='seleccion_'+campo;
	var doclabel='doc_'+campo;
		
	// CARGA DE DOCUMENTOS	
	if (valor == 'si') {
		var tSeleccionlabel='t0seleccion_'+campo;
		var vis = 'mostrar';
		if (files.length) {
			updFileList(campo,docsid,imgurl,files);
		} else {
			// BUSQUEDA: CLASE D.y=documentos FILTRO repositorio-OID=docs
			BuscarDocs(campo,clase,doc,docsid,cgiurl,imgurl,files);
		}
	} else {
		// NO CARGA DE DOCUMENTOS
		var tSeleccionlabel='t1seleccion_'+campo;
		var vis = 'ocultar';
	}
	seleccionarRadio(seleccionlabel,tSeleccionlabel);
	visibilidad(vis, doclabel, '');
}

function updFileList(campo,docsid,imgurl,files) {
	//alert('DENTRO updFileList --> campo '+campo+' docsid '+docsid+' imgurl '+imgurl+' files '+files);
	//alert('updFileList');
	var html_str='';
	var numDocs = files.length;
	var numcolumnas = 3;
	if (numcolumnas > numDocs) { numcolumnas=numDocs; }
	// AJUSTE DE COLUMNADO 
	if (numcolumnas == 1) { tam='84%'; tamtotal='100%'; }
	if (numcolumnas == 2) { tam='32%'; tamtotal='60%'; }
	if (numcolumnas == 3) { tam='27%'; tamtotal='100%'; }
	
	// AJUSTE DEL TAMA? DEL CONTENEDOR DE DOCUMENTOS			
	if (numDocs > 6) { html_str+='<div class=oidmultiple>'; }
	
	html_str+='<table border=0 cellspacing=1 cellpadding=3 width='+tamtotal+'>';				
	var contador = 0;
	
	for (var i = 0, j = files.length; i < j; ++i) {
		if (contador == 0) { html_str += '<tr>'; }							
		var checkid = campo + i;
		html_str += '<td width="2%"><input id="' + checkid + '" type="checkbox" name="' + campo + '" value="' + files[i].value + '" class="radio"></td>';
		html_str += '<td width="4%"><img src="' + imgurl + '/docmini.gif" class="imgdoc"></td>';
	    html_str += '<td width="' + tam + '" id="t' + i + campo + '" class="mini">' + files[i].title + '<br><span id="doc">' + files[i].name + '</span></td>';
		contador++;
		if (contador == numcolumnas) { html_str += '</tr>'; contador = 0; } 
		
	}
	if (contador != numcolumnas) { html_str+='</tr>'; }
	html_str+='</table>';
	if (numDocs > 6) { html_str+='</div>'; }	
	//alert(document.getElementById(docsid));
	document.getElementById(docsid).innerHTML='';
	//alert(html_str);
	document.getElementById(docsid).innerHTML=html_str;
	//alert('fin');
} // FINALIZA TRATAMIENTO DE CAMPOS DE RETORNO.
 

/*	---------------------------------------------------------------------------
	CONTROLADOR DE CAMPOS, IMPLEMENTACIONES: RQ,...
---------------------------------------------------------------------------	*/
function control( id, type, restrict ){	
				var valid = true; var newId = '';
				//alert(id);
				if( restrict == 'RQ' ) {	// RQ = REQUERIDO
					switch ( type ) {												
						case 'texto':
							var element = document.getElementById( id );
							// Quita los espacios al principio y al final (trim)
							element.value = element.value.replace(/^\s+|\s+$/g, '');
							if( element.value === '' ) {
								element.className = 'inputERROR';
								valid = false;
														
							}
						break;											
						case 'actb':
						var newId = id;				
						if( id.match(/-OID$/) ){
						    newId = id.substr(0, id.length-4);
						    
						}
						newId = newId + 'bus';
														
						var element = document.getElementById( newId );																																														
						if( element.value.replace(/^\s+|\s+$/g, '') === '' ) {									
								document.getElementById( newId ).className = 'inputERROR';							
							    valid = false;
						}						
						break;
						
						case 'autocomplete':	
												
						var newId = id;				
						if( id.match(/-OID$/) ){
						    newId = id.substr(0, id.length-4);
						}								
						var element = document.getElementById( newId );																																														
						if( element.value.replace(/^\s+|\s+$/g, '') === '' ) {									
								//document.getElementById( newId + 'bus').className = 'inputERROR';							
							    document.getElementById( newId + 'v' ).className = 'inputERROR';
							    valid = false;
						}						
						break;
						
						
						
						case 'textarea':
						var newId = id + 'txtarea';
						var element = document.getElementById(newId);
						if( element.value.replace(/^\s+|\s+$/g, '') === '' ) {
							document.getElementById(newId).className = 'inputERROR';
							document.getElementById(newId).style.border='1px solid #FF0000';
							valid = false;
						}	
						break;
						
						case 'htmltextarea':
						var element = tinyMCE.getContent(id); //document.getElementById(id);
						if( element.replace(/^\s+|\s+$/g, '') === '' ) {
							document.getElementById(id).className = 'inputERROR';
							document.getElementById(id).style.border='1px solid #FF0000';
							tinyMCE.getInstanceById(id).getWin().document.body.style.backgroundColor='#FF6666';
							valid = false;
						}	
						break;
						
						case 'file':
						case 'image':
						case 'document':
						case 'autocalc':
						case 'autocalcdate':						
						case 'web':
						var element = document.getElementById( id );
						if( element.value.replace(/^\s+|\s+$/g, '') === '' ) {
							document.getElementById(id).className = 'inputERROR';
							valid = false;
								
						}
						break;
						case 'numeric':
							var element = document.getElementById( id );
							if( element.value.replace(/^\s+|\s+$/g, '') === '' ) {
								if(type == 'textarea'){
									var area = document.getElementById(id+'txtarea');
									area.className = 'inputERROR';
									valid = false;
								} else {
									element.className = 'inputERROR';
									valid = false;
								}
							}
							break;
						case 'date2':
							var element = document.getElementById( 'time'+id );
							if( element.value.replace(/^\s+|\s+$/g, '') === '' ) {
								element.className = 'inputERROR';
								valid = false;
							}
							break;
							
						case 'date':
							var element = document.getElementById( 'time'+id );
							if( element.value.replace(/^\s+|\s+$/g, '') === '' ) {
								element.className = 'inputERROR';
								valid = false;
							}
							break;
						
						case 'checkbox':
							// EN ESTE CASO EL ID ES EL NAME DEL GRUPO DE CHECKS
							var element = document.getElementsByName( id );
							var cantidad = element.length;
							var checkeado = 0;
							for( var i = 0; i < cantidad; i++ ) {
								if( element[i].checked == true ) { checkeado++; }
							}
							if( checkeado == 0 ) { valid = false; }
							
							break;
							
						case 'radio':
							// EN ESTE CASO EL ID ES EL NAME DEL GRUPO DE RADIOS
							var element = document.getElementsByName( id );
							var cantidad = element.length;
							var checkeado = 0;
							for( var i = 0; i < cantidad; i++ ) {
								if( element[i].checked == true ) { checkeado++; }
							}
							if( checkeado == 0 ) { valid = false; }
							
							break;
							
						case 'combo':						
							var element = document.getElementById( id );
							var cantidad = element.length;
							var selec = 0;
							for( var i = 0; i < cantidad; i++ ) {
								if( element[i].selected == true && element[i].value.replace(/^\s+|\s+$/g, '') !== '' ) { selec++; }
							}
							if( selec == 0 ) {
								element.className = 'inputERROR';
								valid = false;
							}
							break;
						
						case 'search':
							var element = document.getElementByName( id );
							var cantidad = element.length;
							var selec = 0;
							for( var i = 0; i < cantidad; i++ ) {
								if( element[i].selected == true && element[i].value.replace(/^\s+|\s+$/g, '') !== '' ) { selec++; }
							}
							if( selec == 0 ) {
								element.className = 'inputERROR';
								valid = false;
							}
							break;
							
						case 'relation':
							
							var element = document.getElementById(id);
							var tagname = element.tagName;
							var tagname="";
							var Attribtype = element.getAttribute('type');
							var cantidad = element.length;
							var selec = 0;																											
							
							if( tagname == 'SELECT' ) {
								for( var i = 0; i < cantidad; i++ ) {									
									if( element[i].selected == true && element[i].value.replace(/^\s+|\s+$/g, '') !== '' ) { selec++; }
								}
								if( selec == 0 ) {
										element.className = 'inputERROR';
										valid = false;
								}
							}
							
							if( Attribtype == 'checkbox' ) {
								var elements = document.getElementsByName( id );
								var cantidadchk = elements.length;
								var checkeado = 0;
								for( var i = 0; i < cantidadchk; i++ ) {
									if( elements[i].checked == true ) { checkeado++; }
								}
								if( checkeado == 0 ) { 
									valid = false;

									for( var i = 0; i < cantidadchk; i++ ) {
										elements[i].className = 'inputERROR';
									}
								}
							}
							
							if( Attribtype == 'radio' ) {
								var elements = document.getElementsByName( id );
								var cantidadchk = elements.length;
								var checkeado = 0;
								for( var i = 0; i < cantidadchk; i++ ) {
									if( elements[i].checked == true ) { checkeado++; }
								}
								if( checkeado == 0 ) { 
									valid = false;

									for( var i = 0; i < cantidadchk; i++ ) {
										elements[i].className = 'inputERROR';
									}
								}
							}
							
							if( Attribtype == 'hidden' ) {																							
								newId= id;
								if( id.match(/-OID$/) ){ var newId = id.substr(0, id.length-4);	}						
								newId = newId + 'bus';
								var element = document.getElementById( newId );								
								if( element.value.replace(/^\s+|\s+$/g, '') === '' ) {
									element2 = document.getElementById( newId );
									element2.className = 'inputERROR';
									valid = false;									
								}
							}
							
							
							break;
							
							
							
						case 'hour':						
							
							if( type == 'hour' ) {
								var element1 = document.getElementById( 'hour' + id );
								var element2 = document.getElementById( 'minute' + id );
								var element3 = document.getElementById( 'second' + id );
							}
							if( element1.value.replace(/^\s+|\s+$/g, '') === '' ) {
								element1.className = 'inputERROR';
								valid = false;
							}
							if( element2.value.replace(/^\s+|\s+$/g, '') === '' ) {
								element2.className = 'inputERROR';
								valid = false;
							}
							if( element3.value.replace(/^\s+|\s+$/g, '') === '' ) {
								element3.className ='inputERROR';
								valid = false;
							}
							break;
							
						case 'mail':
							var idmail = document.getElementById( 'id' + id );
							var domainmail = document.getElementById( 'domain' + id );
							idmail.value = idmail.value.replace(/^\s+|\s+$/g, '');
							if( idmail.value === '' ) {
								idmail.className = 'inputERROR';
								valid = false;
							}
							domainmail.value = domainmail.value.replace(/^\s+|\s+$/g, '');
							if( domainmail.value === '' ) {
								domainmail.className = 'inputERROR';
								valid = false;
							}
							break;
					}
				}
				return valid;
}

// FUNCION QUE PERMITE SELECCIONAR DE UN COMBO EL ELEMENTO CUYO VALOR CONCUERDE CON EL DE UN CAMPO PROPIO QUE 
// HACE LA FUNCION DE ACELERADOR.
function SeleccionarAcelerador(selectorid,vectorid,aceleradorId){
	
	aceleradorObj=document.getElementById(aceleradorId);
	valor=aceleradorObj.value;
	// SI NO PASAMOS VALOR O EL VALOR ES EL NULO NO SE CARGA NADA.
	if (valor == '') { return; }
	selector=document.getElementById(selectorid);
	vector=eval(vectorid);
	existe=0;
	for (a=0;a< vector.length;a++){	if (vector[a] == valor) { selector.selectedIndex = a; existe=1; break; } }				  
	if (existe == 0) { selector.selectedIndex = 0; aceleradorObj.value=''; }
}


// FUNCION QUE PERMITE SELECCIONAR EL ACELERADOR A PARTIR DE LA ELECCION DEL COMBO FUNCION INVERSA A SELECCIONARACELERADOR 
function RellenarAcelerador(selectorid,vectorid,aceleradorId,ind){
	
	aceleradorObj=document.getElementById(aceleradorId);
	valor=ind;
	// SI NO PASAMOS VALOR O EL VALOR ES EL NULO NO SE CARGA NADA.
	if (valor == '') { aceleradorObj.value=''; return;   }
	selector=document.getElementById(selectorid);
	vector=eval(vectorid);
	existe=0;
	if (vector[valor] != ''){ aceleradorObj.value=vector[valor]; existe=1; }		  
	if (existe == 0) { aceleradorObj.value=''; }
}


var filenumber=0;
function showFiles(objid,kid,nombre,titulo,field,imgpath,template){
  var cadfiles="";
  if(document.getElementById(field+'fileoid')){
	  cadfiles=field+'fileoid';
	}
	else{
	  cadfiles='fileoid';
	}
	var files = document.getElementById(cadfiles).value;
	if (files != ''){ document.getElementById(cadfiles).value+=','+kid; }
  else { document.getElementById(cadfiles).value=kid; }
	filenumber++; 
	document.getElementById('lst_'+field).className='mostrar';
	document.getElementById('iframe_'+field).height=52;
	document.getElementById('lst_'+field).innerHTML+="<span id="+field+kid+" class=mostrar ><br>&nbsp;<a href=\"javascript:BorrarFile('"+kid+"','"+field+"','"+template+"')\" ><img src="+imgpath+"/deletefile.gif border=0 title=\"Borrar Archivo "+nombre+".\" valign=absmiddle ></a> Archivo "+titulo+" <span class=mini>( filename: "+nombre+" )</span></span>";
}


// BORRA UN DOCUMENTO (D.k=kid) SUBIDO CON FILE DE LA BD.
// Y QUITA LA REFERENCIA DEL FILE-OID DE LA PAGINA
function BorrarFile(kid,field,template){

	if (kid == ''){ return; }
	if(confirm("Desea realmente Borrar el Registro Relacionado?")){
		var cadfiles="";
	  if(document.getElementById(field+'fileoid')){
		  cadfiles=field+'fileoid';
		}
		else{
		  cadfiles='fileoid';
		}
		BorrarReferenciaFile(kid,cadfiles);
		url_str=template+"&D.action=remove&D.k="+kid+"&D.y=documento";
		document.getElementById('iframe_'+field).src=url_str;
		document.getElementById(field+kid).className='ocultar';
	}

}

//QUITA LA REFERENCIA DEL UN FILE BORRADO DEL OID FILE
function BorrarReferenciaFile(kid,objid){

	aux=document.getElementById(objid).value;
	newreferences='';
	elements=aux.split(",");
	for (i=0; i<elements.length; i++){
		if (elements[i] != kid) { if (newreferences == ''){ newreferences+=elements[i]; } else { newreferences+=','+elements[i]; } }	
	}
	//ESCRIBIMOS LAS NUEVAS RELACIONES DESPUES DE ELIMINAR LA REFERENCIA DEL FILE BORRADO
	document.getElementById(objid).value=newreferences;
	}


function loadFiles(archivos,campo,cgiurl,clase,imgurl,templurl,dkpadre,clasepadre){
	if ((clase == '')||(clase == undefined )){ clase='documentos'; }
	if ((imgurl == '')||(imgurl == undefined )){ imgurl='../allstyles/default/img'; }
	var filesload=document.getElementById(campo+'fileoid').value;
	if (filesload == ''){ document.getElementById(campo+'fileoid').value=archivos; }
	var CargadorFiles=eval('CargadorFile_'+campo);
	// GENERAMOS EL Q2XML
	stringQuery=cgiurl + "/q2XML.cgi?type="+clase+"&campos=D.k,nombre,titulo&where=D.k="+archivos;
	
	// ACA VA TODO LO QUE SE TIENE QUE HACER SI SE CARGO EL Q2
	CargadorFiles.onLoad = function(ok){if(ok){		
	var numFiles=CargadorFiles.getCampo('D.k').length;	
	if (numFiles == 0) { 
		//cuando no recupera nada.
		alert('No hay Documentos.');
	}
	else {
		html_str='';		
		// AJUSTE DEL TAMAï¿½ DEL CONTENEDOR DE FILES			
		if (numFiles > 6) { html_str+='<div class=oidmultiple>'; }
		
		kidfield=CargadorFiles.getCampo('D.k');	
		namefield=CargadorFiles.getCampo('nombre');
		titlefield=CargadorFiles.getCampo('titulo');
		
		
		// MOSTRAMOS EN CAMPO CONTENEDOR DEL LISTADO DE ARCHIVOS FILE
		
		document.getElementById('lst_'+campo).className='mostrar';
		// MONTAMOS LAS LINEA DE ARCHIVOS
		for (i=0; i<=numFiles-1; i++){
			html_str+="<span id="+campo+kidfield[i].firstChild.nodeValue+" class=mostrar ><br>&nbsp;<a href=\"javascript:BorrarFile('"+kidfield[i].firstChild.nodeValue+"','"+campo+"','"+templurl+"','"+dkpadre+"','"+clasepadre+"')\" ><img src="+imgurl+"/deletefile.gif border=0 title=\"Borrar Archivo "+namefield[i].firstChild.nodeValue+".\" valign=absmiddle ></a> Archivo "+titlefield[i].firstChild.nodeValue+" <span class=mini>( filename: "+namefield[i].firstChild.nodeValue+" )</span></span>";	
		}
		if (numFiles > 6) { html_str+='</div>'; }
		document.getElementById('lst_'+campo).innerHTML=html_str;
	}
	// ACA TERMINA TODO LO QUE SE TIENE QUE HACER SI SE CARGO EL Q2

}

}

	CargadorFiles.loadXMLhttp(stringQuery);	

}


// FUNCION QUE BORRA EL VALOR INFORMATIVO DEL UN INPUT AL HACER CLICK EN EL.
function borratitulo(objid,titulo){ 
		if (document.getElementById(objid).value == titulo) { document.getElementById(objid).value=''; }

}


// DA FORMATO A UNA FECHA que esta en formato G
function FormatDate(fecha) {
	var fecha1 = fecha.split("/");
	var fecha2 = fecha1[2] + ' / ' + fecha1[1] + ' / ' + fecha1[0]; 
	return fecha2;
}

function KeytoUppercase(event) {
	if (!event) { event = window.event; }
	var code = event.keyCode;
	if (code) {
		if (((code >= 97) && (code <= 122) ) || (code == 241)) {
			event.keyCode = code - 32;
		}
	} else {
		code = event.charCode;
		var character = String.fromCharCode(code);
		character = character.toUpperCase();
		event.target.value += character;
		event.preventDefault();
	}
}


/*
function noWhiteSpace(event) {
	//if (event.target.type === 'text' && event.charCode === 32) {
		//alert('El campo no puede contener espacios en blanco.');
		window.status = 'El campo no puede contener espacios en blanco.';
		//event.preventDefault();
		alert(event.charCode);
	}
}

function noCaps(event) {
	if (event.target.type === 'text') {
		var character = String.fromCharCode(event.charCode);
		if (character !== character.toLowerCase()) {
			window.status = 'El campo no puede contener mayúsculas.';
			event.preventDefault();
		}
	}
}
*/

function noWhiteSpace(event) {
	var code = event.charCode;
	if (!code) { code = event.keyCode; }
	if (code === 32) {
		window.status = 'El campo no puede contener espacios en blanco.';
		return false
	} else {
		return true
	}
}

function noCaps(event) {
	var code = event.charCode;
	if (!code) { code = event.keyCode; }
	var character = String.fromCharCode(code);
	if (character !== character.toLowerCase()) {
		window.status = 'El campo no puede contener mayúsculas.';
		return false;
	} else {
		return true;
	}
}

function isInArray(str, matrix) {
	var N = matrix.length;
	for (var i = 0; i < N; i++) {
		if (str == matrix[i]) {
			return true;
		}
	}
	return false;
}


// FORMATEADO DE FECHA PARA CAMPOS FECHA DE G.
// formato: S,L corto o largo (SHORT o LARGE)
// salida: variable o pantalla (variable devuevle el string a la variable que llama a la funcion, pantalla u otra hace un document write donde este.
 function formatFecha(fechaf,formato,salida) {
 
 if ((formato == undefined)||(formato == '')){ fecformato='l';} else { fecformato=formato; }
 if ((salida == undefined) ||(salida == '')) { salidaformato='pantalla';} else { salidaformato=salida; }
 
 //alert('FF: '+fecformato+' FFLC: '+fecformato.toLowerCase());
 fec=fechaf.split("/");

 anyo=parseInt(parseFloat(fec[0]));
 mes=parseInt(parseFloat(fec[1]));
 dia=parseInt(parseFloat(fec[2]));
 
 var fecha=new Date(anyo,mes-1,dia,0,0,0);

 var dias=new Array('Domingo','Lunes','Martes','Miércoles','Jueves','Viernes','Sábado');
 var diass=new Array('Dom','Lun','Mar','Mié','Jue','Vie','Sáb');

 var meses=new Array('Enero','Febrero','Marzo','Abril','Mayo','Junio','Julio','Agosto','Septiembre','Octubre','Noviembre','Diciembre');
 var mesess=new Array('Ene','Feb','Mar','Abr','May','Jun','Jul','Ago','Sep','Oct','Nov','Dic');

 // FORMATO NORMAL (largo o completo)
 if (fecformato.toLowerCase() == 'l'){
	
	if (salidaformato.toLowerCase() == 'pantalla'){ 
 		document.write(dias[fecha.getDay()]+', '+dia+' de '+meses[mes-1]+' de '+anyo);
	}
	
	if (salidaformato.toLowerCase() == 'variable'){ 
 		txt=''+dias[fecha.getDay()]+', '+dia+' de '+meses[mes-1]+' de '+anyo;
 		return txt;
	}
	
 }
	
// FORMATO CORTO (corto)
 if (fecformato.toLowerCase() == 's'){	
	 
	if (salidaformato.toLowerCase() == 'pantalla'){ 
 		document.write(diass[fecha.getDay()]+', '+dia+' de '+mesess[mes-1]+' de '+anyo);
	}
	
	if (salidaformato.toLowerCase() == 'variable'){ 
 		txt=''+diass[fecha.getDay()]+', '+dia+' de '+mesess[mes-1]+' de '+anyo;
 		return txt;
	}
	
 }
}

//	Función para opciones de consulta (no implementada)
function toggleIframe(iframe_id) {
         alert("Opcion no implementada");
}
function checkKey(event,upcase,permitidos){

vec_key = new Array();	
vec_keypermit = permitidos.split(",");

// CARACTERES
vec_key[8] = ''; vec_key[32] = ' ';vec_key[44] = ',';vec_key[45] = '-'; vec_key[46] = '.';
vec_key[95] = '_'; vec_key[124] = '|'; vec_key[191] = ''; vec_key[63] = '?'; vec_key[40] = '(';
vec_key[41] = ')'; vec_key[37] = '%'; vec_key[36] = '$'; vec_key[91] = '['; vec_key[93] = ']';

// NUMEROS
vec_key[48] = '0';vec_key[49] = '1';vec_key[50] = '2';vec_key[51] = '3';vec_key[52] = '4';vec_key[53] = '5';
vec_key[54] = '6';vec_key[55] = '7';vec_key[56] = '8';vec_key[57] = '9';

// LETRAS MINUSCULAS
vec_key[97] = 'a';vec_key[98] = 'b';vec_key[99] = 'c';vec_key[100] = 'd';vec_key[101] = 'e';vec_key[102] = 'f';
vec_key[103] = 'g';vec_key[104] = 'h';vec_key[105] = 'i';vec_key[106] = 'j';vec_key[107] = 'k';vec_key[108] = 'l';
vec_key[109] = 'm';vec_key[110] = 'n';vec_key[241] = 'ñ';vec_key[111] = 'o';vec_key[112] = 'p';vec_key[113] = 'q';
vec_key[114] = 'r';vec_key[115] = 's';vec_key[116] = 't';vec_key[117] = 'u';vec_key[118] = 'v';vec_key[119] = 'w';
vec_key[120] = 'x';vec_key[121] = 'y';vec_key[122] = 'z';

// LETRAS MAYUSCULAS
vec_key[65] = 'A';vec_key[66] = 'B';vec_key[67] = 'C';vec_key[68] = 'D';vec_key[69] = 'E';vec_key[70] = 'F';
vec_key[71] = 'G';vec_key[72] = 'H';vec_key[73] = 'I';vec_key[74] = 'J';vec_key[75] = 'K';vec_key[76] = 'L';
vec_key[77] = 'M';vec_key[78] = 'N';vec_key[209] = 'Ñ';vec_key[79] = 'O';vec_key[80] = 'P';vec_key[81] = 'Q';
vec_key[82] = 'R';vec_key[83] = 'S';vec_key[84] = 'T';vec_key[85] = 'U';vec_key[86] = 'V';vec_key[87] = 'W';
vec_key[88] = 'X';vec_key[89] = 'Y';vec_key[90] = 'Z';



//alert(event.keyCode);
//alert(event.charCode);
//alert(vec_key[event.keyCode]);	

var code = event.charCode;
//alert(code);
if (code == 0) { return true; }

if (!code) { code = event.keyCode; }



if (vec_key[code] == undefined) { return false; }

var exito=0;
var exito2=0;
for (var a=0;a<vec_keypermit.length;a++){
	if (vec_keypermit[a] == vec_key[code]) { exito = 1; }	
	if ((vec_key[code] == ",") && (vec_keypermit[a] == '')) { exito=1; }
}

if (exito == 0) { alert('Caracter no Valido'); return false; }

		
		
		// SOLO MAYUSCULAS
		if (upcase == 1) {			
			key = code;
			if (((key >= 97) && (key <= 122) ) || (key == 241)){				
				code = key-32;
				
				//alert('Solo se permiten Mayusculas');
				//return false;
			}			
		}else{
			// SOLO MINUSCULAS
			if(upcase == -1) {
				key = code;
					if (((key >= 65) && (key <= 90) ) || (key == 209)){				
						//alert('Solo se permiten Minusculas');
						//return false;
						code = key+32;
					}
			}								

 		}	

}

function loadFiles1(archivos,campo,cgiurl,clase,imgurl,templurl,dkpadre,clasepadre,objetivo){
	if ((clase == '')||(clase == undefined )){ clase='documentos'; }
	if ((imgurl == '')||(imgurl == undefined )){ imgurl='../allstyles/default/img'; }
	var filesload=$(campo+'fileoid').value;
	if (filesload == ''){ $(campo+'fileoid').value=archivos; }
	var CargadorFiles=eval('CargadorFile_'+campo);
	// GENERAMOS EL Q2XML
	stringQuery=cgiurl + "/q2XML.cgi?type="+clase+"&campos=D.k,nombre,titulo,repositorio-OID,D.filepath,D.size,repositorio_nombre&where=D.k="+archivos;
	//alert(stringQuery);
	// ACA VA TODO LO QUE SE TIENE QUE HACER SI SE CARGO EL Q2
	CargadorFiles.onLoad = function(ok){
		if(ok){
			var numFiles=CargadorFiles.getCampo('D.k').length;
			if(posicionObj(objetivo)==-1){ limitecontrol.push({id: objetivo, total:numFiles}); }
			if (numFiles == 0) {
				//cuando no recupera nada.
				alert('No hay Documentos.');
			} else {
				html_str='';objetivo_lu=campo;$(objetivo_lu+"_filesDisplay").style.display = "block";
				kidfield=CargadorFiles.getCampo('D.k');
				namefield=CargadorFiles.getCampo('nombre');
				titlefield=CargadorFiles.getCampo('titulo');
				repositoriofield=CargadorFiles.getCampo('repositorio-OID');
				pathfield=CargadorFiles.getCampo('D.filepath');
				sizefield=CargadorFiles.getCampo('D.size');
				nombrerepfield=CargadorFiles.getCampo('repositorio_nombre');
				// MOSTRAMOS EN CAMPO CONTENEDOR DEL LISTADO DE ARCHIVOS FILE
				$('lst_'+campo).className='mostrar';
				// MONTAMOS LAS LINEA DE ARCHIVOS
				var nuevodiv=document.createElement('div');
				nuevodiv.id=objetivo+"_listadoArchivos";
				$('lst_'+campo).appendChild(nuevodiv);
				for (var i=0; i<=numFiles-1; i++){
					var ObjFilenombre=namefield[i].firstChild.nodeValue;
					ObjFilenombre=ObjFilenombre.replace(/ /g,"_");
					ObjFilenombre=ObjFilenombre.replace(/[^-A-z0-9_.]/g,"");
					ObjFilenombre=ObjFilenombre.replace(/^/g,"");
					var ObjFilenombre2=repositoriofield[i].firstChild.nodeValue+"_"+ObjFilenombre;
					var li = document.createElement("li");
					var nombre_rep = (repositoriofield[i].firstChild.nodeValue == 0)? "Repositorio por defecto" : nombrerepfield[i].firstChild.nodeValue ;

					var cadena=ObjFilenombre;
					var cadenasal=""; var ncaracteres=18;  var inicio=0; var fin=ncaracteres;
					while((cadena.length-fin)>0){
						cadenasal+=cadena.substr(inicio,ncaracteres)+" ";
						inicio=fin; fin+=ncaracteres;
					};
					cadenasal+=cadena.substr(inicio,cadena.length);
					var txt = document.createTextNode(cadenasal);

					li.id = ObjFilenombre2;
					li.setAttribute('objnomb',ObjFilenombre);
					li.setAttribute('path',pathfield[i].firstChild.nodeValue);
					li.setAttribute('repositorio',repositoriofield[i].firstChild.nodeValue);
					li.setAttribute('nombrereal',namefield[i]);
					li.setAttribute('nombrerep',nombre_rep);
					li.className = "uploadDone";
					var thum = document.createElement("div");
					thum.id= ObjFilenombre2 +"_thum";
					thum.className ="minithumbail";

					var prg = document.createElement("span");
					prg.id = ObjFilenombre2 + "progress";
					prg.className = "progressBar"

					var prueba = document.createElement("span");
					prueba.id = ObjFilenombre2 + "_porc";
					li.appendChild(thum);
					li.appendChild(txt);
					li.appendChild(prueba);
					li.appendChild(prg);

					$(objetivo_lu+"_mmUploadFileListing").appendChild(li);

					var progress = $(ObjFilenombre2 + "progress");
					progress.innerHTML=" ";
					$(ObjFilenombre2).className = "uploadDone";
					$(ObjFilenombre2).innerHTML += "&nbsp;" + (Math.ceil(sizefield[i].firstChild.nodeValue / 1000)) + " Kb.";

					$(ObjFilenombre2).setAttribute('verdk',kidfield[i].firstChild.nodeValue);
					var nombubicacion=$(ObjFilenombre2).getAttribute('nombrerep');
					var direccion = hallarFormato($(ObjFilenombre2).getAttribute('objnomb'),allstylespath,pathfield[i].firstChild.nodeValue);
					var direccionreal = pathfield[i].firstChild.nodeValue+"/"+$(ObjFilenombre2).getAttribute('objnomb');
					$(ObjFilenombre2+"_thum").innerHTML="<a href=\""+direccionreal+"\" target='_blank' class='vinculoboton'><img src=\""+direccion+"\" align=\"center\" class=\"minithumbail\" alt=\"Ubicación: "+nombubicacion+"\" title=\"Ubicación: "+nombubicacion+"\"></a>";
					$(ObjFilenombre2).innerHTML+="&nbsp;|&nbsp;<img src="+imgurl+"/deletefile.gif width='12px' height='12px' border=0 onclick=\"javascript:borrarArchivo('"+ObjFilenombre2+"','"+ObjFilenombre+"','0','"+posicion+"','"+htmgpath+"','"+campo+"','"+objetivo+"','"+clase+"')\" class=\"vinculoboton\" alt=\"Eliminar Archivo "+ObjFilenombre+"\" title=\"Eliminar Archivo "+ObjFilenombre+"\" >";
					$(campo).value+=kidfield[i].firstChild.nodeValue+",";
				}
			}
			// ACA TERMINA TODO LO QUE SE TIENE QUE HACER SI SE CARGO EL Q2
		}
	}
	CargadorFiles.loadXMLhttp(stringQuery);
}
// FUNCION QUE BORRA EL VALOR INFORMATIVO DEL UN INPUT AL HACER CLICK EN EL.
