// $Id: ej_search.js,v 1.4 2008/09/18 09:52:23 journals Exp $
// This JavaScript is designed to sanity-check the EJs search page
// Writen by Richard Corfield


/**************************************************
 * Verify is called when the search button is hit *
 **************************************************/

function verify (f){

  //Check that the query field contains something sane

  var fulltext_filled = true;
  var headers_filled = false;

  if ((f.queryft.value == null) || (f.queryft.value == "")
  || (isBlank(f.queryft.value))
  ){
    fulltext_filled = false;
  }

  for ( i=1; i<=3; i++ ) {
    qfield = eval('f.query' + i);
    if ( qfield.value != null && qfield.value != "" && !isBlank(qfield.value) ) {
      headers_filled = true;
    }
  }

  if (fulltext_filled == false && headers_filled == false) {
    msg = "You must enter some search terms";
    alert(msg);
    return false;
  }
  else if (fulltext_filled == true && headers_filled == true) {
    msg = "Please use either:\n";
    msg += "=> the Headers and Abstracts search, or\n";
    msg += "=> the Full Text search\n";
    alert(msg);
    return false;
  }

  //Verify that a journal has been selected if 'Limit Journals'
  //has been selected

  if (f.journaltype[1].checked == true){
    sel_cnt = countSelectedJournals();
    if(!sel_cnt){
      msg = "You must select a journal if you\n" +
            " wish to limit your search by journal.";
      alert(msg);
      return false;
    }
  }else if(f.journaltype[2].checked==true){
    var sel_cnt=countSubjectJournals();
    if(!sel_cnt){
      msg="You must select a subject if you\n" +
	  " wish to limit your search by subject.";
      alert(msg);
      return false;
    }
  }else if(f.journaltype[3].checked==true){
    var sel_cnt=countColls();
    if(!sel_cnt){
      msg="You must select a collection if you\n" +
          " wish to limit your search by EJs Collections.";
      alert(msg);
      return false;
    }

  }


  //Verify that a date has been selected if 'Limit date range'
  //has been selected

//  if (f.datetype[1].checked == true
//  && f.sdate.options[0].selected == true
// && f.edate.options[0].selected == true
//  ){
//    msg = "You must select at least one of the \'From\' and \'To\' dates\n" +
//          "if you wish to limit the date range";
//    alert(msg);
//    return false;
//  }

  return true;
}

/************ End of the main function ***********/ 
/*************************************************/
/************..event handlers follow..************/

//Checks a value for blankness

function isBlank(s){

  for (var i = 0; i < s.length; i++){
    var c = s.charAt(i);
    if (( c != ' ') && (c != '\n') && (c != '\t')) return false;
  }
  return true;
}

//Returns the number of journals selected from the journals options

function countSelectedJournals(){

  var cnt = 0;
  for (var i = 0; i < document.jnl_search.journals.length; i++){
    if (document.jnl_search.journals.options[i].selected == true){
      cnt++;
    }
  }
  return cnt;

}
function countSubjectJournals(){
  var cnt=0;
  for(var i=0; i<document.jnl_search.subject.length; i++){
    if(document.jnl_search.subject.options[i].selected==true){
      cnt++;
    }
  }
  return cnt;
}
function countColls(){
  var cnt=0;
  for(var i=0; i<document.jnl_search.collection.length; i++){
    if(document.jnl_search.collection.options[i].selected==true){
      cnt++;
    }
  }
  return cnt;
}

//Different selections are required depending on
//how many journals have been selected

function limit_journals(sel){
  var cnt = countSelectedJournals();
  var jt=document.jnl_search.journaltype;

  if (cnt > 0){
    jt[0].checked = false;
    jt[1].checked = true;
  }else if (cnt == 0){
    jt[0].checked = true;
    jt[1].checked = false;
  }
  jt[2].checked = false;
}

function subject_journals(sel){
  var cnt=countSubjectJournals();
  var jt=document.jnl_search.journaltype;

  if(cnt>0){
    jt[0].checked=false;
    jt[2].checked=true;
  }else if(cnt==0){ 
    jt[0].checked=true;
    jt[2].checked=false;
  }
  jt[1].checked=false;
}

function collections(sel){
  var cnt=countColls();
  var jt=document.jnl_search.journaltype;

  if(cnt>0){
    jt[0].checked=false;
    jt[3].checked=true;
  }else if(cnt==0){
    jt[0].checked=true;
    jt[3].checked=false;
  }
  jt[1].checked=false;
}


// Select "All years" only when the full range is selected
function datetype_years(sdate,edate){
  if(edate.options[0].selected && sdate.options[sdate.options.length-1].selected
  ){
    // Search all
    document.jnl_search.datetype[0].checked=true;
    document.jnl_search.datetype[1].checked=false;
  }else{
    // Search specific range
    document.jnl_search.datetype[0].checked=false;
    document.jnl_search.datetype[1].checked=true;
  }
}

//Check that only one journal is selected
//if the user wants to limit on issue

function issuetypeCheck(){

  var cnt =  countSelectedJournals();
  if (cnt != 1){
    msg = "Warning: You may only limit the search to issues\n" +
          "if there is only one journal selected";
    alert(msg);
    document.jnl_search.issuetype[0].checked = true;
    }

}
