// Questa variabile globale sarà utilizzata dal numero per eseguire il controllo lato client per
// i numeri decimali. Rappresenta il simbolo dei decimali e verrà cambiato dal controllo numero,
// in base alle impostazioni della cultura della macchina, ad ogni caricamento della pagina.
var IGCal_SepDec;

var IGCal_DateSep;
var IGCal_DateFormat;
var IGCal_DatePos_dd;
var IGCal_DatePos_MM;
var IGCal_DatePos_yyyy;

function IGCal_Redirect(url)
{
  window.location = url;
}

function IGCal_ShowDlg(url,x,y,height,width,padding,modal,scrollbars,resizable)
{ 
  var params = "";
  
  if (padding < 0)
    padding = screen.availWidth/4
  
  
  if (height > 0)
    params += ",height=" + height;
  else
  {
    height = screen.availHeight - padding;
    params += ",height=" + height;   
  }

  if (width > 0)
    params += ",width=" + width;
  else
  { 
    width = screen.availWidth - padding;
    params += ",width=" + width;
  }
   
  width = Math.min(screen.availWidth, width);  
  height = Math.min(screen.availHeight, height);
    
  if (x<0)
    // Centrato X
    x = (screen.availWidth - width) / 2 ;
   
  if (y<0)
    // Centrato Y
    y = (screen.availHeight - height) / 2;
 
  params += ",left=" + x; 
  params += ",top=" + y;
        
  if (scrollbars)  
    params += ",scrollbars=yes";
  else
    params += ",scrollbars=no";  
  
  if (resizable)  
    params += ",resizable=yes";
  else
    params += ",resizable=no";
  
  if (params != "")
    params = params.substr(1);
  
	window.open(url, "_blank", params+",location=no,menubar=no,toolbar=no,status=yes");	
}

function IGCal_ShowDlgWithLocation(url,x,y,height,width,padding,modal,scrollbars,resizable)
{ 
  var params = "";
  
  if (padding < 0)
    padding = screen.availWidth/4
  
  
  if (height > 0)
    params += ",height=" + height;
  else
  {
    height = screen.availHeight - padding;
    params += ",height=" + height;   
  }

  if (width > 0)
    params += ",width=" + width;
  else
  { 
    width = screen.availWidth - padding;
    params += ",width=" + width;
  }
   
  width = Math.min(screen.availWidth, width);  
  height = Math.min(screen.availHeight, height);
    
  if (x<0)
    // Centrato X
    x = (screen.availWidth - width) / 2 ;
   
  if (y<0)
    // Centrato Y
    y = (screen.availHeight - height) / 2;
 
  params += ",left=" + x; 
  params += ",top=" + y;
        
  if (scrollbars)  
    params += ",scrollbars=yes";
  else
    params += ",scrollbars=no";  
  
  if (resizable)  
    params += ",resizable=yes";
  else
    params += ",resizable=no";
  
  if (params != "")
    params = params.substr(1);
  
	window.open(url, "_blank", params+",location=yes,menubar=no,toolbar=no,status=yes");	
}

function IGCal_DelMsg()
{
  return confirm("Sicuri di voler procedere?");
}

function IGCal_Pnl_Refresh(invert,objPnlDivName,objPnlTableName,srcCollapsed,srcExpanded)
{
  var objPnl = document.getElementById(objPnlDivName);
  var origH  = objPnl.attributes["originalHeight"].value;
  var objTbl = document.getElementById(objPnlTableName + "_pnlTbl");
  var objRow = document.getElementById(objPnlTableName + "_pnlRow");
  var objImg = document.getElementById(objPnlTableName + "_PnlImgCollapse");
  var objHid = document.forms[0][objPnlTableName + "_pnlState"];
  var isCollapsed;

  isCollapsed = (objHid.value == srcExpanded)
  
  if (invert)
    isCollapsed = !isCollapsed;
   
  if(isCollapsed)
  {
    objRow.style.display = "none";
    objTbl.style.height = 1;
    objHid.value = srcExpanded;
  }
  else
  {
    objRow.style.display = "inline";
    objTbl.style.height = origH;
    objHid.value = srcCollapsed;
  }  
  
  objImg.src = objHid.value;  
}

//[stefano] questa funzione non é + necessaria nel 2.0
//function IGCal_fkLstSel(objLst,objtxt,objHidden,objDiv,objImgCloseId)
//{
//  if (document.forms[0][objtxt.id].value != objLst.options[objLst.selectedIndex].text)
//  {
//    document.forms[0][objtxt.id].value = objLst.options[objLst.selectedIndex].text;
//    document.forms[0][objtxt.id].title = "";
//    document.forms[0][objHidden.id].value = objLst.options[objLst.selectedIndex].value;  
//  //eval("document.all."+objDecodifica).click();
//  }
////  var objPnl = document.getElementById(objDiv.id);
////  objPnl.style.visibility = "hidden";
//  var objLista = document.getElementById(objLst.id);
//  objLista.style.visibility = "hidden";
//  var objImg = document.getElementById(objImgCloseId);
//  objImg.style.visibility = "hidden";
//}

function IGCal_fkHideMoreResults(objLstId,objImgCloseId)
{
  var objLista = document.getElementById(objLstId);
  objLista.style.visibility = "hidden";
  objLista.style.top = "-1000";
  objLista.style.position = "absolute";
  objLista.style.zIndex = "1000";

  var objImg = document.getElementById(objImgCloseId);
  objImg.style.visibility = "hidden";
  objImg.style.top = "-1000";
  objImg.style.position = "absolute";
  objImg.style.zIndex = "1000";
}


function IGCal_OpenCalendar(objData)
{
  if (!IGCalDat_onBlur(null, objData))
    return;
      
  var xpos = screen.availWidth/2 -110;
  var ypos = screen.availHeight/2-100;
  
  var height = "200";
  var width = "220";     
  var url="Calendar.aspx?val="+escape(objData.value)+"&IDCaller="+objData.id+"&DF="+escape(IGCal_DateFormat);  
	var objW = window.open(url, "_blank", "left="+xpos+",top="+ypos+",height="+height+",width="+width+",location=no,scrollbars=no,menubar=no,resizable=no,toolbar=no,status=no");
}


function IGCal_Num_Params(e, obj)
{
  var dec;  
	if(document.all) 
	{	
		// Explorer
    dec = parseInt(obj.attributes["DN"].value);		
		this.Formato = obj.attributes["FT"].value;
		this.Range = obj.attributes["RG"].value;		
	}	
	else
	{ 	
		// Gli altri		
    dec = parseInt(e.target.attributes["DN"].value);
		this.Formato = e.target.attributes["FT"].value;
		this.Range = e.target.attributes["RG"].value;				
	}
	
  this.Decimali = isNaN(dec)? 0 : dec;	
}
  
// Nella pressione del tasto viene consentito l'inserimento delle sole cifre che possono
// comporre un numero in base alle impostazioni degli attributi che decorano il controllo
// Formato (FT), Range (RG), Numero dei decimali (DN).
function IGCalNum_onKeyPress(e, obj) 
{	
	var Result = false;
	var keyCode,Decimali,Formato,Range,Valore;
	
	if (IGCal_SepDec == "")
	  IGCal_SepDec = ",";
	
  var SepDecCode = IGCal_SepDec.charCodeAt(0);  
  var Valore = obj.value;
  
  var params = new IGCal_Num_Params(e, obj);

  // Tasto premuto in base al browser	
	if(document.all) 
		// Explorer
		keyCode = event.keyCode;
	else
	{ 
		// Gli altri
		keyCode = e.which;				
		
		// Caratteri speciali non gestiti che in Netscape valgono 0
		if (keyCode == 0)
			return true;
	}	

  
	if((keyCode >= 48 && keyCode <= 57) || keyCode == 13 || keyCode == 8)
	  // Se ho cifre oppure enter o BackSpace		
		return true

	else if(keyCode == 45 || keyCode == SepDecCode)
	{
		// Gestione del segno - e del separatore decimali 
		if(keyCode == 45) 
		{
		  // Segno
			var tempVal = Valore + "-";
			if(tempVal.indexOf("-") == 0 && tempVal.indexOf("-", 1) == -1) 
				return (params.Range == '1')
			else
				return false;
		}
		
		if(keyCode == SepDecCode)
		{			
			// Separatore decimali
			var tempVal = Valore;
			if(tempVal.indexOf(IGCal_SepDec, 0) == -1)
				return (params.Formato == "2" && params.Decimali > 0);
		}				
	}

	if(document.all)	
	  event.keyCode = 0;
  
			
  return Result;
}




// Previene un paste di un valore non congruente con le impostazioni del numero
// Se le impostazioni non coincidono sbianca il campo
function IGCalNum_onPaste(e, obj) 
{	
	var clipData = window.clipboardData.getData("Text");	
	var Decimali, Formato, Range;

  // Devo avere q.cosa da incollare
	if(clipData.length == 0)
	  return;
	  
  obj.value = trim(clipData);  
	var Valore = obj.value;

  // Estraggo gli attributi del controllo numero, recupero parametri in base al browser	
	if(document.all) 
	{
		// Explorer
		Decimali = parseInt(obj.attributes["DN"].value);
		Formato = obj.attributes["FT"].value;
		Range = obj.attributes["RG"].value;		
	}	
	else
	{ 
		// Gli altri	
		Decimali = parseInt(e.target.attributes["DN"].value);
		Formato = e.target.attributes["FT"].value;
		Range = e.target.attributes["RG"].value;				
	}	
  
  // Ricavo il numero
  var valNum = NaN;
  if (Formato == "1")
    valNum = parseInt(Valore);
  else if (Formato == "2")
    // Se dovesse contenere un separatore decimale lo trasformiamo in . per far funzionare il float
    valNum = parseFloat(replace(Valore,IGCal_SepDec,"."));
  
  obj.value = "";
  if (!isNaN(valNum))
  {
    if (Range == "2" && valNum < 0)
    {
      // Abbiamo richiesto un numero positivo ma ne stiamo incollando uno negativo
    }
    else
    {
      // In tutti gli altri casi il numero è ammesso (rimetto il simbolo dei dec. originale)
	    obj.value = replace(valNum.toString(),".",IGCal_SepDec);
	    obj.select();	    
    }
  }
    
	return false;
}


function IGCalDat_onKeyPress(e, obj) 
{	
  var Valore = obj.value;
	var keyCode;
  
  // Estraggo gli attributi del controllo numero, recupero parametri in base al browser	
	if(document.all) 
		// Explorer
		keyCode = event.keyCode;
	else
	{ 
		// Gli altri
		keyCode = e.which;				
		
		// Caratteri speciali non gestiti che in Netscape valgono 0
		if (keyCode == 0)
			return true;
	}	
  
  if (keyCode == 13)
  {
   IGCalDat_onBlur(e, obj);
   return;
  }
      
	var result = ((keyCode >= 48 && keyCode <= 57) || keyCode == 8);	
	if (!result && document.all)
	  event.keyCode = 0;
	return result;
}

function IGCalDat_onPaste(e, obj) 
{	
	var clipData = window.clipboardData.getData("Text");	
	var Decimali, Formato, Range;

  // Devo avere q.cosa da incollare
	if(clipData.length == 0)
	  return;
	  
  obj.value = trim(clipData);  
	var Valore = obj.value;
  
  // Ricavo il numero
  var valNum = parseInt(Valore);  
  
  if (!isNaN(valNum))
  {
	  obj.value = valNum;
	  obj.select();	    
  }
  else
    obj.value = "";
        
	return false;
}


function IGCalDat_onFocus(e, obj) 
{
  // Non sono state inizializzate quindi lo faccio ora
	if (IGCal_DateFormat == "")
  {
	  IGCal_DateFormat = "dd/MM/yyyy";
	  IGCal_DateSep = "/";
    IGCal_DatePos_dd = 0;
    IGCal_DatePos_MM = 2;
    IGCal_DatePos_yyyy = 4;
  }

	var nuovaData = replace(trim(obj.value),IGCal_DateSep,"");
	obj.value = nuovaData;	
	obj.select();
	
	return true;
}
	
function IGCalDat_onBlur(e, obj) 
{
  // Elimino la formattazione con il separatore.
	var valore = replace(trim(obj.value),IGCal_DateSep,"");

	if(valore == "")
		return true;
	
	var dd = valore.substr(IGCal_DatePos_dd,2);
	var MM = valore.substr(IGCal_DatePos_MM,2);
	var yyyy = valore.substr(IGCal_DatePos_yyyy,4);
	var today = new Date();	
		
	if(dd == "")
  	dd = eval(today.getDate());
  		
	if(MM == "")
		MM = eval(today.getMonth())+1;

	var year = "" + today.getFullYear();
			
	if(yyyy == "")
		yyyy = year;
		
	if(yyyy.length==1)
		yyyy = year.substring(0,3) + yyyy;
		
	else if	(yyyy.length==2)	
		yyyy = year.substring(0,2)+ yyyy;
		
	else if	(yyyy.length==3)		
		yyyy = year.substring(0,1) + yyyy
	
	//controllo la correttezza della data	
	if (IGCal_dateCheck(eval(yyyy),eval(MM),eval(dd)) && yyyy > 1900 && yyyy < 3000 )
	{		
		if (dd < 10)
		  dd = "0" + eval(dd);
		  
		if (MM < 10)
		  MM ="0" + eval(MM);
		
		var valoreData = replace(IGCal_DateFormat,"dd",dd);
		valoreData = replace(valoreData,"MM",MM);
		valoreData = replace(valoreData,"yyyy",yyyy);		
		obj.value = valoreData;
	}
	else	
	{
		obj.focus();
		obj.select();	
		return false;
	}
  
  return true;
}

function IGCal_dateCheck(y, m, d) 
{ 
	if(m != 0 && m <= 12 && m>0 && d>0 && y>0 && d!=0 && d<=31 )
	{ 
		//Controllo i mesi di 30 giorni
		if(m == 4 || m == 6 || m == 9 || m == 11)
		{ 
			if(d == 31)
				return false; 
		} 
		
		if(m == 2)
		{   // controllo per gli anni bisestili
			//Se è divisibile per 100 allora deve essere divisibile per 400
			if(parseInt(y)%100 == 0)
			{
				if(parseInt(y)%400 != 0 && d == 29)
					return false; 	
			}
			// se non è divisibile per 100 deve essre divisibile per 4
			if(parseInt(y)%4 != 0 && d == 29)
				return false; 
			// comunque non può avere né 30 né 31 giorni
			if(d > 29)
				return false; 
		} 		
		return true; 
	} 
	else 
		return false;
} 

/*Funzioni per il webcontrol Ora */
function IGCalOra_onKeyPress(e, obj) 
{	
  var Valore = obj.value;
	var keyCode;
  
  // Estraggo gli attributi del controllo numero, recupero parametri in base al browser	
	if(document.all) 
		// Explorer
		keyCode = event.keyCode;
	else
	{ 
		// Gli altri
		keyCode = e.which;				
		
		// Caratteri speciali non gestiti che in Netscape valgono 0
		if (keyCode == 0)
			return true;
	}	
  
  if (keyCode == 13)
  {
   IGCalDat_onBlur(e, obj);
   return;
  }
      
	var result = ((keyCode >= 48 && keyCode <= 57) || keyCode == 8);	
	if (!result && document.all)
	  event.keyCode = 0;
	return result;
}

function IGCalOra_onPaste(e, obj) 
{	
	var clipData = window.clipboardData.getData("Text");	
	var Decimali, Formato, Range;

  // Devo avere q.cosa da incollare
	if(clipData.length == 0)
	  return;
	  
  obj.value = trim(clipData);  
	var Valore = obj.value;
  
  // Ricavo il numero
  var valNum = parseInt(Valore);  
  
  if (!isNaN(valNum))
  {
	  obj.value = valNum;
	  obj.select();	    
  }
  else
    obj.value = "";
        
	return false;
}


function IGCalOra_onFocus(e, obj) 
{
	var nuovaOra = replace(trim(obj.value),IGCal_OraSep,"");
	obj.value = nuovaOra;	
	obj.select();

	return true;
}
	
function IGCalOra_onBlur(e, obj) 
{
  // Elimino la formattazione con il separatore.
	var valore = replace(trim(obj.value), IGCal_OraSep, "");
	
	var hh;
	var mm;	
	if(valore == "")
		return true;
		
		
	if (valore.length == 3)
	{
		hh = "0" + valore.substr(0,1);
		mm = valore.substr(1,2);
	}
	else if(valore.length == 2)
	{
		hh = valore.substr(0,2);
		mm = "";
	}
	else if(valore.length == 1)
	{
		hh = "0" + valore.substr(0,1);
		mm = "";
	}
	else
	{
		hh = valore.substr(0,2);
		mm = valore.substr(2,2);
	}
	
	if (mm == "")
		mm = "00";
	
	
	if (hh < "24" && hh >= "00" && mm < "60" && mm >= "00" )
	{		
		var valoreData = hh + IGCal_OraSep + mm;
		obj.value = valoreData;
	}
	else	
	{
		obj.focus();
		obj.select();	
		return false;
	}
	
  
  return true;
}

function IGCalOraNum_onKeyPress(e, obj) 
{	
	var Result = false;
	var keyCode,Decimali,Formato,Range,Valore;
	
	if (IGCal_SepDec == "")
	  IGCal_SepDec = ",";
	
  var SepDecCode = IGCal_SepDec.charCodeAt(0);  
  var Valore = obj.value;
  
  var params = new IGCal_Num_Params(e, obj);

  // Tasto premuto in base al browser	
	if(document.all) 
		// Explorer
		keyCode = event.keyCode;
	else
	{ 
		// Gli altri
		keyCode = e.which;				
		
		// Caratteri speciali non gestiti che in Netscape valgono 0
		if (keyCode == 0)
			return true;
	}	

  
	if((keyCode >= 48 && keyCode <= 57) || keyCode == 13 || keyCode == 8)
	  // Se ho cifre oppure enter o BackSpace		
		return true

	else if(keyCode == 45 || keyCode == SepDecCode)
	{
		// Gestione del segno - e del separatore decimali 
		if(keyCode == 45) 
		{
		  // Segno
			var tempVal = Valore + "-";
			if(tempVal.indexOf("-") == 0 && tempVal.indexOf("-", 1) == -1) 
				return (params.Range == '1')
			else
				return false;
		}
		
		if(keyCode == SepDecCode)
		{			
			// Separatore decimali
			var tempVal = Valore;
			if(tempVal.indexOf(IGCal_SepDec, 0) == -1)
				return (params.Formato == "2" && params.Decimali > 0);
		}				
	}

	if(document.all)	
	  event.keyCode = 0;
  
			
  return Result;
}




// Previene un paste di un valore non congruente con le impostazioni del numero
// Se le impostazioni non coincidono sbianca il campo
function IGCalOraNum_onPaste(e, obj) 
{	
	var clipData = window.clipboardData.getData("Text");	
	var Decimali, Formato, Range;

  // Devo avere q.cosa da incollare
	if(clipData.length == 0)
	  return;
	  
  obj.value = trim(clipData);  
	var Valore = obj.value;

  // Estraggo gli attributi del controllo numero, recupero parametri in base al browser	
	if(document.all) 
	{
		// Explorer
		Decimali = parseInt(obj.attributes["DN"].value);
		Formato = obj.attributes["FT"].value;
		Range = obj.attributes["RG"].value;		
	}	
	else
	{ 
		// Gli altri	
		Decimali = parseInt(e.target.attributes["DN"].value);
		Formato = e.target.attributes["FT"].value;
		Range = e.target.attributes["RG"].value;				
	}	
  
  // Ricavo il numero
  var valNum = NaN;
  if (Formato == "1")
    valNum = parseInt(Valore);
  else if (Formato == "2")
    // Se dovesse contenere un separatore decimale lo trasformiamo in . per far funzionare il float
    valNum = parseFloat(replace(Valore,IGCal_SepDec,"."));
  
  obj.value = "";
  if (!isNaN(valNum))
  {
    if (Range == "2" && valNum < 0)
    {
      // Abbiamo richiesto un numero positivo ma ne stiamo incollando uno negativo
    }
    else
    {
      // In tutti gli altri casi il numero è ammesso (rimetto il simbolo dei dec. originale)
	    obj.value = replace(valNum.toString(),".",IGCal_SepDec);
	    obj.select();	    
    }
  }
    
	return false;
}


