/*==========================================
' 2mlib: /2mlib_extension.js
'
' Funzioni client-side che estendono la libreria js
' ma che sono specifiche SOLO per questa applicazione web
'
' 2004 Copyright - Dueemmelab
'==========================================*/

// Da usare invece di 'window.onload=function(){}'
// x evitare di sovrascrivere un'eventuale funzione precedente
// ES: addLoadEvent(function{ alert('test'); });
function addLoadEvent(func) {
  var oldonload = window.onload;
  if (typeof window.onload != 'function') {
	window.onload = func;
  } else {
	window.onload = function() {
	  if (oldonload) {
		oldonload();
	  }
	  func();
	}
  }
}

// Al caricamento della pagina aggiunge il cookie
// impostando in ILL_LAN la lingua corrente del sistema
// NOTA: solo se non è già presente un cookie con questa informazione
//addLoadEvent(function(){
	if ( (readCookie('ILL_LAN')==null) || (readCookie('ILL_LAN')=='' ) ) {
		createCookie('ILL_LAN',getLanguage(),'365');
		
		location.reload(true);
		//location.href='index.asp';
	}
//});

// Restituisce la lingua del browser 
// (o del sistema? o impostata dall'utente?  Da verificare!!)
//==========================================
function getLanguage(){
    var lan=navigator.language? navigator.language : navigator.userLanguage
    lan=lan.slice(0,2)		
    return lan.toLowerCase();
}

// Imposta il cookie alla lingua specificata
// (la prossima richiesta che verrà inviata al server
//  conterrà questa informazione aggiornata)
// NOTA: es: lan='it'
//		 es: lan='en'
function setLanguageCookie(lan){
	createCookie('ILL_LAN',lan,'365');		
}

/*=====================================================================
sIFR
=======================================================================*/
//spostato in footer.asp in quanto i settaggi sono dipendenti dall'hotel

// POP-UP
//==========================================

//Apre una popup selezionando tra vari set di impostazioni
function popup(URL,set_label) {
	var settings
	switch (set_label){
		case '':
			settings='channelmode=0,directories=0,fullscreen=0,width=400,height=400,top=100,left=100,location=0,menubar=0,resizable=1,scrollbars=1,status=0,titlebar=0,toolbar=0';
			break
		default:
			settings='channelmode=,directories=,fullscreen=,width=,height=,top=,left=,location=,menubar=,resizable=,scrollbars=,status=,titlebar=,toolbar=';
			break
	}
	return void(window.open(URL,'_blank',settings));
}

//Visualizza una popup di confirm selezionando il messaggio tra un set predefinito
function confirme(set_label) {
	var msg
	switch (set_label){
		case '':
			msg='';
			break
		default:
			msg='ATTENZIONE: eliminare definitivamente questo oggetto?';
			break
	}
	return confirm(msg);
}

// SALVATAGGIO STATO APPLICAZIONE
//==========================================

var hide_note_msg,view_note_msg;
hide_note_msg='<img class="icon9" src="..\/_img\/admin\/icon_minus.gif"> Nascondi<br \/><br \/>';
view_note_msg='<img class="icon9" src="..\/_img\/admin\/icon_plus.gif"> Visualizza';
var hide_option_msg,view_option_msg;
view_option_msg='<img class="icon9" src="..\/_img\/admin\/icon_plus.gif"> Opzioni';
hide_option_msg='<img class="icon9" src="..\/_img\/admin\/icon_minus.gif"> Opzioni';

//Legge (onload) dai cookie lo stato di visualizzazione e aggiorna gli elementi indicati
function load_sessionstate() {
	var opened=false;
	if (hideobj('block','SUBMENU_FASTPREN','R')) opened=false;
	if (hideobj('block','SUBMENU_STANZE','R')) opened=true;
	if (!opened) {hidemenu('SUBMENU_STANZE');opened=false;} //apri sottomenu di default
	if (hideobj('block','SUBMENU_CAMERE','R')) opened=true;
	if (hideobj('block','SUBMENU_TIPOLOGIE','R')) opened=true;
	if (hideobj('block','SUBMENU_PRENOTAZIONI','R')) opened=true;
	if (!opened) {hidemenu('SUBMENU_PRENOTAZIONI');opened=false;} //apri sottomenu di default
	if (hideobj('block','SUBMENU_PROMOZIONI','R')) opened=true;
	if (!opened) {hidemenu('SUBMENU_PROMOZIONI');opened=false;} //apri sottomenu di default
	if (hideobj('block','SUBMENU_CAT_PROMO','R')) opened=true;
	if (hideobj('block','SUBMENU_NEWS','R')) opened=true;
	if (!opened) {hidemenu('SUBMENU_NEWS');opened=false;} //apri sottomenu di default
	if (hideobj('block','SUBMENU_OP','R')) opened=true;
	if (!opened) {hidemenu('SUBMENU_OP');opened=false;} //apri sottomenu di default
	if (hideobj('block','SUBMENU_SITO','R')) opened=true;	

	hidemsg('inline','formnote_link0',view_note_msg,hide_note_msg,'formnote0','R');
	hidemsg('inline','formnote_link1',view_note_msg,hide_note_msg,'formnote1','R');
	hidemsg('inline','formnote_link2',view_note_msg,hide_note_msg,'formnote2','R');
	hidemsg('inline','formnote_link3',view_note_msg,hide_note_msg,'formnote3','R');
	hidemsg('inline','formnote_link4',view_note_msg,hide_note_msg,'formnote4','R');
}

//Nasconde un elemento (generico)
function hideitem(displayvalue,idx) {hideobj(displayvalue,idx,'W');}

//Salva un cookie (generico)
function cookiesave(namex,valuex) {return createCookie(namex,valuex,365);}

//Nasconde uno dei sottomenu
function hidemenu(idx) {hideobj('block',idx,'W');}

//Nasconde una delle sezioni "Note" inserite nei form
function hidenote(hook_idx,idx) {hidemsg('inline',hook_idx,view_note_msg,hide_note_msg,idx,'W');}

//Nasconde una delle sezioni "Option" inserite nei form
function hideoption(hook_idx,idx) {hidemsg('inline',hook_idx,view_option_msg,hide_option_msg,idx,'W');}

function htmlencode(s) {
	var str = new String(s);
	str = str.replace(/&/g, "&amp;");
	str = str.replace(/</g, "&lt;");
	str = str.replace(/>/g, "&gt;");
	str = str.replace(/"/g, "&quot;");
	return str;
}

function htmldecode(s) {
	var str = new String(s);
	str = str.replace(/&amp;/g, "&");
	str = str.replace(/&lt;/g, "<");
	str = str.replace(/&gt;/g, ">");
	str = str.replace(/&quot;/g, "\"");
	return str;
}

function jsdecode(s) {
	var str = new String(s);
	str = str.replace(/&acute;/g, "'");
	return str;
}


/* restituisce un'oggetto js Date corrispondente 
   alla data in formato stringa 'gg/mm/aaaa' */
function parseDate(str) {	
	var str_split = str.split('/');
	if (str_split.length==3)
		return (new Date(str_split[2],str_split[1]-1,str_split[0],0,0,0,0));
	else
		return null;
}

function isObject(a) {
    return (a && typeof a == 'object');
}

/** FUNZIONI PER LO SWAP DI IMMAGINI **/
function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}	
function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
	d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}	
function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}
function MM_preloadImages() { //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
	var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
	if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

//Imposta l'immagine di background di un'elemento
//ATTENZIONE: per utilizzare questa funzione bisogna includere Mootools
function setBackImg(obj, img_path) {
	$(obj).setStyle('background', 'url('+img_path+') no-repeat bottom right');
}

/** FUNZIONI PER LA GESTIONE DELLA VALIDAZIONE DI FORM CON DATE **/

/* 	Setta delle'elemento 'targetObj' a quella presente nell'elemento 'sourceObj'
	(eccetto il caso in cui vi sia già una data valida in 'targetObj') */
function setRelatedDate(sourceObj,sourceName,targetObj) {
	//controllo se mi è stato passato un oggetto o l'id di un elemento
	if (!isObject(sourceObj)) sourceObj=document.getElementById(sourceObj);	
	if (!isObject(targetObj)) targetObj=document.getElementById(targetObj);
	
	//se non ha già un valore valido
	if (targetObj.value=='' || targetObj.value=='gg/mm/aaaa') {
		//setto il nuovo valore a quello dell'oggetto sorgente
		targetObj.value = sourceObj.value;
		return true;
	}

	return false;
}

/* 	Se la data presente all'interno dell'elemento sourceObj
	è antecedente la data odierna ritorna false, altrimenti ritorna true */
function greaterThanToday(sourceObj,sourceName) {
	//controllo se mi è stato passato un oggetto o l'id di un elemento
	if (!isObject(sourceObj)) sourceObj=document.getElementById(sourceObj);	
	higlightFormElement(sourceObj,false);
	
	//se il campo non è vuoto
	if (sourceObj.value!='')
		//contollo se la data sorgente è valida
		if (isDate(sourceObj.value,sourceName)) {
			var nowDate = new Date();
			nowDate.setHours(0);
			nowDate.setMinutes(0);
			nowDate.setSeconds(0);
			nowDate.setMilliseconds(0);
			var sourceDate = parseDate(sourceObj.value);
			if (sourceDate < nowDate) {
				higlightFormElement(sourceObj,true);
				alert('ATTENZIONE: Il campo \''+sourceName+'\' deve avere una Data posteriore o uguale a quella odierna.');
				return false;
			}
			else {
				//ok
				return true;
			}
		} else {		
			//data non valida
			higlightFormElement(sourceObj,true);				
			return false;
		}
		
	//campo vuoto
	return true;
}

/* 	Se la data presente all'interno dell'elemento sourceObj
	è antecedente la data odierna ritorna false, altrimenti ritorna true */
function greaterThan(firstObj,firstName,secondObj,secondName) {
	//controllo se mi è stato passato un oggetto o l'id di un elemento
	if (!isObject(firstObj)) firstObj=document.getElementById(firstObj);
	if (!isObject(secondObj)) secondObj=document.getElementById(secondObj);
	
	higlightFormElement(firstObj,false);
	higlightFormElement(secondObj,false);
	
	if ( firstObj.value!='' && secondObj.value!='' ) {
	
		//contollo se le due date sono valide
		if (!isDate(firstObj.value,firstName) || !isDate(secondObj.value,secondName)) {
			higlightFormElement(firstObj,true);
			higlightFormElement(secondObj,true);
			return false;
		}
		
		//controllo che la seconda data sia posteriore o uguale alla prima		
		var firstDate = parseDate(firstObj.value);
		var secondDate = parseDate(secondObj.value);
		if (firstDate > secondDate) {
			higlightFormElement(firstObj,true);
			higlightFormElement(secondObj,true);
			alert('ATTENZIONE: La Data del campo \''+firstName+'\' non può essere posteriore a quella del campo \''+secondName+'\'.');
			return false;
		}
	}
	
	//uno dei due campi è vuoto
	return true;
}

/* imposta il colore di sfondo dell'elemento del form indicato */
function higlightFormElement(inputObj, error) {
	var backgroundStd='#ffffff';				//Colore originale dello sfondo dell'elemento
	var textStd='#000000';						//Colore originale del testo dell'elemento
	var backgroundError='#ff0000';				//Colore che assumerà l'elemento del form in caso di errore
	var textError='#ffffff';					//Colore del testo per l'elemento del form in caso di errore
	var textColor;
	var backgroundColor;	
	var updateParent=true;
	
	if (!isObject(inputObj)) inputObj=document.getElementById(inputObj);					
			
	if (error) {
		textColor=textError;
		backgroundColor=backgroundError;
	} else {	
		textColor=textStd;
		backgroundColor=backgroundStd;
	}
	
	if (updateParent==true) {
		var parent = inputObj.parentNode;
		parent.style.backgroundColor=backgroundColor;
		parent.style.color=textColor;
		//imposto il colore anche per tutti i figli
		//del nodo padre dell'elemento di interesse
		
		for (i=0;i<parent.childNodes.length;i++) {
			if (parent.childNodes[i].nodeType == document.ELEMENT_NODE) {
				parent.childNodes[i].style.backgroundColor=backgroundColor;
				parent.childNodes[i].style.color=textColor;
			}			
		}
	} else {	
		inputObj.style.backgroundColor=backgroundColor;
		inputObj.style.color=textColor;
	}
}


/* Visualizza una finestra js per l'inserimento opzionale del codice promozionale.
Se l'utente pereme 'Annulla' la funzione ritorna false, altrmenti ritorna true. */
function promptCodicePromozionale(field) {
	var fieldValue = prompt("Inserendo un codice promozionale sarà possibile\n"+
							"accedere a promozioni aggiuntive.\n\nProcedere?", "Codice Promozionale");
	if (fieldValue==null)
		return false;
	else {
		if (fieldValue!='Codice Promozionale') {
			if (!isObject(field)) field=document.getElementById(field);
			field.value = fieldValue;
		}
		return true;
	}
}
