	/**
	 * comboAJAX.js
	 *
	 * @author Emanuele Pogliani, Guido Campopiano - Etnoteam S.p.A
	 *
	 * @version 1.0 
	 * @date 11 luglio 2007
	 *
	 *
	 * @dipendenze esterne
	 *				bundles.js	v1.0 per i messaggi della funzione getXMLHttpObject
	 */
		
	
	/**
	 *
	 * Libreria di funzioni per utilities AJAX 
	 *
	 * # 1 #### Funzioni principali
	 * # 1.1 ## getXMLHttpObject 		: Funzione cross browser che istanzia un oggetto di tipo XMLHttpRequest
	 * # 1.2 ## innerHTMLJS			 	: innerHTML generalizzato per l'esecuzione dei javascripts (crossbrowser)
	 * # 1.3 X ## loadHTMLOnElementId	: Funzione che carica una porzione di codice HTML come response del submit di una form
	 * # 1.4 ## loadHTMLOnId			: Funzione che carica una porzione di codice HTML in un elemento 
	 */
	

//// # 1 #### ////	
	
	/**
	 * # 1.1 ## 
	 *
	 * Funzione cross browser che istanzia un oggetto di tipo XMLHttpRequest
	 *
	 * @return XMLHttpRequest
	 */
	function getXMLHttpObject() { 
		var objXMLHttp=null;
		if (window.XMLHttpRequest) {
			objXMLHttp = new XMLHttpRequest();
		}
		else if (window.ActiveXObject) {
			objXMLHttp = new ActiveXObject("Microsoft.XMLHTTP");
		}
		else {
			alert(_ajax_no_supported);
		}						
		return objXMLHttp;
	}	
	
	
	/**
	 * # 1.2 ## 
	 *
	 * Funzione crossbrowser che dato un oggetto con (eventualmente) un contenuto con
	 * uno script da eseguire, inserisce il contenuto e fa in modod che lo script venga eseguito
	 * 
	 * @param obj 			: oggetto contenitore
	 * @param content 	: contenuto
	 */
	function innerHTMLJS(obj,content) {
	
		if(typeof(obj) != 'object' && typeof(content) != 'string') return;
		obj.innerHTML = content;
		
		var scripts = obj.getElementsByTagName('script');
		
		if(scripts == false) return true;
		
		for (var i=0;i<scripts.length;i++) {
			var scriptclone = document.createElement('script');
			if(scripts[i].attributes.length > 0) {
				for (var j in scripts[i].attributes) {
					if(typeof(scripts[i].attributes[j]) != 'undefined'
						&& typeof(scripts[i].attributes[j].nodeName) != 'undefined'
						&& scripts[i].attributes[j].nodeValue != null
						&& scripts[i].attributes[j].nodeValue != '') {
						scriptclone.setAttribute(scripts[i].attributes[j].nodeName,scripts[i].attributes[j].nodeValue);
					}
				}
			}	
				
			scriptclone.text = scripts[i].text;
		
			if (navigator.userAgent.indexOf("Opera")>0) { 
				return; 
			}
			scripts[i].parentNode.replaceChild(scriptclone,scripts[i]);
		}
		return true;
	}
	
	
	/**
	 * # 1.3 ## 
	 *
	 * Funzione cross browser che carica in maniera asincrona un testo/html all'interno di un elemento specificato dal suo Id.
	 * NOTA: Per questioni di sicurezza i browser di solito non supportano indirizzi fuori dal dominio corrente.
	 * 
	 * @param formElORGetUrl : indirizzo di richiesta oppure oggetto form
	 * @param elementId 	 : elemento su cui caricare la risposta
	 * @param method		 : 'get' o 'post', se '' o non specificato allora consiedera formElORGetUrl come un oggetto form
	 *						   da cui ricavarsi i parametri da chiedere in remoto
	 */
	function loadHTMLOnElementId(formElORGetUrl, elementId, method) {
		var elementObj = document.getElementById(elementId);
		
		/* imposto la spinning wait icon */
		if (elementObj && method == null) {							
			elementObj.innerHTML = "<div class='spinning-wait'> </div>";
		}
		
		var request = getXMLHttpObject();
		
		var requestType = '';		
		var url = '';
		var isForm = false;
		
		if (method != null && method != '')	{		// questa è una semplice chiamata ad url
			requestType = method;					// method GET or POST
			url = formElORGetUrl;
		}
		else {	// questa è la FORM serializzata
			requestType = formElORGetUrl.method;	// method GET or POST specificato nella form
			url = formElORGetUrl.action + '?';
										
			for (var i = 0; i < formElORGetUrl.elements.length; i++) {
				if (formElORGetUrl.elements[i].type != 'button' && formElORGetUrl.elements[i].type != 'submit') {
					url += formElORGetUrl.elements[i].name + '=' + encodeURIComponent(formElORGetUrl.elements[i].value) + '&';
				}
			}
			//	elimino l'ultima ampersand
			url = url.substr(0, url.length - 1);	
			isForm = true;
		}		
		
		function processReqChange(elementId) {		
			if (elementObj == 'undefined') {
				alert(_ajax_object_error + ' > ' + elementId);	
			}		
			if (request.readyState == 4) {
				if (request.status == 200) {
					var txt = request.responseText;
					if(txt.indexOf("ERROR|") != -1){
						//	nel caso di errore nel catalogo durante le interazioni ajax la risposta
						//	inviata dal server è una stringa del tipo ERROR|<url_di_redirect>
						var iop = txt.indexOf("|");
						var url = txt.substr(iop + 1);
						window.location.href = url;																								
					}else{
						innerHTMLJS(elementObj, request.responseText);
					}										
				}
			}
		}
		if (request && elementObj) {						
			request.onreadystatechange = function () { processReqChange(elementId); }
			request.open(requestType, url, true);
			request.send(null);
		} else {
			if (isForm) formElORGetUrl.submit();
		}
	}

	/**
	 * # 1.4 ## 
	 *
	 * Funzione cross browser che carica in maniera asincrona un testo/html all'interno di un elemento specificato dal suo Id.
	 * NOTA: Per questioni di sicurezza i browser di solito non supportano indirizzi fuori dal dominio corrente.
	 * 
	 * @param url 				: indirizzo di richiesta
	 * @param requestType	: 'get' o 'post'
	 * @param elementId 	: elemento su cui caricare la risposta
	 */
	function loadHTMLOnIdForFlash(url, requestType, elementId, async) {
		var elementObj = document.getElementById(elementId);

		/* imposto la spinning wait icon */
		if (elementObj) {			
			//if (document.getElementById('spinning-wait') == undefined) {					
				elementObj.innerHTML = "<div class='spinning-wait'> </div>";
			//}
		}
		
		var request = getXMLHttpObject();
				
		function processReqChange(elementId) {		
			if (elementObj == 'undefined') {
				alert(_ajax_object_error + ' > ' + elementId);	
			}
			
			if (request.readyState == 4) 
			{
				if (request.status == 200) 
				{
					//document.getElementById(elementId).innerHTML = request.responseText;
					//alert('risposta server='+document.getElementById(elementId).innerHTML);
    			var result = request.responseText;
    			var mydata = result.split('|');
    			//alert('mydata='+mydata);
    			//alert('mydata[0]='+mydata[0]);
    			if (mydata[0] == 'flash')
    			{
    				//alert('call writeFlashObject');
    				writeFlashObject('flashcontent', mydata[1], mydata[2], mydata[3], mydata[4], mydata[5], mydata[6]);
    				writeDetailFooter('flashcontent', mydata[7], mydata[8], mydata[9], mydata[10]);			
    			}
    			else if (mydata[0] == 'image')
    			{
    				writeImageObject('flashcontent', mydata[1]);
    				writeDetailFooter('flashcontent', mydata[2], mydata[3], mydata[4], mydata[5]);			
    			}
				}
			}
		}
		
		if (request && elementObj) {						
			request.onreadystatechange = function () { processReqChange(elementId); }
			request.open(requestType, url, async);
			request.send(null);
			/*
			alert('result='+document.getElementById(elementId).innerHTML);
			var result = document.getElementById(elementId).innerHTML;
			alert(result);
			var mydata = result.split('|');
			//alert('mydata='+mydata);
			//alert('mydata[0]='+mydata[0]);
			if (mydata[0] == 'flash')
			{
				//alert('call writeFlashObject');
				writeFlashObject('flashcontent', mydata[1], mydata[2], mydata[3], mydata[4], mydata[5], mydata[6]);
				writeDetailFooter('flashcontent', mydata[7], mydata[8], mydata[9], mydata[10]);			
			}
			else if (mydata[0] == 'image')
			{
				writeImageObject('flashcontent', mydata[1]);
				writeDetailFooter('flashcontent', mydata[2], mydata[3], mydata[4], mydata[5]);			
			}
			*/
		}
	}

	function writeFlashObject(elementId, uri, xtype, width, height, xp, bgcolor)
	{
		//alert('writeFlashObject uri='+uri+' xtype='+xtype+' w='+width+' h='+height+' xp='+xp+' bgcolor='+bgcolor);
		var so = new SWFObject(uri, xtype, width, height, xp, bgcolor);
		so.addParam("quality", "high");
		so.addParam("allowScriptAccess", "sameDomain");
		//alert(elementId+'1='+document.getElementById(elementId).innerHTML);
		so.write(elementId);
		//alert(elementId+'2='+document.getElementById(elementId).innerHTML);
	}

	function writeDetailFooter(elementId, link_url, link_label, link_detail, label)
	{
		//alert('writeDetailFooter elementId='+elementId+' link_url='+link_url+' link_label='+link_label+' link_detail='+link_detail+' label='+label);
		var text = "<ul><li class='separatore'><a href='"+link_url+"' target='_blank'>"+link_label+"</a></li>";
		text += "<li><a href='"+link_detail+"'>"+label+"</a></li></ul>";
		var result = document.getElementById(elementId).innerHTML;
		result += text;
		document.getElementById(elementId).innerHTML = result;
	}

	function writeImageObject(elementId, uri)
	{
		//alert('writeImageObject');
		var text = "<img src='"+uri+"' alt='' />";
		document.getElementById(elementId).innerHTML = text;
	}

	function runLevel(id, url)
	{
		//alert('runLevel id='+id+' url='+url);
		menufunc(id);
		loadHTMLOnIdForFlash(url, 'get', 'scratchdiv', false);
		//selected(id);
		document.getElementById('scratchdiv').innerHTML = 'pippus';
	}
