/*
'==========================================
' 2mlib -> javascript -> common.js
'
' Funzioni client-side generali
'
' 2004 Copyright - Dueemmelab
'==========================================
*/


// GESTIONE COOKIE
//==========================================

var COOKIE_PATH="/";

//SCRIVI UN COOKIE
function createCookie(name,value,days) {
  if (days) {
    var date = new Date();
    date.setTime(date.getTime()+(days*24*60*60*1000));
    var expires = "; expires="+date.toGMTString();
  }
  else expires = "";
  //ASP cookie (=encodeURI è già eseguito da params_createCookie)? Cerco un quarto parametro..
  if (!(arguments.length==4 && arguments[3]==true)) {
  	name = encodeURIComponent(name)
  	value= encodeURIComponent(value)
	}
	//Gestisce caratteri speciali per ASP (che altrimenti li converte!)
	name=name.replace(/_/g,'%5F');
	name=name.replace(/\//g,'%2F');
	name=name.replace(/\./g,'%2E');
	document.cookie = name+"="+value+expires+"; path="+ COOKIE_PATH;
}

//LEGGI UN COOKIE
function readCookie(name) {
	//Gestisce gli underscore per ASP (che altrimenti li converte!)
 	var nameEQ = name.replace(/_/g,'%5F');
  nameEQ=nameEQ.replace(/\//g,'%2F');
  nameEQ=nameEQ.replace(/\./g,'%2E');
  nameEQ=nameEQ+ "=";
  var ca = document.cookie.split(';');
  for(var i=0;i < ca.length;i++) {
    var c = ca[i];
    while (c.charAt(0)==' ')
    	c = c.substring(1,c.length);
    if (c.indexOf(nameEQ) == 0) {
    	return c.substring(nameEQ.length,c.length);}
  }
  return null;
}

//CANCELLA UN COOKIE
function eraseCookie(name) {
	createCookie(name,"",-1);
}

// SALVATAGGIO DEI PARAMETRI DELLA PAGINA
//==========================================

//Salva i parametri usati da una pagina su un cookie
//PARAMETRI:
//path - è il path che viene salvato sul cookie
//pagename - è il nome del cookie
//parametri seguenti - sono i "name" degli elementi (più che altro campi input) di cui salvare il valore
//ATTENZIONE: non salvare parametri sensibili!!
function params_createCookie(pagename) {
	var i,j,els,ck_val;
	if (arguments.length>0) ck_val='';
	for (i=2;i<arguments.length;i++) {
		els=document.getElementsByName(arguments[i]);
		for (j=0;j<els.length;j++)
			ck_val+=encodeURIComponent(els[j].name) +'=' +encodeURIComponent(els[j].value) +'&';
	}
	if (ck_val) {
		ck_val=ck_val.slice(0,ck_val.length-1);
		return createCookie(pagename,ck_val,30,true);
	}
	else return false;
}
//Elimina i parametri salvati
function params_eraseCookie(pagename) {
	return eraseCookie(pagename);
}


// OPERAZIONI SUI FORM
//==========================================

//ELIMINA IL CONTENUTO (O DESELEZIONA) L'ELEMENTO DI UN FORM
function deleteValue(obj) {
	var i;
	//Se si utilizza la proprietà 'id' (e non 'name') nel tag form
	if (typeof (obj)!='object' && typeof (obj)=='string') { var o=document.getElementById(obj);} else {var o=obj;}
	switch (o.type) {
		case 'select-one':
			o.selectedIndex=0;
			break
		case 'select-multiple':
			o.selectedIndex=-1;
			break
		case 'checkbox':
		case 'radio':
			o.checked=false;
			break
		case 'text':
		case 'password':
		case 'file':
		case 'textarea':
			o.value="";
			break
	}
	return true;
}
/*ABILITA/DISABILITA I CAMPI DELL'OGGETTO FORM
	Tutti gli argomenti di enableFields sono stringhe.
	EnableFlag						:e' un flag che indica se attivare (true) o disattivare (false) gli elementi passati
	(parametri successivi):sono direttamente gli oggetti oppure le proprietà ID degli elementi del form che vengono attivati/disattivati.
	ES (dentro un tag input type=radio) disabilita un campo:
	onClick="enableFields(false,'ID del campo1 da disabilitare',campo2_da_disabilitare);"
	ES (dentro un tag input type=button) abilita un campo:
	onClick="enableFields(true,'ID del campo1 da disabilitare',campo2_da_abilitare');"
*/
function enableFields(EnableFlag)
{
	if (arguments.length< 2) {
		alert("Funzione EnableFields:\tparametri insufficenti");
		return false;
	}
	else {
		if (EnableFlag!=true) {EnableFlag==false};
		for (var i=1; i<arguments.length; i++)
		{	var elem=arguments[i];	//per ogni argomento passato alla funzione
			//Se non ho già un oggetto recupera elemento da ID
			if (typeof (elem)!='object' && typeof (elem)=='string') {var obj=document.getElementById(elem);} else {var obj=elem;}
			if ( (typeof obj.length!="undefined") && (typeof obj[0].name=="string") ) {
				for (var j=0; j<obj.length;j++)
					obj[j].disabled=!EnableFlag;
					//if (EnableFlag) {obj[j].style.backgroundColor=bgColorOriginal;} else {obj[j].style.backgroundColor=bgColorDisabled;}
			}
			else {
				obj.disabled=!EnableFlag;
				//if (EnableFlag) {obj.style.backgroundColor=bgColorOriginal;} else {obj.style.backgroundColor=bgColorDisabled;}
			}
		}
		return true;
	}
}

//CONTROLLA SE UN GRUPPO DI CHECKBOX È SELEZIONATO (ALMENO UNA SELEZIONE) OPPURE NO
function isCheckboxSelected(CBoxField)
{	var i;
	var status;
	if (typeof(CBoxField.length)!='undefined') {
		status=false;
		for (i=0;(i<CBoxField.length) && !(status);i++){
			if (CBoxField[i].checked)
				status=true;
		}
	}
	else {status=CBoxField.checked;}
	return status;
}

//ATTIVA/DISATTIVA TUTTI I CHECKBOX SINGOLI O DI UN GRUPPO
function CheckboxCheckAll(CBoxField,BolStatus)
{
	var i;
	if (BolStatus!=true) {BolStatus=false;}
	if (typeof(CBoxField.length)!='undefined') {
		for (i=0;i<CBoxField.length;i++){
			CBoxField[i].checked=BolStatus;
		}
	}
	else {CBoxField.checked=BolStatus;}
	return BolStatus;
}


// OPERAZIONI SUL DOM: VARIE
//==========================================

/*INTERCETTA UN TASTO PREMUTO E RITORNA IL CODICE DECIMALE DEL CARATTERE PREMUTO
	ES: onKeyPress="if (keypressed(event))=='97' {alert('Tasto premuto: a');} */
function keyPressed(e) {
	var code='';
 	if (e.which)
		code= e.which;	//Mozilla
	else
		code = window.event.keyCode;	//IE
	return (code);
}

//IMPOSTA UNO STILE (DEFINITO IN UN CSS) AD UN ELEMENTO HTML
function setClassName(objIdx, classNamex) {
	document.getElementById(objIdx).className=classNamex;	
}

// OPERAZIONI SUL DOM: CONTENUTO ELEMENTI
//==========================================

//INCREMENTA/DECREMENTA DI intValue IL CONTENUTO (STRINGA NUMERICA) DI UN CONTATORE
function js_sum_string_counter(idx,intValue) {
	if (document.getElementById(idx)) {
		var i=eval(document.getElementById(idx).innerHTML);
		//Non scendere sotto zero
		//if ((i+intValue)>=0)
			document.getElementById(idx).innerHTML = ""+(i+intValue);
		//else
		//	document.getElementById(idx).innerHTML = "0";
	}
}
//INCREMENTA/DECREMENTA DI intValue IL CONTENUTO (NUMERICO) DI UN CONTATORE
function js_sum_counter(idx,intValue) {
	if (document.getElementById(idx)) {
		var i=document.getElementById(idx).value;
		document.getElementById(idx).value =(parseInt(i)+intValue);
	}
}
//SOVRASCRIVE-CONCATENA UNA STRING AL CONTENUTO DI UN ELEMENTO
//idx: id dell'elemento interessato
//valuex: valore da concatenare o sovrascrivere
//resetflag: flag concatena-sovrascrivi
function js_update_innerhtml(idx,valuex,resetflag) {
	if (document.getElementById(idx))
		if (resetflag==true) {//Sovrascrivi
			document.getElementById(idx).innerHTML = valuex;
		}
		else {//Concatena contenuto
			var i=document.getElementById(idx).innerHTML;
			document.getElementById(idx).innerHTML = i +''+ valuex;
		}
}

// OPERAZIONI SUL DOM: NASCONDI/VISUALIZZA ELEMENTI
//==========================================

//Nascondi/Visualizza un elemento con id e se abilitato leggi/scrivi
//lo stato di visualizzazione dell'elemento su di un cookie (con nome idx).
//Ritorna true quando l'oggetto viene visualizzato, false se viene nascosto.
//PARAMETRI:
//displayvalue: 'block' | 'inline'
//idx: id dell'elemento da nascondere/visualizzare
//cookieflag: attiva/disattiva la lettura/scrittura su cookie
//NOTE: al caricamento della pagina l'elemento idx è nascosto (.display non è settata)
function hideobj(displayvalue,idx) {
	var cookieflag='';
	var curdisp;
	var o=document.getElementById(idx);
	if (displayvalue!='inline') displayvalue='block';
	//Gestione con cookie?
	if (arguments.length==3)
		if (arguments[2]=='R' || arguments[2]=='W') cookieflag=arguments[2];
	if (o) {
		switch (cookieflag) {
			case 'R':
				//Leggi stato di visualizzazione dal cookie (non switchare);
				curdisp=readCookie(idx);
				if (curdisp!='block' && curdisp!='inline') curdisp='none';
				break;
			default:
				//Switcha visualizzazione
				curdisp=o.style.display;
				if (!curdisp || curdisp=='block' || curdisp=='inline')
					curdisp='none';
				else
					curdisp=displayvalue;
				//Salva stato di visualizzazione sul cookie
				if (cookieflag=='W') createCookie(idx,curdisp,365);
				break;
		}
		o.style.display=curdisp;
		if (curdisp!='none')
			return true;
		else
			return false;
	}
	else
		return false;
}

//Esegue hideobj su un elemento e aggiorna il contenuto dell'elemento
//che ha generato la richiesta
function hidemsg(displayvalue,hook_idx,view_msg,hide_msg,idx) {
	var ret;
	var el=document.getElementById(hook_idx);
	if (el) {
		ret=hideobj(displayvalue,idx,arguments[5]);
		if (ret)	//Se è visualizzato, stampa messaggio "Nascondi"
			el.innerHTML=hide_msg
		else			//Se è nascosto, stampa messaggio "Visualizza"
			el.innerHTML=view_msg
		return ret;
	}
	else return false;
}
