// *****************************************************************//
// ***          FUNZIONI RELATIVE agli oggetti della FORM        ***//
// *****************************************************************//

//restituisce il tipo dell'oggetto, null se non noto
//obj e' l'oggetto di cui si deve determinare il tipo
function get_type_obj(obj)	{
	var tipo = obj.type;
	//alert('nome: '+obj.name+' tipo: '+tipo);
	if (!tipo)	{tipo=obj[0].type;}
	return (tipo);
}

//restituisce il valore di un oggetto generico indipendemente dal tipo
//obj e' l'oggetto di cui si deve determinare il tipo
function get_val_obj(obj)	{
	var val;
	var tipo=get_type_obj(obj);
	
	switch (tipo) {
		case "hidden":
		case "text":
		case "textarea":
			val = obj.value;
		break;
		case "select-one":
			val = get_val_select(obj);
		break;
		case "select-multiple":
			; //da implementare
		break;
		case "radio":
		case "checkbox":
			val = get_val_radio(obj);
		break;
	}
	return (val);
}

function set_val_obj(obj,val)	{
	var tipo=get_type_obj(obj);
	
	switch (tipo)	{
		case "hidden":
		case "text":
		case "textarea":
			obj.value = val;
		break;
		case "radio":
			setradio_by_val(obj,val);
		break;
		case "checkbox":
			; //da implementare
		break;
		case "select-one":
			set_select_by_val(obj,val);
		break;
	}
}
//SETRADIO GENERICA
//obj è l'oggetto, val è l'indice dll'array radio[]
function setradio(obj,val)	{
	obj[val].checked=true;
}

//restituisce null se nessun radio e' stato settato
//il valore del radio settato altrimenti
function get_val_radio(obj)	{
	var val='';
	for (var i=0;i<obj.length;i++)	{
		if (obj[i].checked)	{val=obj[i].value;}
	}
	return (val);
}

//restituisce -1 se nessun radio e' stato settato
//l'indice del radio settato altrimenti
function get_ind_radio(obj)	{
	var ind=-1;
	for (var i=0;i<obj.length;i++)	{
		if (obj[i].checked)	{ind=i;}
	}
	return (ind);
}

// SETTA UN RADIO IN BASE AL SUO NOME E AL SUO VALORE idx
// Passando l'oggetto 'obj' (es. document.forms[0].myRadio) 
// passo un array di oggetti, tra questi setto quello che ha valore='val' 
function setradio_by_val(obj,val){
	var radioGrp = obj;
	for (var i=0; i< radioGrp.length; i++){
		if ( (!radioGrp[i].checked)&&(radioGrp[i].value==val) ){
			radioGrp[i].checked=true;
			break;
		}
	}
}

// Ritorna il valore della option selezionata
function get_val_select(obj)   {
	var ind=obj.selectedIndex;
	var val_option='-1';
	if (ind>=0)	{
		val_option=obj.options[ind].value;
	}
	return (val_option);
}

// Ritorna la descrizione della option selezionata
function get_desc_select(obj)   {
	var ind=obj.selectedIndex;
	var val_option='-1';
	if (ind>=0)	{
		val_option=obj.options[ind].text;
	}
	return (val_option);
}

// Ritorna l'indice della option selezionata
function get_ind_select(obj)	{
	return (obj.selectedIndex);
}

// Ritorna l'indice della option selezionata noto il valore del campo
function get_ind_select_by_val(obj,val)	{
	var ind='-1';
	var i=0;
	while (i<obj.length && obj.options[i].value!=val)	{i++;}
	if (i>=obj.length)	{i='-1';}
	return (i);
}

// Ritorna true se la option con valore val esiste, false altrimenti
function exist_val_option(obj,val){
	var ok=false;
	for (var i=0; i< obj.length; i++){
		if (obj.options[i].value==val) { ok=true; break; }
	}
	return ok;
}

// Crea una option nella select (obj) con valore (val) e descrizione (desc)
function create_option(obj,val,desc){
	var no = new Option();
	no.text = desc;
	no.value = val;
	obj.options[obj.options.length] = no;
	//alert('Creo option con valore: '+val+' e desc: '+desc);
}


function set_select(obj,idx){
	obj.options[idx].selected=true;
}

// Seleziona la option della select che ha come valore val
function set_select_by_val(NomeCampo,ValCampoDaSel){
 for (var i=0; i<NomeCampo.length; i++){
  if (NomeCampo.options[i].value == ValCampoDaSel){
    NomeCampo.options[i].selected = true;
  }
 }
}

// SETTA LA/LE OPTION/S DI DEFAULT
function set_select_default(obj){
 for (var i=0; i<obj.length; i++){
  if (obj.options[i].defaultSelected == true){
    obj.options[i].selected = true;
  }
 }
}

// SETTA TUTTE LE OPTIONS DELLA SELECT
// La funzione seleziona tutte options del campo select
function set_all_select(obj) {
  var i;
  for (i=0;i<obj.length;i++) {
    obj.options[i].selected=true;
  }
}

// DESELEZIONA TUTTE LE OPTIONS DI UNA SELECT
function reset_all_select(obj){
  var i;
  for (i=0;i<obj.length;i++) {
    obj.options[i].selected=false;
  }
}

//annulla la select
function reset_select(obj)	{
	obj.options.length=0;
}
// CHEKKA UN CHECKBOX IN BASE AL SUO NOME
// objname è l'oggetto checkbox da chekkare
function set_checkbox(obj){
		obj.checked=true;
}

// SELEZIONA TUTTI I CHECKBOX DELLA FORM 'laform'
// La funzione seleziona tutte options del campo select
function set_all_checkbox(laform) {
  var i;
  for (i=0; i<laform.elements.length; i++) {
    if (laform.elements[i].type=="checkbox"){
      laform.elements[i].checked=true;
	}
  }
}

// DE-SELEZIONA TUTTI I CHECKBOX DELLA FORM 'laform'
// La funzione seleziona tutte options del campo select
function deselect_all_checkbox(laform) {
  var i;
  for (i=0;i<laform.elements.length;i++) {
    if (laform.elements[i].type=="checkbox"){
      laform[i].checked=false;
	}
  }
}

// LA FUNZIONE RESETTA TUTTE LE FORM PRESENTI NEL DOCUMENTO
function reset_all_forms(finestra){
  for (var i=0; i<finestra.document.forms.length; i++){
   finestra.document.forms[i].reset();
  }
}

// CANCELLA UN CAMPO DI TESTO O TEXTAREA
function clear_textField(obj){
  obj.value='';
}

// RIEMPIE UN CAMPO DI TESTO cancellando il suo contenuto
function ins_textfield(obj,val){
  obj.value=val;
}

// Inserisce in un campo di testo un qualsiasi carattere,stringa ecc. 
// senza cancellarne il contenuto già presente.
function insert_string(stringa,campo){
  var val = campo.value;
  campo.value = val + stringa;
}

// LA FUNZIONE RESTITUISCE FALSE NEL CASO IN CUI CI SIANO 1 RADIO ED UNA SELECT CHE
// DEBBANO ESSERE VALORIZZATI ENTRAMBI.
function chk_scelta(radio,tendina){
   var OK=false;
// alert(radio.name+' --> '+radio.checked);
// Cerco nella select l'indice la cui option è selected come default
   for (var i=0; i<tendina.length; i++){
    if (tendina.options[i].defaultSelected){var ind=i;}
   }
//   alert(tendina.name+' --> '+tendina.options[ind].defaultSelected);
   if (radio.checked && tendina.options[ind].selected){
	  alert('ATTENZIONE !! Occorre inserire un valore tra \nquelli proposti dal menù a tendina.');
	  return false
   }
   else {OK = true;}
//   alert(OK);
   return OK;
 }


// Questa funzione permette di spostare delle options da una select ad un'altra
// attraverso due button.
function move(fbox, tbox) {
	var arrFbox = new Array();
	var arrTbox = new Array();
	var arrLookup = new Array();
	var i;

	for (i = 0; i < tbox.options.length; i++) {
		if (!(tbox.options[i].value=='')){
			arrLookup[tbox.options[i].text] = tbox.options[i].value;
			arrTbox[i] = tbox.options[i].text;
		}
 	}
 	var fLength = 0;
 	var tLength = arrTbox.length;
 
 	for(i = 0; i < fbox.options.length; i++) {
 		arrLookup[fbox.options[i].text] = fbox.options[i].value;
		if (fbox.options[i].selected && fbox.options[i].value != "") {
			arrTbox[tLength] = fbox.options[i].text;
			tLength++;
		}
		else {
			arrFbox[fLength] = fbox.options[i].text;
			fLength++;
		}
	}
	arrFbox.sort();
	arrTbox.sort();
	fbox.length = 0;
	tbox.length = 0;
	var c;

	for(c = 0; c < arrFbox.length; c++) {
		var no = new Option();
		no.value = arrLookup[arrFbox[c]];
		no.text = arrFbox[c];
		fbox[c] = no;
	}

	for(c = 0; c < arrTbox.length; c++) {
		var no = new Option();
		no.value = arrLookup[arrTbox[c]];
		no.text = arrTbox[c];
		tbox[c] = no;
	}
}


//conta caratteri per una textarea
function calcCharResidui(Target,maxdim,objLeft) {
	StrLen = Target.value.length;
	if (StrLen > maxdim )	{
		Target.value = Target.value.substring(0,maxdim);
		CharsLeft = 0;
		alert("Lunghezza stringa eccessiva di: " + (StrLen-maxdim) + " carattere/i");
	}
	else	{
		CharsLeft = maxdim - StrLen;
	}
	
	objLeft.value = maxdim - Target.value.length;
}


function calcBytesResidui(Target,maxdim,objLeft){
	var val = Target.value;
	var byteLength = calcBytesString(val);
	
	if (byteLength > maxdim )	{
		Target.value = Target.value.substring(0,maxdim);
		CharsLeft = 0;
		alert("Lunghezza stringa eccessiva di: " + (byteLength-maxdim) + " caratteri/i");
	}
	else	{
		CharsLeft = maxdim - byteLength;
	}

	objLeft.value = CharsLeft;
}

// Conta pressapoco i bytes di una stringa
// In verità conta 1 se il carattere sta in ISO8859-1 2 se non appartiene a questo insieme
	function calcBytesString(str){
		var val = str;

		//alert(n);
		var ISO88591=/[\x00-\xff]/gi;
		var NON_ISO88591=/[^\x00-\xff]/gi;
		//alert(val);
		//			alert("Count caratteri NON ISO88591:"+val.replace(ISO88591,"").length);
		//			alert("Count caratteri ISO88591:"+val.replace(NON_ISO88591,"").length);
		var	byteLength = (val.replace(ISO88591,"").length * 2) + val.replace(NON_ISO88591,"").length;

		return byteLength;
		//alert("Non ASCII Count: "+val.replace(ASCII,"").length);
		//alert("ASCII Count: "+val.replace(NON_ASCII,"").length);	
	}




// *****************************************************************//
// ***           FUNZIONI RELATIVE agli oggetti STRING           ***//
// *****************************************************************//
// Mette il valore del campo obj in maiuscolo
function tUC(obj){
	obj.value=obj.value.toUpperCase();
}

// Mette il valore del campo obj in minuscolo
function tLC(obj){
	obj.value=obj.value.toLowerCase();
}



// *****************************************************************//
// ***           FUNZIONI RELATIVE agli oggetti DATA           ***//
// *****************************************************************//

// Calcola il giorno
function setDay(){
	var DT = new Date();
	d  = DT.getDate();
	if(DT<10){ DT='0'+DT; }
return d;
}

// Calcola il mese
function setMonth(){
	var DT = new Date();
        m = (DT.getMonth()+1);
        if(m<10){ m='0'+m;}
return m;
}

// Calcola l'anno
function setYear(){
	var DT = new Date();
	y = DT.getFullYear()
return y;
}

// Calcola il giorno corrente 
function setOggi(obj) {
oggi = "" + setDay() + "-" + setMonth() + "-" + setYear();
        obj.value = oggi;
}



// *****************************************************************//
// ***           FUNZIONI RELATIVE all'oggetto DOCUMENT          ***//
// *****************************************************************//
// Inserisce nel campo obj il referrer 
function insert_REFERRER(obj){
   obj.value=document.referrer;
}

// Inserisce nel campo obj la URL del documento 
function insert_URL(obj){
   obj.value=document.URL;
}


// *****************************************************************//
// ***           FUNZIONE per finestre POP-UP                    ***//
// *****************************************************************//
//function popup(url) {
//  var win = window.open(url,'popup','top=150,left=200,width=400,height=280,scrollbars=yes,resizable=no,menubar=no,locationbar=no,toolbar=no')
//}

function popupDim(url,w,h)	{
	var opt='top=150,left=200,width='+w+',height='+h+',scrollbars=1,resizable=0,menubar=0,locationbar=0,toolbar=0';
	var win = window.open(url,'popup',opt);
}

// Funzione generica di creazione pop-up, le proprietà di default vengono definite 
// qui sotto, se si vogliono modificare devono essere passate come parametri.
// Parametri:
//  - URL [obbligatorio] è l'indirizzo web da aprire nella pop-up
//  - TARGET [opzionale] è il nome della finestra, se non è passato, viene considerata la variabile 'default_popup_target'
//  - FEATURES [opzionale] sono le proprietà della finestra da aprire, se non è passato, viene considerata la variabile 'default_popup_feature'
// 
// Per modificare la proprietà di una pop-up, è possibile creare delle variabili contenenti
// le caratteristiche e poi passarle come parametri alla funzione.
// La creazione può essere fatta nei modi seguenti:
// - 1  Inserita nelle pagine HTML stesse (se la pop-up è specifica per quella pagina)
// - 2  Inserita nei JS esterni richiamati (se la pop-up è ripetuta su più pagine).
// - 3  Inserita in questo JS esterno (se la pop-up è ripetuta su tutto il sito).
//
// Caso 1: Metodo
//	<script type="text/javascript">
//		var popup_feature = 'top=150,left=200,width=400,height=280,scrollbars=1,resizable=0,menubar=0,locationBar=0,toolbar=0';
//	</script>
// Caso 2 e 3: Metodo
//	Creare la variabile libera nel JS, cioè non interna a nessuna funzione:
//	  var popup_feature = 'top=150,left=200,width=400,height=280,scrollbars=1,resizable=0,menubar=0,locationBar=0,toolbar=0';
//
//
//
// In tutti i casi la funzione verrà richiamata nel modo seguente:
//   popup('/home/solostaff/',popup_feature)
//   popup('/home/solostaff/') per mantenere le impostazioni di default
var default_popup_feature = 'top=150,left=200,width=400,height=280,scrollbars=1,resizable=1,menubar=0,locationbar=0,toolbar=0';
var default_popup_target = 'popup';
function popup (url, target, features) {
	if (!features) {
		features = default_popup_feature;
	}
	if (!target) {
		target = default_popup_target;
	}
	var wind = window.open(url,target,features);
	wind.focus();
	return wind;
}

// Di seguito un elenco di features per le popup
var aziende_open_cv = 'scrollbars=yes,resizable=yes,width=500,height=500,top=5,left=5';


// *****************************************************************//
// ***   FUNZIONE per aprire una nuova finestra a tutto schermo  ***//
// *****************************************************************//
function DZ_openWindow (TheURL,TheName,features){
	var largh='width='+((screen.width)-10);
	var altez='height='+((screen.height)-100);
	var da_su='top='+1;
	var AlignLeft='left='+1;
	//alert(largh);alert(altez);alert(da_su);alert(AlignRight);alert(scrollbar);alert(resizable);
	var features=features+','+largh+','+altez+','+da_su+','+AlignLeft;
	//alert(features);
	window.open(TheURL,TheName,features);
} 

// *****************************************************************//
// ***   FUNZIONE per mettere un link in una pop-up              ***// 
// ***   (il link agisce sulla finestra principale dopo aver      ***// 
// ***   chiuso la pop-up) ***//
// *****************************************************************//
function lancia_e_chiudi(url,chiudi){
   window.opener.location.href=url;
   if (chiudi=='y'||chiudi=='Y'){
          self.close();
   }
}

// La funzione lancia una pagina come se fosse un <a href..
// Va lanciata nel modo seguente:
//    GoToURL('parent','/cgi-lib_pl.htm');return document.returnValue
function GoToURL() { //v3.0
  var i, args=GoToURL.arguments; document.returnValue = false;
  for (i=0; i<(args.length-1); i+=2)
//   ind=unescape(args[i+1]);
//   ind=escape(args[i+1]); 
// alert("Escape: "+escape(args[i+1])+"\nUnescape: "+unescape(args[i+1]));
    eval(args[i]+".location='"+args[i+1]+"'");
}
 


// ******************************************************************//
// ***   FUNZIONE per aprire una nota in una "nuvoletta" (LAYERS) ***// 
// ******************************************************************//

function attiva(id) {
  var dom = (document.getElementById) ? true: false;
  var ie4 = (document.all) ? true : false;		    // Identifica Internet Explorer 4 o succ.
  var ns4 = (document.layers) ? true : false;		    // Identifica Netscape Navigator 4 o succ.
  if (dom) {this.css = document.getElementById(id).style;}
  else if (ie4) {this.css = document.all[id].style;} 
  else if (ns4) {this.css = document.layers[id];}
  //alert(this.css.posTop);
  if (ie4) {
    this.css.posTop = 100 + document.body.scrollTop;
    this.css.posLeft = 100;
  } else if (dom) {
    this.css.top = 100 + window.pageYOffset;
    this.css.left = 100;  
  } else {
    this.css.top = 100 + window.pageYOffset;
    this.css.left = 100;
  }
  if(ie4||dom) old = (this.css.visibility != "visible")?0:1;
  if(ns4) old = (this.css.visibility!="show")?0:1; 
  if(ie4||dom) this.css.visibility = (old==1)?"hidden":"visible";
  if(ns4) this.css.visibility = (old==1)?"hide":"show";
} 

// Disattiva (nasconde) un livello quando è visibile
function disattiva(id) {
  var dom = (document.getElementById) ? true: false;
  var ie4 = (document.all) ? true : false;		    // Identifica Internet Explorer 4 o succ.
  var ns4 = (document.layers) ? true : false;		    // Identifica Netscape Navigator 4 o succ.
  if (dom) {this.css = document.getElementById(id).style;}
  else if (ie4) {this.css = document.all[id].style;} 
  else if (ns4) {this.css = document.layers[id];}
  if(ie4||dom) old = (this.css.visibility != "visible")?0:1;
  if(ns4) old = (this.css.visibility!="show")?0:1; 
  if(ie4||dom) this.css.visibility = (old==1)?"hidden":"hidden";
  if(ns4) this.css.visibility = (old==1)?"hide":"hide";
} 




