/*				INTESTAZIONE del file
  File: ClassContainer.js
  Versione: 1.2.01
  Data Creazione: 17/01/2007
  Data Ultimo Aggiornamento: 20/05/2007 
  Utenete Creatore: Roberto Mascheroni
  Utente Ultimo Aggiornamento: Roberto Mascheroni
  Ultimo Aggiornamento: Aggiunte 2 funzioni nella classe RFunctions, _disabledObj e _displayObj.
*/





/*				CLASSE: RFunctions
<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>
  CLASSE: RFunctions
  Classe per contenere funzioni di tipo generale
*/

function RFunctions(){}

/*Function: _inc
//*********************************************************************************************
//Purpose: Include un file javascript all'interno di un file HTML
//Inputs:  filename - il nome del file da includere
//Outputs: //
//Type: Statico
//*********************************************************************************************
*/
RFunctions._inc=function(filename){
	var body = document.getElementsByTagName('body').item(0);
	script = document.createElement('script');
	script.src = filename;
	script.type = 'text/javascript';
	body.appendChild(script);
}

/*Function: _getObj
//*********************************************************************************************
//Purpose: Restituisce un oggetto (VALE PER QUALSIASI TIPO DI BROWSER)
//Inputs:  vObject - il nome dell'oggetto da cercare
//Outputs: l'oggetto trovato 
//Type: Statico
//*********************************************************************************************
*/
RFunctions._getObj=function(vObject) {
  var bIsW3C = (document.getElementById && !bIsIE4) ? true : false;       // N6
  var bIsIE4 = (document.all) ? true : false;     // IE 4+
  var bIsDHTML = (bIsIE4 || bIsW3C || bIsNN4) ? true : false;

  if (typeof vObject == 'string') {
      //Per internet explorer
      if (bIsIE4){
          if (vObject.length > 0) return eval("document.all." + vObject);
      }
      //
      else if (bIsW3C){
          return document.getElementById(vObject);
      }
      //Per Firefox
      else{
          if (document.layers[vObject])
              return document.layers[vObject];
          else
              return eval("document." + vObject);
      }
	  
  }
  else {
      return vObject;
  }
}

/*Function: _moveObjTo
//*********************************************************************************************
//Purpose:  Sposta l'oggetto dalla posizione corrente
//Inputs:   vObject - nome dell'oggetto, 
//          x - coordinata di arrivo, 
//          y - Coordinata di arrivo.
//Outputs:  //
//*********************************************************************************************
*/
RFunctions._moveObjTo=function(vObject, iX, iY) {
  var bIsW3C = (document.getElementById && !bIsIE4) ? true : false;       // N6
  var bIsIE4 = (document.all) ? true : false;     // IE 4+
  var bIsDHTML = (bIsIE4 || bIsW3C || bIsNN4) ? true : false;

  if (bIsDHTML) {
      var obj = this._getObj(vObject);
      if (obj != null) {
          var x = parseInt(iX);
          var y = parseInt(iY);
          if (!isNaN(x) && !isNaN(y)) {
              if (bIsIE4 || bIsW3C) {
                  obj.style.left = x + "px";
                  obj.style.top = y + "px";
              } else {
                  document.layers[obj.id].left = x;
                  document.layers[obj.id].top = y;
              }
          }
      }
  }
}

/*Functions: _disabledObj
//*********************************************************************************************
//Purpose: disabilita l'oggetto in questione
//Inputs:  	vObject - Nome dell'oggetto o oggetto
//			blDisabled - 	false: abilita
//							true: disabilita	
//Outputs: //
//*********************************************************************************************
*/
RFunctions._disabledObj=function(vObject,blDisabled) {
  var bIsW3C = (document.getElementById && !bIsIE4) ? true : false;       // N6
  var bIsIE4 = (document.all) ? true : false;     // IE 4+
  var bIsDHTML = (bIsIE4 || bIsW3C || bIsNN4) ? true : false;
	var _disabled;
	if(blDisabled==true){
		_disabled="disabled";
	}else
	{
		_disabled="";
	}
    if (bIsDHTML) {
        var obj = this._getObj(vObject);
        if (obj) {
            if (bIsIE4 || bIsW3C) {
                obj.disabled = _disabled;
            } else {
                document.layers[obj.id].disabled = _disabled;
            }
        }
    }
}

/*Functions: _displayObj
//*********************************************************************************************
//Purpose: nasconde l'oggetto in questione utilizzando la proprietà visibility
//Inputs:  vObject - Nome dell'oggetto o oggetto
//			blDisabled - 	true: rende visibile
//							false: rende invisibile	
//Outputs: //
//*********************************************************************************************
*/
RFunctions._displayObj=function(vObject,blDisplay) {
  var bIsW3C = (document.getElementById && !bIsIE4) ? true : false;       // N6
  var bIsIE4 = (document.all) ? true : false;     // IE 4+
  var bIsDHTML = (bIsIE4 || bIsW3C || bIsNN4) ? true : false;
	var _display;
	if(blDisplay==true){
		_display="block";
	}else
	{
		_display="none";
	}
    if (bIsDHTML) {
        var obj = this._getObj(vObject);
        if (obj) {
            if (bIsIE4 || bIsW3C) {
                obj.style.display = _display;
            } else {
                document.layers[obj.id].display = _display;
            }
        }
    }
}

/*Functions: _hideObj
//*********************************************************************************************
//Purpose: nasconde l'oggetto in questione utilizzando la proprietà visibility
//Inputs:  vObject - Nome dell'oggetto o oggetto
//Outputs: //
//*********************************************************************************************
*/
RFunctions._hideObj=function(vObject) {
  var bIsW3C = (document.getElementById && !bIsIE4) ? true : false;       // N6
  var bIsIE4 = (document.all) ? true : false;     // IE 4+
  var bIsDHTML = (bIsIE4 || bIsW3C || bIsNN4) ? true : false;

    if (bIsDHTML) {
        var obj = this._getObj(vObject);
        if (obj) {
            if (bIsIE4 || bIsW3C) {
                obj.style.visibility = "hidden";
            } else {
                document.layers[obj.id].visibility = "hide";
            }
        }
    }
}

/*Function: _isVisible
//*********************************************************************************************
//Purpose: Controlla se un oggetto è visibile o no
//Inputs:  vObject - Nome dell'oggetto o oggetto
//Outputs: //
//*********************************************************************************************
*/
RFunctions._isVisible=function(vObject) {
  var bIsW3C = (document.getElementById && !bIsIE4) ? true : false;       // N6
  var bIsIE4 = (document.all) ? true : false;     // IE 4+
  var bIsDHTML = (bIsIE4 || bIsW3C || bIsNN4) ? true : false;

    if (bIsDHTML) {
        var obj = this._getObj(vObject);
        if (obj) {
            if (bIsIE4 || bIsW3C) {
                return obj.style.visibility == "visible";
            } else {
                return document.layers[obj.id].visibility == "show";
            }
        }
    }
}

/*Function: _showObj
//*********************************************************************************************
//Purpose: visualizza l'oggetto in questione utilizzando la proprietà visibility.
//Inputs:  vObject - Nome dell'oggetto o oggetto
//Outputs: //
//*********************************************************************************************
*/
RFunctions._showObj=function(vObject) {
  var bIsW3C = (document.getElementById && !bIsIE4) ? true : false;       // N6
  var bIsIE4 = (document.all) ? true : false;     // IE 4+
  var bIsDHTML = (bIsIE4 || bIsW3C || bIsNN4) ? true : false;

    if (bIsDHTML) {
        var obj = this._getObj(vObject);
        if(obj) {
            if (bIsIE4 || bIsW3C) {
                obj.style.visibility = "visible";
            } else {
                document.layers[obj.id].visibility = "show";
            }
        }
    }
}

/*Function: _isInDocument
//*********************************************************************************************
//Purpose: Controlla se l'oggetto esiste all'interno della pagina
//Inputs:  vObject - Nome dell'oggetto o oggetto
//Outputs: //
//*********************************************************************************************
*/
RFunctions._isInDocument=function (vObject) {
  var bIsW3C = (document.getElementById && !bIsIE4) ? true : false;       // N6
  var bIsIE4 = (document.all) ? true : false;     // IE 4+
  var bIsDHTML = (bIsIE4 || bIsW3C || bIsNN4) ? true : false;

    if (bIsDHTML) {
        if (bIsIE4 || bIsW3C) {
            if (!vObject) return false;
            var obj = this._getObj(vObject);
            if (!obj) return false;
            if (!obj.parentNode) return false;
            if (bIsW3C) return (obj.ownerDocument == window.document);
            return (obj.document == window.document);
        }
    }
    return true;
}

/*Function: _addParams
//*********************************************************************************************
//Purpose: 	Accoda un parametro pronto per la query string
//Inputs:  	params - Stringa attuale dei parametri
//			name - nome da dare al parametro
//			value - Valore del parametro
//Outputs: 	la stringa composta con il parametro aggiunto
//			se era vuota viene aggiunto un '?' all'inizio altrimenti una '&'
//*********************************************************************************************
*/
RFunctions._addParams=function(params,name,value){
	if (params != ""){
		params += "&";
	}else{
		params += "?";
	}
		
	parameters += name + "=" + value;
	return parameters;
}

/*				FINE CLASSE: RFunctions
<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>
*/ 





/*				CLASSE: REvents
<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>
  CLASSE: REvents
  Gestore degli eventi
*/

function REvents(){}
/*Function: _noNumbers
//*********************************************************************************************
//Purpose:  Controlla se il tasto premuto è un numero
//Inputs:   e - evento scatenato (event)
//Outputs:  true - se il tasto premuto è un numero
//          false - altrimenti
//Type: Statico
//*********************************************************************************************	
*/
REvents._noNumbers=function(e){

  var keynum;
  var keychar;
  var numcheck;
  
  if(window.event) // IE
  {
    keynum = e.keyCode;
  }
  else if(e.which) // Netscape/Firefox/Opera
  {
    keynum = e.which;
  }
  keychar = String.fromCharCode(keynum);
  numcheck = /\d/;
  if(keynum=='8')return true;
  return numcheck.test(keychar);
}
/*				FINE CLASSE: REvents 
<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>
*/





/*				CLASSE: Rdate
<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>
  CLASSE: Rdate
  Functions Classe per la gestione delle date
*/

function RDate(){}

/*Function: _InvertMonthDay
//*********************************************************************************************
//Purpose:  Inverte il primo numero di una data con il secondo
//Inputs:   sDataRapportValue - data in formato stringa
//Outputs:  la data con i primi due valori invertiti
//Type: Statico
//*********************************************************************************************
*/
RDate._InvertMonthDay=function(sDataRapportValue){
		var datePat = /^(\d{1,2})(\/|-)(\d{1,2})(\/|-)(\d{4})$/;
		var matchArray = sDataRapportValue.match(datePat);
		var day = matchArray[1];
		var	month = matchArray[3];
		var year = matchArray[5];
		sDataRapportValue=month+"/"+day+"/"+year;
		return sDataRapportValue;
}

/*Function: _isDateValue
//*********************************************************************************************
//Purpose:  Controlla se la data è nel formato giusto
//Inputs:   sDateValue - data in formato stringa
//Outputs:  true - se la data è formattata correttamente
//          false - altrimenti
//Type: Statico
//*********************************************************************************************
*/
RDate._isDateValue=function(sDateValue){

	if(sDateValue != '')
	{
		var blnResult = true;
		var dateStr = sDateValue;
		var datePat = /^(\d{1,2})(\/|-)(\d{1,2})(\/|-)(\d{4})$/;
		var matchArray = dateStr.match(datePat); // is format OK?

		if (matchArray == null)
			{blnResult = false;}
		else
		{
			// parse date into variables
			day = matchArray[1];
			month = matchArray[3];
			year = matchArray[5];
			
			if(year.length == 2)
			{year = '20' + year;}

			if (month < 1 || month > 12) 
			{ // check month range
				blnResult = false;
			}

			if (day < 1 || day > 31) 
				{blnResult = false;}

			if ((month==4 || month==6 || month==9 || month==11) && day==31)
				{blnResult = false;}

			if (month == 2)
			{ // check for february 29th
			var isleap = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));
			if (day > 29 || (day==29 && !isleap))
				{blnResult = false;}
			}
		}
	}
	
	return blnResult ;
}
/*Function: _isDate1LowerDate2
//*********************************************************************************************
//Purpose:  Controlla se la prima data e minore della seconda
//Inputs:   sDateStart - data in formato stringa
//			sDateEnd - data in formato stringa
//Outputs:  true - se la prima data e minore della seconda
//          false - altrimenti
//Type: Statico
//*********************************************************************************************
*/

RDate._isDate1LowerDate2=function(sDateStart,sDateEnd)
{
	if(sDateStart != '' && sDateEnd != '')
	{
		var blnResult = true;
		var dateStrStart = sDateStart;
		var datePatStart = /^(\d{1,2})(\/|-)(\d{1,2})(\/|-)(\d{4})$/;
		var matchArrayStart = dateStrStart.match(datePatStart); // is format OK?

		var dateStrEnd = sDateEnd;
		var datePatEnd = /^(\d{1,2})(\/|-)(\d{1,2})(\/|-)(\d{4})$/;
		var matchArrayEnd = dateStrEnd.match(datePatEnd); // is format OK?

		if (matchArrayStart == null || matchArrayEnd == null)
			{blnResult = false;}
		else
		{
			// parse date into variables
			dayStart = matchArrayStart[1];
			monthStart = matchArrayStart[3];
			yearStart = matchArrayStart[5];
			if(yearStart.length == 2)
			{yearStart = '20' + yearStart;}
			
			dayEnd = matchArrayEnd[1];
			monthEnd = matchArrayEnd[3];
			yearEnd = matchArrayEnd[5];
			if(yearEnd.length == 2)
			{yearEnd = '20' + yearEnd;}

			var sStartDate=yearStart+monthStart+dayStart
			var sEndDate=yearEnd+monthEnd+dayEnd

			if (sStartDate<sEndDate)
				blnResult=true;
			else
				blnResult=false;
		}
	}
	
	return blnResult ;
}

/*				FINE CLASSE: RDate
<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>
*/





/*				CLASSE: RQueryString
  CLASSE: RQueryString
  Classe per la gestione dei dati in querystring
*/

/*Function: Costruttore
//*********************************************************************************************
//Purpose:  Costruttore della classe
//          Recupera l'indirizzo e separa i parametri che ci sono 
//Inputs:   //
//Outputs:  //
//Type:     non statico
//*********************************************************************************************
*/
function RQueryString(){
// inizializzo array
  this.qsGetValue.keys = new Array();
  this.qsGetValue.values = new Array();

// eseguo il parsing della query string

  // recupero query string dall'URL
  var sQueryByURL = unescape(window.location.search.substring(1));
  // suddivido in coppie "chiave=valore"
   	var SQ = new String();
   	SQ = sQueryByURL;
 	SQ = SQ.replace("?","&");
 	var sKeyValue = SQ.split("&");

  // conservo chiavi e valori in array separati	
  for (var i = 0; i < sKeyValue.length; i++) {
    var iPos = sKeyValue[i].indexOf('=');
    if (iPos >= 0) {
      var sKey = unescape(sKeyValue[i].substring(0, iPos));
      var sValue = unescape(sKeyValue[i].substring(iPos + 1));
      this.qsGetValue.keys[this.qsGetValue.keys.length] = sKey;
      this.qsGetValue.values[this.qsGetValue.values.length] = sValue;
    }
  }
}

/*Function: qsGetValue
//*********************************************************************************************
//Purpose:  Restituisce il parametro cercato
//Inputs:   sKey - nome del parametro da cercare 
//Outputs:  il valore del parametro
//          null altrimenti
//Type:     non statico
//*********************************************************************************************
*/
RQueryString.prototype.qsGetValue=function(sKey) {
  var sValue = null;
  for (var i = 0; i < this.qsGetValue.keys.length; i++) {
    // cerco la chiave
    if (this.qsGetValue.keys[i] == sKey) {
      sValue = this.qsGetValue.values[i];
      break;
    }
  }
  return(sValue);
}

/*Function: qsPrintVars
//*********************************************************************************************
//Purpose:  Restituisce un alert con la coppia chiave valore per ogni parametro trovato
//Inputs:   //
//Outputs:  //
//Type:     non statico
//*********************************************************************************************
*/
RQueryString.prototype.qsPrintVars=function(){

  for (var i = 0; i < this.qsGetValue.keys.length; i++) 
  {
		var sKey=this.qsGetValue.keys[i];
	  	var sValue = this.qsGetValue.values[i];
	  	alert("KEY="+sKey+"    VALUE="+sValue);
	}
 	
 return ;
}
/*				FINE CLASSE: RValidation
<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>
*/

/*				CLASSE: RValidation
  CLASSE: RValidation
  Classe per la validazione dei dati immessi dall'utente
*/

/*Function: isPositiveNumber
//*********************************************************************************************
//Purpose:  Controlla se la stringa è un numero positivo
//Inputs:   sNumber - stringa da validare 
//Outputs:  true - la stringa è un numero positivo
//          false - altrimenti
//Type:     statico
//*********************************************************************************************
*/

function RValidate(){}

RValidate._isPositiveNumber=function(sNumber){
	var rePositiveDouble = /^\d+(\,\d\d)?$/;
	var res=sNumber.match(rePositiveDouble);
	return (res == null) ? false : true;
}

/*				FINE CLASSE: RValidation
<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>
*/

