var net=new Object();
 
net.READY_STATE_UNINITIALIZED=0;
net.READY_STATE_LOADING=1;
net.READY_STATE_LOADED=2;
net.READY_STATE_INTERACTIVE=3;
net.READY_STATE_COMPLETE=4;

// Creazione oggetto caricamento contenuto
net.ContentLoader = function( component, url, method, requestParams ) {
	this.component = component;
	this.url = url;
	this.requestParams = requestParams;
	this.method = method;
}

// Associazione metodi all'oggetto
net.ContentLoader.prototype = {
	
	getTransport: function() {
		var transport;
		if( window.XMLHttpRequest ) {
			transport = new XMLHttpRequest();
		} else if ( window.ActiveXObject ) {
			try {
				transport = new ActiveXObject('Msxml2.XMLHTTP');
			} catch(err) {
				transport = new ActiveXObject('Microsoft.XMLHTTP');
			}
		}
		return transport;

	},
	
	sendRequest: function() {
		var requestParams = [];
		for ( var i = 0 ; i < arguments.length ; i++ ) {
			requestParams.push(arguments[i]);
		}
		var request = this.getTransport();
		request.open( this.method, this.url, true );
		request.setRequestHeader( 'Content-Type','application/x-www-form-urlencoded');
		var oThis = this;
		request.onreadystatechange = function() {oThis.handleAjaxResponse(request) };
		request.send(this.queryString(requestParams));
	},
	
	queryString: function(args) {
		var requestParams = [];
		for ( var i = 0 ; i < this.requestParams.length ; i++ ) {
			requestParams.push(this.requestParams[i]);
		}
		for ( var j = 0 ; j < args.length ; j++ ) {
			requestParams.push(args[j]);
		}
		var queryString = "";
		if ( requestParams && requestParams.length > 0 ) {
			for ( var i = 0 ; i < requestParams.length ; i++ ) {
				queryString += requestParams[i] + '&';
			}
			queryString = queryString.substring(0, queryString.length-1);
		}
		return queryString;
	},
	
	handleAjaxResponse: function(request) {
		if ( request.readyState == net.READY_STATE_COMPLETE ) {
			if ( this.isSuccess(request) )
				this.component.ajaxUpdate(request);
			else
				this.component.handleError(request);
			}
	},
	
	isSuccess: function(request){
		return request.status == 0 || (request.status >= 200 && request.status < 300);
	}
};


// Creazione nuovo componente 
DoubleCombo = function( masterId, slaveId, url, options ) {
	this.master = document.getElementById(masterId);
	this.slave = document.getElementById(slaveId);
	this.options = options;
	this.ajaxHelper = new net.ContentLoader( this, url, "POST", options.requestParameters || [] );
	this.initializeBehavior();
}

// Associazione metodi al nuovo componente
DoubleCombo.prototype = {
	// Aggiunta gestione evento
	initializeBehavior: function() {
		var oThis = this;
		this.master.onchange = function(){ oThis.masterComboChanged(); };
	},
	// Evento cambiamento master
	masterComboChanged: function() {
		var query = this.master.options[this.master.selectedIndex].value;
		var nomemaster=this.master.name;
		this.ajaxHelper.sendRequest( 'q=' + query );
	},
	// Visualizzazione dei risultati
	ajaxUpdate: function(request) {
		var slaveOptions = this.createOptions(request.responseXML.documentElement);
		this.slave.length = 0;
		for ( var i = 0 ; i < slaveOptions.length ; i++ )
			try {
				this.slave.add(slaveOptions[i],null);
			} catch (e) {
				this.slave.add(slaveOptions[i],-1);
			}
		this.slave.onchange();
	},
	// Creazione delle opzioni del combo
	createOptions: function(ajaxResponse) {
		var newOptions = [];
		var entries = ajaxResponse.getElementsByTagName('entry');
		newOptions.push( new Option( "--- Seleziona ---", "") );
		for ( var i = 0 ; i < entries.length ; i++ ) {
			var text = this.getElementContent(entries[i],'optionText');
			var value = this.getElementContent(entries[i],'optionValue');
			newOptions.push( new Option( text, value) );
		}
		return newOptions;
	},

	getElementContent: function(element,tagName) {
		var childElement = element.getElementsByTagName(tagName)[0];
		return (childElement.text != undefined) ? childElement.text : childElement.textContent;
	},

	handleError: function(request) {
		if ( this.options.errorHandler )
			this.options.errorHandler(request);
	}

};


/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
var gShow;
var sUrl = "include/validate.php?val=";
var gErrors = 0;
var http = getHTTPObject();

function attachFormHandlers() {
	var form = document.getElementById('richiestaForm') 

	if (document.getElementsByTagName)	{
		var objInput = document.getElementsByTagName('input');
		for (var iCounter=0; iCounter<objInput.length; iCounter++) {
			if(objInput[iCounter].className.indexOf('validate')==0) {
				if(objInput[iCounter].type=='checkbox') {
					objInput[iCounter].onclick = function(){return validateMe(this);};
				} else {
					objInput[iCounter].onblur = function(){return validateMe(this);};
				}
			}
			
		}		
		
		var objInput = document.getElementsByTagName('select');
		for (var iCounter=0; iCounter<objInput.length; iCounter++) {
			if(objInput[iCounter].className.indexOf('validate')==0)
			objInput[iCounter].onchange = function(){return validateMe(this);};
		}
	}
	form.onsubmit = function(){return validate();}
}

// Gestione controllo oggetto
function validateMe(objInput) {
	if(objInput.type=="checkbox"){
		sVal = objInput.checked;
	} else {
		sVal = objInput.value;
	}
	sRules = objInput.className.split(' '); 
	sRequired = sRules[1];
	sTypeCheck = sRules[2];
    gShow = sRules[3];
	http.open("GET", sUrl + (sVal) + "&sRequired=" + (sRequired) + "&sTypeCheck=" + sTypeCheck, true);
	http.onreadystatechange = handleHttpResponse;
	http.send(null);  
}


// Gestione risposta http
function handleHttpResponse() {
	if (http.readyState == 4) 	{
  		sResults = http.responseText.split(",");
    	//document.getElementById(gShow).innerHTML = "";
		//document.getElementById(gShow).appendChild(document.createTextNode(sResults[0]));
		if(sResults[0]=="NO") {
			//document.getElementById(gShow).style.color = '#ff0000';
			document.getElementById(gShow).childNodes[0].className='no';
		} else {
			//document.getElementById(gShow).style.color = '#000000';
			document.getElementById(gShow).childNodes[0].className='si';
		}
  	}
}

// Validazione al momento del Submit
function validate() {
	var tables; 
	tables = document.getElementsByTagName('td')

	for (i=0; i<tables.length; i++)	{
		if (tables[i].className == "rules" && tables[i].childNodes[0].className!='si') {
				gErrors = gErrors + 1;
		}
	}
		
	if (gErrors > 0) {
		alert ("Prima di inviare i dati controlla che siano validi.");
		gErrors = 0;
		return false;
	} else return true;

}

// Creazione Richiesta xml
function getHTTPObject() {
	var xmlhttp;
	if( window.XMLHttpRequest ) {
		xmlhttp = new XMLHttpRequest();
	} else if ( window.ActiveXObject ) {
		try {
			xmlhttp = new ActiveXObject('Msxml2.XMLHTTP');
		} catch(err) {
			xmlhttp = new ActiveXObject('Microsoft.XMLHTTP');
		}
	}
	return xmlhttp;
}

