// standard JavaScript goes in here
// code for doing popups
var popupCounter=0;
function destroyPopup(window_base, counter, w, h) {
	var txt = "height=" + h + ",width=" + w;
    if (counter > 0) {
        oldWin = window.open("", window_base + (counter-1), txt);
        oldWin.close();
    };
}

function createPopup(url_name, window_base, counter, w, h)
{
 var txt = "toolbar=no,location=no,menubar=no,resizable=yes,scrollbars=yes,width=";
	txt = txt + w + ",height=" + h;
    destroyPopup(window_base, counter, w, h);
    window.open(url_name, window_base + counter,txt);
}

// end of code for doing popups

function init_select (tag, value, form_index)
{
  var elts = document.forms[form_index].elements;
  var options = elts[tag].options;
  var i;
  for (i=0; i< options.length; i++)
  {
    if (options[i].value == value)
    {
      elts[tag].selectedIndex = i;
      return;
    }
  }
  elts[tag].selectedIndex = 0;
}

function init_select_text (tag, value, form_index)
{
  var elts = document.forms[form_index].elements;
  var options = elts[tag].options;
  var i;
  for (i=0; i< options.length; i++)
  {
    if (options[i].text == value)
    {
      elts[tag].selectedIndex = i;
      return;
    }
  }
  elts[tag].selectedIndex = 0;
}

// multi-select values always stored as bitfields?
// This uses MySQL-style commas-spearated lists.  Woe to you if a value
// has a comma in it.
function init_multi (tag, value, form_index)
{
  var elts = document.forms[form_index].elements;
  var options = elts[tag].options;
  var values = value.split (",");
  var i, j;
  for (i=0; i< options.length; i++)
  {
    for (j=0; j< values.length; j++)
    if (options[i].value == values[j])
    {
      options[i].selected = true;
    }
  }
}

function init_checkbox (tag, value, form_index)
{
  var elts = document.forms[form_index].elements;
  var options = elts[tag];
  var values = value.split (", ");
  var i, j;
  for (i=0; i< options.length; i++)
  {
    options[i].checked = false;
//alert ("options " + i + " " + options[i].value);
    for (j=0; j< values.length; j++)
//alert ("values " + j + " " + values[j]);
      if (options[i].value == values[j])
      {
//alert ("match " + options[i].value + " = " + values[j]);
        options[i].checked = true;
      }
    }
  }

function init_radio (tag, value, form_index)
{
  var elts = document.forms[form_index].elements;
  var radios = elts[tag];
  var i;
  for (i=0; i< radios.length; i++)
  {
    if (radios[i].value == value)
    {
      radios[i].checked = true;
      return;
    }
  }
}

function clear_radio (tag, form_index)
{
  var elts = document.forms[form_index].elements;
  var radios = elts[tag];
  var i;
  for (i=0; i< radios.length; i++)
  {
    radios[i].checked = false;
  }
  return;
}

//
// 4/10/01 PJ
//	added no_def param to allow the date field to NOT have a default value
//	also allow for option[0]=00 for year
//
// 4/24/01 MS
//      added start_year; if set, all years starting with start_year until    
//      next year are stuffed into the year select.  Default is last year. 
//      Q: does this work for Netscape?
//
// 8/30/01 PJ
//  added year_offset_min, year_offset_max to allow for arbitrary year ranges,
//  relative to the start_date. Both values default to 1
//  
function init_dates (tag, form_index, no_def, start_year, year_offset_min, year_offset_max)
{
  var elts = document.forms[form_index].elements;
  var dtm;
  var initNull = false;

  var allowNulls;
  if (elts[tag+"_month"].options[0].value == "00")
      allowNulls = true;
  else
      allowNulls = false;

  var now = new Date;
  if (elts[tag] && elts[tag].value != '')
  {
       var year,month,day;
       var datestring = elts[tag].value;
       year = datestring.substring(0,4);
       month = parseInt(datestring.substring(5,7),10) - 1;
       day = datestring.substring(8,10);
       // alert (datestring + ": (" + year + "," + month + "," + day + ")");

       if (isNaN(year) || isNaN(month) || isNaN (day)) {
        if (no_def == 1) {
          initNull = true;
        }
         dtm = now;
       } else {
          dtm = new Date (year, month, day);
       }
    } else {
       if (no_def)
         initNull = true;
        dtm = new Date;
    }

    if (year_offset_min == null || year_offset_min < 0) {
        year_offset_min = -2;
    }
    var yy = dtm.getFullYear ();
    var reverse_years = false;
    if (start_year < 0) {

        start_year = - start_year;
        reverse_years = true;
    }
    if (start_year == null || start_year == 0) {
	    start_year = yy-year_offset_min;
    }
    if (year_offset_max == null || year_offset_max < 0) {
        year_offset_max = 1;
    }
    var end_year = now.getFullYear () + year_offset_max;
    var sdopts = elts [tag +"_year"].options;
    if (navigator.appName == "Netscape")
    {
        if (allowNulls) {
          if (reverse_years)
          {
            for (i=end_year; i >= start_year; i--)
            {
              sdopts[end_year-i+1] = new Option (i, i, false, false);
            }
          }
          else
          {
            for (i=start_year; i <= end_year; i++)
            {
              sdopts[i-start_year+1] = new Option (i, i, false, false);
            }
          }
        } else {
          if (reverse_years)
          {
            for (i=end_year; i >= start_year; i--)
            {
              sdopts[end_year-i] = new Option (i, i, false, false);
            }
          }
          else
          {
            for (i=start_year; i <= end_year; i++)
            {
              sdopts[i-start_year] = new Option (i, i, false, false);
            }
          }
        }
    } else {
      for (i=sdopts.length; i >= allowNulls ? 1 : 0; i--) {
         sdopts.remove (i);
      }

      if (reverse_years)
      {
        for (i=end_year; i >= start_year; i--)
        {
            var newElem = document.createElement ("OPTION");
            newElem.text = i;
            newElem.value = i;
            sdopts.add(newElem);
        }
      }
      else
      {
        for (i=start_year; i <= end_year; i++)
        {
            var newElem = document.createElement ("OPTION");
            newElem.text = i;
            newElem.value = i;
            sdopts.add(newElem);
        }
      }
    }
    if (!initNull)
    {
      var sd = new Array (dtm.getFullYear(), dtm.getMonth(), dtm.getDate());

      if (reverse_years)
      {
        elts [tag + "_year"].selectedIndex = end_year - sd[0]
           + (allowNulls ? 1 : 0);
        elts [tag + "_month"].selectedIndex = sd[1] + (allowNulls ? 1 : 0);
        if (elts [tag + "_day"])
          elts [tag + "_day"].selectedIndex = sd[2]-1 + (allowNulls ? 1 : 0);
      }
      else
      {
        elts [tag + "_year"].selectedIndex = sd[0] - start_year
           + (allowNulls ? 1 : 0);
        elts [tag + "_month"].selectedIndex = sd[1] + (allowNulls ? 1 : 0);
        if (elts [tag + "_day"])
          elts [tag + "_day"].selectedIndex = sd[2]-1 + (allowNulls ? 1 : 0);
      }
    } else {
      elts [tag + "_year"].selectedIndex = 0;
      elts [tag + "_month"].selectedIndex = 0;
      if (elts [tag + "_day"])
        elts [tag + "_day"].selectedIndex = 0;
    }

    on_date(tag, form_index);
}

function on_date (tag, form_index)
{
    var elts = document.forms[form_index].elements;

    var allowNulls;
    if (elts[tag+"_month"].options[0].value == "00")
        allowNulls = true;
    else
        allowNulls = false;
    var mm = elts[tag+"_month"].selectedIndex;
    if (mm < 0)
      return;
    var ndays;
    if (allowNulls)
        --mm;
    if (mm == 1) {
      var yy = elts[tag+"_year"].selectedIndex;
      if (yy >= 0) {
        yy = parseInt (elts[tag+"_year"].options[yy].value);
        if (yy % 4 == 0 && (yy % 100 != 0 || yy % 400 == 0))
          ndays = 29;
        else
          ndays = 28;
      } else {
        ndays = 28;
      }
    } else {
      ndays = (new Array (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31))[mm];
    }
  var days = elts[tag+"_day"];
  if (days) days = days.options;
  if (days)
  {
    var dd = days.selectedIndex;
    for (i = days.length; i <= ndays + (allowNulls ? 1 : 0); i++) 
    {
      var daynum = i + (allowNulls ? 0 : 1);
      if (navigator.appName == "Netscape")
      {
        days[i] = new Option (daynum, daynum, false, false);
      } else {
        var newElem = document.createElement ("OPTION");
        newElem.text = daynum;
        newElem.value = daynum;
        days.add(newElem);
      }
    }
    while (days.length > ndays + (allowNulls ? 1 : 0)) {
      if (navigator.appName == "Netscape")
      {
        days[days.length-1] = null;
      } else {
        days.remove (days.length-1);
      }
    }
	days.selectedIndex = dd;
  }
}

function submit_date(tag, form_index)
{
  var elts = document.forms[form_index].elements;
  // insert date value in hidden field
  if ((elts[tag + "_day"] && elts[tag + "_day"].value == "00")
         || elts[tag + "_month"].value == "00")
  {
    elts[tag].value = "";
    return;
  }
    var allowNulls;
    if (elts[tag+"_month"].options[0].value == "00")
        allowNulls = true;
    else
        allowNulls = false;

  elts[tag].value = 
    elts[tag + "_year"].options[elts[tag + "_year"].selectedIndex].value + 
    "-" +
    elts[tag + "_month"].options[elts[tag + "_month"].selectedIndex].value +
    "-";
	
  if (elts[tag].value == "00-00-")
	elts[tag].value = "" // no date provided
  else
    if (elts[tag + "_day"] && elts[tag + "_day"].options)
      elts[tag].value += elts[tag + "_day"].options[elts[tag + "_day"].selectedIndex].text;
    else
      elts[tag].value += "01";
}

//
// 5/14/01 PJ - Added submit_datetime to append a time element to a date field
//
function submit_datetime(tag, form_index)
{
    submit_date(tag, form_index);

    var elts = document.forms[form_index].elements;

    // append time stamp
    if (elts[tag].value != "")
    elts[tag].value += ' ' + elts[tag + "_time"].options[elts[tag + "_time"].selectedIndex].value;
}

//
// 5/24/01 PJ - Added init_datetime to append a time element to a date field
//
function init_datetime (tag, form_index, no_def, start_year, year_offset_min, year_offset_max)
{

    init_dates (tag, form_index, no_def, start_year, year_offset_min, year_offset_max);

    var elts = document.forms[form_index].elements;

    var time;
    if (elts[tag] && elts[tag].value != '')
    {
        time = elts[tag].value.substring(11,16);
    }

    if (!time || time == '') {
        elts [tag + "_time"].selectedIndex = 0;
    } else {

        //
        // loop through the time options to find a matching value
        //
        for (i=0; i < elts [tag + "_time"].options.length; i++) {
            if (elts [tag + "_time"].options[i].value == time) {
                elts [tag + "_time"].options[i].selected = true;
            }
        }
   }

}

function changeimg(img, name) 
{
  if (document.images)
      document.images[name].src=img;
}

function dosort(val,dir,formtag,called)
{
//alert ("dosort("+val+","+dir+","+formtag+")");   
   var form = document.forms[formtag ? formtag : 0];
   if (!form) alert ("dosort: no form named " + formtag);
   else { 
        if (!form.elements) alert ("dosort:" + formtag + " not a form? ");
        if (!form.elements["sort_by"]) alert ("dosort: no element named sort_by");
        if (!form.elements["sort_dir"]) alert ("dosort: no form named sort_dir");
   }
   if (!form ||
       !form.elements["sort_by"] ||
       !form.elements["sort_dir"])
      return;

    if (document.forms[formtag].elements["sort_by"].value == val) {
        if (document.forms[formtag].elements["sort_dir"].value == "ASC") {
            document.forms[formtag].elements["sort_dir"].value = "DESC";
        } else {
            if (document.forms[formtag].elements["sort_dir"].value == "DESC") {
                document.forms[formtag].elements["sort_dir"].value = "ASC";
            } 
        }
    } else {
        if (dir != null) {
            document.forms[formtag].elements["sort_dir"].value = dir;
        } else {
            document.forms[formtag].elements["sort_dir"].value = 'ASC';
        }
    }
    document.forms[formtag].elements["sort_by"].value = val;
		document.forms[formtag].elements["dosort"].value = called;
//alert ("sort by " + document.forms[formtag].elements["sort_by"].value + ", dir " + document.forms[formtag].elements["sort_dir"].value);
if  (document.forms[formtag].elements["search"].type == "submit") {
    document.forms[formtag].elements["search"].click();
} else {
    document.forms[formtag].submit();
}

}

function onchange_search (tag, idx)
{
  if (document.forms[0].elements[tag].value)
  {
    var op = document.forms[0].elements[tag + "op"];
    if (op.selectedIndex == 0)
     op.selectedIndex = idx == null ? 2 : idx;
  }
}

function set_and_submit (tag,val,formtag)
{
    //alert("Entering");
    var form = document.forms[formtag ? formtag : 0];
    if (!form) alert ("set_and_submit: no form named " + formtag);
    else { 
        if (!form.elements) alert ("set_and_submit:" + formtag + " not a form? ");
        if (!form.elements[tag]) alert ("set_and_submit: no element named " + tag);
    }
    if (!form || !form.elements[tag]) {
	// alert("Returning");
	return;
    }
    // alert("Setting " +  document.forms[formtag].elements[tag].name + " to " + val);

    document.forms[formtag].elements[tag].value = val;
	
    //    document.forms[formtag].elements['search'].click();
    if  (document.forms[formtag].elements["search"].type == "submit")
	document.forms[formtag].elements["search"].click();
    else 
    	document.forms[formtag].submit();
}

function isInteger(s)
{   var i;
    for (i = 0; i < s.length; i++)
    {   
        // Check that current character is number.
        var c = s.charAt(i);
        if (((c < "0") || (c > "9"))) return false;
    }
    // All characters are numbers.
    return true;
}


function clear_date(tag, formtag, today, start_year, year_offset_min, year_offset_max)
{
   var form = document.forms[formtag ? formtag : 0];
   if (!form) alert ("clear_date: no form named " + formtag);
   else { 
        if (!form.elements) alert ("clear_date:" + formtag + " not a form? ");
        if (!form.elements[tag]) alert ("clear_date: no element named " + tag);
   }
   if (!form ||
       !form.elements[tag])
      return;

   var elts=document.forms[formtag].elements;
//alert (elts[tag].value);
   elts[tag].value = "";
   if (today) {
       init_dates(tag,formtag,0,start_year, year_offset_min, year_offset_max);
   } else {
       init_dates(tag,formtag,1,start_year, year_offset_min, year_offset_max);
   } 
   return;
}

