var re4 = new RegExp("^ +");       // search values: leading spaces
var re5 = new RegExp(" +$");       // search values: trailing spaces

function validate(frm) {

  if (frm.name == "advsrch") {
     return srch_adv_validate();
  } else {
    if (frm.name == "gensrch") {
      return srch_gen_validate();
    }
  }
  return false;
}

function srch_gen_validate() {
  var frm = document.gensrch;
  err_str = '';
  balcount = 10;
  balance = 10;
  st0val = frm.searchterm0.value;
  st0val = frm.searchterm0.value.replace(re4, ''); st0val = st0val.replace(re5, '');
  frm.searchterm0.value = st0val;     // update the html prior to form submission

  if (st0val == '') {
    err_str = jmsg1;
  }
  balcount = charcount(st0val,'"');
  if (balcount > 0) {
    balance = balcount % 2;
    if (balance == 1) {
      err_str = jmsg2;
    }
  }
  balcount = charcount(st0val,'(');
  balcount1 = charcount(st0val,')');
  if (balcount != balcount1) {
     err_str = jmsg3;
  }
  if (err_str != '') {
    alert(err_str);
    frm.searchterm0.focus();
    return false;
  }

  return true;
}

function srch_adv_validate() {
  var frm = document.advsrch;
  err_str = '';
//---- check the terms first, make sure there's a term and then in order

  st1val = frm.searchterm1.options[frm.searchterm1.selectedIndex].text.replace(re4, ''); st1val = st1val.replace(re5, '');
  st2val = frm.searchterm2.value.replace(re4, ''); st2val = st2val.replace(re5, '');
  st3val = frm.searchterm3.value.replace(re4, ''); st3val = st3val.replace(re5, '');

 // frm.searchterm1.value = st1val;                              // update the html prior to form submission
  frm.searchterm2.value = st2val;                              // update the html prior to form submission
  frm.searchterm3.value = st3val;                              // update the html prior to form submission

//  st1val = frm.searchterm1.value;
  st2val = frm.searchterm2.value;
  st3val = frm.searchterm3.value;

  if ((st1val == '') && (st2val == '') && (st3val == '')) {
    err_str = jmsg1;
  } else {
    if ( ((st1val == '') && (st2val != '')) || ((st2val == '') && (st3val != '')) ) {
      err_str = jmsg4;
    }
  }
  if (err_str != '') {
    alert(err_str);
    frm.searchterm2.focus();
    return false;
  }

//---- now check the media types and booleans
//     don't bother checking for someone "AND NOT"'ing on identical terms!
/*
  m1val = frm.Media1.selectedIndex;
  m2val = frm.Media2.selectedIndex;
  m3val = frm.Media3.selectedIndex;

  b1val = frm.Bool1.options[frm.Bool1.selectedIndex].text;     // can't use 'value' values until they're in the html
  b2val = frm.Bool2.options[frm.Bool2.selectedIndex].text;     //   so using 'text' values instead

  isSt1 = (st1val != ''); isSt2 = (st2val != ''); isSt3 = (st3val != '');

//---- situation 1
//     only 1st and 2nd search terms, being AND'ed, neither media of "Any Media", and different media

  if (isSt2 && !isSt3) {
    if ((b1val == "AND") && ((m1val != 0) && (m2val != 0)) && (m1val != m2val)) {
      err_str = jmsg5;
    }
  }

  if (err_str != '') {
    alert(err_str);
    return false;
  }

//---- situation 2
//     all three search terms

  if (isSt3) {                                                 // all three search terms
    if ((b1val != "AND") && (b2val != "AND")) {                // "OR"'ing or "AND NOT"'ing

    } else {
      if ((b1val == "AND") && (b2val == "AND")) {              // medias must be of Any Media and/or one other type
        flag = true;
        for (i=1; i<4; i++) {
          switch(i) {
            case 1: media = m1val; break;
            case 2: media = m2val; break;
            case 3: media = m3val; break;
          }
          if (media != 0) {                                    // if media type not "Any media" it's significant
            if (flag) {
              match = media;                                   // record the media type
              flag = false;
            } else {
              if (media != match) {
                err_str = jmsg5;
              }
            }
          }
        }
      } else {
        if ((b1val == "AND") && (b2val == "AND NOT")) {        // make sure not "AND"'ing opposing media
          if (((m1val != 0) && (m2val != 0)) && (m1val != m2val)) {
            err_str = jmsg5;
          }
        } else {
          if ((b1val == "AND NOT") && (b2val == "AND")) {      // make sure not "AND"'ing opposing media
            if (((m1val != 0) && (m3val != 0)) && (m1val != m3val)) {
              err_str = jmsg5;
            }
          }
        }
      }
    }
  }
  */
  if (err_str != '') {
    alert(err_str);
    return false;
  }

  return true;
}
function charcount(srchstr,tstchar){
  icount = 0;
  do {
     i = srchstr.indexOf(tstchar);
     if (i != -1) {
        srchstr = srchstr.substr(i+1);
     	icount++;
      }
  } while (i != -1);
  return icount;
}

