// globals

var last_win = null;
var run_obj = null;
var run_msg = null;
var csv_obj = null;
var email_obj = null;
var disable_close_page = false;
var main_tab = null;
var save_onresize=null;
var email_prog = null;

var selects_disabled = false;

var WIN32=false;
var outer_width=0, outer_height=0;

var next_menu_obj = new Object;
var next_menu_which = new String;
var next_menu_x = 0;
var next_menu_y = 0;

var tag_width = 0;
var tag_height = 0;
var tag_left = 0;
var tag_top = 0;

var next_hiddenwin = 0;

var prevent_multiple_clicks = false;

// SECTION: javascript form control

function disable()
{
  return false;
}

function csv_include_form(form)
{
  if (form.type=='button') {
    // don't submit buttons
    return false;
  }
  if (form.name.indexOf('Dfilters')==0 &&
      form.value.length<1 &&
      (form.name.indexOf('_starting')!=-1 || form.name.indexOf('_ending')!=-1)) {
    // don't submit blank starting/ending filters
    return false;
  }
  return true;
}

function add_filter(filters,file,field,value)
{
  if (!filters[file]) {
    filters[file] = new Object();
  }
  if (!filters[file][field]) {
    filters[file][field] = value;
  }
}

function cescape(str)
{
  var out;
  out=str.replace(',','{C}');
  return escape(out);
}

function get_form_action(form)
{
  if (form.action.indexOf('http:')==0) {
    return form.action.replace(/^[^\/]*(?:\/[^\/]*){2}/, "");
  }
  return form.action;
}

function csv(action,button)
{
  var filters = new Object();
  var url = get_form_action(document.sciform);
  var delim = url.indexOf('?')==-1 ? '?' : '&';
  if (button) {
    button.value='Downloading CSV...';
    csv_obj=button;
    window.setTimeout("csv_obj.value='Download CSV'",2000);
  }
  for (var i=0; i<document.sciform.length; i++) {
    var obj = document.sciform[i];
    if (csv_include_form(obj)) {
      if (obj.name.indexOf('Dfilters')!=-1) {
        // add it to the filter object
        var split = obj.name.split('_');
        if (obj.type=='checkbox' || obj.type=='radio') {
          if (obj.checked) {
            add_filter(filters,split[0],split[2],obj.value);
          }
        } else {
          if (obj.selectedIndex) {
            add_filter(filters,split[0],split[2],selected(obj));
          } else {
            add_filter(filters,split[0],split[2],obj.value);
          }
        }
      }
      else if (obj.type=='checkbox' ||
          obj.type=='radio') {
        if (obj.checked) {
          url += delim; delim = '&';
          url += escape(obj.name);
          url += '=';
          url += escape(obj.value);
        }
      } else {
        url += delim; delim = '&';
        url += escape(obj.name);
        url += '=';
        if (obj.name == "Faction") {
          url += escape(action);
        } else if (obj.selectedIndex) {
          url += escape(selected(obj));
        } else {
          url += escape(obj.value);
        }
      }
    }
  }
  // now go back and add the filters
  var str = '';
  for (var i=0; i<30; i++) {
    var name ='Dfilters'+i;
    if (!filters[name]) {
      break;
    }
    url += delim; delim = '&';
    url += name+'=';
    url += escape(filters[name]['type'] ? filters[name]['type'] : '') + ',';
    url += escape(filters[name]['exclude'] ? '1' : '') + ',';
    url += escape(filters[name]['field'] ? filters[name]['field'] : '') + ',';
    url += cescape(filters[name]['name'] ? filters[name]['name'] : '') + ',';
    url += cescape(filters[name]['resolve'] ? filters[name]['resolve'] : '') + ',';
    url += cescape(filters[name]['starting'] ? filters[name]['starting'] : '') + ',';
    url += cescape(filters[name]['ending'] ? filters[name]['ending'] : '') + ',';
    url += escape(filters[name]['file'] ? filters[name]['file'] : '') + ',';
  }
  url += delim; delim = '&';
  url += 'CSV';
  go(url);
  return false;
}

function get_form_action(form)
{
  if (form.action.indexOf('http:')==0) {
    return form.action.replace(/^[^\/]*(?:\/[^\/]*){2}/, "");
  }
  return form.action;
}

function email(subject,scheduled)
{
  var filters = new Object();
  var url = get_form_action(document.sciform);
  for (var i=0; i<document.sciform.length; i++) {
    var obj = document.sciform[i];
    var tmp = '';
    if (csv_include_form(obj)) {
      if (obj.name.indexOf('Dfilters')!=-1) {
        // add it to the filter object
        var split = obj.name.split('_');
        if (obj.type=='checkbox' || obj.type=='radio') {
          if (obj.checked) {
            add_filter(filters,split[0],split[2],obj.value);
          }
        } else {
          if (obj.selectedIndex) {
            add_filter(filters,split[0],split[2],selected(obj));
          } else {
            add_filter(filters,split[0],split[2],obj.value);
          }
        }
      }
      else if (obj.type=='checkbox' || obj.type=='radio') {
        if (obj.checked) {
          tmp = obj.name+'='+obj.value;
        }
      }
      else {
        tmp = obj.name;
        tmp += '=';
        if (obj.selectedIndex) {
          tmp += selected(obj);
        } else {
          tmp += obj.value;
        }
      }
    }
    if (tmp.length) {
      url+='`';
      url+=escape(tmp);
    }
  }
  // now go back and add the filters
  var str = '';
  for (var i=0; i<30; i++) {
    var name ='Dfilters'+i;
    if (!filters[name]) {
      break;
    }
    url += '`';
    url += name+'=';
    url += escape(filters[name]['type'] ? filters[name]['type'] : '') + ',';
    url += escape(filters[name]['exclude'] ? '1' : '') + ',';
    url += escape(filters[name]['field'] ? filters[name]['field'] : '') + ',';
    url += cescape(filters[name]['name'] ? filters[name]['name'] : '') + ',';
    url += cescape(filters[name]['resolve'] ? filters[name]['resolve'] : '') + ',';
    url += cescape(filters[name]['starting'] ? filters[name]['starting'] : '') + ',';
    url += cescape(filters[name]['ending'] ? filters[name]['ending'] : '') + ',';
    url += escape(filters[name]['file'] ? filters[name]['file'] : '') + ',';
  }
  if (scheduled) {
    url+='`';
    url+='Fscheduled';
  }
  if (email_prog && email_prog.length) {
    var out = '/cgi-bin/'+email_prog+'?Faction=EMAIL&Demail__subject='+subject+'&Demail__action='+url;
  } else {
    var out = '/cgi-bin/weblist?Faction=EMAIL&Demail__subject='+subject+'&Demail__action='+url;
  }
  pop_window(out);
  return false;
}

function run(obj,action,msg,once)
{
  if (msg) {
    // change the current button text
    run_obj=obj;
    run_msg=obj.value;
    obj.value=msg;
  }
  if (action) {
    // submit with an alternate action
    document.sciform.Faction.value=action;
  }
  if (once) {
    prevent_multiple_clicks=true;
  }
  submit_sciform();
  return false;
}

function cancel(obj,action)
{
  var c;
  var need_confirm=false;
  if (confirm_cancel) {
    need_confirm=parseInt(document.sciform.Fchanged.value);
  }
  if (need_confirm) {
    c=confirm("If you cancel without saving, you will lose all changes.  Click OK to lose your changes, or CANCEL to return to editing.\n(if you do not wish to see this prompt in the future, disable 'Confirm Cancel' in your Profile)");
  } else {
    c=true;
  }
  if (c) {
    confirm_cancel=false; // don't prompt again
    if (action) {
      run(obj,action,'Canceling...');
    } else {
      close_page();
    }
  }
  return(c);
}

// SECTION: Web Scalar

function get_scale(height)
{
  if (height<600) {
    // Tiny
    return real(7.0/11.0);
  }
  if (height<768) {
    // Small
    return real(9.0/11.0);
  }
  if (height<1024) {
    // Medium (default)
    return 1.0;
  }
  if (height<1200) {
    // Large
    return real(13.0/11.0);
  }
  // Huge
  return real(17.0/11.0);
}

function adjust_style(type,pagescale)
{
  var scale;
  var height;
  if (pagescale && pagescale!=1) {
    height=format_number(pagescale*768,0); // convert it back to the default height
    scale=get_scale(height);
    if (document.styleSheets) {
      // resize all fontSizes in all Styles
      for (var sIndex=0;sIndex<document.styleSheets.length;sIndex++) {
        var styleSheet=document.styleSheets[sIndex];
        if (!type || browserStyleSheetMedia(styleSheet)==type) {
          var theRules = new Array();
          if (styleSheet.cssRules) {
            theRules = styleSheet.cssRules;
          } else if (styleSheet.rules) {
            theRules = styleSheet.rules;
          } else {
            // this browser can't manipulate style sheets
            return;
          }
          for (var rIndex=0;rIndex<theRules.length;rIndex++) {
            var rule=theRules[rIndex]
            if (rule.style.fontSize) {
              var fontSize=format_number(rule.style.fontSize,0);
              fontSize=format_number(fontSize*scale,0);
              rule.style.fontSize=fontSize+"px";
            }
          }
        }
      }
    }
  }
}

// SECTION: COOKIES

function get_cookie(name)
{
  var value = document.cookie;
  var start_at = value.indexOf(' ' + name + '=');
  if (start_at == -1) {
    start_at = value.indexOf(name + '=');
  }
  if (start_at == -1) {
    value = null;
  } else {
    start_at = value.indexOf('=', start_at) + 1;
    var end_at = value.indexOf(';', start_at);
    if (end_at == -1) {
      end_at = value.length;
    }
    value = unescape(value.substring(start_at,end_at));
  }
  return(value);
}

function set_cookie(name,value,expires,path,domain)
{
  var now = new Date();
  var year = now.getYear();
  var month = now.getMonth();
  var day = now.getDate();
  var hour = now.getHours();
  var minute = now.getMinutes();
  if (year<1000) {
    // some browsers measure the year differently
    year+=1900;
  }
  if (expires=='end_of_day') {
    hour = 23;
    minute = 59;
  } else if (expires=='delete') {
    year = 1970;
  } else if (parseInt(expires)) {
    minute += parseInt(expires);
  } else {
    year += 20;
  }
  expires = new Date(year,month,day,hour,minute);
  if (!path) {
    path='/';
  }
  // write the new one
  var new_cookie = name + "=" + escape(value);
  if (expires)
    new_cookie += "; expires=" + expires.toGMTString();
  if (path)
    new_cookie += "; path=" + path;
  if (domain)
    new_cookie += "; domain=" + domain;
  document.cookie = new_cookie;
}

function delete_cookie(name, path, domain)
{
  if (get_cookie(name)) {
    var now = new Date(2000,1,1,1,1);
    if (!path) {
      path='/';
    }
    document.cookie = name + "=" +
              (path ? "; path=" + path : "") +
              (domain ? "; domain=" + domain : "") +
              "; expires=" + now.toGMTString();
  }
}

// SECTION: WINDOWS

function no_header(action)
{
  var new_action = action;
  var split = action.split('?');
  if (action.indexOf("outputfile")!=-1) {
    return new_action;
  }
  if (split.length>1) {
    new_action += '&Fheader=0';
  } else {
    new_action += '?Fheader=0';
  }
  if (document.sciform && document.sciform.Fwebspec) {
    new_action += '&Fparent='+document.sciform.Fwebspec.value;
  }
  return(new_action);
}

function open_window(action,target,format)
{
  last_win = window.open(action,target,format);
  if (!last_win) {
    alert('Could not open a new popup window; do you have popups disabled?');
  } else if (!last_win.opener) {
    last_win.opener = self;
  }
  return(last_win);
}

function pop_window(action,width,height,args)
{
  if (!width)
    width=800;
  if (!height)
    height=600;
  width *= web_scalar;
  height *= web_scalar;
  if (args) {
    open_window(no_header(action),'_blank',args+',width='+width+',height='+height);
  } else {
    open_window(no_header(action),'_blank','scrollbars=yes,resizable=yes,status=no,width='+width+',height='+height);
  }
}

function pop_submit(action,width,height,args)
{
  pop_window('/cgi-bin/repost?Faction='+action,width,height,args);
  return false;
}

// clears opener
function pop_orphan(action,width,height,args)
{
  pop_window(action,width,height,args);
  last_win.name='orphan';
  last_win.opener=null;
}

function pop_full(action)
{
  var save_win = last_win;
  open_window(action,'_blank','');
  last_win = save_win;
}

function pop_report(action)
{
  new_win = open_window(no_header(action),'_blank','scrollbars=yes,titlebar=no,status=no,resizable=yes,toolbar=no,menubar=no,location=no');
  if (new_win) {
    new_win.resizeTo(800,600);
  }
}

function init_hidden_windows()
{
  if (browser.isIE) {
    for (counter=0; counter<max_hiddenwin; counter++) {
      document.write("<iframe id='hiddenwin"+counter+"' name='hiddenwin"+counter+"' src='' style='display:none;'>");
      document.write("</iframe>");
    }
  } else {
    document.write("<div style='display: none;'>");
    for (counter=0; counter<max_hiddenwin; counter++) {
      document.write("<iframe border=0 height=0 width=0 id='hiddenwin"+counter+"' name='hiddenwin"+counter+"' src=''>");
      document.write("</iframe>");
    }
    document.write("</div>");
  }
}

function pop_hidden(action)
{
  if (max_hiddenwin && frames) {
    var hw = frames['hiddenwin'+next_hiddenwin];
    if (hw) {
      hw.location.href=no_header(action);
      if (next_hiddenwin+1==max_hiddenwin) {
        next_hiddenwin = 0;
      } else {
        next_hiddenwin = parseInt(next_hiddenwin)+1;
      }
      // HERE need to pause the page until the iframe finishes loading...
      return;
    }
  }
  // fall back to old method
  open_window(no_header(action),'_blank','scrollbars=no,resizable=no,status=no,width=10,height=10,top=3000,left=3000');
  last_win.hidden = true;
}

// xmlhttp

// XMLhttpRequest stuff
var aXmlHttp = new Array();
var aXmlResponse = new Array();
function xmlResult()
{
    for(var i=0;i<aXmlHttp.length;i++)
    {
        if(aXmlHttp[i] && aXmlHttp[i][0] && aXmlHttp[i][0].readyState==4&&aXmlHttp[i][0].responseText)
        {
            //must null out record before calling function in case
            //function invokes another xmlHttpRequest.
            var f = aXmlHttp[i][2];
            var o = aXmlHttp[i][1];
            var s = aXmlHttp[i][0].responseText;
            aXmlHttp[i][0] = null;
            aXmlHttp[i][1] = null;
            aXmlHttp[i] = null;
            f.apply(o,new Array(s));
        }
    }
}

// u -> url
// o -> object (can be null) to invoke function on
// f -> callback function
// p -> optional argument to specify POST
function call(u,o,f)
{
    var method = "GET";
    var dat;
    if (arguments.length==4){
      method = "POST";
      tmp = u.split(/\?/);
      u = tmp[0];
      dat = tmp[1];

    }
    var idx = aXmlHttp.length;
    for(var i=0; i<idx;i++)
    if (aXmlHttp[i] == null)
    {
        idx = i;
        break;
    }
    aXmlHttp[idx]=new Array(2);
    aXmlHttp[idx][0] = getXMLHTTP();

    aXmlHttp[idx][1] = o;
    aXmlHttp[idx][2] = f;
    if(aXmlHttp[idx])
    {
        aXmlHttp[idx][0].open(method,u,true);
        if(method == "POST"){
          aXmlHttp[idx][0].setRequestHeader("Content-Type", "application/x-www-form-urlencoded");

          aXmlHttp[idx][0].send(dat);
        }
        aXmlHttp[idx][0].onreadystatechange=xmlResult;

       if(method =="GET"){ aXmlHttp[idx][0].send(null);}
    }
}

function getXMLHTTP()
{
    var A=null;
    if(!A && typeof XMLHttpRequest != "undefined")
    {
        A=new XMLHttpRequest();
    }
    if (!A)
    {
        try
        {
            A=new ActiveXObject("Msxml2.XMLHTTP");
        }
        catch(e)
        {
            try
            {
                A=new ActiveXObject("Microsoft.XMLHTTP");
            }
            catch(oc)
            {
                A=null
            }
        }
    }
    return A;
}

function drawNull(s)
{
    eval(s);
    return false;
}

function pop_unsupported()
{
  var width = 400 * web_scalar;
  var height = 100 * web_scalar;
  open_window('/cgi-bin/unsup?Fheader=0','_blank','scrollbars=yes,resizable=yes,status=no,width='+width+',height='+height);
}

function get_opener()
{
  if (self.name!='orphan') {
    if (self.opener && !self.opener.closed) {
      return self.opener;
    }
    if (self.parent && !self.parent.closed) {
      return self.parent;
    }
  }
  return null;
}

function refresh_opener()
{
  if (get_opener()) {
    if (get_opener().name == 'header') {
      get_opener().top.header.location.reload();
      get_opener().top.menu.location.reload();
      get_opener().top.home.location.reload();
    } else if (get_opener().document.sciform) {
      get_opener().document.sciform.submit();
    } else {
      get_opener().location.reload();
    }
  }
}

function reload_opener()
{
  if (get_opener()) {
    if (get_opener().name == 'header') {
      get_opener().top.header.location.reload();
      get_opener().top.menu.location.reload();
      get_opener().top.home.location.reload();
    } else {
      get_opener().location.reload();
    }
  }
}

function close_page(submit)
{
  if (!disable_close_page) {
    if (self.name && self.name.indexOf('hiddenwin')!=-1) {
      if (submit) {
        refresh_opener();
      }
      // clear iframe
    }
    else if (top.home && top.menu && !get_opener()) {
      top.location.reload();
    }
    else if (document.sciform && document.sciform.Fheader && document.sciform.Fheader.value!='0') {
      go('/cgi-bin/main');
    }
    else {
      if (submit) {
        refresh_opener();
      }
      self.close();
    }
  }
  return false;
}

// SECTION: LOGIN

function login()
{
  var cookie = get_cookie('LIVE');
  if (!cookie) {
    return;
  }
  var cookie_detail = cookie.split(';');
  if (cookie_detail[3] == 'auto') {
    submit_sciform();
  }
  if (cookie_detail[3] == 'no') {
    // do not copy cookie into form
    return;
  }
  document.sciform.userid.value = cookie_detail[0];
  document.sciform.passwd.value = cookie_detail[1];
  document.sciform.database.value = cookie_detail[2];
  // document.sciform.save.value = cookie_detail[3];
  document.sciform.session.value = cookie_detail[4];
}

function logout()
{
  var cookie = get_cookie('LIVE');
  if (!cookie) {
    return;
  }
  var cookie_detail = cookie.split(';');
  delete_cookie('LIVE');
  if (cookie_detail.length>4 && cookie_detail[5]) {
    go('/'+cookie_detail[5]+'/');
  } else if (top) {
    top.go('/cgi-bin/main');
  } else if (get_opener()) {
    get_opener().logout();
    close_page();
  } else {
    go('/cgi-bin/main');
  }
}

// SECTION: jdates

String.prototype.padL = function (nLength, sChar)
{
  var sreturn = this;
  while (sreturn.length < nLength) {
    sreturn = String(sChar) + sreturn;
  }
  return sreturn;
}

var dpm = new Array (0,31,28,31,30,31,30,31,31,30,31,30,31);
var month_names = new Array ("January","February","March","April","May","June","July","August","September","October","November","December");
var day_names = new Array ("Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday");

var BAD_DATE        = 0
var BASE		        = 621049
var MIN_JULIAN      = 702000
var MAX_JULIAN      = 749000
var MAX_JDATES_YEAR = 19
var DPYR            = 36525
var DPMN            = 306
var YRADJ           = 100
var MNADJ           = 10

function JDATE ()
{
  this.year = new Object();
  this.month = new Object();
  this.day = new Object();
  this.week = new Object();
}

function day_of_week(date_ptr)
{
  var jd = new JDATE();
  if (date_ptr)
    jd = unjdate(date_ptr);
  else
    return(0);
  return (jd.week);
}

function day_name(date_ptr)
{
  return(day_names[day_of_week(date_ptr)]);
}

function not_valid_date(datestr)
{
  if (!datestr)
    return true;
  if (datestr+BASE< MIN_JULIAN || datestr+BASE> MAX_JULIAN)
    return true;
  return false;
}

function unjdate(thisdate)
{
  var jd = new JDATE();
  var tdate;

  jd.week   = parseInt(thisdate % 7);
  tdate     = parseInt(thisdate + BASE);
  jd.year   = parseInt((tdate * YRADJ) / DPYR);
  tdate    -= parseInt(((DPYR * jd.year) / YRADJ));
  jd.month  = parseInt((tdate * MNADJ) / DPMN);

  if (jd.month < 4) {
    tdate     = thisdate + BASE - parseInt((DPYR * (jd.year - 1)) / YRADJ);
    jd.month  = parseInt((tdate * MNADJ) / DPMN);
    jd.day    = tdate - parseInt((DPMN * jd.month) / MNADJ);
    jd.month -= 13;
  } else {
    jd.day    = tdate - parseInt((DPMN * jd.month) / MNADJ);
    jd.month--;
  }

  if (jd.month < 1) {
    jd.month += 12;
    jd.year--;
  }
  if (jd.day == 0) {
    jd.month--;
    jd.day = dpm[jd.month];
  }
  return jd;
}

function check_leap(year,month,day)
{
  if (day != 29 || month != 2)
    return(false);
  if ((year % 4) == 0) {
    if ((year % 400) == 0)
      return(true);
    else if ((year % 100) != 0)
      return(true);
    else
      return(false);
  } else
    return(false);
}

function jdate(year,month,day)
{
  if (day < 1 || month < 1 || month > 12)
    return(BAD_DATE);
  if (day > dpm[month] && !check_leap(year,month,day))
    return(BAD_DATE);
  if (month < 3) {
    year--;
    month += 13;
  } else
    month++;
  return (parseInt((DPYR * year) / YRADJ) + parseInt((DPMN * month) / MNADJ) + day - BASE);
}

function systemdate()
{
  var now = new Date();
  year=now.getYear();
  if (year<1000) {
    // mozilla
    year+=1900;
  }
  month=now.getMonth();
  day=now.getDate();
  return jdate(year,month+1,day);
}

function systemtime()
{
  var now = new Date();
  return(now.getHours()*100+now.getMinutes());
}

function year_of(date_ptr)
{
  var jd = new JDATE();
  if (date_ptr<1)
    return(0);
  jd=unjdate(date_ptr);
  return (jd.year);
}

function set_date(d1)
{
  var tmp;
  if (not_valid_date(d1)) {
    tmp="";
  } else {
    jd = unjdate(d1);
    tmp = String(jd.month).padL(2,"0") + "/" +  String(jd.day).padL(2,"0") + "/" + jd.year;
  }
  return(tmp);
}

function calc_next_date(days_to_follow,source_date)
{
  var jd = new JDATE();
  var number_date;
  var counter;
  var current;
  var argc;
  var valid_date;
  var number = new Array(11);
  var numbers;
  var argv = new Array(11);
  var tmp_date;
  var tmp_string;
  var ch;
  var modifier;
  var negative;

  // break days_to_follow down into component parts
  argc=current=0;
  for (counter=0; counter<days_to_follow.length; counter++) {
    ch=days_to_follow.charAt(counter).toUpperCase();
    if (!argc && !current) {
      // first one
      argv[argc]=ch;
      current++;
    } else {
      if (inset(argv[argc].charAt(current-1),"01234567890")) {
        if (inset(ch,"01234567890")) {
          argv[argc]+=ch;
          current++;
        } else {
          // new string
          argc++;
          current=0;
          argv[argc]=ch;
          current++;
        }
      } else if (inset(argv[argc].charAt(current-1),"ABCDEFGHIJKLMNOPQRSTUVWXYZ")) {
        if (inset(ch,"ABCDEFGHIJKLMNOPQRSTUVWXYZ")) {
          argv[argc]+=ch;
          current++;
        } else {
          // new string
          argc++;
          current=0;
          argv[argc]=ch;
          current++;
        }
      } else if (inset(ch,"01234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ")) {
        // new string
        argc++;
        current=0;
        argv[argc]=ch;
        current++;
      } else {
        argv[argc]+=ch;
        current++;
      }
    }
  }
  if (current)
    argc++;

  // extract numbers and modifier from argv
  numbers=0;
  modifier=0;
  negative=false;
  for (counter=0; counter<argc; counter++) {
    if (!counter && argv[counter]=="-") {
      negative=true;
    } else if (inset(argv[counter].charAt(0),"0123456789")) {
      number[numbers++]=argv[counter];
    } else if (!modifier && inset(argv[counter].charAt(0),"ABCDEFGHIJKLMNOPQRSTUVWXYZ")) {
      modifier=argv[counter].charAt(0).toUpperCase();
    }
  }

  valid_date=false;
  if (numbers>1) {
    // they gave us at least MMDD, so let's go
    jd.month=real(number[0]);
    jd.day=real(number[1]);
    if (numbers<3) {
      jd.year=year_of(systemdate());
    } else {
      jd.year=real(number[2]);
    }
    if (jd.year<100) {
      if (jd.year<MAX_JDATES_YEAR) {
        jd.year +=2000;
      } else {
        jd.year +=1900;
      }
    }
    // even if its not valid, they gave us more than one number, so don't try to modify
    valid_date=true;
    modifier=0;
  } else if (!negative && !modifier) {
    // they only gave us a single number, parse it
    tmp_date=String(number[0]);
    if (tmp_date.length==4) {
      // MMDD
      jd.year=year_of(systemdate());
      jd.month=real(tmp_date.substring(0,2));
      jd.day=real(tmp_date.substring(2,4));
      if (jdate(jd.year,jd.month,jd.day)) {
        valid_date=true;
        modifier=0;
      }
    }
    else if (tmp_date.length==6) {
      // MMDDYY
      jd.month=real(tmp_date.substring(0,2));
      jd.day=real(tmp_date.substring(2,4));
      jd.year=real(tmp_date.substring(4,6));
      if (jd.year<MAX_JDATES_YEAR) {
        jd.year +=2000;
      } else {
        jd.year +=1900;
      }
      if (jdate(jd.year,jd.month,jd.day)) {
        valid_date=true;
        modifier=0;
      }
    }
    else if (tmp_date.length==8) {
      // MMDDYYYY
      jd.month=real(tmp_date.substring(0,2));
      jd.day=real(tmp_date.substring(2,4));
      jd.year=real(tmp_date.substring(4,8));
      if (jdate(jd.year,jd.month,jd.day)) {
        valid_date=true;
        modifier=0;
      }
    }
  }
  if (!valid_date) {
    // either they didn't give us a valid date, or they gave us a date modifier
    jd = unjdate(source_date);
    number_date=real(source_date);
    if (!numbers) {
      if (modifier) {
        // they just gave us a modifier, check to see if it's a day-of-the-week
        if (negative) {
          mod=-1;
        } else {
          mod=1;
        }
        switch(modifier) {
          case 'S': // Saturday or Sunday
            do {
              number_date+=real(mod);
            } while (day_of_week(number_date)!=0 && day_of_week(number_date)!=6);
            break;
          case 'M': // Monday
            do {
              number_date+=real(mod);
            } while (day_of_week(number_date)!=1);
            break;
          case 'T': // Tuesday or Thursday
            do {
              number_date+=real(mod);
            } while (day_of_week(number_date)!=2 && day_of_week(number_date)!=4);
            break;
          case 'W': // Wednesday
            do {
              number_date+=real(mod);
            } while (day_of_week(number_date)!=3);
            break;
          case 'F': // Friday
            do {
              number_date+=real(mod);
            } while (day_of_week(number_date)!=5);
            break;
        }
        jd=unjdate(number_date);
      } else {
        // blank
        jd=unjdate(0);
      }
    }
    else {
      // take the first number + the modifier, apply that to the date
      if (!modifier) {
        modifier='D';
      }
      if (argv[0]=="-") {
        number[0]=0-real(number[0]);
      }
      switch(modifier) {
        case 'Y':
          jd.year+=real(number[0]);
          break;
        case 'M':
          jd.month+=real(number[0]);
          while (jd.month>12) {
            jd.month-=12;
            jd.year++;
          }
          while (jd.month<1) {
            jd.month += 12;
            jd.year--;
          }
          if (jd.day>dpm[jd.month])
            jd.day=dpm[jd.month];
          break;
        case 'W':
          number_date+=real(number[0]*7);
          jd=unjdate(number_date);
          break;
        case 'D':
          number_date+=real(number[0]);
          jd=unjdate(number_date);
          break;
      }
    }
  }
  // make sure its a valid date
  if (jd.day > dpm[jd.month] && !check_leap(jd.year,jd.month,jd.day))
    jd.day=dpm[jd.month];
  if (jd.month==2 && jd.day==28 && check_leap(jd.year,jd.month,29) && modifier=='Y') {
    jd.day=29;
  }
  number_date=jdate(jd.year,jd.month,jd.day);
  return(number_date);
}

function date_input(return_field,date,linked_to)
{
  var jd = new JDATE();
  var d1=0;
  var field = eval('document.'+return_field);
  if (date!='0') {
    if (return_field.indexOf("_ending")!=-1 && (!linked_to || !linked_to.length)) {
      linked_to = return_field.replace("ending","starting");
    }
  }
  var link_field=eval('document.'+linked_to);
  if (link_field) {
    var d2=calc_next_date(link_field.value,systemdate());
    if (d2) {
      d1=calc_next_date(date,d2);
    }
  }
  if (!d1) {
    d1=calc_next_date(date,systemdate());
  }
  if (not_valid_date(d1)) {
    tmp="";
  } else {
    jd = unjdate(d1);
    tmp = String(jd.month).padL(2,"0") + "/" +  String(jd.day).padL(2,"0") + "/" + jd.year;
  }
  field.value=tmp;
  if (return_field.indexOf("_starting")!=-1) {
    field = eval('document.'+return_field.replace("starting","ending"));
    if (field) {
      field.value=tmp;
    }
  }
}

function scidate(return_field,date,month,year)
{
  var target;
  if (WIN32) {
    target = '/cgi-bin/webcal.exe?return_field=' + return_field + '&date=' + date + '&month=' + month + '&year=' + year;
  } else {
    target = '/cgi-bin/webcal?return_field=' + return_field + '&date=' + date + '&month=' + month + '&year=' + year;
  }
  if (window.name=='webcal') {
    window.location = no_header(target);
  } else {
    var width = 320 * web_scalar;
    var height = 300 * web_scalar;
    open_window(no_header(target),'webcal','scrollbars=no,resizable=yes,width='+width+',height='+height+',status=no');
  }
}

function widget_date(return_field,date,month,year)
{
  var target;
  target = '/cgi-bin/webcal?Fheader=0&widget=true&date=' + date + '&month=' + month + '&year=' + year;
  window.location = no_header(target);
}

function elapsed_minutes(start_date,start_time,complete_date,complete_time)
{
  if (!start_date) {
    return -1000;
  }
  if (!complete_date) {
    return -1000;
  }
  var h = real(start_time/100);
  var m = start_time-h*100;
  var start_time_value=start_date*24*60+h*60+m;

  h = real(complete_time/100);
  m = complete_time-h*100;
  var complete_time_value=complete_date*24*60+h*60+m;

  return real(complete_time_value-start_time_value);
}

function elapsed_hours(start_date,start_time,complete_date,complete_time)
{
  return real(elapsed_minutes(start_date,start_time,complete_date,complete_time)/60);
}

// SECTION: hover menu

//Pop-it menu- By Dynamic Drive
//For full source code and more DHTML scripts, visit http://www.dynamicdrive.com
//This credit MUST stay intact for use

document.onclick=hidemenu
var popup_delay=150;

var popup_control="onMouseover=\"this.className='PopupActive'\" onMouseout=\"this.className='PopupInactive'\"";

function contains_ns6(a, b)
{
  //Determines if 1 element in contained in another- by Brainjar.com
  while (b && b.parentNode)
    if ((b = b.parentNode) == a)
      return true;
  return false;
}

function delayedshowmenu(abspos)
{
  var inner_text;
  var below=false;
  if (!document.all&&!document.getElementById&&!document.layers)
    return;

  clearhidemenu();

  menuobj=document.getElementById("popmenu");
  menuobj.thestyle=menuobj.style;

  inner_text="<table style='border:0;padding:0;margin:2px;' cellspacing=0 cellpadding=0>";
    if (next_menu_which.charAt(0)=='!') {
      // tooltip
      var newstr = next_menu_which.substring(1);
      inner_text+='<tr class=PopupLabel><td>'+newstr+'</td></tr>';
    } else {
      var menu_detail = next_menu_which.split(',');
      for (menu=0; menu<menu_detail.length; menu++) {
        if (menu_detail[menu] == 'below') {
          below=true;
        } else if (menu_detail[menu] == 'break') {
          inner_text+='<tr height=2><td class=PopupSeparator colspan=3></td></tr>';
        } else {
          if (menu_detail[menu+2] != 'none') {
            var str=menu_detail[menu+2].replace(/ /,'%20');
            inner_text+="<tr class=PopupInactive onClick="+str+" "+popup_control+"><td height=20 width=18>";
          } else {
            inner_text+='<tr class=PopupLabel><td height=20 width=18>';
          }
          if (menu_detail[menu] != 'none') {
            inner_text+='<image src='+theme_dir+'/'+menu_detail[menu]+'></image>';
          }
          inner_text+='&nbsp;'; // little bit of spacing between image and text
          if (menu_detail[menu+2] != 'none') {
            // link
            inner_text+='</td><td>';
          } else {
            // label
            inner_text+='</td><td>';
          }
          inner_text+=menu_detail[menu+1]+'</td><td height=20 width=18>&nbsp;</td></tr>';
          menu+=2;
        }
      }
    }
  inner_text+='</table>';

  menuobj.innerHTML=inner_text;

  menuobj.contentwidth=menuobj.offsetWidth;
  menuobj.contentheight=menuobj.offsetHeight;

  if (!abspos) {
    if (below) {
      menuobj.thestyle.left=(browserObjectX(next_menu_obj)) + "px";
      menuobj.thestyle.top=(browserObjectY(next_menu_obj)+next_menu_obj.offsetHeight+2) + "px";
    } else {
      menuobj.thestyle.left=(browserObjectX(next_menu_obj)+next_menu_obj.offsetWidth+10) + "px";
      menuobj.thestyle.top=(browserObjectY(next_menu_obj)) + "px";
    }
  } else {
    menuobj.thestyle.left=(next_menu_x + 10) + "px";
    menuobj.thestyle.top=(next_menu_y - 10) + "px";
    menuobj.thestyle.position='absolute';
  }
  menuobj.thestyle.visibility="visible";
  return false;
}

function hidemenu()
{
  if (window.menuobj) {
    menuobj.thestyle.visibility="hidden";
  }
}

function dynamichide(e)
{
  if (!menuobj.contains || !menuobj.contains(e.toElement) ||
      (e.currentTarget!= e.relatedTarget && !contains_ns6(e.currentTarget, e.relatedTarget))) {
    delayhidemenu()
  }
}

function delayhidemenu()
{
  if (window.delayshow) {
    clearTimeout(delayshow)
  }
  if (window.delayhide) {
    clearTimeout(delayhide)
  }
  delayhide=setTimeout("hidemenu()",popup_delay)
}

function clearhidemenu()
{
  if (window.delayhide)
    clearTimeout(delayhide)
}

function showmenu(obj,which)
{
  obj.onmouseout=delayhidemenu;
  if (window.delayshow)
    clearTimeout(delayshow);
  next_menu_obj = obj;
  next_menu_which = which;
  next_menu_x = 0;
  next_menu_y = 0;
  delayshow=setTimeout("delayedshowmenu()",popup_delay);
}

function showabsmenu(ev,obj,which)
{
  var posx = 0;
  var posy = 0;
  if (!ev) var ev = window.event;
  if (ev.pageX || ev.pageY) {
    posx = ev.pageX;
    posy = ev.pageY;
  } else if (ev.clientX || ev.clientY)  {
    posx = ev.clientX + document.body.scrollLeft
                     + document.documentElement.scrollLeft;
    posy = ev.clientY + document.body.scrollTop
                     + document.documentElement.scrollTop;
  }
  // posx and posy contain the mouse position relative to the document
  // Do something with this information

  obj.onmouseout=delayhidemenu;
  if (window.delayshow)
    clearTimeout(delayshow);

  next_menu_obj = obj;
  next_menu_which = which;
  next_menu_x = posx;
  next_menu_y = posy;
  delayshow=setTimeout("delayedshowmenu(1)",popup_delay);
}
// SECTION: OTHER

function go(url)
{
  location.replace(url);
}

function pause(numberMillis)
{
  if (window.showModalDialog) {
    var dialogScript = 'window.setTimeout(' + ' function () { self.close(); }, ' + numberMillis + ');';
    window.showModalDialog( 'javascript:document.writeln(' + '"<script>' + dialogScript + '<' + '/script>")');
  } else {
    // this supposedly works in Mozilla, but I had limited success
    // java.lang.Thread.sleep(numberMillis);
  }
}

function next_search(form,where,top_record,popup_flag)
{
  var save_where;
  var save_top;
  var save_target;

  /* save calling form */
  save_where = form.action;
  save_top = form.Ftop_record.value;
  save_target= form.target;

  form.action = where;
  if (popup_flag) {
    form.target = '_blank';
  }
  form.method = 'POST';

  // form.Faction.value = 'S';
  form.Ftop_record.value = top_record;

  if (popup_flag) {
    pop_window(where);
  }
  form.submit();

  /* reset calling form */
  form.action = save_where;
  form.target = save_target;
  form.Ftop_record.value = save_top;
  return;
}

function sort_search(form,where,key)
{
  if (form.Fkey.value == key) {
    // if they click the same key again, flip the direction
    if (form.Fdirection.value == 'A') {
      form.Fdirection.value = 'D';
    } else {
      form.Fdirection.value = 'A';
    }
  } else {
    form.Fkey.value = key;
    form.Fdirection.value = 'A';
  }
  next_search(form,where,0,false); // always start at top
  return;
}

function trigger_change(field)
{
  if (field) {
    if (field.type=='checkbox' || field.type=='radio') {
      if (field.onclick) {
        field.onclick();
      }
    } else {
      if (field.onchange) {
        field.onchange();
      }
    }
  }
}

function set_form_value(form_name,element_name,new_value)
{
  if (get_opener()) {
    var field = eval('get_opener().document.'+form_name+'.'+element_name);
    if (field) {
      if (field.type=='textarea') {
        if (field.innerHTML!=new_value) {
          field.innerHTML=new_value;
          trigger_change(field);
        }
      } else {
        if (field.value!=new_value) {
          field.value=new_value;
          trigger_change(field);
        }
      }
    }
  }
  close_page();
}

function set_field(element_name,new_value)
{
  if (get_opener() && get_opener().document.sciform) {
    var field = eval('get_opener().document.sciform.'+element_name);
    if (field) {
      if (field.type=='textarea') {
        if (field.innerHTML!=new_value) {
          field.innerHTML=new_value;
          trigger_change(field);
        }
      } else {
        if (field.value!=new_value) {
          field.value=new_value;
          trigger_change(field);
        }
      }
    }
  }
}

function set_call_field(element_name,new_value)
{
  if (document.sciform) {
    var field = eval('document.sciform.'+element_name);
    if (field) {
      if (field.type=='textarea') {
        if (field.innerHTML!=new_value) {
          field.innerHTML=new_value;
          trigger_change(field);
        }
      } else {
        if (field.value!=new_value) {
          field.value=new_value;
          trigger_change(field);
        }
      }
    }
  }
}

function set_field_raw(element_name,new_value)
{
  if (get_opener() && get_opener().document.sciform) {
    var field = eval('get_opener().document.sciform.'+element_name);
    if (field && field.value!=new_value) {
      save_oc=field.onchange;
      field.onchange=null;
      field.value=new_value;
      field.onchange=save_oc;
    }
  }
}

// SECTION: display

function set_title(text)
{
  document.title=text;
}

function dhide(name,noresize)
{
  var id = document.getElementById(name);
  if (id) {
    id.style.display = "none";
    if (!noresize) {
      force_resize();
    }
  }
}

function dshow(name,noresize)
{
  var id = document.getElementById(name);
  if (id) {
    id.style.display = "";
    if (!noresize) {
      force_resize();
    }
  }
}

function toggle(name,button_name)
{
  var id = document.getElementById(name);
  if (id) {
    if (id.style.display=="none")
      id.style.display = "";
    else
      id.style.display = "none";
    if (button_name) {
      var button = document.getElementById(button_name);
      if (id.style.display=="none") {
        button.src=theme_dir+'/DescOn.gif';
        button.title='View Additional Information';
      } else {
        button.src=theme_dir+'/AscOn.gif';
        button.title='Hide Additional Information';
      }
    }
    force_resize();
  }
}

function toggle_element(name,button,on_text,off_text)
{
  var obj = document.getElementById(name);
  if (obj) {
    if (obj.style.display == "none") {
      obj.style.display = "";
      if (button) {
        button.value=on_text;
      }
    } else {
      obj.style.display = "none";
      if (button) {
        button.value=off_text;
      }
    }
    force_resize();
  }
}

function vhide(name)
{
  var id = document.getElementById(name);
  if (id) {
    id.style.visibility = "hidden";
  }
}

function vshow(name)
{
  var id = document.getElementById(name);
  if (id) {
    id.style.visibility = "visible";
  }
}

var map_pages = null;
var map_element_id = 0;

function select_page(name,page)
{
  var i, j, id;
  for (i=0; i<100; i++) {
    id = document.getElementById(name+i);
    if (id) {
      if (i==page) {
        id.style.display = "";
        if (map_element_id) {
          for (j=0; j<map_element_id; j++) {
            if (map_pages[j][0]==name+i) {
              if (!map_pages[j][2]) {
                eval(map_pages[j][1]);
                if (!map_pages[j][3]) {
                  map_pages[j][2]=true;
                }
              }
            }
          }
        }
      } else {
        id.style.display = "none";
      }
    }
  }
  if (!main_tab) {
    // only update Fpage if the main tabs are changed
    var links=document.getElementsByTagName('a');
    for (i=0; i<links.length && !main_tab; i++) {
      if (links[i].className=='TabLink') {
        // scan the href looking for select_page(), and store the first argument
        var args=links[i].href.split("'");
        if (args.length>1) {
          main_tab=args[1];
        }
      }
    }
    if (!main_tab) {
      main_tab="!!NOTFOUND!!";
    }
  }
  if (name.indexOf(main_tab)!=-1 && document.sciform && document.sciform.Fpage) {
    document.sciform.Fpage.value=page;
  }
  force_resize();
}

var set_numbers = '0123456789';
var set_lower = 'abcdefghijklmnopqrstuvwxyz';
var set_upper = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
var set_other = '_';

function inset(ch,str)
{
  if (str.indexOf(ch) == -1) {
    return false;
  }
  return true;
}

function cpos(option,option_list)
{
  var options=option_list.split(",");
  for (var i=0; i<options.length; i++) {
    if (options[i]==option) {
      return i+1;
    }
  }
  return 0;
}

function removeboth(v)
{
  v.value = v.value.replace(/^\s*/, '').replace(/\s*$/, '');
}

function codecase(v)
{
  var new_string = new String();
  for (var i = 0; i < v.value.length; i++) {
    var ch = v.value.charAt(i);
    if (inset(ch,set_numbers) ||
        inset(ch,set_lower) ||
        inset(ch,set_upper) ||
        inset(ch,set_other)) {
      new_string += ch;
    }
  }
  v.value = new_string.toUpperCase();;
}

function upperlowercase(v)
{
  v.value = v.value.charAt(0).toUpperCase()+v.value.substring(1,v.value.length+1);
  if (v.value.indexOf(" ")!=-1) {
    v.value.split(" ");
    for (d=0;d<v.value.length;d++) {
      if (v.value.charAt(d) == ' ' && v.value.charAt(d+1)) {
        v.value = v.value.substring(0,d) + " " +v.value.charAt(d+1).toUpperCase() +  v.value.substring(d+2,v.value.length+1);
      }
    }
  }
}

function calculate(value)
{
  var VALID = "01234567890.+-/%*()";
  // extract all tokens that don't look like an equation
  if (value.charAt) {
    if (value.charAt(0)=='0') {
      return(value);
    }
  }
  for (var i=0; i<value.length; i++) {
    if (!inset(value.charAt(i),VALID)) {
      // abort, they have an invalid character
      return value;
    }
  }
  try {
    var new_value=eval(value);
  }
  catch(e) {
    // did not compute
    return value;
  }
  if (isNaN(new_value))
    return value;
  return new_value;
}

function real(value)
{
  if (parseFloat(value)) {
    return parseFloat(value);
  }
  return 0.0;
}

function format_number(value,decimals)
{
  var old_value = calculate(value);
  var new_value = real(old_value);
  var pow = Math.pow(10,decimals);
  if (isNaN(new_value)) {
    new_value = 0;
  }
  var out = String(Math.round(new_value*pow)/pow);
  if (decimals>0) {
    var dot = out.indexOf('.');
    if (dot == -1) {
      out += '.';
      dot = out.indexOf('.');
    }
    while (out.length <= dot + decimals) {
      out += '0';
    }
  }
  return(out);
}

function limit_text(field,size)
{
  if (field && field.value && field.value.length>size) {
    field.value = field.value.substring(0,size);
  }
}

// RESIZER

function target_width()
{
  if (tag_width>0) {
    x = tag_width;
  } else {
    x = browserDocumentWidth();
  }
  if (x>browserScreenWidth()) {
    x = browserScreenWidth();
  }
  return x;
}

function target_height()
{
  if (tag_height>0) {
    x = tag_height;
  } else {
    x = browserDocumentHeight();
  }
  if (x>browserScreenHeight()) {
    x = browserScreenHeight();
  }
  return x;
}

var chrome_width;
var chrome_height;

function resize_window()
{
  if (browserBrowserHeight()) {
    chrome_width=browserBrowserWidth()-browserWindowWidth();
    if ((target_width()+chrome_width)>browserScreenWidth()) {
      width=(browserScreenWidth()-chrome_width)-browserWindowWidth();
    } else {
      width=target_width()-browserWindowWidth();
    }
    chrome_height=browserBrowserHeight()-browserWindowHeight();
    if ((target_height()+chrome_height)>browserScreenHeight()) {
      height=(browserScreenHeight()-chrome_height)-browserWindowHeight();
    } else {
      height=target_height()-browserWindowHeight();
    }
    window.resizeBy(width,height); 
    return;
  }

  // this is the size we WANT the page to be
  width=target_width();
  height=target_height();

  // measure chrome using a minimum 200x200 window
  bare_width=(width<200?200:width);
  bare_height=(height<200?200:height);

  // measure the chrome
  window.resizeTo(bare_width,bare_height)

  chrome_width=bare_width-browserWindowWidth();
  chrome_height=bare_height-browserWindowHeight();

  // adjust for chrome
  adj_width=chrome_width+width;
  if (adj_width>browserScreenWidth()) {
    adj_width=browserScreenWidth();
  }
  adj_height=chrome_height+height;
  if (adj_height>browserScreenHeight()) {
    adj_height=browserScreenHeight();
  }

  // resize it
  window.resizeTo(adj_width,adj_height)
}

function relocate_window()
{
  width = browserWindowWidth() + chrome_width;
  height = browserWindowHeight() + chrome_height;

  if (tag_left || tag_top) {
    self.moveTo(tag_left,tag_top);
    x = tag_left;
    y = tag_top;
  } else {
    x = browserWindowLeft();
    // on every browser I'm aware of, the chrome is at the TOP, so we need to account for it
    y = browserWindowTop() - chrome_height;
  }
  x += width;
  y += height;

  // move if necessary
  xoff=yoff=0;
  if (x<width) {
    xoff = width-x;
  } else if (x>browserScreenWidth()) {
    xoff = browserScreenWidth()-x;
  }
  if (y<height) {
    yoff = height-y;
  } else if (y>browserScreenHeight()) {
    yoff = browserScreenHeight()-y;
  }
  if (xoff || yoff) {
    self.moveBy(xoff,yoff);
  }
}

function resize_again()
{
  if (browserBrowserHeight()) {
    return false;
  }
  if (browserWindowWidth()<target_width())
    return true;
  if (browserWindowHeight()<target_height())
    return true;
  if (browserWindowWidth()>target_width()+16)
    return true;
  if (browserWindowHeight()>target_height()+16)
    return true;
  return false;
}

function force_resize()
{
  // make sure we're authorized to resize
  if (top && top.home && top.menu)
    return;
  if (top!=self)
    return;
  if (window.header && window.header!='0')
    return;
  if (typeof(tag_width)=="undefined" || typeof(tag_height)=="undefined")
    return;
  if (document.sciform) {
    if (document.sciform.Fheader && document.sciform.Fheader.value!='0') {
      return;
    }
    if (document.sciform.Fresize && document.sciform.Fresize.value=='N') {
      return;
    }
  }

  // disable resize detection
  save_onresize=window.onresize;
  window.onresize=null;

  // resize and keep on screen
  resize_window();
  if (resize_again()) {
    resize_window();
  }
  relocate_window();

  // restore resize detection
  setTimeout("window.onresize=save_onresize;",100)
}

function add_onload(new_func)
{
  // add onload function calls
  if (window.onload != null && window.onload != "undefined") {
    var strOnLoad  = window.onload.toString();
    var strNewOnLoad = strOnLoad.substring(strOnLoad.indexOf('{') +1,strOnLoad.length -2) + '; ';
  }
  else {
    var strNewOnLoad = "";
  }

  strNewOnLoad += new_func;

  // compile it all back into a usable function
  window.onload = new Function(strNewOnLoad);
}

function add_onresize(new_func)
{
  // add onresize function calls
  if (window.onresize != null && window.onresize != "undefined") {
    var strOnResize  = window.onresize.toString();
    var strNewOnResize = strOnResize.substring(strOnResize.indexOf('{') +1,strOnResize.length -2) + '; ';
  }
  else {
    var strNewOnResize = "";
  }

  strNewOnResize += new_func;

  // compile it all back into a usable function
  window.onresize = new Function(strNewOnResize);
}

function delete_record(webspec,record_number)
{
  if (document.sciform && document.sciform.Ftop_record && document.sciform.Ftop_record.value==record_number) {
    // reset top record since we just deleted the top record
    document.sciform.Ftop_record.value=0;
  }
  pop_hidden('/cgi-bin/webedit?Fwebspec='+webspec+'&Faction=D&Frecord_number='+record_number);
}

function reset_filters()
{
  var forced, skip, obj, i, ofield, efield, ending_string;
  for (i=0; i<document.sciform.length; i++) {
    obj = document.sciform[i];
    if (obj.name && obj.name.charAt(0)=='D') {
      forced = false;
      skip = false;
      ofield = document.sciform['O'+obj.name.substring(1,obj.name.length+1)];
      if (ofield) {
        if (ofield.value.indexOf("noreset")!=-1) {
          skip=true;
        }
        else if (ofield.value.indexOf("reset")!=-1) {
          forced=true;
        }
      }
      if (!skip) {
        if (obj.name.indexOf("Dfilters")!=-1 && obj.name.indexOf("_starting")!=-1 && (forced || obj.type!='hidden')) {
          obj.value="";
          ending_string = obj.name.replace("starting","ending");
          efield = document.sciform[ending_string];
          if (efield) {
            efield.value="";
          }
        } else if (forced) {
          // non-filter fields
          obj.value="";
        }
      }
    }
  }
}

function note_image(imgid,obj)
{
  img = document.getElementById(imgid);
  if (img) {
    if (obj && obj.value) {
      img.src = theme_dir+'/notes_found.gif';
    } else {
      img.src = theme_dir+'/notes_blank.gif';
    }
  }
}

function list_to_report()
{
  pop_window('/cgi-bin/repost?Fnosaved&Faction=REPORT');
}

function update_response()
{
}

function update_field(record,webspec,action)
{
  call('/cgi-bin/webedit?Faction=UPDATE_FIELD&Fwebspec='+webspec+'&Frecord_number='+record+action,null,update_response);
}

var disable_submit=parseInt(0);
var disable_submit_flag=false;

function check_submit()
{
  if (disable_submit>1) {
    disable_submit=0;
    submit_sciform(disable_submit_flag);
    disable_submit_flag=false;
  } else {
    disable_submit=0;
    disable_submit_flag=false;
  }
}

function submit_sciform(flag)
{
  var e;
  if (disable_submit>0) {
    disable_submit_flag=flag;
    disable_submit++;
    return;
  }
  if (!document.sciform) {
    // abort
    return;
  }
  if (last_win && !last_win.closed && last_win.hidden) {
    // wait a tenth of a second and then try again
    if (flag) {
      setTimeout("submit_sciform(flag)",100)
    } else {
      setTimeout("submit_sciform()",100)
    }
    return false;
  }
  if (document.sciform.onsubmit) {
    if (!document.sciform.onsubmit()) {
      // abort
      return;
    }
  }
  // was the default prior to 9/6/2007
  if (prevent_multiple_clicks) {
    if (!flag) {
      // disable all buttons
      for (var i=0; i<document.sciform.length; i++) {
        if (document.sciform[i].type=='button') {
          document.sciform[i].disabled=true;
        }
      }
      // disable all links
      if (typeof(document.getElementsByTagName)!='unknown' && document.getElementsByTagName) {
        var e = document.getElementsByTagName("A");
        if (e && e.length) {
          for (var i=0; i<e.length; i++) {
            e[i].onclick=disable;
            if (e[i].className=='TabLink') {
              e[i].disabled=true;
            }
          }
        }
      }
    }
    prevent_multiple_clicks=false;
  }
  document.sciform.submit();
}

function selected(field)
{
  if (field && typeof(field.selectedIndex)!="undefined") {
    return field[field.selectedIndex].value;
  }
  return "";
}

function trim (str)
{
  return str.replace(/^\s+/g, '').replace(/\s+$/g, '');
}

function phonestring(phonenumb)
{
  numbers=phonenumb.replace(/[^0-9]/g,'');
  switch (numbers.length) {
    case 7: // 3-4
      formatted = numbers.substring(0,3) + '-' + numbers.substring(3,7);
      break;
    case 10: // 3-3-4
      formatted = numbers.substring(0,3) + '-' + numbers.substring(3,6) + '-' + numbers.substring(6,10);
      break;
    default: // leave it alone
      formatted = phonenumb;
      break;
  }
  return formatted;
}

function confirm_field(field,select_array)
{
  if (document.sciform) {
    if (field.name) {
      if (field.name.indexOf('Dfilters')!=-1) {
        // they changed a filter, reset the key
        if (document.sciform && document.sciform.Ffilter_changed) {
          document.sciform.Ffilter_changed.value='1';
        }
      }
      var ofield = document.sciform['O'+field.name.substring(1,field.name.length+1)];
      if (ofield) {
        var args = ofield.value.split(',');
        for (var arg=0; arg<args.length; arg++) {
          if (args[arg] == 'verify' && arg+1<args.length) {
            arg++;
            pop_hidden('/cgi-bin/webedit?Faction=VERIFY&Fwebspec='+document.sciform.Fwebspec.value+'&Ffield='+args[arg]+'&Fvalue='+field.value+'&Fthis='+field.name);
          }
          if (args[arg] == 'unique' && arg+1<args.length) {
            arg++;
            // only applies if this is a new record
            var sfield = document.sciform['S'+field.name.substring(1,field.name.length+1)];
            if (!sfield || trim(sfield.value)!=trim(field.value)) {
              pop_hidden('/cgi-bin/webedit?Faction=UNIQUE&Fwebspec='+document.sciform.Fwebspec.value+'&Fvalue='+field.value+'&Fthis='+field.name+'&Fkey='+args[arg]);
            }
          }
          if (args[arg] == 'unique+' && arg+2<args.length) {
            arg++;
            // only applies if this is a new record
            var sfield = document.sciform['S'+field.name.substring(1,field.name.length+1)];
            if (!sfield || trim(sfield.value)!=trim(field.value)) {
              pop_hidden('/cgi-bin/webedit?Faction=UNIQUE&Fwebspec='+document.sciform.Fwebspec.value+'&Fvalue='+field.value+'&Fthis='+field.name+'&Fkey='+args[arg]+'&Fmsg='+args[arg+1]);
            }
            arg++; // skip past the id field
          }
          if (args[arg] == 'check' && arg+1<args.length) {
            arg++;
            // only applies if this is a new record
            var sfield = document.sciform['S'+field.name.substring(1,field.name.length+1)];
            if (!sfield || trim(sfield.value)!=trim(field.value)) {
              pop_hidden('/cgi-bin/webedit?Faction=CHECK&Fwebspec='+document.sciform.Fwebspec.value+'&Fvalue='+field.value+'&Fthis='+field.name+'&Fkey='+args[arg]);
            }
          }
          if (args[arg] == 'check+' && arg+2<args.length) {
            arg++;
            // only applies if this is a new record
            var sfield = document.sciform['S'+field.name.substring(1,field.name.length+1)];
            if (!sfield || trim(sfield.value)!=trim(field.value)) {
              pop_hidden('/cgi-bin/webedit?Faction=CHECK&Fwebspec='+document.sciform.Fwebspec.value+'&Fvalue='+field.value+'&Fthis='+field.name+'&Fkey='+args[arg]+'&Fmsg='+args[arg+1]);
            }
            arg++; // skip past the id field
          }
          if (args[arg] == 'autophone') {
            field.value=phonestring(field.value);
          }
        }
      }
      // update displayed fields
      if (select_array) {
        for (var i=0; i<select_array.length; i+=2) {
          var val = select_array[i];
          var lab = select_array[i+1];
          if (val==field.value) {
            set_id(field.name+'_visible',lab);
          }
        }
      } else if (field.selectedIndex) {
        set_id(field.name+'_visible',field[field.selectedIndex].text);
      } else {
        set_id(field.name+'_visible',field.value);
      }
    }
    if (document.sciform.Fchanged) {
      document.sciform.Fchanged.value='1';
    }
  }
}

function filter_starting(field)
{
  var str = '';
  for (var i=0; i<document.sciform.length; i++) {
    obj = document.sciform[i];
    if (obj.name && obj.name.indexOf("Dfilters")!=-1 && obj.name.indexOf("_field")!=-1) {
      if (obj.value==field) {
        str = obj.name.replace("field","starting");
        return document.sciform[str].value;
      }
    }
  }
  return "";
}

function filter_ending(field)
{
  for (var i=0; i<document.sciform.length; i++) {
    obj = document.sciform[i];
    if (obj.name && obj.name.indexOf("Dfilters")!=-1 && obj.name.indexOf("_field")!=-1) {
      if (obj.value==field) {
        str = obj.name.replace("field","ending");
        return document.sciform[str].value;
      }
    }
  }
  return "";
}

function select_box_string(select_array,selected)
{
  var sel;
  var sel_string;
  var first = true;
  var in_optgroup = false;
  var found = false;
  sel_string='';
  for (var i=0; i<select_array.length; i+=2) {
    var val = select_array[i];
    var lab = select_array[i+1];
    if (lab.substring(0,2)=='L)') {
      if (in_optgroup) {
        sel_string=sel_string+'</optgroup>';
      }
      // opt label
      sel_string=sel_string+'<optgroup label="'+lab.substring(2,lab.length+1)+'">';
      in_optgroup = true;
    } else {
      if (first) {
        first=false;
        if (!selected) {
          selected=val;
          found=true;
        }
      }
      if (val==selected) {
        sel="selected";
        found=true;
      } else {
        sel="";
      }
      sel_string=sel_string+'<option value="'+val+'" '+sel+'>'+lab+'</option>';
    }
  }
  if (in_optgroup) {
    sel_string=sel_string+'</optgroup>';
  }
  if (selected && !found) {
    sel_string=sel_string+'<option value="'+selected+'" '+sel+'>'+selected+'</option>';
  }
  return(sel_string);
}

function select_box(select_array,selected)
{
  document.write(select_box_string(select_array,selected));
}

function detect_resize(e)
{
  if (document.sciform && document.sciform.Fresize) {
    document.sciform.Fresize.value='N';
  }
}

function set_id(id,text)
{
  if (document.getElementById) {
    obj = document.getElementById(id);
    if (obj) {
      obj.innerHTML = text;
    }
  }
}

function convert(next,code)
{
  var format ='convert,'+code;
  var last = eval('document.sciform.B'+code);
  if (!last) {
    alert("no previous conversion found");
    return;
  }
  for (f=0; f<document.sciform.length; f++) {
    var obj = document.sciform[f];
    if (obj.name && obj.name.charAt(0)=='O') {
      if (obj.value.indexOf(format)!=-1) {
        var dfield = document.sciform['D'+obj.name.substring(1,obj.name.length+1)];
        if (dfield) {
          // convert this field
          dfield.value = real(dfield.value/last.value*next.value);
          trigger_change(dfield);
        }
      }
    }
  }
  last.value=next.value;
}

function update_mirror(field,value)
{
  if (field) {
    if (field.type=='checkbox' || field.type=='radio') {
      if (value) {
        if (!field.checked) {
          field.checked=true;
          trigger_change(field);
        }
      } else {
        if (field.checked) {
          field.checked=false;
          trigger_change(field);
        }
      }
    } else {
      if (field.value!=value) {
        if (field.type=='textarea') {
          field.innerHTML=value;
        } else {
          field.value=value;
        }
        trigger_change(field);
      }
    }
  }
}

function toggle_or(form,value)
{
  var found=false;
  var str='';
  if (form) {
    var split = form.value.split(',');
    for (var i=0; i<split.length; i++) {
      if (split[i]==value) {
        // skip it
        found=true;
      } else {
        if (str.length)
          str+=',';
        str+=split[i];
      }
    }
    if (!found) {
      if (str.length)
        str+=',';
      str+=value;
    }
    form.value=str;
  }
}

function change_select_box(select_box,select_array)
{
  select_box.options.length=0;
  for (var count=0;count<(select_array.length/2);count++) {
    select_box.options[count]=new Option(select_array[(count*2)+1],select_array[count*2]);
  }
  select_box.onchange();
}

function set_selected_option(field,selected_value) {
  if (field && field.options && field.options.length>0) {
    for (var counter=0;counter<field.options.length;counter++) {
      if (field[counter].value==selected_value) {
        field.selectedIndex=counter;
      }
    }
  }
}

function qt(theme)
{
  pop_hidden('/cgi-bin/webedit?quick_theme='+theme);
}

function set_window_title(title)
{
  if (document.all||document.getElementById) {
    document.title=title;
  } else { 
    self.status=title;
  }
}

// QueryString
// Call function by x = querystring("variable") returns variable=x
function QueryString(key)
{
  var value = null;
  for (var i=0;i<QueryString.keys.length;i++) {
    if (QueryString.keys[i]==key) {
      value = QueryString.values[i];
      break;
    }
  }
  return value;
}
QueryString.keys = new Array();
QueryString.values = new Array();

function QueryString_parse()
{
  var query = window.location.search.substring(1);
  var pairs = query.split("&");

  for (var i=0;i<pairs.length;i++) {
    var pos = pairs[i].indexOf('=');
    if (pos >= 0) {
      var argname = pairs[i].substring(0,pos);
      var value = pairs[i].substring(pos+1);
      QueryString.keys[QueryString.keys.length] = argname;
      QueryString.values[QueryString.values.length] = value;
    }
  }
}
QueryString_parse();

