function Ajax2(url, callback) {
	
    var req = init();
    req.onreadystatechange = processRequest;
    
    function init() {
      	if (window.XMLHttpRequest) {
        	return new XMLHttpRequest();
      	} else if (window.ActiveXObject) {
        	return new ActiveXObject("Microsoft.XMLHTTP");
      	}
    }
    
    function processRequest() {
      	if (req.readyState == 4) {
        	if (req.status == 200) {
          		if (callback) callback(req); //req.responseText
        	}
      	}
    }
	
    this.doGet = function() {
      	req.open("GET", url, true);
      	req.send(null);
    }
    
    this.doPost = function(body) {
      	req.open("POST", url, true);
      	req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
      	req.send(body);
    }
}

Ajax2.attach_js_in_element = function(elementId) {
        //var scripts = document.getElementById(elementId).getElementsByTagName('script');
        var scripts = elementId.getElementsByTagName('script');
        var code;
        for (var i = 0; i < scripts.length; i++) {
            /*code =  scripts[i].innerHTML ? scripts[i].innerHTML : 
                    scripts[i].text ? scripts[i].text : 
                    scripts[i].textContent;
                    //eval(code)
            */
                    //document.body.appendChild(scripts[i]);
                    var headTag = document.getElementsByTagName('head')[0];
                    headTag.appendChild(scripts[i])
            /* Come aggiungere uno script nella sezione "head":
	            var headTag = document.getElementsByTagName('head')[0]; 
				//script = document.createElement('script'); 
				//script.id = 'hiddenScript';
				//script.type = 'text/javascript';
				//script.src = 'hidden.js'; 
				//headTag.appendChild(script);
				
				//headTag.appendChild(scripts[i])
			*/
        }
}

Ajax2.attach_js_in_text = function(text) {
		var div = document.createElement('DIV');
		div.innerHTML = text
		Ajax.attach_js_in_element(div)
}

// Ajax().update("http://...", div_id)
// Ajax().update("http://nikjim.org:3010/public/list_comuni?nome_del_comune=la", "calendar", {eval_js: false})
Ajax2.update = function (url, id) {
	//console.log("updating url: "+ url + ", id: " +id)
    eval_js = true
    
	if (arguments.length > 2) {
	  if (arguments[2].update_javascript) {
	  	eval_js = arguments[2].eval_js
	  }
	}
	
 	var ai = new Ajax(
    	url,
    	function(req) {
    		elem = document.getElementById(id)
    		//console.log("response ok for: " + id)
    		
     		value = req.responseText
     		
     		elem.innerHTML = value
     		
     		//alert("id:" + elem.id + ": " + value)
     		//console.log("elem: " + elem)
     		
     		if (eval_js) {
     			//Ajax.attach_js_in_text(value)
     		}
    	}
   	)
	ai.doGet()
}


/**********************************
*
*  AJAX IFRAME METHOD (AIM)
*  http://www.webtoolkit.info/
*
* use: 
* <form ... 
*	onsubmit = "return AIM.submit(this, {'onStart' : startCallback, 'onComplete' : completeCallback})" >
***********************************/

AIM = {

	/* alternativo alla Ajax, ma con IFRAME
	function completeCallback(response, div_id) {
        document.getDocumentById("div_id").innerHTML = response
    }
	
	update: function(url, id) {
	    AIM.frame(
	}
	*/
	
	// crea soltanto il nuovo frame
    frame : function(funcs) {
		
		// se imposto un src (diverso da blank) carica automaticamente il
		// sorgente appena lo inserisco nel DOM! Utile per chiamata Ajax standard
		src = "about:blank"
		
		//if (arguments > 1) {
		//	src = arguments[1]
		//}
		
        var frame_id = 'f' + Math.floor(Math.random() * 99999);
        var d = document.createElement('DIV');
        d.innerHTML = '<iframe style="display:none" src="'+src+'" id="'+frame_id+'" name="'+frame_id+'" onload="AIM.loaded(\''+frame_id+'\')"></iframe>';
        document.body.appendChild(d);

        var iframe = document.getElementById(frame_id);
        if (funcs && typeof(funcs.onComplete) == 'function') {
            iframe.onComplete = funcs.onComplete;
        }

        return frame_id;
    },
    
	// imposta il target del form in modo che carichi il risultato nell'iframe
    form : function(_form, name) {
        _form.setAttribute('target', name);
    },

    submit : function(_form, funcs) {
        AIM.form(_form, AIM.frame(funcs));
        if (funcs && typeof(funcs.onStart) == 'function') {
            return funcs.onStart();
        } else {
            return true;
        }
    },
	
    loaded : function(iframe_id) {
        var iframe = document.getElementById(iframe_id);
        if (iframe.contentDocument) {
            var d = iframe.contentDocument;
        } else if (iframe.contentWindow) {
            var d = iframe.contentWindow.document;
        } else {
            var d = window.frames[iframe_id].document;
        }
        if (d.location.href == "about:blank") {
            return;
        }
		
        if (typeof(iframe.onComplete) == 'function') {
            iframe.onComplete(d.body.innerHTML);
        }
    }

}

