// How to use
// required
// url
// target
// method
// ajaxCom.connect(url, target, method, parameters, fnDone);"
// Example
//		<form>
//			<div>
//				<a href="#" onclick="javascript:ajaxCom.connect('helloworld', 'target', '', 'GET', '', this);">Say hello!</a><br /><br />
//			</div>
//			<div id="target"></div>
//		</form>


var ajaxCom = {

	loading : '<div id="loading"></div>',
	
	setLoading : function(html){
			this.loading = html;
	},
	
	connectInput : function (url, target, method, parameters, fnDone, input){
	
		if(input.type == "select-one" || input.type == "select"){
			input.length = 0;
			input.options.add(new Option("Caricamento....", ""));
		}
		else{
			input.className = "";
		}
		
		this.connect(url, target, method, parameters, fnDone);
	},
	
	connect : function (url, target, method, parameters, fnDone) {
		
			if(document.getElementById(target)){	
				this.creaDIV(target, this.loading);
			}
			
			if (window.XMLHttpRequest) {
				req = new XMLHttpRequest();
			} 
			else if (window.ActiveXObject) {
				req = new ActiveXObject("Microsoft.XMLHTTP");
			}
			if (req) {
				req.onreadystatechange = function() {
					ajaxCom.connectDone(url, target, method, parameters, fnDone);
				};
				req.open(method, url, true);
				var param = "";
				if (method.toUpperCase() == "POST"){
					req.setRequestHeader("Content-type", "application/x-www-form-urlencoded;");
					param = parameters;
				}
				req.send(param);
			}
	},
	
	creaDIV : function (target, html){

	   if (document.body.innerHTML){
		   document.getElementById(target).innerHTML = html;
	   }
	   else if (document.getElementById){
		   var element = document.getElementById(target);
		   var range = document.createRange();

		   range.selectNodeContents(element);
		   range.deleteContents();
		   element.appendChild(range.createContextualFragment(html));

	   }
	},

	connectDone : function (url, target, method, parameters, fnDone) {
		$('#'+target).block("Caricamento in corso");
		if (req.readyState == 4) { 
			if (req.status == 200) {
				if (fnDone){
					if(document.getElementById(target))
						this.creaDIV(target, "");
						
					fnDone(req);
				}else{
					if(document.getElementById(target)){
						this.creaDIV(target, req.responseText);
					}
				}
			} 		
			else {
				if(document.getElementById(target))
					this.creaDIV(target, "Errore :\n"+req.statusText);
			}
			$('#'+target).unblock();
		}
	},
	
	/*

	@@ parameters : 
	fileName	= name of your cgi or other
	method		= GET or POST, default is GET
	formName	= name of your form
	dynamicTarget	= name of your dynamic Target DIV or other

	@@ usage : 
	<form id="formName" action="javascript:ajaxCom.likeSubmit('fileName', 'method', 'formName', 'dynamicTarget', fnDone);">

	*/
	
	likeSubmit : function ( file, method, formName, target, fnDone ) {

		var the_form = document.getElementById(formName);
		var num = the_form.elements.length;
		var url = "";

		// submit radio values
		for(var i=0; i<the_form.length; i++){
			var temp = the_form.elements[i].type;
			
			if (/&/.test(the_form.elements[i].value)){
				alert("Carattere & non consentito");
				return false;
			}
			
			if (((temp == "radio" || temp == "checkbox") &&  the_form.elements[i].checked)) { 
				url += the_form.elements[i].name + "=" + escape(the_form.elements[i].value) + "&";
			}

			if ((temp != "radio") && (temp != "checkbox") && (temp != "submit")){
				if (!the_form.elements[i].disabled) {
					url += the_form.elements[i].name + "=" + escape(the_form.elements[i].value) + "&";				
				}
			}
		}

		var parameters = "";
		url = file + "?" + url;

		if (method.toUpperCase() == "POST"){
			parameters = url;
			url = file;
		}
		
		this.connect(url, target, method, parameters, fnDone); 
	}

};
