/*****************************************************************************/
/** Trim */

function common_trim ( sStr )  { return sStr.replace ( /^\s+|\s+$/g, "" ); }
function common_ltrim ( sStr ) { return sStr.replace ( /^\s+/, "" ); }
function common_rtrim ( sStr ) { return sStr.replace ( /\s+$/, "" ); }


/*****************************************************************************/
/** Gestione Cambio classi */

function csc ( oThis, sClaNew ) {
  oThis.className = sClaNew;
}


/*****************************************************************************/
/** Utilita' */

function common_print ( oWin ) {
  if ( oWin == null ) { oWin = window; }
  oWin.print();
  alert ( oWin );
  return false;
}

function common_js_get ( sId, oDoc ) { return common_gebi ( sId, oDoc ); }

function common_gebi ( sId, oDoc ) {
  if ( oDoc == null ) { oDoc = document; }
  return oDoc.getElementById ( sId );
}

function common_cb ( sId, oDoc, sCall ) {
  var oObj = common_gebi ( sId, oDoc );
  if ( oObj == null ) { return false; }
  var sTmp = ( "oObj." + sCall + ";" );
  return eval ( sTmp );
}

function common_fl ( sId, oDoc ) {
  var oObj = common_gebi ( sId, oDoc );
  if ( oObj == null ) { return false; }
  window.location = oObj.href;
}


/*****************************************************************************/
/** Gestione Add/Remove Zoom */

function common_add_remove_zoom_select_all ( sSelect ) {
  var oSelect = document.getElementById ( sSelect );
  if ( ! oSelect ) { return false; }
  var i = 0;
  for ( i = 0; i < oSelect.length; i++ ) {
    if ( oSelect.options[i].value != "" ) {
      oSelect.options[i].selected = true;
    }
  }
  return true;
}

function common_add_remove_zoom_add ( sUrl, sSelect, sPopUp ) {
  var sUrlCom = sUrl +"&hId="+ sSelect;
  var sFormat = "width=800,height=600,resizable=yes,scrollbars=yes,menubar=no,status=yes";
  window.open ( sUrlCom, sPopUp, sFormat );
}

function common_add_remove_zoom_remove ( sSelect ) {
  var oSelect = document.getElementById ( sSelect );
  if ( ! oSelect ) { return false; }
  var i = oSelect.selectedIndex;
  if ( i != -1 ) {
    var v = oSelect.options[i].text;
    if ( confirm ( "Eliminare l'elemento \""+ v +"\"?" ) ) {
      oSelect.options[i] = null;
    }
  }
  return true;
}

function common_add_remove_zoom_remove_add_options ( sSelect, iNumEle ) {
  if ( ! window.opener ) {
    alert ( "Finestra originale chiusa! Impossibile aggiungere." );
    window.close();
    return false;
  }
  var oOpeDoc = window.opener.document;
  var oCurDoc = window.document;
  var oSelect = oOpeDoc.getElementById ( sSelect );
  if ( oSelect ) {
    // Scorre gli elementi
    var j = 0;
    for ( j = 0; j < iNumEle; j++ ) {
      var oElem = oCurDoc.getElementById ( "ele_" + j );
      if ( oElem != null ) {
        if ( oElem.checked ) {
          var oText  = oCurDoc.getElementById ( "tex_" + j );
          var oValue = oCurDoc.getElementById ( "val_" + j );
          var sText  = oText.value;
          var sValue = oValue.value;
          var oOption = oOpeDoc.createElement ( 'option' );
          oOption.value = sValue;
          oOption.text  = sText;
          oSelect.options.add ( oOption, oSelect.length );
        }
      }
    }
  } else {
    alert ( "Impossibili aggiungere elementi!" );
  }
  window.close();
  return true;
}


/*****************************************************************************/
/** Gestione select */

function select_get_selected_option ( sSel, oDoc ) {
  if ( oDoc == null ) { oDoc = document; }
  var oSel = oDoc.getElementById ( sSel );
  if ( ! oSel ) { return null; }
  return oSel.options[oSel.selectedIndex];
}


/*****************************************************************************/
/** Gestione tabset */

function ts_setVisible ( sOldCalId, sNewCalId, sOldId, sNewTabId, sSelCalClass, sNSeCalClass ) {
  // ** Scambia tabset
  var oOldId = document.getElementById ( sOldId );
  var oNewTab = document.getElementById ( sNewTabId );
  if ( ( ! oOldId ) || ( ! oNewTab ) ) { return false; }
  var oOldTab = document.getElementById ( oOldId.value );
  if ( ! oOldTab ) { return false; }
  oOldTab.style.display = 'none';
  oNewTab.style.display = 'block';
  oOldId.value = sNewTabId;
  // ** Scambia caller
  if ( sOldCalId != "" && sNewCalId != "" ) {
    var oOldCalId = document.getElementById ( sOldCalId );
    var oNewCal   = document.getElementById ( sNewCalId );
    if ( ( ! oOldCalId ) || ( ! oNewCal ) ) { return true; }
    var oOldCal = document.getElementById ( oOldCalId.value );
    if ( ! oOldCal ) { return true; }
    oOldCal.className = ( sNSeCalClass != "" ? sNSeCalClass : "aTabNam_ns" );
    oNewCal.className = ( sSelCalClass != "" ? sSelCalClass : "aTabNam_se" );
    oOldCalId.value = sNewCalId;
  }
  return true;
}

function div_swapVisible ( sOldCalId, sNewCalId, sOldId, sNewDivId, sSelCalClass, sNSeCalClass ) {
  // ** Scambia divisioni
  var oOldId = document.getElementById ( sOldId );
  var oNewDiv = document.getElementById ( sNewDivId );
  if ( ( ! oOldId ) || ( ! oNewDiv ) ) { return false; }
  var oOldDiv = document.getElementById ( oOldId.value );
  if ( ! oOldDiv ) { return false; }
  oOldDiv.style.display = 'none';
  oNewDiv.style.display = 'block';
  oOldId.value = sNewDivId;
  // ** Scambia caller
  if ( sOldCalId != "" && sNewCalId != "" ) {
    var oOldCalId = document.getElementById ( sOldCalId );
    var oNewCal   = document.getElementById ( sNewCalId );
    if ( ( ! oOldCalId ) || ( ! oNewCal ) ) { return true; }
    var oOldCal = document.getElementById ( oOldCalId.value );
    if ( ! oOldCal ) { return true; }
    oOldCal.className = ( sNSeCalClass != "" ? sNSeCalClass : "bgImgNon" );
    oNewCal.className = ( sSelCalClass != "" ? sSelCalClass : "bgImgSel" );
    oOldCalId.value = sNewCalId;
  }
  return true;
}


/*****************************************************************************/
/** Gestione selezione elementi */

var hEleInd = 0;

function selEleReset() { hEleInd = 0; }

function selEleSelect ( bParent, sIdFldCod, sIdFldDes, sHidSel, sDiv_Id ) {
  // ** Ottiene riferimento al documento di callback
  var oRefWin = null;
  if ( bParent ) { if ( window.parent ) { oRefWin = window.parent; } }
            else { if ( window.opener ) { oRefWin = window.opener; } }
  if ( ! oRefWin ) {
    alert ( "Impossibile eseguire il call-back: documento di riferimento non trovato." );
    return false;
  }
  var oRefDoc = oRefWin.document;
  // ** Legge i campi di callback
  var oIdFldCod = document.getElementById ( sIdFldCod );
  var oIdFldDes = document.getElementById ( sIdFldDes );
  if ( ! ( oIdFldCod && oIdFldDes ) ) {
    alert ( "Impossibile eseguire il call-back: campo di riferimento non trovato." );
    return false;
  }
  sFldCod = oIdFldCod.value;
  sFldDes = oIdFldDes.value;
  var oFldCod = oRefDoc.getElementById ( sFldCod );
  var oFldDes = ( sFldDes != "" ? oRefDoc.getElementById ( sFldDes ) : null );
  if ( ! oFldCod ) {
    alert ( "Impossibile eseguire il call-back: campo di riferimento non trovato." );
    return false;
  }
  // ** Legge campi selezionati
  var oVal = document.getElementById ( "hVal_" + hEleInd );
  var oTex = document.getElementById ( "hTex_" + hEleInd );
  if ( ! ( oVal && oTex ) ) {
    alert ( "Impossibile eseguire il call-back: campo selezionato non trovato." );
    return false;
  }
  var sTex = oTex.value;
  var sVal = oVal.value;
  // ** Copia il valore
  oFldCod.value = sVal;
  // ** Copia (eventualmente) la descrizione
  if ( oFldDes ) { oFldDes.value = sTex; }
  // ** Gestione hide-on-select
  var oHidSel = document.getElementById ( sHidSel );
  var oDiv_Id = document.getElementById ( sDiv_Id );
  if ( oHidSel && oDiv_Id ) {
    var soHidSel = oHidSel.value;
    var soDiv_Id = oDiv_Id.value;
    if ( soHidSel == "1" ) { objHide ( soDiv_Id, oRefDoc ); }
  }
  // ** Return
  return true;
}

function selEleSetFld ( sIFName, sFldCod, sFldDes ) {
  var oIFrame = window.frames[sIFName];
  if ( ! oIFrame ) {
    alert ( "Pagina di selezione non trovata." );
    return false;
  }
  var oDocume = oIFrame.document;
  var oFldCod = oDocume.getElementById ( "hFldCod" );
  var oFldDes = oDocume.getElementById ( "hFldDes" );
  if ( ! ( oFldCod && oFldDes ) ) {
    alert ( "Campo di selezione non trovato." );
    return false;
  }
  oFldCod.value = sFldCod;
  oFldDes.value = sFldDes;
  return true;
}

function selEle_selClk ( sSelEle, sSelBut ) {
  var oSelEle = document.getElementById ( sSelEle );
  var oSelBut = document.getElementById ( sSelBut );
  if ( oSelEle && oSelBut ) {
    oSelEle.click();
    oSelBut.click();
    return true;
  }
  return false;
}


/*****************************************************************************/
/** Gestione show/hide */

function objHide ( sId, oDoc ) {
  if ( oDoc == null ) { oDoc = document; }
  var oId = oDoc.getElementById ( sId );
  if ( ! oId ) { return false; }
  oId.style.display = "none";
  return true;
}

function objShow ( sId, oDoc ) {
  if ( oDoc == null ) { oDoc = document; }
  var oId = oDoc.getElementById ( sId );
  if ( ! oId ) { return false; }
  oId.style.display = "block";
  return true;
}


/******************************************************************************/
/** Funzioni di supporto AJAX */

// ** Create a XMLHTTPRequest
function common_ajax_newXMLHttpRequest () {
  var xmlreq = false;
  if ( window.XMLHttpRequest ) {
    xmlreq = new XMLHttpRequest();
  } else if ( window.ActiveXObject ) {
    // Try ActiveX
    try {
      xmlreq = new ActiveXObject ( "Msxml2.XMLHTTP" );
    } catch ( e1 ) {
      // first method failed
      try {
        xmlreq = new ActiveXObject ( "Microsoft.XMLHTTP" );
      } catch ( e2 ) {
        // both methods failed
      }
    }
  }
  return xmlreq;
}

// ** Register a listner callback function
function common_ajax_getReadyStateHandler ( req, responseXmlHandler ) {
  return function () {
  if ( req.readyState == 4 ) {
    if ( req.status == 200 ) {
      responseXmlHandler ( req.responseXML );
    } else {
      // @@## error handling
    }
  }
  }
}


/******************************************************************************/
/** Funzioni di decodifica AJAX */

/*
// Casi validi ...
function common_ajax_decode_arti ( sIdCodi, sIdDeco ) {
  return common_ajax_decode ( '/servizi/decode.php', '...', sIdCodi, sIdDeco );
}
*/

function common_ajax_decode ( sDecURL, sTipDec, sIdCodi, sIdDeco ) {
  try {
    // get the value from the text input element and send it to server
    var oCodice = document.getElementById ( sIdCodi );
    var sCodice = oCodice.value;
    if ( common_trim ( sCodice ) == "" ) {
      var oDecodi = document.getElementById ( sIdDeco );
      if ( ! oDecodi ) { return false; }
      oDecodi.value = "";
      return true;
    }
    // get a nuew request object
    var req = common_ajax_newXMLHttpRequest();
    // register the callback handler function
    var callbackHandler = common_ajax_getReadyStateHandler ( req, common_ajax_decode_update );
    req.onreadystatechange = callbackHandler;
    // prepare parameters
    req.open ( "POST", sDecURL, true );
    req.setRequestHeader ( "Content-Type", "application/x-www-form-urlencoded" );
    // send the request
    req.send ( "hTipDec="+ sTipDec +"&hCodice="+ sCodice +"&hFldDec="+ sIdDeco );
    return true;
  } catch ( e1 ) {
    return false;
  }
}

// This is the callback functions that gets called for the response from the server with the XML data
function common_ajax_decode_update ( testXML ) {
  // ** Verifica risultato
  try {
    var aResults = testXML.getElementsByTagName ( "result" );
    var nResult = aResults[0];
  } catch ( e1 ) {
    return false;
  }
  // ** Verifica campo di decode
  var oFldDec = null;
  try {
    var nFldDec = testXML.getElementsByTagName ( "flddec" )[0];
    var sFldDec = nFldDec.getAttribute ( "value" );
    var oFldDec = document.getElementById ( sFldDec );
    if ( ! oFldDec ) { return false; }
  } catch ( e1 ) {
    return false;
  }
  // ** Elabora risultato
  var sValue = oFldDec.value;
  try {
    var nEsito  = testXML.getElementsByTagName ( "esito" )[0];
    var nDecodi = testXML.getElementsByTagName ( "decodi" )[0];
    var sEsito  = nEsito.getAttribute ( "value" );
    var sDecodi = nDecodi.getAttribute ( "value" );
    sValue = ( sEsito == "1" ? sDecodi : "???" );
  } catch ( e1 ) {
    sValue = "ERROR: Dirty response!";
  }
  oFldDec.value = sValue;
  // ** Return
  return true;
}


/******************************************************************************/
/** Funzioni per manutezioni */

// ** Apre dettaglio

function common_manute_opedet ( sUrl, sOp, sId, bPopUp, bConfirm, sConfirm ) {
  // ** Correzione parametri
  if ( bConfirm == null ) { bConfirm = false; }
  if ( sConfirm == null ) { sConfirm = ""; }
  if ( bPopUp   == null ) { bPopUp = true; }
  // ** Eventuale conferma
  if ( bConfirm && sConfirm != "" ) {
    if ( ! confirm ( sConfirm ) ) { return false; }
  }
  // ** Azione
  var sUrlCom = sUrl +"?hOp="+ sOp +"&hID="+ sId;
  if ( bPopUp ) {
    // *** PopUp
    var sUrlCle = sUrl.replace ( /\./g, "" );
    var sUrlCle = sUrlCle.replace ( /\//g, "" );
    var sFormat = "width=950,height=650,resizable=yes,scrollbars=yes,menubar=no,status=yes";
    window.open ( sUrlCom, sUrlCle, sFormat );
  } else {
    // *** Redirect
    window.location = sUrlCom;
  }
  return true;
}

// ** Aggiorna l'elenco
function common_refresh_opener() {
  var bRes = false;
  if ( typeof ( ref_sFormId )        == undefined ||
       typeof ( ref_bRefreshNeeded ) == undefined ||
       typeof ( ref_bRefreshed )     == undefined ) {
    return bRes;
  }
  if ( ref_bRefreshNeeded && ! ref_bRefreshed && window.opener ) {
    var oDoc = window.opener.document;
    var oFrm = oDoc.getElementById ( ref_sFormId );
    if ( oFrm ) {
      oFrm.submit();
      bRes = true;
    }
    ref_bRefreshed = true;
  }
  return bRes;
}


/******************************************************************************/
/** Funzioni per interfaccia */

function common_style_readonly ( sBGColor ) {
  var aObjs = document.getElementsByTagName("body")[0].getElementsByTagName("*");
  var iNumObj = aObjs.length;
  for ( var i = 0; i < iNumObj; i++ ) {
    var oObj = aObjs[i];
    if ( oObj.type ) {
      var sType = oObj.type;
      if ( sType == "text" || sType == "radio" || sType == "checkbox" || sType == "textarea" ) {
        if ( oObj.readOnly ) {
          oObj.style.backgroundColor = sBGColor;
        }
      }
    }
  }
}

function common_onload() {
  common_style_readonly ( '#CCCCCC' );
}
