
 var strError="";

 function Clear(){
   document.FORM_SEARCH_BOX.BEFORE_DAY.value   = "";
   document.FORM_SEARCH_BOX.BEFORE_MONTH.value = "";
   document.FORM_SEARCH_BOX.BEFORE_YEAR.value  = "";
   document.FORM_SEARCH_BOX.AFTER_DAY.value    = "";
   document.FORM_SEARCH_BOX.AFTER_MONTH.value  = "";
   document.FORM_SEARCH_BOX.AFTER_YEAR.value   = "";
   document.FORM_SEARCH_BOX.TEXT.value         = "";
 }

   // Date functions

 function BuildDateValid(d,m,y,bound){
   var strDate,dateA,dateM,dateD;
     // find Year   
   if (y != ''){
     dateA = parseInt(y,10);
   }else{
     dateA = ((bound)?9999:1);
   }
     // find Month   
   if (m != ''){
     while (m.charAt(0) == '0') m = m.substring(1, m.length);
     dateM = parseInt(m,10);
   }else{
     dateM = ((bound)?12:1);
   }
     // find Day   
   if (d != ''){
     while (d.charAt(0) == '0') d = d.substring(1, d.length);
     dateD = parseInt(d,10);
   }else{
     if (bound){
       if ((dateM == 2)&&((dateA%4) != 0)){
         dateD = 28;
       }else if (dateM == 2){
         dateD = 29;
       }else if ((dateM == 4)||(dateM == 6)||(dateM == 9)||(dateM == 11)){
         dateD = 30;
       }else{
         dateD = 31;
       }
     }else{
       dateD = 1;
     }
   }
   if (((dateA < 1900)||(dateA > 2079))||
       ((dateA == 2079)&&(dateM > 6))||
       ((dateA == 2079)&&(dateM == 6)&&(dateD > 6))){
     var dateA = ((dateA >= 2079)?2079:1900);
     var dateM = ((dateA >= 2079)?6:1);
     var dateD = ((dateA >= 2079)?6:1);
   }
   strDate = dateD.toString() + '/';
   strDate+= dateM.toString() + '/';
   strDate+= dateA.toString() + ' ';
   strDate+= ((bound)?'23:59':'00:00');
   return strDate;
 }
 
 function EkissDateValid(n,str){
   if (str=="") return true;
   //if (str==undefined) return true;
   var aux=str.split("/");
   if (aux.length!=3){
      strError+='Error en formato de la fecha "' + n + '" :' + str + '\n'; 
      return false;
   }
   return DateValid(n,aux[0],aux[1],aux[2]);
 }

 function DateValid(n,d,m,y){
   var dia,mes,anno,str;
   
   if ((d=='')&&(m=='')&&(y=='')) return true;

   while (d.charAt(0) == '0') d = d.substring(1, d.length);
   while (m.charAt(0) == '0') m = m.substring(1, m.length);
   
   var str = new String('');
  
   dia= d; // parseInt(d,10);
   mes  = m; //parseInt(m,10); 
   anno = y; //parseInt(y,10); 
   
 

   if (((d != '')&&((m == '')||(y == '')))||
       ((m != '')&&(y == ''))){
     str+= ' Solo se puede poner el dia si se ha rellenado el mes y';
     str+= ' solo se puede poner el mes si se ha rellenado el año.';
   }
   if (((d != '')&&(isNaN(dia)))||
       ((m != '')&&(isNaN(mes)))||
       ((y != '')&&(isNaN(anno)))){
     str+= ' En la fecha solo se permite poner caracteres numéricos.';
   }
   if ((!isNaN(dia))&&(!isNaN(mes))&&(!isNaN(anno))){
     if ((anno < 0)||(mes < 1)||(mes > 12)||(dia < 1)){
       str+= ' El año nunca puede ser negativo,';
       str+= ' los meses deben estar en el rango de 1 a 12';
       str+= ' y los dias deben comenzar en 1.';
     }else if (((anno%4) == 0)&&(mes == 2)&&(dia > 29)){
       str+= ' El mes de febrero de un año bisiesto solo tiene 29 días.';
     }else if (((anno%4) != 0)&&(mes == 2)&&(dia > 28)){
       str+= ' El mes de febrero de un año no bisiesto solo tiene 28 días.';
     }else if (((mes == 1)||(mes == 3)||(mes == 5)||(mes == 7)||
                (mes == 8)||(mes == 10)||(mes == 12))&&(dia > 31)){
       str+= ' Los meses de Enero, Marzo, Mayo, Julio, Agosto';
       str+= ' Octubre y Diciembre solo tienen 31 dias';
     }else if (((mes == 4)||(mes == 6)||(mes == 9)||(mes == 11))&&(dia > 30)){
       str+= ' Los meses de Abril,Junio,Septiembre y Noviembre solo tienen 30 días.';
     }
   }
   if (str.length == 0){
     return true;
   }else{
     strError+= 'Error en la fecha "' + n + '" :' + str + '\n';
     return false;
   }
 }


   // String functions

 function StringValid(strText){
   if (strText.search('\'') != -1){
     strError+= 'Prohibido usar el caracteres ( \' ) en la busqueda.\n';
     return false;
   }else{
     return true;
   }
 }

 function SearchItem(strV){
   this.vItem = new String(strV);
   this.ItemStr = SearchItem_ItemStr; 
   this.ItemType = SearchItem_ItemType; 
 }

 function SearchItem_ItemStr(){
   if (this.vItem.charAt(0) == '*'){
     this.vItem = 'XZZX*';
   }else if (this.vItem.length == 1){
     this.vItem = '"' + this.vItem + '*"';
   }else{
     if (this.vItem.length == 3){
       if ((this.vItem.charAt(0) == '"')&&(this.vItem.charAt(2) == '"')){
         this.vItem = '"' + this.vItem.charAt(1) + '*"';
       }
     }
     var pos = this.vItem.search('[*]'); 
     if (pos != -1){
       this.vItem = this.vItem.substring(0,pos + 1);
       if (this.vItem.charAt(0) != '"'){
         this.vItem = '"' + this.vItem + '"';
       }else{
         this.vItem = this.vItem + '"';
       }
     }
   }
   return this.vItem;
 } 

 function SearchItem_ItemType(){
   if ((this.vItem.toUpperCase() == 'AND')||
       (this.vItem.toUpperCase() == 'OR')){
     return 'OPERATOR';
   }else if (this.vItem == '""'){
     return 'INVALID';
   }else{
     return 'CONDITION'
   }
 } 

 function SearchCondition(str){
   this.arrItems = new Array();
   this.findItems = SearchCondition_findItems; 
   this.GetCondStr = SearchCondition_GetCondStr; 
   this.Init = SearchCondition_Init; 
     //
   this.Init(str);
 }

 function SearchCondition_findItems(str){
   var strBegin,strEnd,strItem;
   var lArr = new Array();
   var i=0;
     // delete space
   while ((i < str.length)&&(str.charAt(i) == ' ')) i++;
   
   j = 1
   if (i < str.length){
       // begin of string
     strBegin = ((str.charAt(i) == '"')?'"':'');
     strEnd   = '';

     if (strBegin == ''){
       while (((i+j) < str.length)&&(str.charAt(i+j) != ' ')&&(str.charAt(i+j) != '"')) j++;
     }else{
       while (((i+j) < str.length)&&(str.charAt(i+j) != '"')) j++;
       if ((i+j) < str.length){
         j++;
       }else{
         strEnd = '"';
       }
     }
     strItem=str.substr(i,j)+strEnd;
     
     //Entrecomillo cada palabra para no tener problemas con caracteres especiales
     if ((strBegin == '')&&(strItem.toUpperCase()!='AND')&&(strItem.toUpperCase()!='OR')){
      strItem='"'+strItem+'"';
     }
     lArr[0] = new SearchItem(strItem);
   }
   if ((i+j) < str.length){
     return lArr.concat(this.findItems(str.substring(i+j,str.length)));
   }else{
     return lArr;
   }
 }

 function SearchCondition_Init(str){
   var itemsLocal = this.findItems(str);
   var iName = 'CONDITION';
   for(var i=0;i<itemsLocal.length;i++){
     if ((iName == 'CONDITION')&&(itemsLocal[i].ItemType() == 'CONDITION')){
       this.arrItems[this.arrItems.length] = itemsLocal[i];
       iName = 'OPERATOR';
     }else if ((iName == 'OPERATOR')&&(itemsLocal[i].ItemType() == 'CONDITION')){
       this.arrItems[this.arrItems.length] = new SearchItem('OR');
       this.arrItems[this.arrItems.length] = itemsLocal[i];
     }else if ((iName == 'OPERATOR')&&(itemsLocal[i].ItemType() == 'OPERATOR')){
       this.arrItems[this.arrItems.length] = itemsLocal[i];
       iName = 'CONDITION';
     }
   }
 }

 function SearchCondition_GetCondStr(){
   var str = new String('');
   if ((this.arrItems.length % 2) == 1){
     for(var i=0;i<this.arrItems.length;i++){
       str += (((i % 2) == 1)?' ':'');
       str += (((i % 2) == 1)?this.arrItems[i].ItemStr().toUpperCase():this.arrItems[i].ItemStr());
       str += (((i % 2) == 1)?' ':'');
     }
   }
   return str;
 } 

 function BuildStringValid(strText){
   var objCond = new SearchCondition(strText);
   return objCond.GetCondStr();
 }
 function ValidateAndLoadParametersEkissForm(f){
   strError = new String("");
   if (StringValid(f.TEXT.value)
      &&EkissDateValid('desde',f.DESDE.value)
      &&EkissDateValid('hasta',f.HASTA.value)){
      StatusBarText(true); 
     f.mainM.value   ='CIBERTECA';
     f.mainT.value   = 'ALL'; 
     f.mainSc.value  = BuildStringValid(f.TEXT.value);
     f.mainF1.value  = f.DESDE.value;
     f.mainF2.value  = f.HASTA.value;
     f.mainU.value   = mainU;
     f.mainP.value   = mainP;
     f.mainModo.value = "search";
     f.mainModoPreEve.value = "";
     f.mainModoPrePar.value = "";
     f.mainPart.value  = BuildStringValid(f.PART.value);
     return true;
   }else{
     alert(strError);
     return false;
   }
 }
 var info = new Array("ALL","ACT","PAR","ORG"); //En el orden del buscador

 function ValidateAndLoadParameters(f){
   strError = new String("");
   if ((DateValid(
         "Desde",
         f.BEFORE_DAY.value,
         f.BEFORE_MONTH.value,
         f.BEFORE_YEAR.value))&&
       (DateValid(
         "Hasta",
         f.AFTER_DAY.value,
         f.AFTER_MONTH.value,
         f.AFTER_YEAR.value))&&
       (StringValid(
         f.TEXT.value))){
      StatusBarText(true); 
     f.mainM.value   ='CIBERTECA';
     f.mainT.value   = info[f.INFO_TYPE.selectedIndex]; 
     f.mainSc.value  = BuildStringValid(f.TEXT.value);
     f.mainF1.value  = BuildDateValid(
                         f.BEFORE_DAY.value,
                         f.BEFORE_MONTH.value,
                         f.BEFORE_YEAR.value,
                         false);
     f.mainF2.value  = BuildDateValid(
                         f.AFTER_DAY.value,
                         f.AFTER_MONTH.value,
                         f.AFTER_YEAR.value,
                         true);
     f.mainU.value   = mainU;
     f.mainP.value   = mainP;
     f.mainModo.value = "search";
     f.mainModoPreEve.value = "";
     f.mainModoPrePar.value = "";

     return true;
   }else{
     alert(strError);
     return false;
   }
 }
 



