/** Function:  search
  *  Executes the relevant search.
  *  Requires /scripts/common.js
  * 
  * Parameters:
  *  form form:
  *    search form
  */
function search (form) {
  var returnvalue = false;
  if (form) {
    var elements = form.elements;
    if (elements) {
      var query = elements.namedItem("query");
      if (query) {
        var queryvalue = encodeURIComponent(query.value); //encode url
        if (queryvalue) {
          queryvalue = queryvalue.trim();
          if (queryvalue == '') {
            alert('Please type a search term in the input box.');
            query.focus(); 
            return false;
          } else if (queryvalue == '*') {
            alert('Please start your search with a non-wildcard character.');
            query.focus();
            return false;
          }
          var location = elements.namedItem("location");
          if (location) {
            switch (location.value) {
              case "bobcat:ti": 
                searchBobcatByPhrase (encodeURIComponent(queryvalue), false, "", "ti=");
                break;
              case "bobcat:jl": 
                searchBobcatByPhrase (encodeURIComponent(queryvalue), false, "", "jl=");
                break;
              case "bobcat:kw": 
                searchBobcatByAllKeyword (encodeURIComponent(queryvalue), false); //needs to be double encoded for multiple passes from URLs
                break;
              case "nyu:libraries:findingaids":
                var url = "http://dlib.nyu.edu/findingaids/search/?q=" + queryvalue; 
                window.location = url; 
                break;
              case "bobcat:au": 
                searchBobcatByPhrase (encodeURIComponent(queryvalue), false, "", "au=");
                break;
              case "bobcat:reserves": 
                searchBobcatByKeyword (encodeURIComponent(queryvalue), false, "reserves");
                break;
              case "library": 
                var url = "http://google.nyu.edu/search?client=NYUWeb_Main&output=xml_no_dtd&proxystylesheet=lib_frontend&sitesearch=library.nyu.edu&q=" + queryvalue;
                window.location = url;
                break;
              case "worldcat":
                var url = "http://worldcat.org/search?q=" + queryvalue; 
                window.location = url;
                break;
              case "medcat":
                var url = "http://medcat.nyu.edu/search/?searchtype=X&searcharg=" + queryvalue; 
                window.location = url;
                break;
              case "julius":
                var url = "http://julius.law.nyu.edu/search/X?SEARCH=" + queryvalue; 
                window.location = url;
                break;
              case "catnyp":
                var url = "http://catnyp.nypl.org/search/?searchtype=X&searcharg=" + queryvalue; 
                window.location = url;
                break;
              case "clio":
                queryvalue = CLIOQuickSearch(queryvalue);
                var url = "http://www.columbia.edu/cgi-bin/cul/cliosearch?code=CMD&search=" + queryvalue; 
                window.location = url;
                break;
              case "googlebooks":
                var url = "http://books.google.com/bkshp?q=" + queryvalue; 
                window.location = url;
                break;
              case "googlescholar":
                var url = "http://scholar.google.com/scholar?q=" + queryvalue; 
                window.location = url;
                break;
              case "amazon":
                var url = "http://www.amazon.com/s?url=index%3Dstripbooks&keywords=" + queryvalue; 
                window.location = url;
                break;
              case "oaister":
                var url = "http://quod.lib.umich.edu//cgi/b/bib/bib-idx?type=boolean&c=oaister&rgn1=entire%20record&q1=" + queryvalue; 
                window.location = url;
                break;
              case "scientificcommons":
                var url = "http://www.scientificcommons.org/#search_string=" + queryvalue; 
                window.location = url;
                break;
              case "bobcat:standard":
            	var url ="http://bobcatstandard.library.nyu.edu:8991/F?func=find-b&adjacent=N&local_base=NYU01PUB&request="+queryvalue+"&find_code=WRD&filter_code_1=WLN&filter_code_2=WYR&filter_code_3=WYR&filter_code_4=WFM&filter_code_5=WLC";
            	window.location = url;
            	break;
              default:
                returnvalue = true;
                form.submit();
                break;
            }
          }
        } else {
          alert('Please type a search term in the input box.');
          query.focus(); 
          return false;
        }
      }
    }
  }
  return returnvalue;
}


/** Function: string setBobcatAttr1
  *  Set's the Bobcat Attr1 field, given the form id and attr1 value
  *  Requires /scripts/common.js
  * 
  * Parameters:
  *  string form_id:
  *    id of form containing element attr1
  *
  *  string attr1_value:
  *    value of attr1 based on EZBobcat specs
  */
function setBobcatAttr1 (form_id, attr1_value, attr1Display_value) {
  var form = getObjectById(form_id);
  var attr1Display = getObjectById('attr1Display');
  if (form) {
    var elements = form.elements;
    if (elements) {
      var attr1 = elements.namedItem("attr1");
      if (attr1) {
        attr1.value = attr1_value;
        if (attr1Display && attr1Display_value) {
          attr1Display.innerHTML = attr1Display_value;
        }
      }
    }
  }
}

  function cleanSearch() {
    var searchTerm = getObjectById('term1');
    if (searchTerm) {
      searchTerm.onfocus = function() {if (this.value == searchStr) this.value = ''};
      searchTerm.onblur = function() {if (this.value == '') this.value = searchStr};
    }
  }
  
  function clearSearch() {
    var searchTerm = getObjectById('term1');
    if (searchTerm) {
      if (searchTerm.value == searchStr) {
        searchTerm.value = '';
      }
    }
  }

/**
  * From Columbia University Library Website
  * http://www.columbia.edu/cu/lweb/img/assets/3703/quicksearch.home.js
  * Used to enable quick keyword search of the CLIO library catalog.
  * Thanks Columbia!
  **/
//////////////////////////
// Code to insert AND between Keywords
// Copyright Regents of the University of California 2004
// Modified for Columbia use June 2006

function CLIOQuickSearch(str1) {
  var pstring = "";
  if (str1) {
    // remove initial spaces
    str1 = str1.replace(/^\s+/, "");
    // rm any trailing spaces
    str1 = str1.replace(/\s+$/, "");
    // replace two or more spaces with single space
    str1 = str1.replace(/(\s){2,}/g, " ");
    // insert space(s) inside of any adjancent double quote delimiters (eg "term1""term2"; "term1"term2"term3")
    str1 = str1.replace(/\"\"/g, "\" \"");

    var qstate = 0;
    var regx1 = /(.)/;
    var currentMatch;

    ///////////// top of loop ////////////////
    while( str1 ) {
      // check for special code
      if( str1.search(/^100A\s/i) == 0 ) {
        str1 = str1.replace(/.{5}/, "");
        pstring = pstring + '100A ';
      } else if( str1.search(/^110A\s/i) == 0 ) {
        str1 = str1.replace(/.{5}/, "");
        pstring = pstring + '110A ';
      } else if( str1.search(/^111A\s/i) == 0 ) {
        str1 = str1.replace(/.{5}/, "");
        pstring = pstring + '111A ';
      } else if( str1.search(/^130A\s/i) == 0 ) {
        str1 = str1.replace(/.{5}/, "");
        pstring = pstring + '130A ';
      } else if( str1.search(/^210A\s/i) == 0 ) {
        str1 = str1.replace(/.{5}/, "");
        pstring = pstring + '210A ';
      } else if( str1.search(/^240A\s/i) == 0 ) {
        str1 = str1.replace(/.{5}/, "");
        pstring = pstring + '240A ';
      } else if( str1.search(/^245A\s/i) == 0 ) {
        str1 = str1.replace(/.{5}/, "");
        pstring = pstring + '245A ';
      } else if( str1.search(/^246A\s/i) == 0 ) {
        str1 = str1.replace(/.{5}/, "");
        pstring = pstring + '246A ';
      } else if( str1.search(/^260A\s/i) == 0 ) {
        str1 = str1.replace(/.{5}/, "");
        pstring = pstring + '260A ';
      } else if( str1.search(/^260B\s/i) == 0 ) {
        str1 = str1.replace(/.{5}/, "");
        pstring = pstring + '260B ';
      } else if( str1.search(/^260C\s/i) == 0 ) {
        str1 = str1.replace(/.{5}/, "");
        pstring = pstring + '260C ';
      } else if( str1.search(/^262K\s/i) == 0 ) {
        str1 = str1.replace(/.{5}/, "");
        pstring = pstring + '262K ';
      } else if( str1.search(/^262L\s/i) == 0 ) {
        str1 = str1.replace(/.{5}/, "");
        pstring = pstring + '262L ';
      } else if( str1.search(/^400N\s/i) == 0 ) {
        str1 = str1.replace(/.{5}/, "");
        pstring = pstring + '400N ';
      } else if( str1.search(/^400T\s/i) == 0 ) {
        str1 = str1.replace(/.{5}/, "");
        pstring = pstring + '400T ';
      } else if( str1.search(/^410N\s/i) == 0 ) {
        str1 = str1.replace(/.{5}/, "");
        pstring = pstring + '410N ';
      } else if( str1.search(/^410T\s/i) == 0 ) {
        str1 = str1.replace(/.{5}/, "");
        pstring = pstring + '410T ';
      } else if( str1.search(/^411N\s/i) == 0 ) {
        str1 = str1.replace(/.{5}/, "");
        pstring = pstring + '411N ';
      } else if( str1.search(/^411T\s/i) == 0 ) {
        str1 = str1.replace(/.{5}/, "");
        pstring = pstring + '411T ';
      } else if( str1.search(/^440T\s/i) == 0 ) {
        str1 = str1.replace(/.{5}/, "");
        pstring = pstring + '440T ';
      } else if( str1.search(/^490T\s/i) == 0 ) {
        str1 = str1.replace(/.{5}/, "");
        pstring = pstring + '490T ';
      } else if( str1.search(/^600A\s/i) == 0 ) {
        str1 = str1.replace(/.{5}/, "");
        pstring = pstring + '600A ';
      } else if( str1.search(/^610A\s/i) == 0 ) {
        str1 = str1.replace(/.{5}/, "");
        pstring = pstring + '610A ';
      } else if( str1.search(/^611A\s/i) == 0 ) {
        str1 = str1.replace(/.{5}/, "");
        pstring = pstring + '611A ';
      } else if( str1.search(/^630A\s/i) == 0 ) {
        str1 = str1.replace(/.{5}/, "");
        pstring = pstring + '630A ';
      } else if( str1.search(/^650A\s/i) == 0 ) {
        str1 = str1.replace(/.{5}/, "");
        pstring = pstring + '650A ';
      } else if( str1.search(/^651A\s/i) == 0 ) {
        str1 = str1.replace(/.{5}/, "");
        pstring = pstring + '651A ';
      } else if( str1.search(/^653A\s/i) == 0 ) {
        str1 = str1.replace(/.{5}/, "");
        pstring = pstring + '653A ';
      } else if( str1.search(/^655A\s/i) == 0 ) {
        str1 = str1.replace(/.{5}/, "");
        pstring = pstring + '655A ';
      } else if( str1.search(/^690A\s/i) == 0 ) {
        str1 = str1.replace(/.{5}/, "");
        pstring = pstring + '690A ';
      } else if( str1.search(/^691A\s/i) == 0 ) {
        str1 = str1.replace(/.{5}/, "");
        pstring = pstring + '691A ';
      } else if( str1.search(/^700A\s/i) == 0 ) {
        str1 = str1.replace(/.{5}/, "");
        pstring = pstring + '700A ';
      } else if( str1.search(/^700T\s/i) == 0 ) {
        str1 = str1.replace(/.{5}/, "");
        pstring = pstring + '700T ';
      } else if( str1.search(/^710A\s/i) == 0 ) {
        str1 = str1.replace(/.{5}/, "");
        pstring = pstring + '710A ';
      } else if( str1.search(/^710T\s/i) == 0 ) {
        str1 = str1.replace(/.{5}/, "");
        pstring = pstring + '710T ';
      } else if( str1.search(/^711A\s/i) == 0 ) {
        str1 = str1.replace(/.{5}/, "");
        pstring = pstring + '711A ';
      } else if( str1.search(/^711T\s/i) == 0 ) {
        str1 = str1.replace(/.{5}/, "");
        pstring = pstring + '711T ';
      } else if( str1.search(/^730A\s/i) == 0 ) {
        str1 = str1.replace(/.{5}/, "");
        pstring = pstring + '730A ';
      } else if( str1.search(/^740A\s/i) == 0 ) {
        str1 = str1.replace(/.{5}/, "");
        pstring = pstring + '740A ';
      } else if( str1.search(/^760A\s/i) == 0 ) {
        str1 = str1.replace(/.{5}/, "");
        pstring = pstring + '760A ';
      } else if( str1.search(/^762A\s/i) == 0 ) {
        str1 = str1.replace(/.{5}/, "");
        pstring = pstring + '762A ';
      } else if( str1.search(/^765A\s/i) == 0 ) {
        str1 = str1.replace(/.{5}/, "");
        pstring = pstring + '765A ';
      } else if( str1.search(/^767A\s/i) == 0 ) {
        str1 = str1.replace(/.{5}/, "");
        pstring = pstring + '767A ';
      } else if( str1.search(/^770A\s/i) == 0 ) {
        str1 = str1.replace(/.{5}/, "");
        pstring = pstring + '770A ';
      } else if( str1.search(/^772A\s/i) == 0 ) {
        str1 = str1.replace(/.{5}/, "");
        pstring = pstring + '772A ';
      } else if( str1.search(/^773A\s/i) == 0 ) {
        str1 = str1.replace(/.{5}/, "");
        pstring = pstring + '773A ';
      } else if( str1.search(/^775A\s/i) == 0 ) {
        str1 = str1.replace(/.{5}/, "");
        pstring = pstring + '775A ';
      } else if( str1.search(/^776A\s/i) == 0 ) {
        str1 = str1.replace(/.{5}/, "");
        pstring = pstring + '776A ';
      } else if( str1.search(/^777A\s/i) == 0 ) {
        str1 = str1.replace(/.{5}/, "");
        pstring = pstring + '777A ';
      } else if( str1.search(/^780A\s/i) == 0 ) {
        str1 = str1.replace(/.{5}/, "");
        pstring = pstring + '780A ';
      } else if( str1.search(/^780T\s/i) == 0 ) {
        str1 = str1.replace(/.{5}/, "");
        pstring = pstring + '780T ';
      } else if( str1.search(/^785A\s/i) == 0 ) {
        str1 = str1.replace(/.{5}/, "");
        pstring = pstring + '785A ';
      } else if( str1.search(/^785T\s/i) == 0 ) {
        str1 = str1.replace(/.{5}/, "");
        pstring = pstring + '785T ';
      } else if( str1.search(/^787A\s/i) == 0 ) {
        str1 = str1.replace(/.{5}/, "");
        pstring = pstring + '787A ';
      } else if( str1.search(/^800N\s/i) == 0 ) {
        str1 = str1.replace(/.{5}/, "");
        pstring = pstring + '800N ';
      } else if( str1.search(/^800T\s/i) == 0 ) {
        str1 = str1.replace(/.{5}/, "");
        pstring = pstring + '800T ';
      } else if( str1.search(/^810N\s/i) == 0 ) {
        str1 = str1.replace(/.{5}/, "");
        pstring = pstring + '810N ';
      } else if( str1.search(/^810T\s/i) == 0 ) {
        str1 = str1.replace(/.{5}/, "");
        pstring = pstring + '810T ';
      } else if( str1.search(/^811N\s/i) == 0 ) {
        str1 = str1.replace(/.{5}/, "");
        pstring = pstring + '811N ';
      } else if( str1.search(/^811T\s/i) == 0 ) {
        str1 = str1.replace(/.{5}/, "");
        pstring = pstring + '811T ';
      } else if( str1.search(/^830T\s/i) == 0 ) {
        str1 = str1.replace(/.{5}/, "");
        pstring = pstring + '830T ';
      } else if( str1.search(/^948A\s/i) == 0 ) {
        str1 = str1.replace(/.{5}/, "");
        pstring = pstring + '948A ';
      } else if( str1.search(/^GKEY\s/i) == 0 ) {
        str1 = str1.replace(/.{5}/, "");
        pstring = pstring + 'GKEY ';
      } else if( str1.search(/^ISBN\s/i) == 0 ) {
        str1 = str1.replace(/.{5}/, "");
        pstring = pstring + 'ISBN ';
      } else if( str1.search(/^ISSN\s/i) == 0 ) {
        str1 = str1.replace(/.{5}/, "");
        pstring = pstring + 'ISSN ';
      } else if( str1.search(/^JKEY\s/i) == 0 ) {
        str1 = str1.replace(/.{5}/, "");
        pstring = pstring + 'JKEY ';
      } else if( str1.search(/^NKEY\s/i) == 0 ) {
        str1 = str1.replace(/.{5}/, "");
        pstring = pstring + 'NKEY ';
      } else if( str1.search(/^NOTE\s/i) == 0 ) {
        str1 = str1.replace(/.{5}/, "");
        pstring = pstring + 'NOTE ';
      } else if( str1.search(/^NPUB\s/i) == 0 ) {
        str1 = str1.replace(/.{5}/, "");
        pstring = pstring + 'NPUB ';
      } else if( str1.search(/^OPUS\s/i) == 0 ) {
        str1 = str1.replace(/.{5}/, "");
        pstring = pstring + 'OPUS ';
      } else if( str1.search(/^PUBL\s/i) == 0 ) {
        str1 = str1.replace(/.{5}/, "");
        pstring = pstring + 'PUBL ';
      } else if( str1.search(/^PUBP\s/i) == 0 ) {
        str1 = str1.replace(/.{5}/, "");
        pstring = pstring + 'PUBP ';
      } else if( str1.search(/^SERI\s/i) == 0 ) {
        str1 = str1.replace(/.{5}/, "");
        pstring = pstring + 'SERI ';
      } else if( str1.search(/^SKEY\s/i) == 0 ) {
        str1 = str1.replace(/.{5}/, "");
        pstring = pstring + 'SKEY ';
      } else if( str1.search(/^TKEY\s/i) == 0 ) {
        str1 = str1.replace(/.{5}/, "");
        pstring = pstring + 'TKEY ';
      }
      
      // remove and store the first char of the string
      str1 = str1.replace(regx1, "");
      currentMatch = RegExp.$1;
      if( currentMatch == "\"" ) {
        if( qstate == 0 ) {
          qstate = 1;
        } else {
          qstate = 0;
        }
        pstring = pstring + currentMatch;
      } else {
        if( qstate == 0 ) {
          if( currentMatch == " " ) {
            // "0" is the postion in the string where "and " starts
            if( str1.search(/^and\s/i) == 0 || str1.search(/^and\"/i) == 0 ) {
              str1 = str1.replace(/.{4}/, "");
              pstring = pstring + ' AND ';
            } else if( str1.search(/^or\s/i) == 0 || str1.search(/^or\s/i) == 0 ) {
              str1 = str1.replace(/.{3}/, "");
              pstring = pstring + ' OR ';
            } else if( str1.search(/^not\s/i) == 0 || str1.search(/^not\s/i) == 0 ) {
              str1 = str1.replace(/.{4}/, "");
              pstring = pstring + ' NOT ';
            } else {
              pstring = pstring + ' AND ';
            }
          } else {
            pstring = pstring + currentMatch;
          }
        } else {
          pstring = pstring + currentMatch;
        }
      }
    }
    // end of loop
  }
  return pstring;
}

