//
// dakwidget package
//

var DAKWIDGET_NONE = 0;
var DAKWIDGET_INT = 1;
var DAKWIDGET_FLOAT = 2;
var DAKWIDGET_DATE = 3;
var DAKWIDGET_TIME = 4;
var DAKWIDGET_INTRANGE = 5;
var DAKWIDGET_FLOATRANGE = 6;
var DAKWIDGET_DATEBLOCK = 7;
var DAKWIDGET_TIMEBLOCK = 8;
var DAKWIDGET_TEXT = 9;
var DAKWIDGET_PASSWORD = 10;
var DAKWIDGET_TEXTAREA = 11;
var DAKWIDGET_RADIO = 12;
var DAKWIDGET_POPUP = 13;
var DAKWIDGET_SINGLE = 14;
var DAKWIDGET_MULTIPLE = 15;
var DAKWIDGET_CHECKBOX = 16;
var DAKWIDGET_KNUM = 17;
var DAKWIDGET_EMAIL = 18;

function dakwidget (wtype) {
   this.wnum = dakwidget_pr_numWidgets;
   dakwidget_pr_widgets [dakwidget_pr_numWidgets] = this;
   dakwidget_pr_numWidgets++;
   //
   this.wtype = wtype;
   this.sicodes = new Array();
   this.sinames = new Array();
   this.siselected = new Array();
   this.sinum = 0;
   this.textvalues = new Array();
   this.textvalues [0] = "";
   this.textvalues [1] = "";
   this.checked = 0;
   this.origtextvalues = new Array();
   this.origtextvalues [0] = "";
   this.origtextvalues [1] = "";
   this.activesubblock = 0;
   //
   this.error = false;
   this.enabled = false;
   this.suspended = false;
   this.changed = false;
   //
   this.addSelectItem = dakwidget_pr_addSelectItem;
   this.setText = dakwidget_pr_setText;
   this.setChecked = dakwidget_pr_setChecked;
   this.getChecked = dakwidget_pr_getChecked;
   this.setActiveSubblock = dakwidget_pr_setActiveSubblock;
   this.getFirstSelected = dakwidget_pr_getFirstSelected;
   this.getXML = dakwidget_pr_getXML;
   this.getText = dakwidget_pr_getText;
   //
   this.textarearows = 10;

   if ((this.wtype == DAKWIDGET_POPUP) ||
       (this.wtype == DAKWIDGET_SINGLE) ||
       (this.wtype == DAKWIDGET_MULTIPLE)) {
      this.width = 200;
   } else if (this.wtype == DAKWIDGET_CHECKBOX) {
      this.width = 20;
   } else {
      this.width = 100;
   }
   this.divid = "";
   this.visible = false;
   this.setWidth = dakwidget_pr_setWidth;
   this.setDivID = dakwidget_pr_setDivID;
   this.display = dakwidget_pr_display;
   this.getHTML = dakwidget_pr_getHTML;
   this.finishHTML = dakwidget_pr_finishHTML;
   this.setEnabled = dakwidget_pr_setEnabled;
   this.setSuspended = dakwidget_pr_setSuspended;
   //
   this.setHandler = dakwidget_pr_setHandler;
   this.fireHandler = dakwidget_pr_fireHandler;
   this.handler = "";
   this.handlerargs = "";

   this.setHeight = dakwidget_pr_setHeight;

}

function dakwidget_wipeDivArea (divid) {
   var evalstr;
   var i;
   var w;
   
   for (i = 1;  i <= dakwidget_pr_numWidgets;  i++) {
      w = dakwidget_pr_widgets [i - 1];
      if (w.divid == divid) {
         w.visible = false;
      }
   }
   evalstr = divid + ".innerHTML = \"\"";
   eval (evalstr);
}

//
// globals
//

var dakwidget_pr_widgets = new Array();
var dakwidget_pr_numWidgets = 0;

//
// widget object setup methods
//

function dakwidget_pr_addSelectItem (sicode, siname, siselected) {
   this.sicodes [this.sinum] = sicode;
   this.sinames [this.sinum] = siname;
   this.siselected [this.sinum] = siselected;
   this.sinum++;
}

function dakwidget_pr_setText (tnum, tval) {
   this.textvalues [tnum] = unescape (tval);
}

function dakwidget_pr_setChecked (cval) {
   if (cval == "true") {
      this.checked = 1;
   } else if (cval == 1) {
      this.checked = 1;
   } else {
      this.checked = 0;
   }
}

function dakwidget_pr_getChecked () {
   return this.checked;
}

function dakwidget_pr_setActiveSubblock (as) {
   this.activesubblock = as;
}

//
// widget object data retrieval
//

function dakwidget_pr_getFirstSelected() {
   for (i = 1;  i <= this.sinum;  i++) {
      if (this.siselected [i - 1]) {
         return this.sicodes [i - 1];
      }
   }
   return "";
}

function dakwidget_pr_getXML() {
   var result;
   var i;
   var fieldset;
   var selpos;

   if ((this.wtype == DAKWIDGET_DATE) ||
       (this.wtype == DAKWIDGET_TIME) ||
       (this.wtype == DAKWIDGET_INT) ||
       (this.wtype == DAKWIDGET_FLOAT) ||
       (this.wtype == DAKWIDGET_TEXT) ||
       (this.wtype == DAKWIDGET_PASSWORD) ||
       (this.wtype == DAKWIDGET_TEXTAREA) ||
       (this.wtype == DAKWIDGET_KNUM) ||
       (this.wtype == DAKWIDGET_EMAIL)) {

      fieldset = 1;

   } else if ((this.wtype == DAKWIDGET_INTRANGE) ||
              (this.wtype == DAKWIDGET_FLOATRANGE)) {

      fieldset = 2;

   } else if ((this.wtype == DAKWIDGET_DATEBLOCK) ||
              (this.wtype == DAKWIDGET_TIMEBLOCK)) {

      if (this.activesubblock == 0) {
         fieldset = 3;
      } else {
         fieldset = 2;
      }

   } else if (this.wtype == DAKWIDGET_RADIO) {

      fieldset = 3;

   } else if ((this.wtype == DAKWIDGET_POPUP) ||
              (this.wtype == DAKWIDGET_SINGLE) ||
              (this.wtype == DAKWIDGET_MULTIPLE)) {

      fieldset = 3;

   } else if (this.wtype == DAKWIDGET_CHECKBOX) {

      fieldset = 4;

   }

   result = "";
   if (fieldset == 1) {
      result += "<dakdata>";
      result += dakwidget_pr_escape (this.textvalues [0]);
      result += "</dakdata>";
   } else if (fieldset == 2) {
      result += "<dakdata>";
      result += dakwidget_pr_escape (this.textvalues [0]);
      result += "</dakdata>";
      result += "<dakdata>";
      result += dakwidget_pr_escape (this.textvalues [1]);
      result += "</dakdata>";
   } else if (fieldset == 3) {
      selpos = -1;
      for (i = 1;  i <= this.sinum;  i++) {
         if (this.siselected [i - 1]) {
            result += "<dakdata>";
            result += this.sicodes [i - 1];
            result += "</dakdata>";
            selpos = i - 1;
         }
      }
      if (selpos == -1) {
         result += "<dakdata>";
         result += "</dakdata>";
      }
   } else if (fieldset == 4) {
      result += "<dakdata>";
      result += this.checked;
      result += "</dakdata>";
   }
   return result;
}


function dakwidget_pr_getText() {
   var result;
   var i;
   var fieldset;
   var selpos;

   if ((this.wtype == DAKWIDGET_DATE) ||
       (this.wtype == DAKWIDGET_TIME) ||
       (this.wtype == DAKWIDGET_INT) ||
       (this.wtype == DAKWIDGET_FLOAT) ||
       (this.wtype == DAKWIDGET_TEXT) ||
       (this.wtype == DAKWIDGET_PASSWORD) ||
       (this.wtype == DAKWIDGET_TEXTAREA) ||
       (this.wtype == DAKWIDGET_KNUM) ||
       (this.wtype == DAKWIDGET_EMAIL)) {

      fieldset = 1;

   } else if ((this.wtype == DAKWIDGET_INTRANGE) ||
              (this.wtype == DAKWIDGET_FLOATRANGE)) {

      fieldset = 2;

   } else if ((this.wtype == DAKWIDGET_DATEBLOCK) ||
              (this.wtype == DAKWIDGET_TIMEBLOCK)) {

      if (this.activesubblock == 0) {
         fieldset = 3;
      } else {
         fieldset = 2;
      }

   } else if (this.wtype == DAKWIDGET_RADIO) {

      fieldset = 3;

   } else if ((this.wtype == DAKWIDGET_POPUP) ||
              (this.wtype == DAKWIDGET_SINGLE) ||
              (this.wtype == DAKWIDGET_MULTIPLE)) {

      fieldset = 3;

   } else if (this.wtype == DAKWIDGET_CHECKBOX) {

      fieldset = 4;

   }

   result = "";
   if (fieldset == 1) {
      result += dakwidget_pr_escape (this.textvalues [0]);
   } else if (fieldset == 2) {
      result += dakwidget_pr_escape (this.textvalues [0]);
      result += dakwidget_pr_escape (this.textvalues [1]);
   } else if (fieldset == 3) {
      selpos = -1;
      for (i = 1;  i <= this.sinum;  i++) {
         if (this.siselected [i - 1]) {
            result += this.sicodes [i - 1];
            selpos = i - 1;
         }
      }
      if (selpos == -1) {
         result += "";
      }
   } else if (fieldset == 4) {
      result += this.checked;
   }
   return result;
}

//
// widget object display methods
//

function dakwidget_pr_setWidth (w) {
   this.width = w;
}

function dakwidget_pr_setHeight (h) {
   this.textarearows = h;
}

function dakwidget_pr_setDivID (divid) {
   this.divid = "document.all." + divid;
}

function dakwidget_pr_display() {
   var evalstr;
   var i;
   var w;

   for (i = 1;  i <= dakwidget_pr_numWidgets;  i++) {
      w = dakwidget_pr_widgets [i - 1];
      if (this.divid == w.divid) {
         w.visible = false;
      }
   }
   this.visible = true;
   evalstr = this.divid + ".innerHTML = this.getHTML()";
   eval (evalstr);
   this.finishHTML();
}

function dakwidget_pr_getHTML() {
   var result;
   var i;
   var w;

   if ((this.wtype == DAKWIDGET_INT) ||
       (this.wtype == DAKWIDGET_FLOAT) ||
       (this.wtype == DAKWIDGET_DATE) ||
       (this.wtype == DAKWIDGET_TIME) ||
       (this.wtype == DAKWIDGET_KNUM) ||
       (this.wtype == DAKWIDGET_EMAIL)) { 

      result = "";
      result += "<input type=\"text\" ";
      result += dakwidget_pr_IDEventTags (this.wnum, "T0");
      result += " value=\"" + this.textvalues [0] + "\">";
      return result;

   } else if (this.wtype == DAKWIDGET_TEXT) {

      result = "";
      result += "<input type=\"text\" ";
      result += dakwidget_pr_IDEventTags (this.wnum, "T0");
      result += ">";
      return result;

   } else if (this.wtype == DAKWIDGET_PASSWORD) {

      result = "";
      result += "<input type=\"password\" ";
      result += dakwidget_pr_IDEventTags (this.wnum, "T0");
      result += ">";
      return result;

   } else if (this.wtype == DAKWIDGET_TEXTAREA) {
      result = "";
      //result += "<textarea rows=10 ";
      result += "<textarea rows=" + this.textarearows + " ";
      result += dakwidget_pr_IDEventTags (this.wnum, "T0");
      result += "></textarea>";
      return result;

   } else if ((this.wtype == DAKWIDGET_DATEBLOCK) ||
              (this.wtype == DAKWIDGET_TIMEBLOCK)) {

      result = "";
      result += "<input type=\"radio\" ";
      result += dakwidget_pr_IDEventTags (this.wnum, "R0");
      if (this.activesubblock == 0) {
         result += " checked>";
      } else {
         result += ">";
      }
      result += "&nbsp;&nbsp;<select ";
      result += dakwidget_pr_IDEventTags (this.wnum, "S0");
      result += ">";
      for (i = 1;  i <= this.sinum;  i++) {
         result += "<option value=\"" + this.sicodes [i - 1] + "\"";
         if (this.siselected [i - 1]) {
            result += " selected>";
         } else {
            result += ">";
         }
         result += this.sinames [i - 1];
         result += "</option>";
      }
      result += "</select><br>";
      result += "<input type=\"radio\" ";
      result += dakwidget_pr_IDEventTags (this.wnum, "R1");
      if (this.activesubblock == 1) {
         result += " checked>";
      } else {
         result += ">";
      }
      result += "&nbsp;&nbsp;<input type=\"text\" ";
      result += dakwidget_pr_IDEventTags (this.wnum, "T0");
      result += " value=\"" + this.textvalues [0] + "\">";
      result += "&nbsp;&nbsp;to&nbsp;&nbsp;<input type=\"text\" ";
      result += dakwidget_pr_IDEventTags (this.wnum, "T1");
      result += " value=\"" + this.textvalues [1] + "\">";
      return result;

   } else if ((this.wtype == DAKWIDGET_INTRANGE) ||
              (this.wtype == DAKWIDGET_FLOATRANGE)) {

      result = "";
      result += "<input type=\"text\" ";
      result += dakwidget_pr_IDEventTags (this.wnum, "T0");
      result += " value=\"" + this.textvalues [0] + "\">";
      result += "&nbsp;&nbsp;to&nbsp;&nbsp;<input type=\"text\" ";
      result += dakwidget_pr_IDEventTags (this.wnum, "T1");
      result += " value=\"" + this.textvalues [1] + "\">";
      return result;

   } else if (this.wtype == DAKWIDGET_RADIO) {

      result = "";
      for (i = 1;  i <= this.sinum;  i++) {
         result += "<input type=\"radio\" ";
         result += dakwidget_pr_IDEventTags (this.wnum, "R" + (i - 1));
         result += " value=\"" + this.sicodes [i - 1] + "\"";
         if (this.siselected [i - 1]) {
            result += " checked>";
         } else {
            result += ">";
         }
         result += "&nbsp;&nbsp;";
         result += this.sinames [i - 1];
         if (i < this.sinum) result += "<br>";
      }
      return result;

   } else if ((this.wtype == DAKWIDGET_POPUP) ||
              (this.wtype == DAKWIDGET_SINGLE) ||
              (this.wtype == DAKWIDGET_MULTIPLE)) {

      result = "";
      result += "<select ";
      result += dakwidget_pr_IDEventTags (this.wnum, "S0");
      if (this.wtype == DAKWIDGET_POPUP) {
         result += ">";
      } else if (this.wtype == DAKWIDGET_SINGLE) {
         result += " size=15>";
      } else {
         result += " size=15 multiple>";
      }
      for (i = 1;  i <= this.sinum;  i++) {
         result += "<option value=\"" + this.sicodes [i - 1] + "\"";
         if (this.siselected [i - 1]) {
            result += " selected>";
         } else {
            result += ">";
         }
         result += this.sinames [i - 1];
         result += "</option>";
      }
      result += "</select>";
      return result;

   } else if (this.wtype == DAKWIDGET_CHECKBOX) {

      result = "";
      result += "<input type=\"checkbox\" ";
      result += dakwidget_pr_IDEventTags (this.wnum, "C0");
      if (this.checked == 1) {
         result += " checked";
      }
      result += ">";
      return result;

   } else {

      result = "";
      return result;

   }
}

function dakwidget_pr_IDEventTags (wnum, idtok) {
   var result;
   result = "";
   result += "id=\"dakwidget_" + wnum + idtok + "\" ";
   result += "onclick=\"dakwidget_click (" + wnum + ", '" + idtok + "')\" ";
   result += "onfocus=\"dakwidget_focus (" + wnum + ", '" + idtok + "')\" ";
   result += "onblur=\"dakwidget_blur (" + wnum + ", '" + idtok + "')\" ";
   if (idtok.charAt (0) == 'T') {
      result += "onkeydown=\"dakwidget_key (" + wnum + ", '" + idtok + "')\"";
   }
   return result;
}

function dakwidget_pr_finishHTML() {
   var evalstr;
   var wid;

   wid = "document.all.dakwidget_" + this.wnum;

   if ((this.wtype == DAKWIDGET_INT) ||
       (this.wtype == DAKWIDGET_FLOAT) ||
       (this.wtype == DAKWIDGET_DATE) ||
       (this.wtype == DAKWIDGET_TIME) ||
       (this.wtype == DAKWIDGET_KNUM) ||
       (this.wtype == DAKWIDGET_EMAIL)) {

      evalstr = wid + "T0.style.width = " + this.width;
      eval (evalstr);

   } else if ((this.wtype == DAKWIDGET_TEXT) ||
              (this.wtype == DAKWIDGET_PASSWORD) ||
              (this.wtype == DAKWIDGET_TEXTAREA)) {

      evalstr = wid + "T0.style.width = " + this.width;
      eval (evalstr);
      evalstr = wid + "T0.value = this.textvalues [0]";
      eval (evalstr);

   } else if ((this.wtype == DAKWIDGET_DATEBLOCK) ||
              (this.wtype == DAKWIDGET_TIMEBLOCK)) {

      evalstr = wid + "S0.style.width = " + this.width;
      eval (evalstr);
      evalstr = wid + "T0.style.width = " + this.width;
      eval (evalstr);
      evalstr = wid + "T1.style.width = " + this.width;
      eval (evalstr);

   } else if ((this.wtype == DAKWIDGET_INTRANGE) ||
              (this.wtype == DAKWIDGET_FLOATRANGE)) {

      evalstr = wid + "T0.style.width = " + this.width;
      eval (evalstr);
      evalstr = wid + "T1.style.width = " + this.width;
      eval (evalstr);

   } else if (this.wtype == DAKWIDGET_RADIO) {

      // do nothing

   } else if ((this.wtype == DAKWIDGET_POPUP) ||
              (this.wtype == DAKWIDGET_SINGLE) ||
              (this.wtype == DAKWIDGET_MULTIPLE)) {

      evalstr = wid + "S0.style.width = " + this.width;
      eval (evalstr);

   } else if (this.wtype == DAKWIDGET_CHECKBOX) {

      evalstr = wid + "C0.style.width = " + this.width;
      eval (evalstr);

   }
}

function dakwidget_pr_setEnabled (e) {
   var evalstr;
   var i;
   var wid;
   var dstr;

   this.enabled = e;
   this.suspended = false;

   if (e) {
      dstr = "false";
   } else {
      dstr = "true";
   }

   wid = "document.all.dakwidget_" + this.wnum;

   if ((this.wtype == DAKWIDGET_DATE) ||
       (this.wtype == DAKWIDGET_TIME) ||
       (this.wtype == DAKWIDGET_INT) ||
       (this.wtype == DAKWIDGET_FLOAT) ||
       (this.wtype == DAKWIDGET_TEXT) ||
       (this.wtype == DAKWIDGET_PASSWORD) ||
       (this.wtype == DAKWIDGET_TEXTAREA) ||
       (this.wtype == DAKWIDGET_KNUM) ||
       (this.wtype == DAKWIDGET_EMAIL)) {

      evalstr = wid + "T0.disabled = " + dstr;
      eval (evalstr);

   } else if ((this.wtype == DAKWIDGET_INTRANGE) ||
              (this.wtype == DAKWIDGET_FLOATRANGE)) {

      evalstr = wid + "T0.disabled = " + dstr;
      eval (evalstr);
      evalstr = wid + "T1.disabled = " + dstr;
      eval (evalstr);

   } else if ((this.wtype == DAKWIDGET_DATEBLOCK) ||
              (this.wtype == DAKWIDGET_TIMEBLOCK)) {

      evalstr = wid + "R0.disabled = " + dstr;
      eval (evalstr);
      evalstr = wid + "R1.disabled = " + dstr;
      eval (evalstr);
      evalstr = wid + "S0.disabled = " + dstr;
      eval (evalstr);
      evalstr = wid + "T0.disabled = " + dstr;
      eval (evalstr);
      evalstr = wid + "T1.disabled = " + dstr;
      eval (evalstr);

   } else if (this.wtype == DAKWIDGET_RADIO) {

      for (i = 1;  i <= this.numsi;  i++) {
         evalstr = wid + "R" + (i - 1) + ".disabled = " + dstr;
         eval (evalstr);
      }

   } else if ((this.wtype == DAKWIDGET_POPUP) ||
              (this.wtype == DAKWIDGET_SINGLE) ||
              (this.wtype == DAKWIDGET_MULTIPLE)) {

      evalstr = wid + "S0.disabled = " + dstr;
      eval (evalstr);

   } else if (this.wtype == DAKWIDGET_CHECKBOX) {

      evalstr = wid + "C0.disabled = " + dstr;
      eval (evalstr);

   }
}

function dakwidget_pr_setSuspended (s) {
   var evalstr;
   var i;
   var wid;
   var dstr;

   if (!this.visible) return;

   if (s) {
      dstr = "true";
   } else {
      if (this.enabled) {
         dstr = "false";
      } else {
         dstr = "true";
      }
   }

   wid = "document.all.dakwidget_" + this.wnum;

   if ((this.wtype == DAKWIDGET_DATE) ||
       (this.wtype == DAKWIDGET_TIME) ||
       (this.wtype == DAKWIDGET_INT) ||
       (this.wtype == DAKWIDGET_FLOAT) ||
       (this.wtype == DAKWIDGET_TEXT) ||
       (this.wtype == DAKWIDGET_PASSWORD) ||
       (this.wtype == DAKWIDGET_TEXTAREA) ||
       (this.wtype == DAKWIDGET_KNUM) ||
       (this.wtype == DAKWIDGET_EMAIL)) {

      evalstr = wid + "T0.disabled = " + dstr;
      eval (evalstr);

   } else if ((this.wtype == DAKWIDGET_INTRANGE) ||
              (this.wtype == DAKWIDGET_FLOATRANGE)) {

      evalstr = wid + "T0.disabled = " + dstr;
      eval (evalstr);
      evalstr = wid + "T1.disabled = " + dstr;
      eval (evalstr);

   } else if ((this.wtype == DAKWIDGET_DATEBLOCK) ||
              (this.wtype == DAKWIDGET_TIMEBLOCK)) {

      evalstr = wid + "R0.disabled = " + dstr;
      eval (evalstr);
      evalstr = wid + "R1.disabled = " + dstr;
      eval (evalstr);
      evalstr = wid + "S0.disabled = " + dstr;
      eval (evalstr);
      evalstr = wid + "T0.disabled = " + dstr;
      eval (evalstr);
      evalstr = wid + "T1.disabled = " + dstr;
      eval (evalstr);

   } else if (this.wtype == DAKWIDGET_RADIO) {

      for (i = 1;  i <= this.numsi;  i++) {
         evalstr = wid + "R" + (i - 1) + ".disabled = " + dstr;
         eval (evalstr);
      }

   } else if ((this.wtype == DAKWIDGET_POPUP) ||
              (this.wtype == DAKWIDGET_SINGLE) ||
              (this.wtype == DAKWIDGET_MULTIPLE)) {

      evalstr = wid + "S0.disabled = " + dstr;
      eval (evalstr);

   } else if (this.wtype == DAKWIDGET_CHECKBOX) {

      evalstr = wid + "C0.disabled = " + dstr;
      eval (evalstr);

   }
}

//
// widget onclick
//

function dakwidget_click (wnum, idtok) {
   var evalstr;
   var i;
   var w;
   var wid;

   w = dakwidget_pr_widgets [wnum];
   wid = "document.all.dakwidget_" + w.wnum;

   if ((w.wtype == DAKWIDGET_INT) ||
       (w.wtype == DAKWIDGET_FLOAT) ||
       (w.wtype == DAKWIDGET_DATE) ||
       (w.wtype == DAKWIDGET_TIME) ||
       (w.wtype == DAKWIDGET_TEXT) ||
       (w.wtype == DAKWIDGET_PASSWORD) ||
       (w.wtype == DAKWIDGET_TEXTAREA) ||
       (w.wtype == DAKWIDGET_INTRANGE) ||
       (w.wtype == DAKWIDGET_FLOATRANGE) ||
       (w.wtype == DAKWIDGET_KNUM) ||
       (w.wtype == DAKWIDGET_EMAIL)) {

      // do nothing

   } else if ((w.wtype == DAKWIDGET_DATEBLOCK) ||
              (w.wtype == DAKWIDGET_TIMEBLOCK)) {

      if (idtok == "S0") {
         w.fireHandler ("enablesave");
      }

   } else if (w.wtype == DAKWIDGET_RADIO) {

      for (i = 1;  i <= w.sinum;  i++) {
         if (idtok == ("R" + (i - 1))) {
            w.siselected [i - 1] = true;
            evalstr = wid + "R" + (i - 1) + ".checked = true";
         } else {
            w.siselected [i - 1] = false;
            evalstr = wid + "R" + (i - 1) + ".checked = false";
         }
         eval (evalstr);
      }
      w.fireHandler ("enablesave");

   } else if ((w.wtype == DAKWIDGET_POPUP) ||
              (w.wtype == DAKWIDGET_SINGLE) ||
              (w.wtype == DAKWIDGET_MULTIPLE)) {  

      for (i = 1;  i <= w.sinum;  i++) {
         evalstr = wid + "S0.options [" + (i - 1) + "].selected";
         selected = eval (evalstr);
         if (selected) {
            w.siselected [i - 1] = true;
         } else {
            w.siselected [i - 1] = false;
         }
      }

      w.fireHandler ("enablesave");

   } else if (w.wtype == DAKWIDGET_CHECKBOX) {

      evalstr = wid + "C0.checked";
      checked = eval (evalstr);
      if (checked) {
         w.checked = 1;
      } else {
         w.checked = 0;
      }
      w.fireHandler ("enablesave");

   }
}

//
// widget onfocus
//

function dakwidget_focus (wnum, idtok) {
   var evalstr;
   var i;
   var w;
   var wid;
   var newactivesubblock;

   w = dakwidget_pr_widgets [wnum];
   wid = "document.all.dakwidget_" + wnum;

   if (w.error) {

      for (i = 1;  i <= dakwidget_pr_numWidgets;  i++) {
         dakwidget_pr_widgets [i - 1].setSuspended (false);
      }
      evalstr = wid + idtok + ".style.backgroundColor = \"white\"";
      eval (evalstr);
      w.fireHandler ("unsuspend");
      w.error = false;

   } else if ((w.wtype == DAKWIDGET_INT) ||
              (w.wtype == DAKWIDGET_FLOAT) ||
              (w.wtype == DAKWIDGET_DATE) ||
              (w.wtype == DAKWIDGET_TIME) ||
              (w.wtype == DAKWIDGET_TEXT) ||
              (w.wtype == DAKWIDGET_PASSWORD) ||
              (w.wtype == DAKWIDGET_TEXTAREA) ||
              (w.wtype == DAKWIDGET_INTRANGE) ||
              (w.wtype == DAKWIDGET_FLOATRANGE) ||
              (w.wtype == DAKWIDGET_RADIO) ||
              (w.wtype == DAKWIDGET_POPUP) ||
              (w.wtype == DAKWIDGET_SINGLE) ||
              (w.wtype == DAKWIDGET_MULTIPLE) ||
              (w.wtype == DAKWIDGET_KNUM) ||
              (w.wtype == DAKWIDGET_EMAIL)) {

      // do nothing

   } else if ((w.wtype == DAKWIDGET_DATEBLOCK) ||
              (w.wtype == DAKWIDGET_TIMEBLOCK)) {


      if ((idtok == "R0") || (idtok == "S0")) {
         evalstr = wid + "R0.checked = true";
         eval (evalstr);
         evalstr = wid + "R1.checked = false";
         eval (evalstr);
         newactivesubblock = 0;
      } else {
         evalstr = wid + "R0.checked = false";
         eval (evalstr);
         evalstr = wid + "R1.checked = true";
         eval (evalstr);
         newactivesubblock = 1;
      }
      if (w.activesubblock != newactivesubblock) {
         w.fireHandler ("enablesave");
      }
      w.activesubblock = newactivesubblock;

   } else if (w.wtype == DAKWIDGET_CHECKBOX) {

      // nop

   }
}

//
// widget onblur
//

function dakwidget_blur (wnum, idtok) {
   var evalstr;
   var i;
   var w;
   var wid;
   var si;
   var checked;
   var selected;

   w = dakwidget_pr_widgets [wnum];
   wid = "document.all.dakwidget_" + wnum;

   if ((w.wtype == DAKWIDGET_INT) ||
       (w.wtype == DAKWIDGET_INTRANGE)) {

      dakwidget_copyValidateTextField (w, idtok, "dakvalidate_int");

   } else if ((w.wtype == DAKWIDGET_FLOAT) ||
              (w.wtype == DAKWIDGET_FLOATRANGE)) {

      dakwidget_copyValidateTextField (w, idtok, "dakvalidate_float");

   } else if (w.wtype == DAKWIDGET_DATE) {

      dakwidget_copyValidateTextField (w, idtok, "dakvalidate_date");

   } else if (w.wtype == DAKWIDGET_TIME) {

      dakwidget_copyValidateTextField (w, idtok, "dakvalidate_time");

   } else if ((w.wtype == DAKWIDGET_TEXT) ||
              (w.wtype == DAKWIDGET_PASSWORD) ||
              (w.wtype == DAKWIDGET_TEXTAREA)) {

      dakwidget_copyValidateTextField (w, idtok, "");

   } else if ((w.wtype == DAKWIDGET_DATEBLOCK) ||
              (w.wtype == DAKWIDGET_TIMEBLOCK)) {

      if (idtok == "S0") {
         for (i = 1;  i <= w.sinum;  i++) {
            w.siselected [i - 1] = false;
         }
         evalstr = wid + "S0.selectedIndex";
         si = eval (evalstr);
         w.siselected [si] = true;
      } else if ((idtok == "T0") || (idtok == "T1")) {
         if (w.wtype == DAKWIDGET_DATEBLOCK) {
            dakwidget_copyValidateTextField (w, idtok, "dakvalidate_date");
         } else {
            dakwidget_copyValidateTextField (w, idtok, "dakvalidate_time");
         }
      }

   } else if (w.wtype == DAKWIDGET_RADIO) {

      for (i = 1;  i <= w.sinum;  i++) {
         evalstr = wid + "R" + (i - 1) + ".checked";
         checked = eval (evalstr);
         if (checked) {
            w.siselected [i - 1] = true;
         } else {
            w.siselected [i - 1] = false;
         }
      }

   } else if ((w.wtype == DAKWIDGET_POPUP) ||
              (w.wtype == DAKWIDGET_SINGLE) ||
              (w.wtype == DAKWIDGET_MULTIPLE)) {

      for (i = 1;  i <= w.sinum;  i++) {
         evalstr = wid + "S0.options [" + (i - 1) + "].selected";
         selected = eval (evalstr);
         if (selected) {
            w.siselected [i - 1] = true;
         } else {
            w.siselected [i - 1] = false;
         }
      }

   } else if (w.wtype == DAKWIDGET_CHECKBOX) {

      evalstr = wid + "C0.checked";
      checked = eval (evalstr);
      if (checked) {
         w.checked = 1;
      } else {
         w.checked = 0;
      }

   } else if (w.wtype == DAKWIDGET_KNUM) {

      dakwidget_copyValidateTextField (w, idtok, "dakvalidate_knum");

   } else if (w.wtype == DAKWIDGET_EMAIL) {

      dakwidget_copyValidateTextField (w, idtok, "dakvalidate_email");

   }
}

//
// widget onkeypress
//

function dakwidget_key (wnum, idtok) {
   var w;

   w = dakwidget_pr_widgets [wnum];
   w.fireHandler ("enablesave");
}

//
//
//

function dakwidget_copyValidateTextField (w, idtok, vfname) {
   var evalstr;
   var wid;
   var widx;
   var vstr;
   var fstr;

   wid = "document.all.dakwidget_" + w.wnum;

   if (idtok == "T0") {
      widx = 0;
      fstr = wid + "T0";
   } else {
      widx = 1;
      fstr = wid + "T1";
   }

   // copy back from html to widget (even if invalid)
   evalstr = "w.textvalues [" + widx + "] = " + fstr + ".value";
   eval (evalstr);

   // validate if necessary
   if (vfname != "") {
      evalstr = vfname + " (w.textvalues [" + widx + "])";
      vstr = eval (evalstr);
      if (vstr == null) {
         evalstr = fstr + ".focus()";
         eval (evalstr);
         evalstr = fstr + ".select()";
         eval (evalstr);
      }
   }
}

//
// widget handler methods
//

function dakwidget_pr_setHandler (h, a) {
   this.handler = h;
   this.handlerargs = a;
}

function dakwidget_pr_fireHandler (cmd) {
   var evalstr;
   if (this.handler == "") return;
   if (this.handlerargs == "") {
      evalstr = this.handler + " (\"" + cmd + "\")";
   } else {
      evalstr = this.handler + " (" + this.handlerargs + ", \"" + cmd + "\")";
   }
   eval (evalstr);
}

//
// escape routine
//

function dakwidget_pr_escape (istr) {
   var result;
   var ilen;
   var i;
   var c;

   result = "";
   ilen = istr.length;
   for (i = 1;  i <= ilen;  i++) {
      c = istr.charAt (i - 1);
      if (c == "%") {
         result += "%25";
      } else if (c == "&") {
         result += "%26";
      } else if (c == "<") {
         result += "%3C";
      } else if (c == ">") {
         result += "%3E";
      } else if (c == "\"") {
         result += "%22";
      } else if (c == "'") {
         result += "%27";
      } else if (c == "\r") {
         result += "%0D";
      } else if (c == "\n") {
         result += "%0A";
      } else {
         result += c;
      }
   }
   return result;
}

