// File Name : layer.js
// File Type : Java script
// Function  : Layer utility functions
// Date      : 28.MAY.2001
// Author    : Rocco Chong


/*
 * Set layer visibility
 *
 * @param ps_visibility  Layer visibiltiy ('show' / 'hide')
 *                       ('visible' / 'hidden') will be used for some browsers
 * @param ps_layer_id    Layer ID (eg Mv_service_page_1)
 */
function j_set_layer(ps_show_hide_ind, ps_layer_id) {

  // If no layer specified in JS array, do nothing.
  if (ps_layer_id == '') {
    return;
  }

  jo_layer_obj = null;

  if (document.layers) {    // for NN4 browser
    jo_layer_obj = document.layers[ps_layer_id];
  }

  if (!jo_layer_obj) {      // for other browser
    jo_layer_obj = document.getElementById(ps_layer_id);
  }

  if (jo_layer_obj.style) {
    jo_layer_obj = jo_layer_obj.style;

    if (ps_show_hide_ind == 'show') {
      ps_show_hide_ind = 'visible';
    } else {
      ps_show_hide_ind = 'hidden';
    }
  }

  jo_layer_obj.visibility = ps_show_hide_ind;
}

/*
 * Focus a field
 * Flow :
 * 1. hide all layers
 * 2. set the layer of the focus field visible
 * 3. focus the field
 *
 * @param po_form            Form object
 * @param pa_layer_flds      Array of layers and fields mapping
 * @param ps_focus_fld_name  Focus field name
 *
 * Remarks :
 *
 * Example of pa_layer_flds for form with layers :
 *
 *     ma_hdr_layer_flds = [ 
 *                           ["page_1", "hs_menu_id"], 
 *                           ["page_1", "hs_menu_ldesc[0]"],
 *                           ["page_1", "hs_menu_ldesc[1]"],
 *                           ["page_2", "hs_srv_id"], 
 *                           ["page_2", "hs_srv_ldesc[0]"],
 *                           ["page_2", "hs_srv_ldesc[1]"],
 *                           ["page_2", "hs_srv_ldesc[2]"]
 *                         ];
 * "page_1" & "page_2" are layer IDs.  "hs_menu_id" ... are field names.
 *
 *
 * Example of pa_layer_flds for form without any layer :
 *
 *     ja_layer_flds = [ ["", "hs_srv_id"] ];
 *
 *
 * If (pa_layer_flds == null), that means the focus field is not in any
 * layer.  Therefore, no layer is set to be visible.
 *
 */
function j_focus_fld(po_form, pa_layer_flds, ps_focus_fld_name) {

  // Focus the field for those input form without array data
  //
  if (pa_layer_flds == null) {
    if (ps_focus_fld_name != '') {
      jo_fld_obj  = eval('po_form.' + ps_focus_fld_name);
      jo_fld_obj.focus();
    }
    return;
  }

  if (pa_layer_flds.length > 1) {

    // Hide all layers
    js_prv_layer_id = '';
    for(i=0; i<pa_layer_flds.length; i++) {
      if (js_prv_layer_id != pa_layer_flds[i][0]) {
        j_set_layer('hide', pa_layer_flds[i][0]);
        js_prv_layer_id = pa_layer_flds[i][0];
      }
    }

    // Visible the layer and focus the field
    jb_fld_not_found = true;
  
    for(i=0; i<pa_layer_flds.length; i++) {
      js_fld_name = pa_layer_flds[i][1];

      if (ps_focus_fld_name == js_fld_name) {
        j_set_layer('show', pa_layer_flds[i][0]);
        jo_fld_obj  = eval('po_form.' + js_fld_name);
        jo_fld_obj.focus();
        jb_fld_not_found = false;
      }
    }
  
    // Focus first layer and field if focus field not found
    if (jb_fld_not_found) {
      j_set_layer('show', pa_layer_flds[0][0]);
      js_fld_name = pa_layer_flds[0][1];
      jo_fld_obj  = eval('po_form.' + js_fld_name);
      jo_fld_obj.focus();
    }

  } else {

    // Logic for form without layers
    //
    if (ps_focus_fld_name == '') {
      if (pa_layer_flds[0][1].length > 0) {
        jo_fld_obj  = eval('po_form.' + pa_layer_flds[0][1]);
        jo_fld_obj.focus();
      }
    } else {
      jo_fld_obj  = eval('po_form.' + ps_focus_fld_name);
      jo_fld_obj.focus();
    }
  }

}
