/*
 * Progetto Sech
 * $Workfile: browser.js $ - $Revision: 1 $
 * Copyright @Business Reply 2003
 *
 * $Log: /web/script/browser.js $
 * 
 *
 * 1     23/09/01 3:44p F.gambino
 */
 
//
// Element vars helper
//
 
 var selRowsArray = new Array();
 var modRowsArray = new Array();
 
 var refInput;
 var bJsReadOnly = false;
 
 var sNewRec = "Inserimento nuovo record";
 var sElab   = "Elaborazione in corso..";
 var sError  = "Errore..";
 var sRecMod = "Record modificato";
 var sRecIns = "Record inserito";
 var sRecDel = "Record eliminato";
 
 var sConfExit = "Record modificato. Uscire ugualmente?";
//
// Element class helpers
//

/**
 * Adds the named class to an element.
 *
 * @param  tag        HTMLElement  the element
 * @param  className  DOMString    the class to be added
 * @since             1.0
 */
function addClass(item, className) {
    if (item.className.indexOf(className) >= 0) {
		return;
    }
    if (item.className != "") {
        item.className = item.className + " " + className;
    } else {
        item.className = className;
    }
}

/**
 * Removes the named class from an element.
 *
 * @param  tag        HTMLElement  the element
 * @param  className  DOMString    the class to be removed
 * @since             1.0
 */
function removeClass(item, className) {
    if (item.className.indexOf(className) < 0) {
        return;
    }
    var oldClasses = item.className.split(" ");
    var classes = "";
    for (var i = 0; i < oldClasses.length; i++) {
        if (oldClasses[i] != className) {
            if (classes != "") {
                classes += " ";
            }
            classes += oldClasses[i];
        }
    }
    item.className = classes;
}

/**
 * Returns the inner text of an element.
 *
 * @param  element  HTMLElement  the element
 * @return          DOMString    the element's inner text
 */
function getInnerText(element) {
    if (element.innerText != null) {
        return element.innerText;
    } else {
        return element.innerHTML;
    }
}

//
// Table row selection helper functions
//

/**
 * Set the given row range as the selected rows of a table,
 * clipping indexes on table size, reversing if required
 * and changing row CSS class if not already selected.
 *
 * @param  table       HTMLTableElement  the table
 * @param  firstIndex  long              the first row index
 * @param  lastIndex   long              the last row index
 * @param  deselect    boolean           deselect selected rows
 * @since              1.0
 */
function setSelectedRow(table, firstIndex, lastIndex, deselect) {
    if (table == null) {
        return;
    }
    var selection = table.getAttribute("selectionType");
}

/**
 * Look for an element with the specified tag surrounding the given element.
 *
 * @param  element  HTMLElement       the child element
 * @param  tag      DOMString         the tag name
 * @return          HTMLTableElement  the required table or null if not found
 * @since           1.0
 */
function getParentTag(element, tag) {
    if (element == null) {
        return null;
    }
    var parent = element.parentNode;
    while (parent != null) {
        if (parent.tagName == tag) {
            return parent;
        }
        parent = parent.parentNode;
    }
    return null;
}

//
// Event handlers
//
/**
 * Returns the element for which an event occurred.
 *
 * @param  realEvent  Event        the event
 * @return            HTMLElement  the element for which event occurred
 */
function getEventElement(realEvent) {
    if (realEvent.srcElement != null) {
        return realEvent.srcElement;
    } else {
        return realEvent.target;
    }
}

//
// Row event handlers
//
/**
 * Set the selected row to selectedRow style class 
 * and remove the previuos.
 *
 * @param  realEvt     Event        the event
 * @param  idxCols     DOMString    the columns of key
 * @param  bNoSetParam boolean      force no setting params
 * @param  tableId     DOMString    the table id
 * @param  selectRow   DOMString    the row actually selected
  */
function selRow(realEvt, idxCols, bNoSetParam, tableId, selectRow) {
    if (tableId != null) {
      var table = document.getElementById(tableId);
      if (table!= null && table.selectedRow != null) {
        removeClass(table.selectedRow, "selected")
      }
      return;
    }
//pier
    if (selectRow != null) {
	    var element = selectRow;
    } else {
	    if (realEvt == null) {
	        realEvt = window.event;
	    }
	    if (realEvt == null) {
	      return;
	    }
	    var element = getEventElement(realEvt);
    }
//    if (realEvt == null) {
//        realEvt = window.event;
//    }
//    if (realEvt == null) {
//      return;
//    }
//    var element = getEventElement(realEvt);
//pier
    if (element == null) {
      return;
    }
    if (element.tagName == "TABLE") {
      return;
    }
    var row = getParentTag(element, "TR");
    if (row == null) {
      return;
    }
    var table = getParentTag(element, "TABLE");
    if (table.selectedRow != null) {
      removeClass(table.selectedRow, "selected")
    }
    if (row.id != null && row.id == "HEADER") {
      return;
    }
    table.selectedRow = row;
    addClass(row, "selected")
    if (row.id != null) {
     if (bNoSetParam == null) { 
       setWindowParam("KEY_VALS",row.id);
       setWindowParam("KEY_COLS",idxCols);
     }
     var form = null;
     if (table.formId != null) {
       form = document.getElementById(table.formId);
     } else {
       form = document.getElementById("FORM_TABLE");
     }
     if (form != null) {
       form.elements["KEY_VALS"].value = row.id;
     }
    }
}

 // questa funzione gestisce gli array associati alla selezione e modifica
 // delle righe della tabella
 function setArrayRows(row, tipo, valore) {
   if (selRowsArray == null || modRowsArray == null) {
     return;
   }
   if (row == null || row.rowIndex == null) {
     return;
   }
   if (tipo == "selected") {
     selRowsArray[row.rowIndex] = valore;
   } else if (tipo == "modified") {
     modRowsArray[row.rowIndex] = valore;
   }
 }

 function isRowSelected(row) {
 	if (row != null) {
		if (selRowsArray[row.rowIndex] != null) {
			return true;//selRowsArray[row.rowIndex].value;
		}
	}
	return false;	
 }
//
// manage windows attributes
//

/**
 * Set the parName attriute to topWindows opbject
 *
 * @param  parName  DOMString 
 * @param  parValue  DOMString 
 */
function setWindowParam(parName, parValue) {
  if (parName == null || parName.length == 0) {
    return;
  }
  if (parValue == null || parValue.length == 0) {
    return;
  }
  if (parName == "KEY_COLS") {
    window.top.key_cols = parValue;
  } 
  if (parName == "KEY_VALS") {
    window.top.key_vals = parValue;
  }
}

/**
 * Reset the parName attriute to topWindows opbject
 *
 * @param  parName  DOMString 
 */
function resetWindowParam(parName) {
  if (parName == null || parName.length == 0) {
    return;
  }
  if (parName == "KEY_COLS") {
    window.top.key_cols = null;
  } else if (parName == "KEY_VALS") {
    window.top.key_vals = null;
  }
}

/**
 * Get the parName attriute to topWindows opbject
 *
 * @param  parName  DOMString 
 */
function getWindowParam(parName) {
  if (parName == null || parName.length == 0) {
    return;
  }
  var parValue;
  if (parName == "KEY_COLS") {
    parValue = window.top.key_cols;
  }
  if (parName == "KEY_VALS") {
    parValue = window.top.key_vals;
  }
  return parValue;
}

/**
 * Load form related to submenu item
 *
 * @param  urlTarget       DOMString  the target page
 * @param  pathRoot       DOMString   the root path (sech)
 * @param   bNoSelection  boolean     to force page loading
 */
function loadMain(urlTarget, pathRoot, sTarget, bNoSelection) {
  if (urlTarget != null) {
    var idxCols = getWindowParam("KEY_COLS");
    var idxVals = getWindowParam("KEY_VALS");
    //resetWindowParam("KEY_COLS");
    //resetWindowParam("KEY_VALS");
    if (bNoSelection == null || !bNoSelection) {
		if (idxCols == null || idxVals == null) {
	      return;
	    } 
    }
    document.forms["FORM_KEY"].elements["KEY_COLS"].value = idxCols;
    document.forms["FORM_KEY"].elements["KEY_VALS"].value = idxVals;
    document.forms["FORM_KEY"].action = pathRoot + urlTarget;        
    if (sTarget == null) {
	    document.forms["FORM_KEY"].target = "main";        
    } else {
    	document.forms["FORM_KEY"].target = sTarget;        
    }
    document.forms["FORM_KEY"].submit();
  }
}

/**
 * Load  submenu item
 *
 * @param  param     DOMString  the params
 * @param  pathRoot  DOMString  the root path (sech)
 */
function loadSubMenu(param, pathRoot) {
  if (param != null && param.length > 0) {
    var url = pathRoot + "/manage/submenu.jsp?ID=" + param;
    if (window.top.frames["actions"] != null) {
      window.top.frames["actions"].location = url;
    }
  } else {
    if (window.top.frames["actions"] != null) {
      window.top.frames["actions"].location = pathRoot + "/common/empty.jsp";
    }
  }
}

function setFocusField(form_id, element_id) {
  var form = document.getElementById(form_id);
  if (form == null) { return; }
  for (var i=0; i < form.elements.length; i++) {
	if (form.elements[i].type != "hidden" && !form.elements[i].disabled && !form.elements[i].readOnly
	     && (form.elements[i].tagName == "INPUT" || form.elements[i].tagName == "SELECT")) {
      if (element_id == null) {
        try {
          form.elements[i].focus();
        } catch (e) {}
        return;
      } else {
        if (element_id == form.elements[i].name) {
          try {
            form.elements[i].focus();
          } catch (e) {}
          return;
        }
      }
    }
  }
}

/**
 * link the buttons to action
 *
 * @param  typeAction  DOMString  the action
 * @param  form_id     DOMString 
 * @param  pathAction  DOMString  
 * @param  item        DOMString  
 */
function actionForm(typeAction, form_id, pathAction, item) {
  //alert("actionForm " + form_id);
  var form = document.getElementById(form_id);
  //alert("actionForm " + form);
  if (form != null) {
    if (form.elements["RESULT"].value == "DELETED") {
      if (typeAction == "UPD" || typeAction == "INS" || typeAction == "DEL") {
        alert("ATTENZIONE : record cancellato!");
        return;
      }
    }
    if (form.elements["RESULT"].value == "INSERTED") {
      if (typeAction == "UPD" || typeAction == "INS" || typeAction == "DEL") {
        alert("ATTENZIONE : record appena inserito, non modificabile!");
        return;
      }
    }
  }
  if (typeAction == "CLS") {
    if (form != null) {
      for (var i=0; i < form.elements.length; i++) {
        if (form.elements[i].type != "hidden" && form.elements[i].type != "button") {
          if (form.elements[i].type == "checkbox") {
            form.elements[i].checked = false;
          } else {
            form.elements[i].value = "";
          }
        }
      }
      if (window.checkData != null) {
         window.checkData(typeAction, form_id, pathAction, item);
      }
      setFocusField(form_id);
    }
  }
  if (typeAction == "ADD") {
    if (form != null) {
      form.elements["ACTION"].value = "ADD";
      form.elements["KEY_COLS"].value = "";
      form.elements["KEY_VALS"].value = "";
      if (form.elements["RESULT"] != null) {
        form.elements["RESULT"].value = ""; // fg 2201204
      }
      form.action = form.elements["ADD_PAGE"].value;
	  if (window.checkData != null) {
        if (!window.checkData(typeAction, form_id, pathAction, item)) {
          return;
        }
      }
      setMessage(null,sElab,1);    
      setCorsorWait();
      form.submit();
    }
  }
  if (typeAction == "BACK") {
     if (form != null) {
       if (isFormModified(form_id)) {
         if (!confirm("Record modificato. Uscire ugualmente?")) {
           return;
         }
       }
       if (form.elements["PREV_PAGE"] != null && form.elements["PREV_PAGE"].value != "") {
         form.action = form.elements["PREV_PAGE"].value;
         form.target = "main";
         form.submit();
         return;
       } else {
	   	 //alert("!!!");
         window.history.back();
         return;
       }
     } else {
	   //alert("else history");
       window.history.back();
     }
  }
  if (typeAction == "PRINT") {
     window.print();
  }
  if (typeAction == "CLO") {
     window.close();
  }
  if (typeAction == "EXP") {
    if (form != null) {
      if (form.elements["KEY_VALS"].value != "") {
        form.action = form.elements["NEXT_PAGE"].value;
        setCorsorWait();
        form.submit();
      }
    }
  }
  if (typeAction == "ROW") {
    if (form != null) {
      if (form.elements["KEY_VALS"].value != "") {
        form.action = form.elements["ROW_PAGE"].value;
        form.submit();
      }
    }
  }
  if (typeAction == "FIND") {
     if (form != null) {
       if (checkFormat(form_id)) {
         	form.elements["ACTION"].value = "FIND";
		     form.elements["RESULT"].value = "";
		     form.action = form.elements["NEXT_PAGE"].value;
		     form.target = "";
         // disable all
         elabInCorso();
         //setMessage(null,sElab,1);
         //disableAllButtons(true);
         //disableAllForms();
         //window.setAttribute("WORKING","true");
         // end disable all
         setCorsorWait();
         form.submit();
       }
     }
  }
  if (typeAction == "REL") {
     if (form != null) {
       if (form.elements["ACTION"].value != "DEL" && form.elements["ACTION"].value != "ADD") {
         if (form.elements["KEY_VALS"] == null || form.elements["KEY_VALS"].value == "") {
           return;
         }
         form.elements["ACTION"].value = "REL";
		     form.elements["RESULT"].value = "";
		     form.action = form.elements["ACT_PAGE"].value;
		     form.target = "result";
         setCorsorWait();
         form.submit();
       }
     }
  }
  if (typeAction == "DEL") {
     if (form != null) {
       if (form.elements["KEY_VALS"] == null || form.elements["KEY_VALS"].value == "") {
         alert("Nessun record selezionato.");
         return;
       }
	if(form.name=='FORM_CONTAINER' && form.elements['TIPO_MISSIONE']!=null && form.elements['OBJECT']!=null && form.elements['OBJECT'].value=='CONTAINER'){
	       	var ris = confirm("Sicuro di volere  cancellare l'esito?");
	} else {
       		var ris = confirm("Sicuro di volere eliminare il record ?");
        }
       if (ris) {
         form.elements["ACTION"].value = "DEL";
         form.elements["RESULT"].value = "";
         form.action = form.elements["ACT_PAGE"].value;
         form.target = "result";
         if (window.checkData != null) {
           if (!window.checkData(typeAction, form_id, pathAction, item)) {
             return;
           }
         }
         setMessage(null,sElab,1);
         setCorsorWait();
         form.submit();
       }
     }
  }
  if (typeAction == "UPD") {
     if (form != null) {
       if (form.elements["ACTION"].value == "ADD") {
         //form.elements["ACTION"].value = "ADD";
         form.action = form.elements["ADD_PAGE"].value;
       } else {
         if (form.elements["KEY_VALS"] == null || form.elements["KEY_VALS"].value == "") {
           alert("Nessun record selezionato .");
           return;
         }
         form.elements["ACTION"].value = "UPD";
         form.action = form.elements["ACT_PAGE"].value;
       }
       form.elements["RESULT"].value = "";
       if (!checkFormat(form_id)) {
         return;
       }
	     if (window.checkData != null) {
         if (!window.checkData(typeAction, form_id, pathAction, item)) {
           return;
         }
       }
       form.target = "result";
       setMessage(null,sElab,1);
       setCorsorWait();
	   form.submit();
     }
  }
  if (typeAction == "INS") {
     if (form != null) {
       form.elements["ACTION"].value = "ADD";
       form.elements["RESULT"].value = "";
       form.action = form.elements["ACT_PAGE"].value;
       if (window.checkData != null) {
         if (!window.checkData(typeAction, form_id, pathAction, item)) {
           return;
         }
       }
       if (!checkFormat(form_id)) {
         return;
       }
       form.target = "result";
       setMessage(null,sElab,1);
       form.submit();
     }
  }
}

/**
 * Disabilita tutte le form e tutti i bottini
 *
 */
function elabInCorso() {
   // disable all
   setMessage(null,sElab,1);
   disableAllButtons(true);
   disableAllForms();
   window.working = true;
   // end disable all
}

/**
 * Set fields mode by tpAction type
 *
 * @param  form_id     DOMString  form id
 * @param  typeAction  DOMString  the action
 */
function setFormMode(form_id, tpAction) {
  removeCorsorWait();
  if (tpAction == "ADD") {
    setInsertMode(form_id);
  } else if (tpAction == "UPD") {
    setUpdateMode(form_id);
  } else if (tpAction == "QRY") {
    setQueryMode(form_id);
  } else if (tpAction == "LOC") {
    setLockedMode(form_id);
  } else if (tpAction == "RNL") {
    setReadOnly(form_id);
  } else if (tpAction == "BLK") {
    setBlockMode(form_id);
  } else if (tpAction == "REL") {
    setUpdateMode(form_id);
  } else if (tpAction == "CLS") {
    setClearedMode(form_id);
  }
}

function setClearedMode(form_id) {
  var form = document.getElementById(form_id);
  if (form == null) {
    return;
  }
  for (var i=0; i < form.elements.length; i++) {
    if (form.elements[i].type != "hidden" && form.elements[i].type != "button") {
      if (form.elements[i].tagName == "INPUT" || form.elements[i].tagName=="TEXTAREA") {
        form.elements[i].value = "";
      } else if (form.elements[i].tagName == "SELECT") {
        form.elements[i].selectedIndex = 0;
      }
    }
  }
}

/**
 * Set fields to readOnly mode if 
 * dbReadOnly attribute is defined
 *
 * @param  form_id     DOMString  form id
 */
function setReadOnly(form_id) {
  var form = document.getElementById(form_id);
  if (form == null) {
    return true;
  }
  for (var i=0; i < form.elements.length; i++) {
    if (form.elements[i].dbReadOnly != null) {
      form.elements[i].readOnly = true;
      addClass(form.elements[i], "readonly");
    }
  }
}

/**
 * Fields validation function
 *
 * @param  form_id     DOMString 
 *
 * @return boolean       
 */
function checkFormat(form_id) {
  var form = document.getElementById(form_id);
  if (form == null) {
    return true;
  }
  if (window.validation == null) {
    return true;
  }
  if (window.trapCheckFormat != null) {
    if (!window.trapCheckFormat(form_id)) {
      return false;
    }
  }
  for (var i=0; i < form.elements.length; i++) {
      if (form.elements[i].type != "hidden" && 
          !form.elements[i].disabled && 
          !form.elements[i].readOnly && 
          form.elements[i].name != null) {
        var fieldName  = form.elements[i].name;
        var fieldTitle = getFieldTitle(fieldName);
		// Andrea 270105...
		// Trim del valore dei campi.
		if (form.elements[i].tagName == "INPUT") {
			form.elements[i].value = trim(form.elements[i].value);
		}
		// Fine...
        if (form.elements[i].getAttribute("dbMandatory") != null && form.elements[i].value == "") {
          alert("ATTENZIONE: campo obbligatorio mancante '" + fieldTitle + "'");
          return false;
        }
        if (form.elements[i].getAttribute("dbtype") != null && form.elements[i].value.length > 0) {
          var dbtype = form.elements[i].getAttribute("dbtype");
          if (dbtype == "string") {
            if (form.elements[i].getAttribute("dbFormat") != null) {
              var re = new RegExp(form.elements[i].getAttribute("dbformat"));
              if (!re.test(form.elements[i].value)) {
                alert("ATTENZIONE: formato campo errato in '" + fieldTitle + "'");
                return false;
              }
            }
            if (form.elements[i].getAttribute("dbCheck") != null) {
              var sFunction = form.elements[i].getAttribute("dbCheck");
              if (!window.eval(sFunction)) {
                alert("ATTENZIONE: campo '" + fieldTitle + "' non conforme alla regola ");
                return false;
              }
            }
          } else if (dbtype == "date") {
            if (!validation.validDate(form.elements[i],true)) {
              alert("ATTENZIONE: formato data errato in '" + fieldTitle + "'");
              return false;
            }
          } else if (dbtype == "timestamp") {
		    if (form.elements[i].value.length != 19) {
              alert("ATTENZIONE: formato data-ora non corretto in '" + fieldTitle + "'");
              return false;
		    }
            if (!validation.validDate(form.elements[i])) {
              alert("ATTENZIONE: formato data-ora errato in '" + fieldTitle + "'");
              return false;
            }
          }else if (dbtype == "time") {
            if (!validation.validTime(form.elements[i])) {
              alert("ATTENZIONE: formato ora errato in '" + fieldTitle + "'");
              return false;
            }
          } else if (dbtype == "number") {
            if (!validation.validNumber(form.elements[i])) {
              alert("ATTENZIONE: formato numerico errato in '" + fieldTitle + "'");
              return false;
            }
          }
        }
      }
  }
  return true;
}

function setFormState(form_id, typeAction, sMessage, sKeyVals) {
  var form = document.getElementById(form_id);
  removeCorsorWait();
  if (form == null) {
    return true;
  }
  setMessage("MSG_ACTION", sMessage);
  form.setAttribute("typeAction",typeAction); 
  if (typeAction == "UPD") {
    //resetFormState(form_id);
    setUpdateMode(form_id);
    form.elements["RESULT"].value = "UPDATED";
    resetFormModified(form_id);
  } else if (typeAction == "DEL") {
    form.elements["ACTION"].value = "NUL";
    form.elements["RESULT"].value = "DELETED";
    // clear della form
    setDeletedMode(form_id);
  } else if (typeAction == "ADD") {
    form.elements["ACTION"].value = "UPD";
    form.elements["RESULT"].value = "INSERTED";
    form.elements["KEY_VALS"].value = sKeyVals;
    setUpdateMode(form_id);
    resetFormModified(form_id);
  } else if (typeAction == "CLS") {
    form.elements["ACTION"].value = "";
    form.elements["RESULT"].value = "";
    resetMsgState(form_id);
  } else if (typeAction == "REL") {
    form.elements["ACTION"].value = "UPD";
    form.elements["RESULT"].value = "";
    resetMsgState(form_id);
  }
  if (window.trapSetFormState != null) {
    window.trapSetFormState(form_id, typeAction, sMessage, sKeyVals);
  }
}

/**
 * Returns the inner text of an element.
 *
 * @param  element  HTMLElement  the element
 * @return          DOMString    the element's inner text
 */
function getInnerText(element) {
    if (element.innerText != null) {
        return element.innerText;
    } else {
        return element.innerHTML;
    }
}

/**
 * Set for to insert mode
 *
 * @param  form_id     DOMString 
 *
 */
function setInsertMode(form_id) {
  var form = document.getElementById(form_id);
  if (form == null) { return true; }
  for (var i=0; i < form.elements.length; i++) {
    if (form.elements[i].type != "hidden" && form.elements[i].type != "button") {
      if (form.elements[i].type == "radio") {
        form.elements[i].checked = form.elements[i].checked;
      } else {
        form.elements[i].value = "";
      }
      form.elements[i].readOnly = false;
      form.elements[i].disabled = false;
      removeClass(form.elements[i], "readonly");
      if (form.elements[i].tagName == "INPUT" ||
          form.elements[i].tagName == "TEXTAREA" ||
          form.elements[i].tagName == "SELECT") {
           addClass(form.elements[i], "insert");
      }
      setFieldMandatory(form.elements[i],"ADD");
    }
  }
  setMessage(null,sNewRec,1);
  if (window.trapInsertMode != null) {
    window.trapInsertMode(form_id);
  }
  setFocusField(form_id);
}

/**
 * Set for to update mode
 *
 * @param  form_id     DOMString 
 *
 */
function setUpdateMode(form_id) {
  var form = document.getElementById(form_id);
  if (form == null) { return true; }
  for (var i = 0; i < form.elements.length; i++) {
    if (form.elements[i].getAttribute("dbReadOnly") != null) {
      form.elements[i].readOnly = true;
      if (form.elements[i].tagName == "SELECT") {
        form.elements[i].disabled = true;
      } else {
        form.elements[i].disabled = false;
      }
      addClass(form.elements[i], "readonly");
    } else {
      form.elements[i].readOnly = false;
      form.elements[i].disabled = false;
      removeClass(form.elements[i], "readonly");
    }
    removeClass(form.elements[i], "insert");
    setFieldMandatory(form.elements[i], "UPD");
  }

  setFocusField(form_id);
	
  if (window.trapUpdateMode != null) {
    window.trapUpdateMode(form_id);
  }
}

/**
 * Set for to query mode. 
 * Free all input elements to query mode
 *
 * @param  form_id     DOMString 
 *
 */
function setQueryMode(form_id) {
  var form = document.getElementById(form_id);
  if (form == null) { return true; }
  for (var i=0; i < form.elements.length; i++) {
    if (form.elements[i].dbReadOnly != null) {
      form.elements[i].readOnly = false;
      removeClass(form.elements[i], "readonly");
      removeClass(form.elements[i], "insert");
      removeClass(form.elements[i], "required");
    }
  }
  setFocusField(form_id);
  if (window.trapQueryMode != null) {
    window.trapQueryMode(form_id);
  }
}

/**
 * Set for to insert mode
 *
 * @param  form_id     DOMString 
 *
 */
function setDeletedMode(form_id) {
  var form = document.getElementById(form_id);
  if (form == null) { return true; }
  for (var i=0; i < form.elements.length; i++) {
    if (form.elements[i].type != "hidden" && 
        form.elements[i].tagName != "BUTTON" &&
        form.elements[i].type != "button") {
      form.elements[i].disabled = true;
      removeClass(form.elements[i], "insert");
      removeClass(form.elements[i], "required");
    }
  }
}

/**
 * Set elements form to locked status (disabled)
 *
 * @param  form_id     DOMString 
 *
 */
function setLockedMode(form_id) {
  var form = document.getElementById(form_id);
  if (form == null) { return true; }
  for (var i=0; i < form.elements.length; i++) {
    if (form.elements[i].tagName == "INPUT" && form.elements[i].type != "hidden") { 
      form.elements[i].readOnly = true;
      addClass(form.elements[i], "readonly");
      removeClass(form.elements[i], "insert");
      form.elements[i].setAttribute("dbReadOnly","true");
    } else if (form.elements[i].tagName == "SELECT") {
      addClass(form.elements[i], "readonly");
      removeClass(form.elements[i], "insert");
      form.elements[i].setAttribute("dbReadOnly","true");
    } else if (form.elements[i].tagName == "TEXTAREA") {
      form.elements[i].readOnly = true;
      addClass(form.elements[i], "readonly");
      removeClass(form.elements[i], "insert");
      form.elements[i].setAttribute("dbReadOnly","true");
    }
  }
}

function setBlockMode(form_id) {
  var form = document.getElementById(form_id);
  if (form == null) { return true; }
  for (var i=0; i < form.elements.length; i++) {
    if (form.elements[i].tagName == "INPUT" && form.elements[i].type != "hidden") { 
      form.elements[i].readOnly = true;
      addClass(form.elements[i], "readonly");
      removeClass(form.elements[i], "insert");
    } else if (form.elements[i].tagName == "SELECT") {
      addClass(form.elements[i], "readonly");
      removeClass(form.elements[i], "insert");
    } else if (form.elements[i].tagName == "TEXTAREA") {
      form.elements[i].readOnly = true;
      addClass(form.elements[i], "readonly");
      removeClass(form.elements[i], "insert");
    }
  }
}

// deseleziona le select presenti nella form
// per evitare che rimangano selezionate (in bleu)
function resetSelectTag(form_id) {
  var form = document.getElementById(form_id);
  if (form == null) {
    return true;
  }
  for (var i=0; i < form.elements.length; i++) {
    if (form.elements[i].tagName == "SELECT" && form.elements[i].size > 1) {
      form.elements[i].selectedIndex = -1;
    }
  }
}

// simile alla preceente
function resetFormState(form_id) {
  var form = document.getElementById(form_id);
  if (form == null) {
    return true;
  }
  for (var i=0; i < form.elements.length; i++) {
    if (form.elements[i].tagName == "SELECT" && form.elements[i].size != 1) {
      form.elements[i].selectedIndex = -1;
    }
  }
}

function resetMsgState(form_id, msgTagId, force) {
  var form = document.getElementById(form_id);
  if (form == null) {
    return true;
  }
  if (form.getAttribute("typeAction") == null && force == null) {
    return;
  }
  if (window.bJsReadOnly != null && window.bJsReadOnly == true) {
    return;
  }
  if (isFormModified(form_id)) {
    return;
  }
  if (msgTagId == null) {
    msgTagId = "MSG_ACTION";
  }
  var msgItem = document.getElementById(msgTagId);
  if (msgItem != null) {
    msgItem.innerHTML = "&nbsp;";
  }
}

function formEvent(realEvt) {
  //alert(realEvt.type);
  if (realEvt == null) {
      realEvt = window.event;
  }
  if (realEvt == null) {
    return;
  }
  var element = getEventElement(realEvt);
  if (element == null) {
    return;
  }
  if (element.tagName != "INPUT" && element.tagName != "SELECT" && element.tagName != "TEXTAREA") {
    return;
  }
  if (realEvt.type == "keypress") {
    var keyCode = realEvt.keyCode;
    if (keyCode > 96 && keyCode < 123) {
      realEvt.keyCode = keyCode - 32;
    }
	
  } else if (realEvt.type == "blur" && element.tagName != "SELECT") {
    if (element.value != "") {
	  element.value = element.value.toUpperCase();
    }
  }
}

function removeData(formId) {
  var form = document.getElementById(formId);
  if (form == null) { return; }
  for (var i=0; i < form.elements.length; i++) {
    if (form.elements[i].tagName == "INPUT" && form.elements[i].type == "text") {
        form.elements[i].value = "";
    }
  }
}

/**
 * Set row values to input elements
 * used by loadRow function
 *
 * @param  row         HTMLElement  riferimento alla riga
 * @param  formId      DOMString    id della form
 * @param  IDSRowName  DOMString    id della riga
 *
 */
function fillData(row, formId, IDSRowName) {
  var form   = document.forms[formId];
  if (IDSRowName != null) {
  	var rowIds = getTag(IDSRowName);
  } else {
  	var rowIds = getTag("IDS_ROW");
  }
  if (form != null) {
	  for (var i = 0; i < rowIds.cells.length; i++) {
	    var elementId = getInnerText(rowIds.cells(i));
      if (form.elements[elementId] != null) {
        var valElement;
        if (row.cells(i).childNodes[0] != null) {
          if (row.cells(i).childNodes[0].tagName == "INPUT" || row.cells(i).childNodes[0].tagName == "SELECT") {
            if (row.cells(i).childNodes[0].type == "checkbox") {
              if (row.cells(i).childNodes[0].checked) {
                valElement = row.cells(i).childNodes[0].value; 
              } else {
                valElement = "";
              }
            } else {
              valElement = row.cells(i).childNodes[0].value;
            }
          } else {
            valElement = getInnerText(row.cells(i));
          }
        } else {
          valElement = getInnerText(row.cells(i));
        }
        form.elements[elementId].value = valElement;
      }
    }
    /*if (form.elements["KEY_COLS"] != null) {
      form.elements["KEY_COLS"].value = row.getAttribute("ID");
    }*/
  }
}

/**
 * Clear all input elements of row
 *
 * @param  row     row object 
 *
 */
function clearRow(row) {
  if (row != null) {
	for (var i = 0; i < row.cells.length; i++) {
	  var rowTd = row.cells[i];
      if (rowTd.childNodes[0] != null) {
        if (rowTd.childNodes[0].tagName == "INPUT" || rowTd.childNodes[0].tagName == "SELECT") {
          rowTd.childNodes[0].value = "";
        }
      }
    }
  }
}

/**
 * Set row values to input elements
 *
 * @param  realEvt     event       object 
 * @param  row         HTMLElement the row 
 * @param  IDSRowName  DOMStrong   id della riga
 *
 */
function loadRow(realEvt, row, IDSRowName) {
  //var data1 = new Date();
  if (row == null) {
    if (realEvt == null) { realEvt = window.event; }
    if (realEvt == null) { return; }
    var element = getEventElement(realEvt);
    if (element == null) { return; }
    if (element.tagName == "TABLE") { return; }
    row = getParentTag(element, "TR");
    //alert(row+"-"+row.id);
  }// pier
  else {
    var element = row;
	}
//pier
  if (row == null) { 
    return; 
  }

  var table = getParentTag(element, "TABLE");
  var formId = table.formId;
  if (table.selectedRow != null) { 
    removeData(formId); 
  }
  if (row.id != null && row.id == "HEADER") { 
    return; 
  }
  if (row.id != null) {
    fillData(row, formId, IDSRowName);
    setUpdateMode(formId);
  }
  //var data2 = new Date();
  if (window.trapLoadRow != null) {
   window.trapLoadRow(formId,row.id);
  }
  //var data3 = new Date();
  //alert("Tempo : " + (data2-data1) + " - " + (data3-data2));
}

/**
 * Delete all rows of table
 *
 * @param  tableId     DOMString the table id
 *
 */
function deleteAllRows(tableId) {
  var Table = document.getElementById(tableId);
  //var Table = document.getElementById("TABLE_FORM");
  if (Table == null) { return; }
  /*var tBody;
  if (table.tBodies.length == 1) {
    tBody = table.tBodies[0];
  } else {
    tBody = table.tBodies[1];
  }
  try {
    for (var i=1; i < tBody.rows.length; i++) {
      tBody.deleteRow(i);
    }
  } catch (e) {}*/
  
  //Andrea 080904
	var Row = Table.getElementsByTagName("tr");
	var f = Row.length;
	//alert("Row.length = " + f);
	for (c = f ; c > 3 ; c--) {
		//alert("c = " + c);
		//try {
			Table.deleteRow(c-1);
		//} catch (e) {}
	}
}

/**
 * Refresh table by type of action submitted
 *
 * @param  tableId     DOMString the table id
 * @param  tpAction    DOMString the action type
 * @param  rowId       DOMString the row id
 * @param  colId       DOMString the column id
 * @param  colVal      DOMString the column value
 * @param  NewRowName  DOMString the column value
 * @param  IdsRowName  DOMString the column value
 *
 */
function refreshTable(tableId, tpAction, rowId, colId, colVal, NewRowName, IdsRowName) {
  var table = document.getElementById(tableId);
  //var table = getTag(tableId); // FG081004 to improve performance
  if (table == null) { return; }
  if (tpAction == "DEL") {
	    var row = document.getElementById(rowId);
		//var row = getTag(rowId); // FG081004 to improve performance
        if (row == null) { return; } 
        table.deleteRow(row.rowIndex);
  } else if (tpAction == "UPD" || tpAction == "REL") {
        var row = document.getElementById(rowId);
		//var row = getTag(rowId); // FG081004 to improve performance
        if (row == null) { return; } 
        var rowIndex = getColIndex(tableId, colId, IdsRowName);		
        if (row.cells(rowIndex).childNodes[0] != null &&
            (row.cells(rowIndex).childNodes[0].tagName == "INPUT" || 
            row.cells(rowIndex).childNodes[0].tagName == "SELECT" )) {
            if (row.cells(rowIndex).childNodes[0].type == "checkbox" ) {
              row.cells(rowIndex).childNodes[0].checked = (colVal == "1" ? true : false);
            } else {
              row.cells(rowIndex).childNodes[0].value = colVal;
            }
        } else {
          row.cells(rowIndex).innerHTML = colVal;
        }
  } else if (tpAction == "ADD") {
      var row = document.getElementById(rowId);
      if (row != null) {
        refreshTable(tableId, "UPD", rowId, colId, colVal,NewRowName,IdsRowName);
      } else {
        var rowIndex = getColIndex(tableId, colId,IdsRowName);
        //pier
        var newRow = "";
	      if (NewRowName != null) {
	        newRow = document.getElementById(NewRowName);
	      } else {
        	newRow = document.getElementById("NEW_ROW");
        }
        if (newRow != null) {
            var tRow = newRow.cloneNode(true);
            var tBody = table.tBodies.length == 1 ? table.tBodies[0] : table.tBodies[1];
            tBody.appendChild(tRow);
            tRow.style.display = "block";
            var nRow = tRow.rowIndex;
            tRow.setAttribute("id", rowId);
            tRow.cells(rowIndex).innerHTML = colVal;
            focusLastRow(tableId);
          }
      }
  }
}

/**
 * Set focus to last table row
 *
 * @param  tableId   DOMString the table id
 *
 */
function focusLastRow(tableId) {
  var table = document.getElementById(tableId);
  if (table == null) { return; }
  try {
    table.rows[table.rows.length-1].cells[0].focus();
  } catch (exception) {}
}

/**
 * Call the loadData page to load value by code
 *
 * @param  pathName     DOMString the path root of sech
 * @param  tableName    DOMString the name of list prompt
 * @param  colCod       DOMString the name of referenced column
 * @param  colDes       DOMString the name of description column
 * @param  colVal       DOMString the name of filter value
 * @param  targetColCod DOMString the name of field to set value code
 * @param  targetColDes DOMString the name of field to set value
 * @param  whereClause  DOMString condition to add to where clause
 * @param  bUseDestCod  boolean to use targetColCod instead of colCod
 *
 */
function callLoadData(pathName, tableName, colCod, colDes, colVal, targetColCod, targetColDes, whereClause, bUseDestCod) {
  var url = pathName + "/common/loadData.jsp";
  var ItemValue;
  if (bUseDestCod != null && bUseDestCod == true) {
    ItemValue = getTagValue(getTag(targetColCod));
    if (getTag(targetColCod) == null) {
      ItemValue = getTagValue(getTag(colCod));
    }
  } else {
    ItemValue = getTagValue(getTag(colCod));
    if (getTag(colCod) == null) {
      ItemValue = getTagValue(getTag(targetColCod));
    }
  }
  if (ItemValue == null || ItemValue == "" || ItemValue.length == 0 ) {
	var targetDes = getTag(colDes);
	if (targetDes != null) {
		try {
		  setTagValue(getTag(colDes),"");
	    } catch (exception) {}
		return;
	}
  }
  var params = "?TABLE_NAME=" + tableName;
  params = params + "&COL_COD=" + colCod;
  params = params + "&COL_DES=" + colDes;
  params = params + "&COL_VAL=" + colVal;
  if (targetColCod != null) {
    params = params + "&TARGET_COL_COD=" + targetColCod;
  }
  if (targetColDes != null) {
    params = params + "&TARGET_COL_DES=" + targetColDes;
  }
  if (whereClause != null && whereClause.length > 0) {
    if (whereClause == "getLocalClause") {
      if (window.getLocalClause != null) {
        params = params + "&WHERE_CLAUSE=" + getLocalClause(targetColCod);
      }
    } else {
      params = params + "&WHERE_CLAUSE=" + whereClause; 
    }
  }
  var w = window.open(url + params, "result")
}


/**
 * Call the prompt page to select item
 *
 * @param  pathName    DOMString the path root of sech
 * @param  tableName   DOMString the name of list prompt
 * @param  codName     DOMString the name of referenced column
 * @param  desName     DOMString the name of description column
 * @param  colFilter   DOMString the name of filter column
 * @param  targetField DOMString the name of field to set value
 * @param  whereClause DOMString condition to add to where clause
 * @param  bReturn     boolean   return the widow reference
 *
 */

// Andrea 221204...
function callPrompt(pathName, tableName, codName, desName, colFilter, targetCod, targetDes, whereClause, Ordin, bReturn) {
	     callPrompt(pathName, tableName, codName, desName, colFilter, targetCod, targetDes, whereClause, Ordin,   null,        bReturn);
}

function callPrompt(pathName, tableName, codName, desName, colFilter, targetCod, targetDes, whereClause, Ordin, defaultFilter, bReturn) {
	     callPrompt(pathName, tableName, codName, desName, colFilter, targetCod, targetDes, whereClause, Ordin,      null,     bReturn, null, null);
}

// PM20031205 modificato aggiunto parametro whereClause
function callPrompt(pathName, tableName, codName, desName, colFilter, targetCod, targetDes, whereClause, Ordin, defaultFilter, sTitle, sSize) {
  var url = pathName + "/common/prompt.jsp";
  var params = "?TABLE_NAME=" + tableName + "&COL_COD=" + codName;
  if (desName != null && desName.length > 0) {
    params = params + "&COL_DES=" + desName;
    var item = document.getElementById(desName);
    if (item != null && item.tagName == "INPUT" && item.value != "") {
      params = params + "&FILTER=" + "%";
    }
  }
  if (colFilter != null && colFilter.length > 0) {
    var item = document.getElementById(colFilter);
    if (item != null && item.tagName == "INPUT" && item.value != "") {
      params = params + "&COL_FILTER=" + colFilter;
      params = params + "&VAL_FILTER=" + "%";//item.value;
    }
    if (item != null && item.tagName == "INPUT" && item.value == "") {
      params = params + "&COL_FILTER=" + colFilter;
      params = params + "&VAL_FILTER=" + "%";
    }
  }
  if (targetCod != null && targetCod.length > 0) {
    params = params + "&TARGET_FIELD=" + targetCod; 
  }
  if (targetDes != null && targetDes.length > 0) {
    params = params + "&TARGET_DES=" + targetDes; 
  }
  // PM20031205 modificato
  if (whereClause != null && whereClause.length > 0) {
    if (whereClause == "getLocalClause") {
      if (window.getLocalClause != null) {
        params = params + "&WHERE_CLAUSE=" + getLocalClause(targetCod);
      }
    } else {
      params = params + "&WHERE_CLAUSE=" + whereClause; 
    }
  }
  //Andrea 02/0804...
  if (Ordin != null && Ordin.length > 0) {
    params = params + "&ORDIN=" + Ordin; 
  }
  //Andrea 221204...
  if (defaultFilter != null && defaultFilter.length > 0) {
    params = params + "&DEFAULT=" + defaultFilter;
  }
  //Mdp 310505...
  if (sTitle != null && sTitle.length > 0) {
    params = params + "&TITLE=" + sTitle;
  }
  if ( sSize == null ) { 
  	var layout = "height=350,width=250,top=100,left=100,menubar=no,status=no,resizable=yes,scrollbars=no";
  } else {
  	var layout = "height=350,width=" + sSize + ",top=100,left=100,menubar=no,status=no,resizable=yes,scrollbars=no";
  }
  //Mdp
  var w = window.open(url + params,"prompt",layout)
  if (w != null) {
    refInput = codName;
    try {
      w.focus()
    } catch (exception) {}
  }
  // Mdp ritorna sempre qualcosa
  //if (bReturn != null && bReturn == true) {
    return w;
  //}
}

/**
 * Chiamata al prompt della data
 *
 * @param  pathName    DOMString the path root of sech
 * @param  codName     nome colonna del prompt
 * @param  destName    nome colonna di destinazione
 *
 */
function callPromptDate(pathName, codName, destName) {
  var url  = pathName + "/common/promptDate.jsp"+ "?COL_COD=" + codName;
  if (destName != null && destName.length > 0) {
    url = url + "&COL_DEST=" + destName;
  }
  var layHeight = "260";
  var item = document.getElementById(codName);
  if (item != null) {
    if (item.getAttribute("dbtype") == "time" || item.getAttribute("dbtype") == "timestamp") {
      layHeight = "295";
    }
  }
  var layout = "height=" + layHeight + ",width=254,top=100,left=100,menubar=no,status=no,resizable=no,scrollbars=no";
  var w = window.open(url,"promptDate",layout)
  if (w != null) {
    try {
      w.focus()
    } catch (exception) {}
  }

}

function setInputValue(colCodName, colCodValue, bNoChange, force) {
  var selItem = document.getElementById(colCodName);
  if (selItem == null) {
    return;
  }
  if ((selItem.disabled != true && selItem.readOnly != true) || force != null) {
    if (selItem.tagName == "INPUT" || selItem.tagName == "TEXTAREA") {
      if (!bNoChange) {
        focusField(selItem);      
      }
      selItem.value  = colCodValue;
      if (!bNoChange) {
        blurField(selItem);
      }
      if (window.trapSetColValue != null) {
        window.trapSetColValue(selItem);
      }
    }
  }
}

/**
 * Set value to unput item 
 *
 * @param  colCodName   DOMString the name of input cod value
 * @param  colCodValue  DOMString the value of input cod value
 * @param  colDesName   DOMString the name of input desc value
 * @param  colDesValue  DOMString the value of input desc value
 * @param  force        boolean   to force to write   
 *
 */
function setColsValue(colCodName, colCodValue, colDesName, colDesValue, force){
  var selItem = document.getElementById(colCodName);
  if (selItem == null) {
    return;
  }
  if ((selItem.disabled != true && selItem.readOnly != true) || force != null) {
    if (selItem.tagName == "SELECT") {
      for (var i=0; i < selItem.length; i++) {
        if (selItem.options[i].value == colCodValue) {
          alert("ATTENZIONE: elemento già presente!");
          return;
        }
      }
	  // Mdp 310505 aggiunto controllo se manca la descrizione 
	  if (colDesValue == null) { 
			var newOption = new Option(colCodValue , colCodValue, false, false);
	  } else {
	      	var newOption = new Option(colCodValue + " - " + colDesValue, colCodValue, false, false);
      }
	  focusField(selItem);
      selItem.options[selItem.length] = newOption;
      blurField(selItem);
    } else if (selItem.tagName == "INPUT" || selItem.tagName == "TEXTAREA") {
      focusField(selItem);      
      selItem.value  = colCodValue;
      blurField(selItem);
      if (colDesName != null) {
        var selDes = document.getElementById(colDesName);
        if (selDes != null) {
          selDes.value = colDesValue;
        }
      }
      if (window.trapSetColValue != null) {
        window.trapSetColValue(selItem);
      }
    }
  }
}

/**
 * Link to row detail. Emulate row selection 
 * and explore action 
 *
 * @param  realEvent   event the event object
 *
 */
function rowLink(realEvent) {
  selRow(realEvent);
  actionForm('EXP','FORM_TABLE', null, null)
}

/**
 * Disabled button  
 *
 * @param  buttonID   DOMString the button id
 *
 */
function disableButton(buttonID) {
  var button = getTag(buttonID);
  if (button != null) {
    button.disabled = true;
    addClass(button, "disabled");
  }
}

/**
 * Enable button  
 *
 * @param  buttonID   DOMString the button id
 *
 */
function enableButton(buttonID) {
  var button = document.getElementById(buttonID);
  if (button != null) {
    button.disabled = false;
    removeClass(button, "disabled");
  }
}

/**
 * Disabled all buttons  
 *
 */
function disableAllButtons(bAll) {
   var elements = document.getElementsByTagName("BUTTON");
   if (elements != null) {
     for (var index = 0; index < elements.length; index++) {
        if (elements[index].id != null && elements[index].id != "" ) {
          var tagId = elements[index].id;
          if (bAll != null) {
            if (tagId.indexOf("BUTTON") > -1) {
              disableButton(elements[index].id);
            }
          } else {
            if (tagId.indexOf("_A") > -1 || tagId.indexOf("_D") > -1 || tagId.indexOf("_U") > -1) {
              disableButton(elements[index].id);
            }
          }
        }
     }
   }
}

/**
 * Disabled input tag  
 *
 * @param  inputId   DOMString the input id
 *
 */
function disableInput(inputId) {
  var item = document.getElementById(inputId);
  if (item != null) {
    if (item.tagName == "SELECT") {
      item.disabled = true;
    } else {
      item.readOnly = true;
      item.oldTabIndex = item.tabIndex;
	  item.tabIndex = -1;
    }
    addClass(item, "readonly");
  }
}

function enableInput(inputId) {
  var item = document.getElementById(inputId);
  if (item != null) {
    if (item.tagName == "SELECT") {
      item.disabled = false;
    } else {
      item.readOnly = false;
      if (item.oldTabIndex != null) {
	    item.tabIndex = item.oldTabIndex;
	  } else {
	    item.tabIndex = 0;
      }
	}
    removeClass(item, "readonly");
  }
}

/**
 * Set message text to html tag 
 *
 * @param  tagID   DOMString the tag id
 * @param  sText   DOMString the text ti show
 *
 */
function setMessage(tagID, sText, sColor) {
  if (tagID == null || tagID.length == 0) {
    tagID = "MSG_ACTION";
  }
  var tag = document.getElementById(tagID);
  if (window.bJsReadOnly != null && window.bJsReadOnly == true) {
    sText = "Sola lettura";
  }
  if (tag != null && sText != null && sText != "") {
    tag.innerText = sText;
    if (sColor == null || sColor == "") {
      tag.className = "msgClass0";
    } else {
      tag.className = "msgClass" + sColor;
    }
  }
}

function appendMessage(tagID, sText, sColor) {
  if (tagID == null || tagID.length == 0) {
    tagID = "MSG_ACTION";
  }
  var tag = document.getElementById(tagID);
  if (tag != null) {
    var sTextLoc = tag.innerText + "&nbsp;<font class='msgPrivs'>(" + sText + ")</font>";
    tag.innerHTML = sTextLoc;
  }
}

/**
 * Set sValue value to input item
 *
 * @param  form_id        DOMString the form id
 * @param  element_name   DOMString the input name
 * @param  sValue         DOMString the value to set
 *
 */
function setFormValue(form_id, element_name, sValue) {
  var form = document.getElementById(form_id);
  if (form != null) {
    var item = form.elements[element_name];
    if (item != null) {
      item.value = sValue;
    }
  }
}


/**
 * Restituisce il valore dell'elemento element_name
 * della form form_id
 *
 * @param  form_id        DOMString the form id
 * @param  element_name   DOMString the input name
 * @return   DOMString    the value of form element
 *
 */
function getFormValue(form_id, element_name) {
  var form = document.getElementById(form_id);
  if (form != null) {
    var item = form.elements[element_name];
    if (item != null) {
      return item.value;
    }
  }
  return null;
}

/**
 * Return input title 
 *
 * @param   fieldName   DOMString the tag id
 * @return             DOMString  the input title
 *
 */
function getFieldTitle(fieldName) {
  if (fieldName == null || fieldName == "") {
    return "";
  }
  var item = document.getElementById(fieldName);
  if (item != null) {
    if (item.getAttribute("title") != null) {
      return item.getAttribute("title");
    }
  }
  return fieldName;
}

/**
 * Return index of column idCol
 *
 * @param   tableId    DOMString the id table
 * @param   idCol      DOMString the column id
 * @param   IDSRowName DOMString the row id
 * @return            DOMString  the column index
 *
 */
 function getColIndex(tableId, idCol, IDSRowName){
   var table = document.getElementById(tableId);
   if (table == null) { return; }
   if (IDSRowName != null) {
   	var rowIds = document.getElementById(IDSRowName);
   } else {
   	var rowIds = document.getElementById("IDS_ROW");
   }
//   var rowIds = document.getElementById("IDS_ROW");
   if (rowIds == null) { return; }
   for (var i = 0; i < rowIds.cells.length; i++) {
	 var elementId = getInnerText(rowIds.cells(i));
     if (elementId == idCol) {
          return i;
     }
   }
   return null;
 }
 
/**
 * Gestisce l'evento onFocus del campo
 * Si memorizza il valore del campo
 *
 * @param   item   HTMLElement 
 *
 */
 function focusField(item) {
   if (item == null) {
     return;
   }
   if (item.tagName != "INPUT" && item.tagName != "TEXTAREA" && item.tagName != "SELECT") {
     return;
   }
   if (item.readOnly || item.disabled) {
      return;
   }
   var form = item.form;
   if (form == null) {
     return;
   }
   if (!isFormInUpdate(form)) {
     item.setAttribute("INIT_VALUE",item.value);
     return;
   }
   var value = null;
   if (item.tagName == "INPUT" || item.tagName == "TEXTAREA") {
     item.setAttribute("INIT_VALUE",item.value);
   } else {
     if (item.size == 1 || item.size == 0) {
       item.setAttribute("INIT_VALUE",item.value);
     } else {
       var sValues = "";
       for (var i = 0; i< item.options.length; i++) {
         sValues = sValues + item.options[i].value;
       }
       item.setAttribute("INIT_VALUE",sValues);
     }
   }
 }
 
/**
 * onChange hevent hendler. Per la gestione dell'evento change
 * dei campi di input 
 *
 * @param   item   HTMLElement the element
 *
 */
 function changeField(item) {
   if (item == null) {
     return;
   }
   if (item.readOnly || item.disabled) {
      return;
   }
   var form = item.form;
   if (form == null) {
     return;
   }
   if (!isFormInUpdate(form)) {
     return;
   }
   var value = getTagValue(item);
   if (value != null) {
     var initValue = item.getAttribute("INIT_VALUE");
     if (initValue != null && value != initValue) {
       setFormModified(form);
     }
   }
   if (window.trapChangeField != null) {
     window.trapChangeField(item);
   }
 }
 
/**
 * Return the item value 
 *
 * @param   item   HTMLElement the element
 * @return         DOMString   the item tag value
 *
 */
 function getTagValue(item) {
   if (item == null) {
     return;
   }
   if (item.tagName == "INPUT") {
     return item.value;
   } else if (item.tagName == "TEXTAREA") {
     return item.value;
   } else if (item.tagName == "TD") {
     return item.innerText;
   } else if (item.tagName == "SELECT") {
     if (item.size == 1 || item.size == 0) {
       return item.value;
     } else {
       var sValues = "";
       for (var i = 0; i< item.options.length; i++) {
         sValues = sValues + item.options[i].value;
       }
       return sValues;
     }
   }
   return null;
 }
 
  function setTagValue(item, sValue) {
   if (item == null) {
     return;
   }
   if (item.tagName == "INPUT") {
     item.value = sValue;
   } else if (item.tagName == "TEXTAREA") {
     item.value = sValue;
   } else if (item.tagName == "TD") {
     item.innerText = sValue;
   } else if (item.tagName == "SELECT") {
     if (item.size == 1 || item.size == 0) {
       item.value = sValue;
     } else {
       var sValues = "";
       for (var i = 0; i< item.options.length; i++) {
         item.options[i].value = sValue;
       }
       return sValues;
     }
   }
   return null;
 }
 
/**
 * onBlur hevent hendler. Per la gestione dell'evento blur
 * dei campi di input 
 *
 * @param   item    HTMLElement the element
 * @param   param   DOMString   the param to trapBlur
 *
 */
 function blurField(item, param) {
   if (item == null) {
     return;
   }
   if (item.tagName != "INPUT" && item.tagName != "TEXTAREA" && item.tagName != "SELECT") {
     return;
   }
   if (item.readOnly || item.disabled) {
      return;
   }
   var form = item.form;
   if (form == null) {
     return;
   }
   if (isFormInUpdate(form)) {
     var value = null;
     if (item.tagName == "INPUT" || item.tagName == "TEXTAREA") {
       value = item.value;
     } else {
       if (item.size == 1 || item.size == 0) {
         value = item.value;
       } else {
         var sValues = "";
         for (var i = 0; i< item.options.length; i++) {
           sValues = sValues + item.options[i].value;
         }
         value = sValues;
       }
     }
     if (value != null) {
       var initValue = item.getAttribute("INIT_VALUE");
       if (initValue != null && value != initValue) {
         setFormModified(form);
       }
     }
   }
   // FG20040812 format data
   if (item.tagName == "INPUT") {
     formatData(item);
   }
   if (window.trapBlurField != null) {
     window.trapBlurField(item, param);
   }
 }
 
/**
 * Formatta la data inserita dall'utente 
 * in forma breve
 *
 * @param   item    HTMLElement the element
 *
 */
 function formatData(item) {
   if (item == null) {
     return;
   }
   if (item.tagName != "INPUT") {
     return;
   }
   if (item.value == "") {
     return;
   }
   var dbtype = item.getAttribute("dbtype");
   if (dbtype == null || dbtype.length == 0) {
     return;
   }
   if (dbtype == "timestamp" || dbtype == "date") {
     if (item.value.length != 6 && item.value.length != 4 && item.value.length != 8 && item.value.length != 5) {
	   return;
	 }
	 var oldValue = item.value;
	 var newValue = "";
	 var today = new Date()

	 if (item.value.length == 4) {
	   newValue =  oldValue.substr(0,2) + "/" + oldValue.substr(2,2) + "/" + today.getFullYear();
     } else if (item.value.length == 6) {
	   newValue =  oldValue.substr(0,2) + "/" + oldValue.substr(2,2) + "/20" + oldValue.substr(4,2);
	 } else if (item.value.length == 5 && oldValue.substr(2,1) == "/" ) {
	   newValue =  oldValue.substr(0,5) + "/" + today.getFullYear();
	 } else {
	   if (oldValue.indexOf("/") > -1) {
	     newValue =  oldValue.substr(0,2) + "/" + oldValue.substr(3,2) + "/20" + oldValue.substr(6,2);
	   } else {
	     newValue =  oldValue.substr(0,2) + "/" + oldValue.substr(2,2) + "/" + oldValue.substr(4,4);
	   }
	 }
	 if (dbtype == "timestamp") {
	   newValue = newValue + " 00:00:00";
	 }
	 item.value = newValue;
   }
 }
 
/**
 * Return the update state of form  
 *
 * @param   form   HTMLElement the element form
 * @return         boolean     true if form is in update state
 *
 */
 function isFormInUpdate(form) {
   if (form == null) {
     return false;
   }
   if (form.elements["ACTION"] == null) {
     return false;
   }
   if (form.elements["ACTION"].value != "UPD") {
     return false;
   }
   if (bJsReadOnly == true) {
     return false;
   }
   return true;
 }
 
/**
 * Return the update state of form  
 *
 * @param   form   HTMLElement the element form
 * @return         boolean     true if form is in update state
 *
 */
 function isFormInInsert(form) {
   if (form == null) {
     return false;
   }
   if (form.elements["ACTION"] == null) {
     return false;
   }
   if (form.elements["ACTION"].value != "ADD") {
     return false;
   }
   if (bJsReadOnly == true) {
     return false;
   }
   return true;
 }
 
/**
 * Return the update modified state of form  
 *
 * @param   form   HTMLElement the element form
 * @return         boolean     true if form is modified
 *
 */
 function isFormModified(formId) {
   var form = document.getElementById(formId);
   if (form == null) {
     return;
   }
   var sMod = form.getAttribute("MODIFIED");
   if (sMod != null && sMod == "true") {
     return true;
   }
   return false;
 }
 
/**
 * Set modified state to form: Setta la pèroprietà MODIFIED
 * della form a "true". Visualizza il messaggio "record modificato"
 * nella barra deo messaggi 
 *
 * @param   form   HTMLElement the element form
 *
 */
 function setFormModified(form) {
   if (form == null) {
     return;
   }
   form.setAttribute("MODIFIED","true");
   setMessage(null,sRecMod,1);
 }
 
/**
 * Resetta lo stato della form a non modificato 
 *
 * @param   form_id   HTMLElement the id of form
 *
 */
 function resetFormModified(form_id) {
  var form = document.getElementById(form_id);
  if (form == null) {
    return true;
  }
   form.removeAttribute("MODIFIED");
 }
 
 function resetAllForms() {
   var doc = window.document;
   removeCorsorWait();   
   if (window.bNoRefresh != null && window.bNoRefresh == true) {
     return;
   }
   for (var i = 0; i < doc.forms.length; i++ ) {
     if (doc.forms[i].id != null && doc.forms[i].id.length > 0) {
       resetSelectTag(doc.forms[i].id);
     }
   }
 }
 
 function disableAllForms() {
   var doc = window.document;
   for (var i = 0; i < doc.forms.length; i++ ) {
     if (doc.forms[i].name != null && doc.forms[i].name.length > 0) {
       setBlockMode(doc.forms[i].name);
     }
   }
 }
 
 function setFieldMandatory(item, mode) {
   if (item == null) {
     return;
   } 
   if (item.tagName == "INPUT" ||
      item.tagName == "TEXTAREA" ||
      item.tagName == "SELECT") {
      if (mode == "ADD" || mode == "UPD") {
        if (!item.readOnly && !item.disabled && item.getAttribute("dbMandatory") != null) {
          addClass(item, "required");
        } else {
          removeClass(item, "required");
        }
      } else {
        removeClass(item, "required");
      }
   }
 }

 //************************************
 // chiama la funzione aggiornaDati
 // dell'opener se presente
  //***********************************
  function aggiornaOpener() {
   if (window.opener != null && window.opener != window.self) {
     winOpen = window.opener;
     if (winOpen.aggiornaDati != null) {
       try {
         winOpen.aggiornaDati();
       } catch(e) {}
     }
   }
  }

  function checkModify() {
    if (isFormModified("FORM_ACTION")) {
       if (!confirm("Record modificato. Uscire ugualmente?")) {
         return true;
       } else {
         window.event.cancelBubble = true;
         window.event.returnValue = false;
         return false;
       }
    }
  }
  
  function areFormsModified() {
   var doc = window.document;
   for (var i = 0; i < doc.forms.length; i++ ) {
     if (doc.forms[i].id != null && doc.forms[i].id.length > 0) {
       if (isFormModified(doc.forms[i].id)) {
         return true;
       }
     }
   }
   return false;
  }
  
  function checkPrivilegi(tpPrivs) {
    if (tpPrivs == null || tpPrivs == "") {
      return;
    }
    // controllo ReadOnly
    if (tpPrivs.indexOf("R") > -1) {
       bJsReadOnly = true;
       var elements = document.getElementsByTagName("BUTTON");
       if (elements != null) {
         for (var index = 0; index < elements.length; index++) {
            if (elements[index].id != null && elements[index].id != "" ) {
              var tagId = elements[index].id;
              if (tagId.indexOf("_A") > -1 || tagId.indexOf("_D") > -1 || tagId.indexOf("_U") > -1) {
                  disableButton(elements[index].id);
				  //alert(" elements[index].id " + elements[index].id );
              }
            }
         }
       }
       var doc = window.document;
       for (var i = 0; i < doc.forms.length; i++ ) {
         if (doc.forms[i].id != null && doc.forms[i].id.length > 0) {
           setFormMode(doc.forms[i].id, "LOC");
         }
       }
       appendMessage(null,"Sola Lettura");
    }
  }
  
 /**
 * Restituisce il primo chield dell'elemento HTML element
 *
 * @param   element   HTMLElement  l'ID del tag html
 * @param   index     integer      indice del chield
 * @param   tag       DOOMString   il tipo di tag
 *
 */
  function getChildTag(element, index, tag) {
      var count = 0;
      for (var i = 0; i < element.childNodes.length; i++) {
          var node = element.childNodes[i];
          if ((tag == null && node.tagName != null) || (tag != null && node.tagName == tag)) {
              if (++count == index) {
                  return node;
              }
          }
      }
      return null;
  }
  
 /**
 * Restituisce il tag HTML con l'ID specificato
 *
 * @param   tagId   DOOMString  l'ID del tag html
 *
 */
  function getTag(tagId) {
    if (window.document.body.getAttribute(tagId) != null) {
	  var itemTag = window.document.body.getAttribute(tagId);
	  return itemTag;
	} 
	var itemTag = document.getElementById(tagId);
	window.document.body.setAttribute(tagId,itemTag);
	return itemTag;
  }
  
 /**
 * Restituisce il tag HTML con l'ID specificato
 *
 * @param   tagId   DOOMString  l'ID del tag html
 * @return          HTMLElement il tag ricercato
 *
 */
  function getTagForm(formId, tagName) {
    var form = getTag(formId);
    if (form != null) {
      return form.elements[tagName];
    }
    return null;
  }
  
 /**
 * Restituisce il frame specificato come parametro
 *
 * @param   tagId   DOOMString  l'ID del frames
 * @return          HTMLElement il frame ricercato
 *
 */
  function getParentFrames(frameId) {
    if (window.parent != null && window.parent != window) {
      if (window.parent.frames[frameId] != null) {
        return window.parent.frames[frameId];
      } else if (window.parent.parent != null && window.parent.parent.frames[frameId] != null) {
        return window.parent.parent.frames[frameId];
      } else if (window.parent.parent.parent != null && window.parent.parent.parent.frames[frameId] != null) {
        return window.parent.parent.parent.frames[frameId];
      }
    }
    return null;
  }
  
 /**
 * Restituisce il frame main
 *
 * @return            DOOMString  le righe selezionate
 */
 function getMainFrame() {
   return getParentFrames("main");
 }
 
 /**
 * Restituisce le righe selezionate della tabella tableId
 *
 * @param   tableId   DOOMString  l'ID della tabella
 * @return            DOOMString  le righe selezionate
 *
 */
 function getSelectedRows(tableId) {
   var table = getTag(tableId);
   if (table == null) {
     return "";
   }
   if (table.rows == null || table.rows.length < 2) {
     return "";
   }
   var selectedRows = "";
   for (var i=0; i < table.rows.length; i++) {
     if (table.rows[i].id  != null && table.rows[i].className.indexOf("selected") >= 0) {
       if (table.rows[i].id.indexOf("ROW_") > -1) {
	     selectedRows = selectedRows + (selectedRows != "" ? "," : "") + table.rows[i].id;
       }
	 }
   }
   return selectedRows;
 }
 
 /**
 * Restituisce le righe selezionate della tabella tableId
 *
 * @param   tableId   DOOMString  l'ID della tabella
 * @return            DOOMString  le righe selezionate
 *
 */
 function getModifiedRows(tableId) {
   var table = getTag(tableId);
   if (table == null) {
     return null;
   }
   if (table.rows == null || table.rows.length < 2) {
     return null;
   }
   var selectedRows = "";
   for (var i=0; i < table.rows.length; i++) {
     if (table.rows[i].id  != null && table.rows[i].className.indexOf("modified") >= 0) {
       selectedRows = selectedRows + (selectedRows != "" ? "," : "") + table.rows[i].id;
     }
   }
   if (selectedRows == "") {
     return null;
   }
   return selectedRows;
 }
 
 /**
 * Restituisce il numero delle righe selezionate della tabella tableId
 *
 * @param   tableId   DOOMString  l'ID della tabella
 * @return            DOOMString  il numero di righe selezionate
 *
 */
  function getSelectedRowsNum(tableId) {
   var table = getTag(tableId);
   if (table == null) {
     return "";
   }
   if (table.rows == null || table.rows.length < 2) {
     return "";
   }
   var selectedRows = 0;
   for (var i=0; i < table.rows.length; i++) {
     if (table.rows[i].id  != null && table.rows[i].className.indexOf("selected") >= 0) {
       selectedRows = selectedRows + 1;
     }
   }
   return selectedRows;
 }
 
 /**
 * Restituisce true se la pagina è readOnly
 *
 * @return      boolean  lo stato readOnly della pagina
 *
 */
 function isPageReadOnly() {
  if (window.bJsReadOnly != null && window.bJsReadOnly == true) {
    return true;
  }
  return false;
 }
 
 function setCorsorWait(){
	document.body.style.cursor='wait';
	for (i=0;i<document.forms.length;i++){
	    document.forms[i].style.cursor='wait';
		for (j=0;j<document.forms[i].elements.length && j < 100;j++){
			document.forms[i].elements[j].style.cursor='wait';
		}
	}
 }

 function removeCorsorWait(){
	document.body.style.cursor='default';
	for (i=0;i<document.forms.length;i++){
		document.forms[i].style.cursor='default';
		for (j=0;j<document.forms[i].elements.length && j < 100;j++){
			document.forms[i].elements[j].style.cursor='default';
		}
	}
 }
 
 function callFunction() {
  realEvent = window.event;
  if (realEvent == null) { return; }
  if (realEvent.keyCode != null) {
    var buttonId = null;
	if (realEvent.keyCode == 113) {
	  buttonId = "BUTTON_Q";
	} else if (realEvent.keyCode == 118) {
	  buttonId = "BUTTON_U";
	} 
	var button = null;
	if (buttonId != null) {
	  if (window.find_U != null) {
	  	  buttonId = find_U();
	  }
	  button = getTag(buttonId);
	  if (button != null && !button.disabled) {
	    try { 
		  button.click();
		} catch(e) {}
	  }
	  realEvent.cancelBubble=true;
	  realEvent.returnValue=false;
	}
  }
}

// Andrea 270105...
// Funzione x trimmare stringhe...
function trim(s) {
  while (s.substring(0,1) == ' ') {
    s = s.substring(1,s.length);
  }
  while (s.substring(s.length-1,s.length) == ' ') {
    s = s.substring(0,s.length-1);
  }
  return s;
}

function openScheda(pathRoot) {
  var layout = "height=150,width=250,top=100,left=100,menubar=no,status=no,resizable=no,scrollbars=no";
  var url = pathRoot + "/common/empty.jsp";
  var w = window.open(url,"scheda",layout)
}

window.document.onkeydown = callFunction;