// 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, w, h)
{
 var txt = "toolbar=no,location=no,menubar=no,resizable=yes,scrollbars=yes,width=";
	txt = txt + w + ",height=" + h;
    destroyPopup(window_base, popupCounter, w, h);
    var popup = window.open(url_name, window_base + popupCounter,txt);
    ++popupCounter;
    popup.focus();
}


function createChromelessPopup(url_name, window_base, w, h)
{
 var txt = "toolbar=no,location=no,menubar=no,resizable=no,scrollbars=no,width=";
	txt = txt + w + ",height=" + h;
    destroyPopup(window_base, popupCounter, w, h);
    var popup = window.open(url_name, window_base + popupCounter,txt);
    ++popupCounter;
    popup.focus();
}
// 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_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 init_checkbox_array (tag, value, form_index)
{
  var elts = document.forms[form_index].elements;
  var checkboxes = elts[tag];
  var values = value.split (",");
  var i, j;
  if (!checkboxes.length) {
    if (checkboxes.value == value)
        checkboxes.checked = true;
  } else {
    for (i=0; i< checkboxes.length; i++)
    {
      for (j=0; j< values.length; j++) 
      {
        if (checkboxes[i].value == values[j])
        {
          checkboxes[i].checked = true;
        }
      }
    }
  }
}

//
// 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
//  

var month_names = new Array;
month_names["JAN"] = 1;
month_names["FEB"] = 2;
month_names["MAR"] = 3;
month_names["APR"] = 4;
month_names["MAY"] = 5;
month_names["JUN"] = 6;
month_names["JUL"] = 7;
month_names["AUG"] = 8;
month_names["SEP"] = 9;
month_names["OCT"] = 10;
month_names["NOV"] = 11;
month_names["DEC"] = 12;

month_names[1] = "JAN";
month_names[2] = "FEB";
month_names[3] = "MAR";
month_names[4] = "APR";
month_names[5] = "MAY";
month_names[6] = "JUN";
month_names[7] = "JUL";
month_names[8] = "AUG";
month_names[9] = "SEP";
month_names[10] = "OCT";
month_names[11] = "NOV";
month_names[12] = "DEC";

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;
      if (datestring.substring(2,3) == "-")
      {
          // assume it's an Oracle date: dd-MON-YYYY
          day = datestring.substring(0,2);
          month = datestring.substring(3,6);
          year = datestring.substring(7,11);
          month = month_names[month] - 1;
      }
      else
      {
          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 = 1;
    }
    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 {

      // remove the dummy years
      for (i=sdopts.length-1; i > 0; i--)
          sdopts.remove (i);
      if (!allowNulls)
          sdopts.remove (0);

      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;
    }
    //alert("before on_date sub_date = " + elts[tag].value);
    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, 10);
        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)
  {
    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);
      }
    }
  }
}

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"].options[elts[tag + "_day"].selectedIndex].value == "00")
      || elts[tag + "_month"].options[elts[tag + "_month"].selectedIndex].value == "00")
  {
    elts[tag].value = "NULL";
    return;
  }
    var allowNulls;
    if (elts[tag+"_month"].options[0].value == "00")
        allowNulls = true;
    else
        allowNulls = false;

  if (0)
  {
    // generate Oracle date format: DD-MON-YYYY
    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";

    var month_index = parseInt(elts[tag + "_month"].options[elts[tag + "_month"].selectedIndex].value, 10);
    elts[tag].value += "-" +
      month_names[month_index] +
      "-" +
      elts[tag + "_year"].options[elts[tag + "_year"].selectedIndex].value;
  }
  else // generate YYYY-MM-DD date format
  {
    elts[tag].value = 
      elts[tag + "_year"].options[elts[tag + "_year"].selectedIndex].text + 
      "-" +
      elts[tag + "_month"].options[elts[tag + "_month"].selectedIndex].value +
      "-";
    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 != "NULL")
    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(param,val,dir,formtag)
{
//alert ("dosort("+param+","+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[param]) alert ("dosort: no element named " + param);
        if (!form.elements["pf_dir"]) alert ("dosort: no form named pf_dir");
   }
   if (!form ||
       !form.elements[param] ||
       !form.elements["pf_dir"])
      return;

   form.elements[param].value = val;
   if (dir != null) {
     form.elements["pf_dir"].value = dir;
   }
   if (form.validate)
     form.validate();

   if (!form.onsubmit || form.onsubmit())
     form.submit();
}

function dosubmit(param,val,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[param]) alert ("dosort: no element named " + param);
   }
   if (!form || !form.elements[param])
      return;

   form.elements[param].value = val;
   if (form.validate)
     form.validate();

   if (!form.onsubmit || form.onsubmit())
     form.submit();
}

function onchange_search (tag, formtag, idx)
{
  if (document.forms[formtag].elements[tag].value)
  {
    var op = document.forms[formtag].elements[tag + "op"];
    if (op.selectedIndex <= 0)
     op.selectedIndex = idx == null ? 2 : idx;
  }
}

function search_select (tag, formtag)
{
  var op = document.forms[formtag].elements[tag + "op"];
  if (op) {
    op.value = 
        (document.forms[formtag].elements[tag].selectedIndex > 0) ?
        "=" : "ANY";
  }
}

