
function trim(s) {

   // Quita espacios en blanco iniciales y finales de una cadena	
   
   var i=0;
   var v=s;
  
   while (s.charAt(i)==" " && i<s.length)  {
         v = s.substring(i+1,s.length);
         i++; 
   }

   if (v=="") return "";

   s = v;

   i=s.length-1;

   while (i>0 && s.charAt(i)==" ") {
         v = s.substring(0,i);  
         i--; 
   }

   return v;
}

function esEntero(s) {
     return (s.toString().search(/^-?[0-9]+$/) == 0);
}


function sacarEspacios(s) {
	
	// saca espacios en blanco al inicio y final de una cadena 
	// y espacios duplicados en el medio

	var i=0;
	
	while (i < s.length) {
		if (s.charAt(i)==" ") {
			switch (i) {
				case 0 :
					if (s.length==1) { s=""; }
					else { s = s.substring(1,s.length); }
					break;
				default:
					while (s.charAt(i+1)==" ") {
						s = s.substring(0,i) + s.substring(i+1,s.length);
					}
					i++;
					break;
			}				 
		} else { i++; }
	}	
	
	if (s.charAt(s.length-1)==" ") 
		s = s.substring(0,s.length-1);
	
	return s;
	
}

function reempStr(s,saca,pone) {
	
	var i=0;
	
	while (i<s.length) {
		if (s.charAt(i)==saca) {
		   s = s.substring(0,i) + pone + s.substring(i+1,s.length);
		   i += pone.length; 
		} 
		i++;
	}
	
	return s;
		   
}

function reempChar(s,saca,pone) {
   // reemplaza en una cadena s el caracter "saca" por "sust"
   
   var pos = s.indexOf(saca);
    
   while (pos > -1) {
   		
   		switch (pos) {
   			case 0:
   				s = pone + s.substring(1,s.length);
   				break;
   			case s.length-1:
   				s = s.substring(0,s.length-1) + pone;
   				break;
   			default:
   				s = s.substring(0,pos) + pone + s.substring(pos+1,s.length);
   		}
   		
   		pos = s.indexOf(saca);
   }
   
   return s;
   
}

function borrarChar(s,saca) {
   // reemplaza en una cadena s el caracter "saca" por "sust"
   
   var pos = s.indexOf(saca);
    
   while (pos > -1) {
   		
   		switch (pos) {
   			case 0:
   				s = s.substring(1,s.length);
   				break;
   			case s.length-1:
   				s = s.substring(0,s.length-1);
   				break;
   			default:
   				s = s.substring(0,pos) + s.substring(pos+1,s.length);
   		}
   		
   		pos = s.indexOf(saca);
   }
   
   return s;
   
}

function sacarPreposiciones(s) {
		 // saca artículos y preoposiciones de una cadena de caracteres
		 
		 s=s.toUpperCase();
		 s = s.replace(/ DE /g," ");
		 s = s.replace(/ LA /g," ");
		 s = s.replace(/ EL /g," ");
		 s = s.replace(/ LAS /g," ");
		 s = s.replace(/ Y /g," ");
		 s = s.replace(/ LOS /g," ");
		 
		 s = s.replace(/^DE /,"");
		 s = s.replace(/^LA /,"");
		 s = s.replace(/^LAS /,"");
		 s = s.replace(/^EL /,"");
		 s = s.replace(/^LOS /,"");

	 	 return s;

}

function ponerDelimitadores(s, campo, tipo) {

	switch (campo) {
		case "AU":  
   			s = "(" + s + "$/(16))+(" + s + "$/(416))";
			break;
		case "CO":
			s = "(" + s + "$/(16)) * COLAB";
			// s = "(" + s + "$) (F) COLAB";
			
			break;
		case "IN":  
			if (tipo!="S") s = "(" + s + "$/(17))+(" + s + "$/(417))";
			else s = "(" + s + "$/(550))+(" + s + "$/(550))";
			break;
		case "TI":
			 s = reempStr(s," ","$ (G) ");
	  		 if (tipo!="S") s += "$/(18)"; 
			 else s+= "/(245)";
			 break;	
		case "TC":	
	  		 s = reempStr(s," "," (G) "); 
     	     s+= "/(245)";
			 break;	
		case "DE":
		     // s = "(" + s + "$/(80)) + (" + s + "$/(480))";
			 s = "(D=" + s + "$) + (D=" + s + "$)"; 
			 break; 
		case "ED":
 			 if (tipo!="S") {
			 	// elimina las proposiciones más problables
	     	     s = sacarPreposiciones(s);
				 s = sacarEspacios(s);
				 s = reempStr(s," ","/(38) + ");
			 	 s = s + "/(38)";
             } else {
        		 s = reempStr(s," "," * ");
			     s = "(" + s + "$/(550))+(" + s + "$/(550))";
		   	 }
			 break;	
		case "IS":
			 s = "ISBN=" + s + "$";
			 break;
		case "SN":
			 s = "ISSN=" + s + "$";
			 break;
		case "FC":	
			s += "/(44)";
			break;
		case "TD":
			 var aux = s;
			 
			 s = "(" + s + "$)";

			 if (aux.indexOf(" ")>-1) {
			 	s += "+(" + reempStr(aux," ","$ * ");
			 	s += "$)";
			 }	
			 break;	 
	}		 

    return s;
	
}


function armar_valores(s) {

	// sustituye caracteres con tildes y otros signos no permitidos
	var sacar = new Array("Á","É","Í","Ó","Ú","Ñ","Ç","À","È","Ì","Ò","Ù","Ä","Ë","Ï","Ö","Ü","Â","Ê","Î","Ô","Û");
	var poner = new Array("A","E","I","O","U","N","C","A","E","I","O","U","A","E","I","O","U","A","E","I","O","U");
	
	// elimina caracteres no permitidos
	var eliminar= new Array("(",")","*","+","^","?","¿","!","¡","$","=");


	// busca el campo por el que se va a realizar la búsqueda
	var campo = frm.campo.value; 
	
	// nivel bibliográfico de la búsqueda
	var tipo = "";
	
	var i=0;
	
	for (i=0 ; i < frm.tipo.length; i++) 
	      if (frm.tipo[i].checked) break;

    tipo = frm.tipo[i].value;
	
	s = s.toUpperCase();

	for (var i=0; i < sacar.length; i++)
		s= reempChar(s,sacar[i],poner[i]);


	for (var i=0; i < eliminar.length; i++)
		s = borrarChar(s,eliminar[i]);
	
	// quita espacios dobles de en medio de la cadena
	s = sacarEspacios(s);
	s = ponerDelimitadores(s, campo, tipo);
	
	if (campo=="AU" && campo=="CO" && campo=="IS"); 
	else {
	   if (tipo=="S") s = "(" + s + ") * S/(04)";
	   else if (tipo=="M") s = "(" + s + ") ^ S/(04)";	
	 }

	return s;

}

function validar() {

  // Valida que se haya ingresado algún valor al formulario de búsqueda

  var s = trim(frm.texto.value);

  if (s == "") {
      alert('No hay ninguna expresión de búsqueda definida'); 
      frm.texto.value="";
      frm.texto.focus();
  } else {
      frm.clave.value = armar_valores(s);
      frm.expresion.value=armar_texto("simple");
	  frm.submit();
  }	 
}
         
function armar_valores(s) {

	// sustituye caracteres con tildes y otros signos no permitidos
	var sacar = new Array("Á","É","Í","Ó","Ú","Ñ","Ç","À","È","Ì","Ò","Ù","Ä","Ë","Ï","Ö","Ü","Â","Ê","Î","Ô","Û");
	var poner = new Array("A","E","I","O","U","N","C","A","E","I","O","U","A","E","I","O","U","A","E","I","O","U");
	
	// elimina caracteres no permitidos
	var eliminar= new Array("(",")","*","+","^","?","¿","!","¡","$","=");


	// busca el campo por el que se va a realizar la búsqueda
	var campo = frm.campo.value; 
	
	// nivel bibliográfico de la búsqueda
	var tipo = "";
	
	
	var i=0;
	
	for (i=0 ; i < frm.tipo.length; i++) 
	      if (frm.tipo[i].checked) break;

    tipo = frm.tipo[i].value;
	
	s = s.toUpperCase();

	for (var i=0; i < sacar.length; i++)
		s= reempChar(s,sacar[i],poner[i]);


	for (var i=0; i < eliminar.length; i++)
		s = borrarChar(s,eliminar[i]);
	
	// quita espacios dobles de en medio de la cadena
	s = sacarEspacios(s);
	s = ponerDelimitadores(s, campo, tipo);
	
	if (campo=="AU" && campo=="CO" && campo=="IS"); 
	else {
	   if (tipo=="S") s = "(" + s + ") * S/(04)";
	   else if (tipo=="M") s = "(" + s + ") ^ S/(04)";	
	 }

	return s;

}		 
		 
function validar(idioma) {

  var aviso = "No hay ninguna expresión de búsqueda definida";

  if (idioma=="en") {
  	  aviso = "There is no search expression defined";
  }	  

  // Valida que se haya ingresado algún valor al formulario de búsqueda

  var s = sacarEspacios(frm.texto.value);
  
  if (s == "") {
      alert(aviso); 
      frm.texto.value="";
      frm.texto.focus();
  } else {
      frm.clave.value = armar_valores(s);
	  frm.expresion.value = armar_texto("simple");
      frm.submit();
  }	 
}

function armarValoresAvanzada() {

   var salida = "";
   
   var s = Array(frm.texto.length);
   var o = Array(frm.oper.length);
   var c = Array(frm.campo.length);

  	// sustituye caracteres con tildes y otros signos no permitidos
	var sacar = new Array("Á","É","Í","Ó","Ú","Ñ","Ç","À","È","Ì","Ò","Ù","Ä","Ë","Ï","Ö","Ü","Â","Ê","Î","Ô","Û");
	var poner = new Array("A","E","I","O","U","N","C","A","E","I","O","U","A","E","I","O","U","A","E","I","O","U");
	
	// elimina caracteres no permitidos
	var eliminar= new Array("(",")","*","+","^","?","¿","!","¡","$","=");

	// nivel bibliográfico de la búsqueda
	var tipo = "";
	
	var i=0;

	for (i=0 ; i < frm.tipo.length; i++) 
	      if (frm.tipo[i].checked) break;

    tipo = frm.tipo[i].value;
	
    // elimina espacios dobles y caracteres no deseados 
    var tope = -1;

	
	for (i=0; i<frm.texto.length; i++) {   

     	if (frm.texto[i].value!="") {
			 s[++tope] = frm.texto[i].value.toUpperCase();
     		 if (tope<o.length) { o[tope] = frm.oper[tope].value; }	
     	   	 for (var j=0; j<sacar.length; j++) s[tope] = reempChar(s[tope],sacar[j],poner[j]);
     		 for (var k=0; k<eliminar.length; k++) s[tope] = borrarChar(s[tope],eliminar[k]);
     	}	 

	}
   
     // arma los valores de búsqueda
	 i=0;

	 var l = 0;

	 while (i<=tope) {
	     // quita espacios dobles de en medio de la cadena
		 s[i] = sacarEspacios(s[i]);
     	 c[i] = frm.campo[i].value;	    
     	 s[i] = ponerDelimitadores(s[i],c[i],tipo);
         if (tope==0) salida = s[i]; 
		 else { 
			  if (i>0 && i<=o.length) { l=i-1; salida = "(" + salida + ")" + o[l]; }
		      salida += s[i];
		 }	  
	     i++; 
	 }

     if (tipo=="S") salida = "(" + salida + ") * S/(04)";
	 else if (tipo=="M") salida = "(" + salida + ") ^ S/(04)";	

     return salida;

}

function validarFechas(idioma) {
    // función invocada desde le formulario de búsquedas avanzdas para 
	// buscar un rango de fechas
    
	var desde = frm.fechaDesde.value;
	var hasta = frm.fechaHasta.value;
	
	if (trim(desde)=="") { 
	    if (idioma=="en") alert("There is no inicial year defined");
		else alert("No ha definido ninguna año inicial"); 
	    return false; 
	}
	if (trim(hasta)=="") { 
	    if (idioma=="en") alert("There is no final year defined");
		else alert("No ha definido ninguna año final"); 
		return false; 
	}
	
	if (!esEntero(desde)) { 
	    if (idioma=="en") alert("The expression inserted is not a number");
	    else alert("El valor ingresado para el año inicial no es un número"); 
		return false;
	}
	
	if (!esEntero(hasta)) { 
	    if (idioma=="en") alert("The expression inserted is not a number");
		else alert("El valor ingresado para el año final no es un número"); 
		return false;
	}
	
	if (desde<1800) {
	     if (idioma=="en") alert("Inicial year incorrect");
	     else alert("El valor ingresado para el año inicial no es válido");
	     return false;
	}
	
	if (hasta>2009) {
	     if (idioma=="en") alert("Final year incorrect");
		 else alert("El valor ingresado para el año final no es válido");
	     return false;
	}

    if (hasta<desde) {
	    if (idioma=="en") alert("The final year is greater than the inicial one");
	    else alert("El año inicial es mayor que el año final");
		return false;
	}
			 
    return true;
}

function armarValorFecha(desde, hasta) {

   var i=1;
   var largo = desde-hasta;
   var anio = hasta;
   var s= hasta.toString() + "/(44)";
   
   while (largo<0&&i<=5) {
       anio=hasta-i;
	   s+="+"+ anio + "/(44)"
	   i++;
	   largo=desde-anio;           
   }

   return s;
}

function armarExprFecha(desde,hasta) {

    var anio=hasta;
	var s="";
	
	for (var i=0 ; i<2 ; i++) {
		if (anio==desde) break;
        else {
	       s+="FC:"+ anio.toString()+";+;";
		   anio--;
	    }
	}
	
    s+="FC:"+anio;
	return s;

}

function validarAvanzada(idioma) {

  var aviso = "No hay ninguna expresión de búsqueda definida"; 

  if (idioma=="en") aviso = "There is no search expression defined";

  // Valida que se haya ingresado algún valor al formulario de búsqueda
  var s = "";
  
  // toma los elementos los valores de los campos del formulario y los guarda
  // en un arreglo
  
  for (var i=0 ; i<frm.texto.length; i++)
       s += sacarEspacios(frm.texto[i].value);
  
  if (s=="" && !(frm.fechaDesde.value=="" && frm.fechaDesde.value=="")) {
	   if (validarFechas(idioma)) {
	          var desde = frm.fechaDesde.value;
			  var hasta = frm.fechaHasta.value;
			  
			  frm.clave.value=armarValorFecha(desde,hasta);
			  frm.expresion.value =armarExprFecha(desde,hasta);
			  frm.submit();
			  return true;
       }
  } 
 
  if (s == "") {
      alert(aviso); 
      for (var i=0 ; i < texto.length; i++) frm.texto[i].value="";
	  return false;
  } else {

      frm.clave.value = armarValoresAvanzada();
	  frm.expresion.value=armar_texto("det");
      frm.submit();
  }	 
   
  return true;      
  
}

function armar_texto(tipo) {
  
	 var s = "";
     
	 // formulario de búsqueda simple     
     if (tipo=="simple") {
	 	s = frm.campo.value + ":" + frm.texto.value;
	 } else if (tipo=="det") {
		 
		 for (var i=0; i< frm.texto.length; i++) {
      	   var fila = trim(frm.texto[i].value);
		   fila = borrarChar(fila,";");
		   fila = borrarChar(fila,"+");
		   fila = borrarChar(fila,"*");
		   if (fila != "") {
		        s += frm.campo[i].value + ":" + fila + ";";
				if (i < frm.oper.length) s += frm.oper[i].value + ";";  
		   }
			        		 
		 }
	 }	
	 
	 return s; 

}
                                                       
function mostrarAyuda() {
     var ayuda = document.getElementById("textoAyuda");
     var titAyuda = document.getElementById("titAyuda");
     
     
     if (ayuda.style.visibility=="visible") {
    	ayuda.style.visibility="hidden";
		titAyuda.firstChild.nodeValue="Sugerencias de búsqueda";
	} else {	    
     	ayuda.style.visibility="visible";
		titAyuda.firstChild.nodeValue="Ocultar";
	}
}

function mostrarDetalle(opcion) {

    if (opcion == "aut") { 
	    var autor = document.getElementById("autor_int");
        autor.style.display = "block";
	    var link = document.getElementById("linkAutor");
	    link.firstChild.nodeValue="";
	} else {
	     var resumen = document.getElementById("resumen");
         detalle.style.display = "block";
	     var link = document.getElementById("linkDetalle");
	     link.firstChild.nodeValue="";
   }
}
 
                                                       
function mostrarAyuda(idioma) {

	 var mostrar = "Sugerencias de búsqueda";
	 var ocultar = "Ocultar";
	 
     if (idioma=="en") {
     	mostrar = "Search's tips";
     	ocultar = "Hide";
	 }  

     var ayuda = document.getElementById("textoAyuda");
     var titAyuda = document.getElementById("titAyuda");
     
     
     if (ayuda.style.display=="block") {
    	ayuda.style.display="none";
		titAyuda.firstChild.nodeValue=mostrar;
	} else {	    
     	ayuda.style.display="block";
		titAyuda.firstChild.nodeValue=ocultar;
	}
}

