// ----------------------------------------------------------------------------
//       File Name: enduser.js
//       Subsystem: enduser
//   Document Type: Javascript include file
//         Purpose: contains all non-page specific enduser page Javascript
// ----------------------------------------------------------------------------

function submenu(code, items)
{
    this.code  = code;
    this.items = items;
}

// ----------------------------------------------------------------------------

function subitem(code, name)
{
    this.code = code;
    this.name = name;
}

// ----------------------------------------------------------------------------

function field_data(int_msg, reqd_msg, not_complete_msg, oversz_msg,
                    mon_lbl, day_lbl, yr_lbl, hr_lbl, min_lbl, fields)
{
    this.int_msg          = int_msg;
    this.reqd_msg         = reqd_msg;
    this.not_complete_msg = not_complete_msg;
    this.oversz_msg       = oversz_msg;

    this.dt_lbl           = new Array(mon_lbl, day_lbl, yr_lbl, hr_lbl, min_lbl);
}

// ----------------------------------------------------------------------------

function field(name, label, type, maxlen, req)
{
    this.name   = name;
    this.label  = label;
    this.type   = type;
    this.maxlen = maxlen;
    this.req    = req;
}

// ----------------------------------------------------------------------------

function upd_submenu(menu, submenu, submenu_data, all_str)
{
    var i, j = 1;

    submenu.legnth = 0;

    submenu.options[0]       = new Option();
    submenu.options[0].text  = all_str;
    submenu.options[0].value = '~any~';

    for (i = 0; i < submenu_data.length; i++)
        if (submenu_data[i].code == menu.options[menu.selectedIndex].value)
        {
            for ( ; j <= submenu_data[i].items.length; j++)
            {
                submenu.options[j]       = new Option();
                submenu.options[j].text  = submenu_data[i].items[j-1].name;
                submenu.options[j].value = submenu_data[i].items[j-1].code;
            }

            break;
        }
    
    submenu.length        = j;
    submenu.selectedIndex = 0;
}   

// ----------------------------------------------------------------------------

function alp_onload(page, gridsort)
{
    if (document.grid)
    {
        if (document.grid.p_page)
            document.grid.p_page.selectedIndex = page - 1;
        if (document.grid.p_gridsort)
            document.grid.p_gridsort.value = gridsort;
    }

    set_cursor();
}

// ----------------------------------------------------------------------------

function adp_print(refno, created, sid)
{
    window.open('prnt_adp.php?p_refno='+refno+'&p_created='+created
                +'&p_sid='+sid, 'print_answer', 'resizable,menubar,toolbar');
}

// ----------------------------------------------------------------------------

function adp_email(refno, sid) 
{ 
    window.open('email_adp.php?p_refno='+refno+'&p_sid='+sid, 
                'email_answer', 'resizable,width=700,height=392');
}

// ----------------------------------------------------------------------------
// CDT_DATE and CDT_DATETIME components are processed as individual CDT_MENU 
// fields

function check_fields(form_name, fld_data, fields)
{
    var fld, i, j, v, str;
    var num_exp    = new RegExp("[-+]?\\d+");
    var ws_exp     = new RegExp("(^\\s*|\\s*$)", "g");
    var strtok_exp = new RegExp("%s");
    var numtok_exp = new RegExp("%d");

    with (fld_data) for (i = 0; (i < fields.length) && fields[i].type; i++)
    {
        if ((fields[i].type != 4) && (fields[i].type != 7))
            fld = eval('document.'+form_name+'.'+fields[i].name);
        
        switch (fields[i].type)
        {
            case 1: // CDT_MENU
                if (fields[i].req && (fld.length > 1) && (fld.selectedIndex < 1))
                {
                    alert('\''+fields[i].label+'\' '+reqd_msg);
                    fld.focus();
                    return(false);
                }
                break;
            
            case 2: // CDT_BOOL
                if (fields[i].req && !fld[0].checked && !fld[1].checked)
                {
                    alert('\''+fields[i].label+'\' '+reqd_msg);
                    fld[0].focus();
                    return(false);
                }
                break;
                
            case 3: // CDT_INT
                fld.value = fld.value.replace(ws_exp, '');

                if (fld.value.length && !num_exp.test(fld.value))
                {
                    alert('\''+fields[i].label+'\' '+int_msg);
                    fld.focus();
                    return(false);
                }
                // deliberate drop through
                
            case 5: // CDT_VARCHAR
            case 6: // CDT_MEMO
                if (fields[i].maxlen && (fields[i].maxlen < fld.value.length))            
                {
                    str = oversz_msg.replace(strtok_exp, fields[i].label);
                    str = str.replace(numtok_exp, fields[i].maxlen);
                    str = str.replace(numtok_exp, 
                                      fld.value.length - fields[i].maxlen);

                    alert(str);
                    fld.focus();
                    return(false);
                }

                if (fields[i].type != 3)
                    fld.value = fld.value.replace(ws_exp, '');

                if (fields[i].req && (fld.value.length == 0))
                {
                    alert('\''+fields[i].label+'\' '+reqd_msg);
                    fld.focus();
                    return(false);
                }
                break;

            case 4: // CDT_DATETIME
            case 7: // CDT_DATE
                fld = new Array();

                fld[0] = eval('document.'+form_name+'.'+fields[i].name+'_mon');
                fld[1] = eval('document.'+form_name+'.'+fields[i].name+'_day');
                fld[2] = eval('document.'+form_name+'.'+fields[i].name+'_yr');

                if (fields[i].type == 4)
                {
                    fld[3] = eval('document.'+form_name+'.'+fields[i].name+'_hr');
                    fld[4] = eval('document.'+form_name+'.'+fields[i].name+'_min');
                }

                if (!fields[i].req)
                {
                    for (j = v = 0; j < fld.length; j++)
                        v += (fld[j].selectedIndex > 0) ? 0 : 1;

                    if ((v != 0) && (v != fld.length))
                    {
                        alert('\''+fields[i].label+'\' '+not_complete_msg);
                        fld[0].focus();
                        return(false);
                    }

                    break;
                }

                for (j = 0; j < fld.length; j++)
                    if ((fld[j].selectedIndex < 1))
                    {
                        alert('\''+fields[i].label+' ('+dt_lbl[j]+')\' '+reqd_msg);
                        fld[j].focus();
                        return(false);
                    }

                break;
        }
    }
    
    return(true);
}

// ----------------------------------------------------------------------------

function validate_acctinfo(userid, passwd1, passwd2, msgs)
{
   var msg = -1, fld;
   
   if (userid.value.indexOf(' ') != -1)
   {
       msg = 0;
       fld = userid;
   }

   if (userid.value.indexOf('\"') != -1)
   {
       msg = 1;
       fld = userid;
   }

   if (passwd1 && (passwd1.value != passwd2.value))
   {
       msg = 2;
       fld = passwd1;
   }

   if (msg != -1)
   {
       alert(msgs[msg]);
       fld.focus();
       fld.select();
       return(false);
   }

   return(true);
}


// ----------------------------------------------------------------------------

function set_cursor()
{
    var i, j;
    
    for (i = 0; i < document.forms.length; i++)
        for (j = 0; j < document.forms[i].length; j++)
           with (document.forms[i])
               if (elements[j].type && ((elements[j].type == 'text') || (elements[j].type == 'textarea')))
               {
                   elements[j].focus();
                   if (elements[j].value.length)
                       elements[j].select();
                   return;
               }
}


