var FormController = function(){	
	this.forms = $$('form');  
	
};

FormController.prototype = {
	controlla : function(){
		this.forms =  $$('form');
		for(var i = 0 ; i< this.forms.length ; i++){
				var form  = this.forms[i]; 
				form.addEvent('submit',  
				function(event) {
					return this.controllavero(event)}.bind(this)); 
			}	
	},
	getRootInput	: function(elem){
	 	var oRegExp = new RegExp("(^|\\s)input_field(\\s|$)");
		if(!oRegExp.test(elem.className)){
			return this.getRootInput(elem.getParent()); 
		}return elem; 
	},
	isPartOf : function(elem){
		if(elem==null)
			return null;
		var oRegExp = new RegExp("(^|\\s)input_field_special(\\s|$)");
		if(!oRegExp.test(elem.className)){
			return this.isPartOf(elem.getParent()); 
		}return elem;
	},
	CreaDivMsgError 	: function(msg,id,label){
		var div = new Element('div'); 
		div.set("class","form error");
		var divchiudi = new Element('div'); 
		divchiudi.set("class","chiudi");
		var X = new Element("a"); 
		X.innerHTML = "[X]"; 
		X.set("id",id+"_js" ); 
		var p = new Element('p'); 
		label = label.replace("*","");
		p.innerHTML = label + " " + msg; 
		X.inject(divchiudi); 
		divchiudi.inject(div); 
		p.inject(div); 
		X.onclick = function(e){
				e = new Event(e);
				var a = e.target; 
				a.getParent().getParent().destroy();				
		}
		return div;
	},
	RemoveError :  function(root, id){
		var errors = this.getElementsByClassName(root, "div", "error");
		for(i=0;i<errors.length;i++){
			errors[i] = new Element(errors[i]); 
			var temp = errors[i].getChildren("div")[0].getChildren("a")[0].get('id') ; 
			if(temp==(id+"_js")){
				errors[i].dispose();
		} 		
		//	if(errors[i].)
		}	
		
	},
	CreaMsgError 	: function(msg,id,alterLabel){
		var root = new Element(this.getRootInput($(id)));
		var label = $(root , "div.label"); 
		var text_label = label.getElementsByTagName("label")[0].innerHTML;
		
		if(alterLabel!=""){
			text_label = alterLabel;
		}
		text_label = text_label.replace("[?]","");
		//alert(text_label);
		var root_special = this.isPartOf(root);
		var flag = false;
		if(root_special!=null){
			root = root_special;
			flag = true;
			label = $(root , "div.label"); 
		}
		var rootTable = root.getParent("table");
		if(rootTable!=null){
			var ErrorTableDiv = $(rootTable.get("Id")+"Error"); 
			if(ErrorTableDiv==null){
				ErrorTableDiv = new Element("div"); 
				ErrorTableDiv.set("id",rootTable.get("Id")+"Error"); 
				ErrorTableDiv.inject(rootTable, 'after');
			}
			root = ErrorTableDiv;
		}
		this.RemoveError(root,id);
		if(msg==""){
			return; 
		} 
		var div = this.CreaDivMsgError(msg,id, text_label);
		//div.inject(label,"after");
		div.inject(root);
		},
	getSpecialDiv : function(form){
		form = new Element(form);
		return $$(form , "div.input_field_special");
		},
	controllavero 	: function(event){
		event = new Event(event); 
		var form =  event.target;
		var inputs  = form.getElements("select");
		inputs.extend(form.getElements("input"));
		inputs.extend(form.getElements("textarea"));
		inputs.extend(this.getSpecialDiv(form));
		var risultato = true; 
		var temp  ="";
		for(k=0; k<inputs.length;k++){
			if(inputs[k].onblur!=null){
				if(typeof inputs[k].onblur == 'function') {
					inputs[k].onblur();	
				}else{
					eval(inputs[k].onblur);
				}
			}		
		}
		return this.getElementsByClassName(form,"div","error").length==0;
		//return false;
		},
	controllaTesto :  function (id,maxTxt, maxworld, obligatorio){
		var to_controll = $(id); 
		var txt = to_controll.value; 
		var msg = "";  
		if(obligatorio==1&&txt.length<=0){
			msg = this.GetErrorMsg(id,'ROOT_ERROR_OBLIGATORIO');
		}
		if(txt.length>maxTxt&&maxTxt!=-1){
			msg = this.GetErrorMsg(id,'ROOT_ERROR_MAX_WORLD');
		}
		if(maxworld!=-1){
			var worlds = txt.split(" "); 
			for(i = 0 ; i<worlds.length; i++){
				if(worlds[i].length>maxworld){			
					msg = this.GetErrorMsg(id,'ROOT_ERROR_MAX_CHAR');
				}
			}
		}
		this.CreaMsgError(msg,id,""); 
	}, 
	controllaNum : function (id,min,max,obligatorio){
		var to_controll = $(id); 
		var txt = to_controll.value; 
		var msg =""; 
		/*alert(	"id = "+ id + "\n" + 
			"max = "+ max + "\n" +
			"min = "+ min + "\n" +
			"obligatorio = "+ obligatorio + "\n" );
		*/
		if(obligatorio==1&&txt.length<=0){
			msg = this.GetErrorMsg(id,'ROOT_ERROR_OBLIGATORIO');
		}
		if(isNaN(txt)){
			msg = this.GetErrorMsg(id,'ROOT_ERROR_NOT_NUMBER');
		}
		if(txt>max&&max!=-1){
			msg = this.GetErrorMsg(id,'ROOT_ERROR_MAX_NUMBER');
		}
		if(txt<min&&min!=-1){	
			msg = this.GetErrorMsg(id,'ROOT_ERROR_MIN_NUMBER'); 
		}
		if(obligatorio==0&&txt.length==0){
			msg = "";
		}
		
		this.CreaMsgError(msg,id,""); 
	},
	GetErrorMsg : function (id,key){
		var rid = id; 
		for(var i = 0;i<10;i++) {
			rid = rid.replace(i,"");		
		}
	
		var msg = Translator.traduci(key+"_"+rid.toUpperCase());
		if(msg==""){
			msg = 	Translator.traduci(key);	
		}
		return msg; 
	},
	controllaSelect : function (id,obligatorio){
		var to_controll = $(id); 
		var indice = to_controll.selectedIndex; 
		var value ; 
		//alert(to_controll.getParent().getParent().get("class"));
		if(to_controll.getParent().getParent().get("class").indexOf("hidden")>=0){
			obligatorio = -1; 
		}else{
			value = to_controll.options[indice].value; 
		}
		var msg ="";
		//alert("id=" + id+ " ;obligatorio = " + obligatorio + ";value = " + value+ ";indice = " + indice);
		if(obligatorio==1&&(value==-1||value=="")){
			msg = this.GetErrorMsg(id,'ROOT_ERROR_OBLIGATORIO');
		}
		this.CreaMsgError(msg,id,""); 
	},
	controllaFile : function (id,obligatorio){
		var to_controll = $(id); 
		var value = to_controll.value; 
		var msg ="";
		if(obligatorio==1&&value==""){
			msg = this.GetErrorMsg(id,'ROOT_ERROR_OBLIGATORIO');
		}
		this.CreaMsgError(msg,id,""); 
	},
	controllaLegge : function (id){
		var to_controll = $(id); 
		var indice = to_controll.selectedIndex; 
		var valore = to_controll.options[indice].value; 
		var msg ="";
		
		if(valore!="1"){
			msg = this.GetErrorMsg(id,'ROOT_ERROR_LAW');
		}
		this.CreaMsgError(msg,id,"Legge: "); 
	},
	checkDuplicateAjax : function (id,value,tab,attribute){
		var ajax = new Ajax();
		query = "SELECT COUNT(id) as NUM FROM "+tab+" where "+attribute+" = '"+value+"'";  
		ajax.setFunction ( function() {
			if(ajax._connection && ajax._connection.readyState==4){	
				if(ajax._connection.responseXML){
					var rows = ajax._connection.responseXML.getElementsByTagName('row');	
					var num = rows[0].getElementsByTagName("NUM")[0].firstChild.nodeValue ; 
					if(num>0) this.CreaMsgError(this.GetErrorMsg(id,'ROOT_ERROR_DUPLICATE_'+id),id); 
				}}
		}.bind(this) );
		ajax.mysql(query);
	},
	
	controllaMail : function (id,obligatorio){
		var to_controll = $(id); 
		var value = to_controll.value; 
		var msg ="";
		if(obligatorio==1&&value.length<=0){
			msg = this.GetErrorMsg(id,'ROOT_ERROR_OBLIGATORIO');
		}
		this.checkDuplicateAjax(id,value,"utenti","email");
		var espressione = new RegExp("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+[\.]([a-z0-9-]+)*([a-z]{2,3})$");
		if(!espressione.test(value)){
			msg = this.GetErrorMsg(id,'ROOT_ERROR_INVALID_'+id);
		}
		this.CreaMsgError(msg,id,""); 
	},
	controllaMail2 : function (id,obligatorio){
		var to_controll = $(id); 
		var value = to_controll.value; 
		var msg ="";
		if(obligatorio==1&&value.length<=0){
			msg = this.GetErrorMsg(id,'ROOT_ERROR_OBLIGATORIO');
		}
		//this.checkDuplicateAjax(id,value,"utenti","email");
		var espressione = new RegExp("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+[\.]([a-z0-9-]+)*([a-z]{2,3})$");
		if(!espressione.test(value)){
			msg = this.GetErrorMsg(id,'ROOT_ERROR_INVALID_'+id);
		}
		this.CreaMsgError(msg,id,""); 
	},
	conferma : function (id,id_c){
		var to_controll = $(id); 
		var to_controll_c = $(id_c); 
		var value = to_controll.value; 
		var value_c = to_controll_c.value;
		var msg ="";
		if(value!=value_c){
			msg = this.GetErrorMsg(id,'ROOT_ERROR_CONFIRM_'+id_c); 
		}
		this.CreaMsgError(msg,id,""); 
	},
	getElementsByClassName : function(oElm, strTagName, strClassName){
	    var arrElements = (strTagName == "*" && document.all)? document.all : oElm.getElementsByTagName(strTagName);
	    var arrReturnElements = new Array();
	    strClassName = strClassName.replace(/\-/g, "\\-");
	    var oRegExp = new RegExp("(^|\\s)" + strClassName + "(\\s|$)");
	    var oElement;
	    for(var i=0; i<arrElements.length; i++){
	        oElement = arrElements[i];      
	        if(oRegExp.test(oElement.className)){
	            arrReturnElements.push(oElement);
	        }   
	    }
	    return (arrReturnElements)
	}
	
	
		
};
String.prototype.startsWith = function(str){
    return (this.indexOf(str) === 0);
}


