var Form_dummyTab = new Object ();

function Form_divSelect (context, target, divName)
  {
    Form_tabSelect (context, Form_dummyTab, target, divName, "DummyTab");
  }

function Form_tabSelect (context, tab, target, divName, tabClassName)
  {
    var div;
   
    if (target == null)
      {
        target = window; 
      }
    if (context.tab)
      {
        context.tab.className = "UnselTab " + tabClassName;
      }
    tab.className = "SelTab " + tabClassName;
    context.tab = tab;
    div = target.el (divName);
    if (context.div)
      {
        //alert (context.div.style.display);
        context.div.style.display = "none";
        if (context.div.onhide)
          {
            context.div.onhide ();
          }
      }
    //alert (context.div.style.display);
    if (div.onshow)
      {
        div.onshow ();
      }
    div.style.display = "block";
    context.div = div;
  }

/*
function Form_tabSelect (target, id, index)
  {
    var table = el (id + '_tabs');
    var selector = table.curselector;

    selector.className = 'tab';
    selector = el (id + '_tabs_' + index);
    selector.className = 'seltab';
    table.curselector = selector;
    eval (target).Form_fieldsetSelect (id, index);
  }
*/

function Form_formStart (formid)
  {
    var form = el (formid);
    var fieldset = el (formid + '_0');

    form.reset ();
    if (! fieldset)
      {
        return;
      }
    form.curfieldset = fieldset;
    form.curfieldset.className = 'selfieldset';
    if (form.curfieldset.onshow)    
      {    
        form.curfieldset.onshow ();    
      }
  }
  
function Form_submit (form, func)
  {
    if (Form_checkSubmit (form, func))
      {
        form.submit ();
      }
  }

function Form_updatePassword (psw)
  {
    psw.actualValue = psw.value;
  }

function Form_checkSubmit (form, func)
  {
    var fields = Form_getFieldMap (form);
    var i = 0;

      
    //alert ("in Form_checkSubmit ()");
    while (fields [i])
      {
        j = 0;
        //alert ("checking field: " + fields [i] [0].name);
        while (fields [i] [j])
          {
            //alert ("# " + j);
            if (fields [i] [j].className.match (/mandatoryField$/))
              {
                if (! Form_hasMandatoryValue (fields [i] [j]))
                  {
                    alert ("Please enter values for all mandatory fields");
                    return (false);
                  }
              }
            if (fields [i] [j].className.match (/^dateInputField/) && ! Form_normalizeDate (fields [i] [j]))
              {
                return (false);
              }
            /*
            else if (fields [i] [j].type && fields [i] [j].type == "password")
              {
                // usual Netscape bug: passwords are reset when changing display,
                // so we save the values somewhere else - see FormWriter.java and
                // Form_updatePassword() above - and we have to restore them at the very end
                fields [i] [j].value = fields [i] [j].actualValue;
              }
            */
            j ++;
          }
        i ++;
      }
    /*
    // only needed to fix NETSCAPE bug: undisplayed fields are not submitted!!!
    if (form.fieldsets)
      {
        for (var k = 0; k < form.fieldsets.length; k ++)
          {
            form.fieldsets [k].style.display = "block";
            form.fieldsets [k].style.visibility = "hidden";
          }
      }
    */
    if (func != null)
      {
        return (func (form, fields));
      }
    return (true);
  }

function Form_hasMandatoryValue (field)
  {
    if (field.type == "select-one" || field.type == "select-multiple")
      {
        return (field.selectedIndex != undefined && field.selectedIndex >= 0);
      }
    else
      {
        return (field.value && field.value != null && field.value != "");
      }
  }

function Form_normalizeDate (date)
  {
    var d;
    var day;
    var month;
    var year;

    if (! Form_checkDate (date, false))
      {
        return (false);
      }
    if (date.value == '')
      {
        return (true);
      }
    d = new Date (date.value);
    year = d.getFullYear ();
    month = d.getMonth () + 1;
    day = d.getDate ();
    date.value = year + '-' + (month < 10 ? '0' + month : month) + '-' + (day < 10 ? '0' + day : day);
    return (true);
  }
  
function Form_checkDate (date, interactive)
  {
    var d;

    if (date.value == '')
      {
        return (true);
      }
    d = new Date (date.value);
    if (isNaN (d.valueOf ()))
      {
        if (interactive)
          {
            alert ('Invalid Date');
          }
        date.value = '';
        return (false);
      }
    return (true);
  }

function Form_fieldsetSelect (id, index)
  {
    var form = el (id);

    if (form.curfieldset.onhide)    
      {    
        form.curfieldset.onhide ();    
      }
    form.curfieldset.className = 'fieldset';
    form.curfieldset = el (id + '_' + index);
    form.curfieldset.className = 'selfieldset';
    if (form.curfieldset.onshow)    
      {    
        form.curfieldset.onshow ();    
      }
  }
  
function Form_getFieldMap (form)
  {
    var elements = form.elements;
    var map = new Object ();
    var k;
    var j;
    
    k = 0;
    j = -1;
    for (var i = 0; i < elements.length; i ++)
      {
        if (! map [elements [i].name])
          {
            //document.write ("<pre>New Field: " + elements [i].name + "</pre><br/>");
            map [++ j] = new Array ();
            map [elements [i].name] = map [j];
            k = 0;
          }
        //document.write ("<pre>     [" + k + "]</pre><br/>");
        map [j] [k ++] = elements [i];
      }
    return (map);
  }


