function trim(stringToTrim) {
	return stringToTrim.replace(/^\s+|\s+$/g,"");
}
function ltrim(stringToTrim) {
	return stringToTrim.replace(/^\s+/,"");
}
function rtrim(stringToTrim) {
	return stringToTrim.replace(/\s+$/,"");
}

function getE(id) {
	return document.getElementById(id);
}

mw=null;
function openWindowDimBars(FileName,w,h,barre) {
	myWindow=window.open(FileName,'','toolbar=0,location=0,directories=0,status=0,menubar=0,scrollbars='+barre+',resizable=0,top=10,left=10,width='+w+',height='+h);
	return myWindow;
}

function confirmLink(theLink, confirmMsg) {
	if (typeof(window.opera) != 'undefined') {
		return true;
	}

	var is_confirmed = confirm(confirmMsg);

	return is_confirmed;
}

function checkemail(email_addr) {
	var testresults = false;
	var filter=/^[\'+\\./0-9A-Z^_\`a-z{|}~\-]+@[a-zA-Z0-9_\-]+(\.[a-zA-Z0-9_\-]+){1,3}$/i;
// '
	if (filter.test(email_addr)) {
		testresults = true;
	}

	return testresults;
}

function isFunction(a) {
	return typeof a == 'function';
}
function isObject(a) {
	return (a && typeof a == 'object') || isFunction(a);
}
function isArray(a) {
	return isObject(a) && a.constructor == Array;
}

function is_valid_username(str, min_chars, max_chars) {
	var filter=/^[a-zA-Z0-9]{1,}[\.|\_|-]?[a-zA-Z0-9]{1,}$/i
	if (filter.test(str) && str.length>=min_chars) {
		if (max_chars>=min_chars) {
			if (str.length<=max_chars) {
				return true;
			}
			else {
				return false;
			}
		}
		else {
			return true;
		}
	}
	else {
		return false;
	}
}

function SetAllCheckBoxes(FormName, FieldName, CheckValue)
{
	if(!document.forms[FormName]) { return; }
	var objCheckBoxes = document.forms[FormName].elements[FieldName];
	if(!objCheckBoxes) { return; }
	var countCheckBoxes = objCheckBoxes.length;
	if(!countCheckBoxes) {
		objCheckBoxes.checked = CheckValue;
	} else {
		for(var i = 0; i < countCheckBoxes; i++) {
			objCheckBoxes[i].checked = CheckValue;
		}
	}
}

/* inserisce un elemento flash */
function printVFlash(divid, divclass, pureHtml, nomefile, width, height, version, fallback, commonmarkup) {
	var xclose = (pureHtml)? '' : ' /';
	var isMSIE = /*@cc_on!@*/false;
	var divtag;
	var str;
	var commonstr;

	if (!version) {
		version = '8,0,0,0';
	}
	if (!fallback) {
		fallback = 'Please install Flash Player plugin.';
	}

	divtag = '<div';
	if (divid.length > 0) { divtag += ' id="' + divid + '"'; }
	if (divclass.length > 0) { divtag += ' class="' + divclass + '"'; }
	divtag += '>';

	commonstr = ('<param name="quality" value="high"' + xclose + '>');
	if (commonmarkup) {
		commonstr += commonmarkup;
	}

	if (isMSIE) {
		str = ('<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=' + version);
		str += ('" width="' + width + '" height="' + height + '">');
		str += ('<param name="movie" value="' + nomefile + '"' + xclose + '>');
		str += (commonstr + '<\/object>');
	} else {
		str = ('<object data="' + nomefile + '" width="' + width + '" height="' + height);
		str += ('" type="application/x-shockwave-flash">' + commonstr);
		str += ('<param name="pluginurl" value="http://www.macromedia.com/go/getflashplayer"' + xclose + '>');
		str += (fallback + '<\/object>');
	}

	document.write(divtag + str + '<\/div>');
}

// stampa della pagina
function print_page() {
	window.print();
	return false;
}

function cambia_faq(i) {
	if(getE('faq_risposta'+i).className == 'risposta_hide')
	{
		getE('faq_risposta'+i).className = 'risposta_show';
		getE('faq_link'+i).innerHTML = lang_00005;
	}
	else
	{
		getE('faq_risposta'+i).className = 'risposta_hide';
		getE('faq_link'+i).innerHTML = lang_00004;
	}
	return false;
}

function prepara_faq(num)
{
	var i, domanda, ank;
	for (i = 1; i <= num; i++) {
		cambia_faq(i);
		getE('faq_linkc' + i).className = 'link';
		domanda = getE('faq_domanda' + i);
		if (domanda) {
			ank = document.createElement('a');
			ank.href = '#';
			ank.innerHTML = domanda.innerHTML;
			while (domanda.firstChild) {
				domanda.removeChild(domanda.firstChild);
			}
			domanda.appendChild(ank);
			ank.onclick = (function(n){
				return function() { return cambia_faq(n); }
			})(i);
		}
	}
	return false;
}

function initSpecialLinks() {
	var i;
	var lk;
	if (document.getElementsByTagName) {
		lk = document.getElementsByTagName('a');
		if (lk) {
			for (i=0; i < lk.length; i++) {
				if (lk[i].rel.indexOf('external') != -1) {
					lk[i].target = '_blank';
					lk[i].title = lang_00003;
				}
			}
		}
	}
}

// caricamento di Google Maps nella pagina della cartina delle localita'. il parametro "show_resort", se impostato a un numero che corrisponde a una localita', centra la mappa su quella particolare localita'
function sardinia_map_load(lat, lng, data, show_resort) {
	if (GBrowserIsCompatible()) {
		var map = new GMap2(document.getElementById("goog_maps"));
		map.setMapType(G_NORMAL_MAP);
		map.addControl(new GLargeMapControl());
		map.addControl(new GMapTypeControl());
		
		map.setCenter(new GLatLng(lat, lng), 9);
		goog_maps_markers = new MarkerManager(map);		// NOTA: la classe "MarkerManager" va NECESSARIAMENTE istanziata subito dopo il "setCenter"!!
		goog_maps_markers.clearMarkers();
		
		var show_resort_html = null;		// conterra l'html dell'infoWindow della localita' selezionata, se presente
		var show_resort_lat = null;
		var show_resort_lng = null;
		var markers = [];
		
		for (var i=0; i<data.length; i++) {
			if (show_resort==0 || show_resort!=parseInt(data[i].id)) {
				var this_marker = new GMarker(new GLatLng(data[i].lat, data[i].lng), {'title': data[i].name});
				
				var html =	' <div class="inmap_name">'+data[i].name+'</div>'+
							' <div class="inmap_num">'+lang_00006.replace('[replace_num]', data[i].struct)+'</div> ';
				
				if (data[i].img!=null && data[i].img.length>0) {
					html += ' <div class="inmap_pic"><img src="'+data[i].img+'" alt="" /></div> ';
				}
				
				html +=	' <div class="inmap_link"><a href="resorts.php?page_id='+data[i].id+'">'+lang_00001+'</a></div> ';
				
				if (data[i].struct>0) {
					html +=	' <div class="inmap_link"><a href="search.php?f=resort&amp;loc='+data[i].id+'">'+lang_00002+'</a></div> ';
				}
				
				this_marker.bindInfoWindowHtml(html);
				markers.push(this_marker);
				this_marker = null;
			}
			else if (show_resort>0 && show_resort==parseInt(data[i].id)) {
				show_resort_lat = data[i].lat;
				show_resort_lng = data[i].lng;
				
				show_resort_html =	' <div class="inmap_name">'+data[i].name+'</div>'+
									' <div class="inmap_num">'+lang_00006.replace('[replace_num]', data[i].struct)+'</div> ';
				if (data[i].img!=null && data[i].img.length>0) {
					show_resort_html += ' <div class="inmap_pic"><img src="'+data[i].img+'" alt="" /></div> ';
				}
				
				show_resort_html +=	' <div class="inmap_link"><a href="resorts.php?page_id='+data[i].id+'">'+lang_00001+'</a></div> ';
				
				if (data[i].struct>0) {
					show_resort_html +=	' <div class="inmap_link"><a href="search.php?f=resort&amp;loc='+data[i].id+'">'+lang_00002+'</a></div> ';
				}
			}
		}
		
		if (markers.length>0) {
			goog_maps_markers.addMarkers(markers, 0);
		}
		markers = null;
		
		goog_maps_markers.refresh();
		
		
		// visualizza il marker della localita' selezionata, con l'infoWindow esploso
		if (show_resort>0 && show_resort_lat!=null && show_resort_lng!=null && show_resort_html!=null) {
			var marker = new GMarker(new GLatLng(show_resort_lat, show_resort_lng));
			GEvent.addListener(marker, "click",	function() {
															this.openInfoWindowHtml(show_resort_html);
														}
			);
			map.addOverlay(marker);
			marker.openInfoWindowHtml(show_resort_html);
			marker = null;
		}
	}
}

// apertura delle tab nella scheda immobili
function structure_tab(tab, lat, lng) {
	if (isObject(getE('tab_'+tab))) {
		getE('tab_'+tab).className = 'tab_content_'+tab;
		getE('tab_content').className = 'tab_selected_'+tab;
		
		if (tab=='d') {		// inizializza la mappa, se non gia' fatto
			structure_tab__load_googmaps(lat, lng);
		}
	}
	
	return false;
}

// scheda immobile - inizializza la mappa all'apertura della tab
function structure_tab__load_googmaps(lat, lng) {
	if (GBrowserIsCompatible() && !structure_page_googmaps_loaded) {
		var map = new GMap2(document.getElementById("goog_maps"));
		map.setMapType(G_SATELLITE_MAP);
		map.addControl(new GLargeMapControl());
		map.addControl(new GMapTypeControl());
		
		map.setCenter(new GLatLng(lat, lng), 17);
		var marker = new GMarker(new GLatLng(lat, lng));
		GEvent.addListener(marker, "click",	function() {
														map.setCenter(new GLatLng(lat, lng), 17);
													}
		);
		map.addOverlay(marker);
		marker = null;
		
		structure_page_googmaps_loaded = true;
	}
}

// apertura delle tab delle tariffe - scheda immobili
function structure_seasontab(tab) {
	if (isObject(getE('div_seasontab_content_'+tab))) {
		getE('div_seasontab_selected').className = 'seasontab_selected_'+tab;
	}
	
	return false;
}

/*
	Effettua la chiamata AJAX utilizzando JQuery e JSON.
	Autore:	Cristian Zuddas
	Data:	2007-11-19
	
	Params:
		query_str			string			Parametri da passare allo script che gestisce le risposte AJAX
		is_admin			bool			TRUE significa che questa funzione e' stata richiamata dal CMS
		func_success		function		Funzione da richiamare in caso di successo; deve avere un parametro nel quale viene inserito il risultato JSON della richiesta. Esempio: function(oResponse) {...}
		func_error			function		Opzionale, funzione da richiamare in caso di errore. Se viene passato un valore il cui tipo non e' "function", ne viene presa una di default
		func_complete		function		Opzionale, funzione da richiamare una volta completata la richiesta, sia in caso di successo sia in caso di errore. Se viene passato un valore il cui tipo non e' "function", ne viene presa una di default
	
	Note:
		Deve essere definita una variabile "ajax_main_script" (string) che contiene il nome/URL
		dello script gestore delle risposte.
*/
function doAjax(query_str, is_admin, func_success, func_error, func_complete) {
	if (typeof func_success=='function') {
		var url = ajax_main_script;
		if (is_admin) {
			url = '../'+url;
		}
		
		if (typeof func_error!='function') {
			func_error = function() {
										alert("Si e' verificato un errore. Ti preghiamo di riprovare in un secondo momento.");
									};
		}
		
		if (typeof query_str!='string')
			query_str = '';
		
		$.ajax({
			type: "POST",
			url: url,
			data: query_str,
			dataType: "json",
			success: func_success,
			error: func_error,
			complete: func_complete
		});
	}
	else {alert('doAjax error: success function is not defined.');}
}

// memorizzazione dell'immobile negli appunti
function structure_save(id) {
	if (id>0) {
		doAjax(
			'a_ajax=1&id='+encodeURIComponent(id),
			false,
			function(oResponse) {
				if (oResponse>=0) {
					getE('saved_structures_lnk').innerHTML = oResponse;
				}
				alert(lang_00007);
			},
			null, null
		);
	}
	
	return false;
}

// cancellazione di una struttura dagli appunti
function saved_structures_delete(id) {
	if (id>0 && confirm(lang_00008)) {
		doAjax(
			'a_ajax=2&id='+encodeURIComponent(id),
			false,
			function(oResponse) {
				if (oResponse>=0) {
					getE('saved_structures_lnk').innerHTML = oResponse;
					getE('immobili_list').removeChild(getE('structure_data_'+id));
					getE('immobili_list').removeChild(getE('structure_data_lower_'+id));
					
					if (oResponse==0) {
						getE('main_content').innerHTML = ' <div class="managed" id="managed_txt">'+lang_00009+'</div> ';
					}
				}
			},
			null, null
		);
	}
	else if (id==-1 && confirm(lang_00010)) {
		doAjax(
			'a_ajax=2&all=1',
			false,
			function(oResponse) {
				getE('saved_structures_lnk').innerHTML = '0';
				getE('main_content').innerHTML = ' <div class="managed" id="managed_txt">'+lang_00009+'</div> ';
			},
			null, null
		);
	}
	
	return false;
}

// caricamento di Google Maps nella pagina Dove siamo
function google_map_load() {
	if (GBrowserIsCompatible()) {
		var map = new GMap2(document.getElementById("goog_maps"));
		map.setMapType(G_HYBRID_MAP);
		map.addControl(new GLargeMapControl());
		map.addControl(new GMapTypeControl());
		
		map.setCenter(new GLatLng(39.285, 9.124765), 13);		// centramento della mappa un po' piu' un alto rispetto al marker, per evitare sovraposizione dei tasti sull'InfoWindow
		
		
		var marker = new GMarker(new GLatLng(39.270448, 9.124765));
		GEvent.addListener(marker, "click",	function() {
														this.openInfoWindowHtml(lang_00012);
													}
		);
		map.addOverlay(marker);
		marker.openInfoWindowHtml(lang_00012);
		marker = null;
	}
}
