function maxvalidator(form_id, mini_answer){

	var FORM_ID = form_id
	var ERROR_ID = "error_message"
	var FOCUS_TO
	var MINI_ANSWER = mini_answer
	var sURL
	var SUBMIT_BUTTON = ""
	var a = new Array() // array dei campi da validare
	var xhr
	
	build_array = function(){
		switch (FORM_ID){
			case "edit_bookmark":
				a[10] = "bookmark_id"; // notare che non faccio il break

			case "new_bookmark":			
				a[0] = "title";
				a[1] = "address";
				a[2] = "folder";
				a[3] = "subfolder";
				a[4] = "tags";
				a[5] = "description";
				a[6] = "material";
				a[7] = "protect";			
				a[8] = "comment";			
				a[9] = "goback";			
				break;
				
			case "edit_feed":
				a[5] = "feed_id"; // notare che non faccio il break

			case "new_feed":			
				a[0] = "title";
				a[1] = "address";
				a[2] = "folder";
				a[3] = "subfolder";
				a[4] = "tags";
				break;

			case "edit_folder":			
				a[2] = "folder_id"; // notare che non faccio il break
			
			case "new_folder":			
				a[0] = "nome";
				a[1] = "padre";
				break;
				
			case "make_quick_login":
				a[0] = "login_name";
				a[1] = "password";
				a[2] = "remember_me";
				a[3] = "is_sidebar";
				break;
			
			case "make_login":			
				a[0] = "login_name";
				a[1] = "password";
				a[2] = "remember_me";
				break;
				
			case "forgot_user":			
				a[0] = "email";
				a[1] = "email_again";
				break;
				
			case "contact_us":			
				a[0] = "name";
				a[1] = "email";
				a[2] = "subject";
				a[3] = "message";
				a[4] = "word_verification";
				break;
			
			case "contact_us_logged":			
				a[0] = "subject";
				a[1] = "message";
				a[2] = "word_verification";
				break;
				
			case "secret_question":			
				a[0] = "signin_user";
				a[1] = "security_answer";
				a[2] = "birthday";
				break;
			
			case "forgot_pass":			
				a[0] = "login_name";
				break;
				
			case "create_account":
				a[0]  = "first_name";
				a[1]  = "last_name";
				a[2]  = "login_name";
				a[3]  = "password";
				a[4]  = "password_again";
				a[5]  = "security_question";
				a[6]  = "security_answer";			
				a[7]  = "email";
				a[8]  = "location";
				a[9]  = "gender";
				a[10] = "birthday";
				a[11] = "word_verification";
				a[12] = "review_terms";
				a[13] = "review_privacy";
				break;
		}
	}	
	
	build_url = function(){
		var y = ""
		var myform = document.getElementById(FORM_ID)
		var f_object = myform.elements
		for (var j = 0; j < a.length; j++){
			for (var i = 0; i < f_object.length; i++){
				if (f_object[i].name == a[j]){
					switch (f_object[i].type){
						case "radio":
							if (f_object[i].checked){
								y += "&" + f_object[i].name + "=" + encodeURIComponent(f_object[i].value)
							}
							break						
						case "checkbox":
							if (f_object[i].checked){
								y += "&" + f_object[i].name + "=" + encodeURIComponent(f_object[i].value)
							}
							break							
						default:
							y += "&" + f_object[i].name + "=" + encodeURIComponent(f_object[i].value)
					}					
				}
			}
		}		
		sURL = "validate.php?kind=ajax&what=" + FORM_ID + y
	}
		
	send_request = function(){
		SUBMIT_BUTTON = $('submit_button').innerHTML
		$('submit_button').innerHTML = "Please wait ..."		
		try{xhr=new ActiveXObject('Msxml2.XMLHTTP')}
	    catch(e){
			try{xhr=new ActiveXObject('Microsoft.XMLHTTP')}
	        catch(e2){
				try{xhr=new XMLHttpRequest()}
				catch(e3){xhr=false}
			}
		}
		xhr.onreadystatechange=eval_answer			
		xhr.open("GET",sURL,true)
		xhr.send(null)
	}
	
	// ATTENZIONE: IN CASO DI ERRORE DEVO RICARICARE L'IMMAGINE DEL CAPTCHA, COSA CHE ADESSO NON FACCIO
	// INOLTRE NELLA CLASSE CAPTCHA HO TOLTO unset DELLA SESSIONE CAPTCHA IN MODO CHE SIA ANCORA VALIDO IL VECCHIO CODICE
	
	eval_answer = function(){
		var msg
		var response = xhr.responseText
		if (/*response == "" ||*/ response == "system_error"){
			// nessuna risposta dal server, probabilmente c'è stato un errore
			var msg = "We have encountered a system error. Please try again later."
			$(ERROR_ID).innerHTML = msg
			$('submit_button').innerHTML = SUBMIT_BUTTON
		}else{
			var ermsg = new Array()
			ermsg = response.split('|')
			if (show_error(ermsg) > 0){
				if (MINI_ANSWER == true){
					msg = "<TABLE><TR><TD class=mini>Correct the errors listed below</TABLE>"
				}else{
					msg = "<TABLE><TR><TD><IMG src='images/errore.gif'><TD>&nbsp;Please correct the errors listed below</TABLE>"
				}
				$(ERROR_ID).innerHTML = msg
				// ci sono stati degli errori
				// devo ri-disabilitare i campi che di default erano disabilitati (es. data)
				disable_fields(ermsg)
				$('submit_button').innerHTML = SUBMIT_BUTTON
			}else{
				$(ERROR_ID).innerHTML = ""
				$(FORM_ID).submit()
			}
		}
	}	
	
	show_error = function(ermsg){
		FOCUS_TO = ""
		var focus_set = false		
		var j = 0
		for (var i = 0; i < ermsg.length; i++){
			var update = new Array()
			update = ermsg[i].split('=')
			var id_msg = update[0]
			if (update[1] == "none"){
				if ($(id_msg)){
					// alcuni campi non è detto che ci siano in un determinato form
					// ad esempio poichè non indispensabili, vedi goback
					$(id_msg).innerHTML = ""
				}
			}else{
				$(id_msg).innerHTML = update[1]
				$(id_msg).style.color = $(ERROR_ID).style.color // questo perchè potrei averlo cambiato 
																// (es. quando controllo se esiste il login_name)
				if (!focus_set){
					var field_id = id_msg.replace("msg_", "")
					FOCUS_TO = field_id
					focus_set = true
				}
				j++
			}				
		}
		return j
	}	
	
	disable_fields = function(ermsg){		
		// setto il focus sul primo elemento in errore
		// NOTA: focus prima di disabilitare, altrimenti errore
		// scorro i vari fields per vedere quelli che devo disabilitare
		var focused = false;
		for (var i = 0; i < ermsg.length; i++){
			var update = new Array()
			update = ermsg[i].split('=')
			var id_msg = update[0]
			var field_id = id_msg.replace("msg_", "")
			var hid = "disable_" + field_id
			if ($(hid)){
				if ($(hid).value == "disable_me"){
					if (field_id == FOCUS_TO){
						$("btn_" + FOCUS_TO).focus()
						focused = true
					}
					disable_field(field_id,true)
				}
			}
		}
		if (!focused){
			if ($(FOCUS_TO))
				$(FOCUS_TO).focus()
		}
	}
	
	build_array()
	build_url()
	send_request()	
	return false
}