// JavaScript functions, for multiple constraint on ELODIE archive
function sophie_multiple(){
  var sql=sql0;
  var ra1=document.cat.ra1.value+"";
  var ra2=document.cat.ra2.value+"";
  var de1=document.cat.de1.value+"";
  var de2=document.cat.de2.value+"";
  var sn1=document.cat.sn1.value+"";
  var sn2=document.cat.sn2.value+"";
  var dt1=document.cat.dt1.value+"";
  var dt2=document.cat.dt2.value+"";
  var fiber=document.cat.fiber.value+"";
//  var pro=document.cat.pro.value+"";
//  var vfit1=document.cat.vfit1.value+"";
//  var vfit2=document.cat.vfit2.value+"";
//  var sfit1=document.cat.sfit1.value+"";
//  var sfit2=document.cat.sfit2.value+""
  var exptime1=document.cat.exptime1.value+"";
  var exptime2=document.cat.exptime2.value+"";

  var nnme="";
  if (!/^\s*$/.test(document.cat.nme.value)) { nnme="&o="+document.cat.nme.value; }

  if (!/^\s*$/.test(ra1) && !/^\s*$/.test(ra2)) {
    if (!numeric_plus(ra1, 'Right ascension (lower bound)'))  return false;
    if (!numeric_plus(ra2, 'Right ascension (upper bound)'))  return false;

    if ( Number(ra2) < Number(ra1)) {
      alert("upper bound of right ascension must be greater than lower bound "+ra1+", "+ra2);
      return false;
    }

    if (!/^\s*$/.test(sql)) sql += ' AND ';
    sql += 'ra BETWEEN '+ra1+' AND '+ra2;

  }
  else {
    if (!/^\s*$/.test(ra1)) {
      if (!numeric_plus(ra1, 'Right ascension (lower bound)'))  return false;

      if (!/^\s*$/.test(sql)) sql += ' AND ';
      sql += 'ra >'+ra1;
    }
    else {
      if (!/^\s*$/.test(ra2)) {
        if (!numeric_plus(ra2, 'Right ascension (upper bound)'))  return false;

        if (!/^\s*$/.test(sql)) sql += ' AND ';
        sql += 'ra <'+ra2;
      }  
    }  
  }  


  if (!/^\s*$/.test(de1) && !/^\s*$/.test(de2)) {
    if (!numeric(de1, 'declination (lower bound)'))  return false;
    if (!numeric(de2, 'declination (upper bound)'))  return false;

    if ( Number(de2) < Number(de1)) {
      alert("upper bound of right ascension must be greater than lower bound "+de1+", "+de2);
      return false;
    }

    if (!/^\s*$/.test(sql)) sql += ' AND ';
    sql += 'dec BETWEEN '+de1+' AND '+de2;

  }
  else {
    if (!/^\s*$/.test(de1)) {
      if (!numeric(de1, 'declination (lower bound)'))  return false;

      if (!/^\s*$/.test(sql)) sql += ' AND ';
      sql += 'dec >'+de1;
    }
    else {
      if (!/^\s*$/.test(de2)) {
        if (!numeric(de2, 'declination (upper bound)'))  return false;

        if (!/^\s*$/.test(sql)) sql += ' AND ';
        sql += 'dec <'+de2;
      }  
    }  
  }  


  if (!/^\s*$/.test(sn1) && !/^\s*$/.test(sn2)) {
    if (!numeric_plus(sn1, 'S/N (lower bound)'))  return false;
    if (!numeric_plus(sn2, 'S/N (upper bound)'))  return false;

    if ( Number(sn2) < Number(sn1)) {
      alert("upper bound of S/N must be greater than lower bound "+sn1+", "+sn2);
      return false;
    }

    if (!/^\s*$/.test(sql)) sql += ' AND ';
    sql += 'sn26 BETWEEN '+sn1+' AND '+sn2;

  }
  else {
    if (!/^\s*$/.test(sn1)) {
      if (!numeric_plus(sn1, 'S/N (lower bound)'))  return false;

      if (!/^\s*$/.test(sql)) sql += ' AND ';
      sql += 'sn26 >'+sn1;
    }
    else {
      if (!/^\s*$/.test(sn2)) {
        if (!numeric_plus(sn2, 'S/N (upper bound)'))  return false;

        if (!/^\s*$/.test(sql)) sql += ' AND ';
        sql += 'sn26 <'+sn2;
      }  
    }  
  }  

  if (!/^\s*$/.test(dt1) && !/^\s*$/.test(dt2)) {
    if (!/^\d{4}-\d{2}-\d{2}\s*$/.test(dt1)){
       alert("The first date must be in the format YYYY-MM-DD ("+dt1+")");
       return false;
    }
    if (!/^\d{4}-\d{2}-\d{2}\s*$/.test(dt2)){
       alert("The last date must be in the format YYYY-MM-DD ("+dt2+")");
       return false;
    }
    if ( Number(dt2.replace(/-/g,"")) < Number(dt1.replace(/-/g,""))) {
      alert("Last date must be after first date "+dt1+", "+dt2);
      return false;
    }

    if (!/^\s*$/.test(sql)) sql += ' AND ';
    sql += "date BETWEEN '"+dt1+"' AND '"+dt2+"'";
  }
  else {
    if (!/^\s*$/.test(dt1)) {
      if (!/^\d{4}-\d{2}-\d{2}\s*$/.test(dt1)){
        alert("The first date must be in the format YYYY-MM-DD");
        return false;
      }

      if (!/^\s*$/.test(sql)) sql += ' AND ';
      sql += "date >'"+dt1+"'";
    }
    else {
      if (!/^\s*$/.test(dt2)) {
        if (!/^\d{4}-\d{2}-\d{2}\s*$/.test(dt2)){
          alert("The last date must be in the format YYYY-MM-DD");
          return false;
        }

        if (!/^\s*$/.test(sql)) sql += ' AND ';
        sql += "date <'"+dt2+"'";
      }  
    }  
  }  


//  if (!/^\s*$/.test(pro)) {
//    tmp1 = (pro.replace(/^\s*/,"")).replace(/\s*$/,"");  
//    if (!/^\s*$/.test(sql)) sql += ' AND ';
//    sql += 'noprog IN ('+tmp1+')';
//  }


  if (!/^\s*$/.test(fiber)) {
    tmp1 = (fiber.replace(/^\s*/,"")).replace(/\s*$/,"");  
    if (tmp1 != "HR" && tmp1 != "HE" ) {
       alert("fiber should be either HR or HE, for high resolution or high efficiency");
       return false;
    } 
    if (!/^\s*$/.test(sql)) sql += ' AND ';
    sql += "fiber like '%" + tmp1 + "'";
  }

//  if (!/^\s*$/.test(vfit1) && !/^\s*$/.test(vfit2)) {
//    if (!numeric(vfit1, 'Radial velocity (lower bound)'))  return false;
//    if (!numeric(vfit2, 'Radial velocity (upper bound)'))  return false;
//
//    if ( Number(vfit2) < Number(vfit1)) {
//      alert("upper bound of velocity must be greater than lower bound "+vfit1+", "+vfit2);
//      return false;
//    }
//
//    if (!/^\s*$/.test(sql)) sql += ' AND ';
//    sql += 'vfit BETWEEN '+vfit1+' AND '+vfit2;
//
//  }
//  else {
//    if (!/^\s*$/.test(vfit1)) {
//      if (!numeric(vfit1, 'Radial velocity (lower bound)'))  return false;
//
//      if (!/^\s*$/.test(sql)) sql += ' AND ';
//      sql += 'vfit >'+vfit1;
//    }
//    else {
//      if (!/^\s*$/.test(vfit2)) {
//        if (!numeric(vfit2, 'Radial velocity (upper bound)'))  return false;
//
//        if (!/^\s*$/.test(sql)) sql += ' AND ';
//        sql += 'vfit <'+vfit2;
//      }  
//    }  
//  }  
//
//
//  if (!/^\s*$/.test(sfit1) && !/^\s*$/.test(sfit2)) {
//    if (!numeric_plus(sfit1, 'Velocity width (lower bound)'))  return false;
//    if (!numeric_plus(sfit2, 'Velocity width (upper bound)'))  return false;
//
//    if ( Number(sfit2) < Number(sfit1)) {
//      alert("upper bound of velocity width must be greater than lower bound "+sfit1+", "+sfit2);
//      return false;
//    }
//
//    if (!/^\s*$/.test(sql)) sql += ' AND ';
//    sql += 'sigfit BETWEEN '+sfit1+' AND '+sfit2;
//
//  }
//  else {
//    if (!/^\s*$/.test(sfit1)) {
//      if (!numeric_plus(sfit1, 'Velocity width (lower bound)'))  return false;
//
//      if (!/^\s*$/.test(sql)) sql += ' AND ';
//      sql += 'sigfit >'+sfit1;
//    }
//    else {
//      if (!/^\s*$/.test(sfit2)) {
//        if (!numeric_plus(sfit2, 'Velocity width (upper bound)'))  return false;
//
//        if (!/^\s*$/.test(sql)) sql += ' AND ';
//        sql += 'sigfit <'+sfit2;
//      }  
//    }  
//  }  


  if (!/^\s*$/.test(exptime1) && !/^\s*$/.test(exptime2)) {
    if (!numeric_plus(exptime1, 'Exposure time (lower bound)'))  return false;
    if (!numeric_plus(exptime2, 'Exposure time (upper bound)'))  return false;

    if ( Number(exptime2) < Number(exptime1)) {
      alert("upper bound of the exposure time must be greater than lower bound "+exptime1+", "+exptime2);
      return false;
    }

    if (!/^\s*$/.test(sql)) sql += ' AND ';
    sql += 'exptime BETWEEN '+exptime1+' AND '+exptime2;

  }
  else {
    if (!/^\s*$/.test(exptime1)) {
      if (!numeric_plus(exptime1, 'Exposure time (lower bound)'))  return false;

      if (!/^\s*$/.test(sql)) sql += ' AND ';
      sql += 'exptime >'+exptime1;
    }
    else {
      if (!/^\s*$/.test(exptime2)) {
        if (!numeric_plus(exptime2, 'Exposure time (upper bound)'))  return false;

        if (!/^\s*$/.test(sql)) sql += ' AND ';
        sql += 'exptime <'+exptime2;
      }  
    }  
  }  

  if (sql)
    top.location = loc0 + nnme + "&sql=" + escape(sql).replace("/\+/g","%2B");
  else
    top.location = loc0 + nnme;

}

function numeric_plus(field,name){
  if (/^\s*$/.test(field)) return true;
  if (!/^\s*[+]?\d*[.]?\d*\s*$/.test(field)){
     alert('The field '+name+' must be a positive or null numerical value'); 
     field="";
     return false;
  }
  return true;
}

function numeric(field,name){
  if (/^\s*$/.test(field)) return true;
  if (!/^\s*[+-]?\d*[.]?\d*\s*$/.test(field)){
     alert('The field '+name+' must be a numerical value ('+field+')'); 
     field="";
     return false;
  }
  return true;
}


