
cmm_init_forms = function () {

	var xl=this;	
	var reg_prefix = 'reg-';
	
	/** logical style classes **/
	var form_class = 'cmm_form_reg';
	var form_error = 'cmm_form_err';
	var input_error = 'cmm_input_err';

	
	var form_msg = "Trebuie sa completati corect campurile obligatorii! \nYou must fill all mandatory fields!";
	
	/** visual style classes used on every input's ancestor div' **/
	var stil_over = 'fr_focus';
	var stil_normal = 'fr_normal';
	var stil_valid = 'fr_valid';
	var stil_error = 'fr_error';
	
	var input_class = 'text';
	
	var input_rule = 'form.'+form_class+' input.'+input_class;
	var form_rule = 'form.'+form_class;
	
	var up_rule = 'div.for_text';
	
	var rules = new Array();
	var rulesN = new Array();
		rulesN[0] = 'nume';
		rules['nume']= /^[a-z ]+$/i;
		rulesN[1] = 'prenume';	
		rules['prenume'] = /^[a-z] +$/i;
		rulesN[2] = 'email';
		rules['email'] = /^[a-z0-9]+(\.|_|-)?[a-z0-9]+@([a-z0-9-]+\.)+[a-z]+$/i;
		rulesN[3] = 'text';
		rules['text'] = /^.+$/i;	
  
	//** Do not edit bellow this line **/	
	this.addEvents = function() {	
		
		$$(form_rule+' .for_select select').each (function (sel) {
			Event.observe(sel, 'change', function(evt) {
				$(sel).up('.for_select').down('.div_s').innerHTML = sel.value;
				//alert(sel.value);
			});
		});
		
		$$(form_rule).each(function (form){
			
			/** daca forma are eroare nu mai face submit */
			Event.observe(form, 'submit', function(evt) {
				xl.verifyInputs(form);
				if ($(form).hasClassName(form_error)) {
					Event.stop(evt);
					if (form_msg!=undefined) {
						alert(form_msg);
					}
					return false;
				}
			});
					
			$(form).getElementsBySelector('input.'+input_class,'[type="text"]').each(function (input) {
				
				var pDiv = $(input).up(up_rule);
				
				Event.observe(input, 'focus', function() {
			        $(pDiv).addClassName(stil_over);
			        $(pDiv).removeClassName(stil_normal);	        
			        $(pDiv).removeClassName(stil_valid);
			        $(pDiv).removeClassName(stil_error);
		    	});
		    	
		    	Event.observe(input, 'blur', function() {    		
			        $(pDiv).addClassName(stil_normal);
			        $(pDiv).removeClassName(stil_over);
					xl.regTester(input,pDiv,true);	        
		    	});  			
			});
		});
	}
	
	
	this.regTester = function (input, div, visual) {		
		//this methos will be called on blur	
		var str = input.value.replace(/^\s+|\s+$/g,"");
		var ok = false;
		rulesN.each(function(item) {
			var cls = reg_prefix+item;
			if ($(input).hasClassName(cls)) {
				ok = true;
				if( (!str.match(rules[item])) || (input.value == input.title) ) {
					// visual style
					if (visual==true) {
					$(div).removeClassName(stil_valid);
					$(div).addClassName(stil_error);
					}
					// logical style
					$(input).addClassName(input_error);
					
				} else {
					if (visual==true) {
					$(div).removeClassName(stil_error);
					$(div).addClassName(stil_valid);
					}
					$(input).removeClassName(input_error);
				}	
			} 
		});
		
		if (!ok) {
				$(div).removeClassName(stil_error);
				$(div).addClassName(stil_valid);
				$(input).removeClassName(input_error);
		}
		
	}
	
	/** verifica inputurile dintr-o forma.. si daca acestea au eroare, seteza eroare pe form **/
	this.verifyInputs = function (form) {
		
		$(form).removeClassName(form_error);
		$(form).getElementsBySelector('input.'+input_class).each(function (input) {
			var pDiv = $(input).up(up_rule);
			xl.regTester(input, pDiv,true);
			if ($(input).hasClassName(input_error)) {
				$(form).addClassName(form_error);
			} 
		});
	}	
	
	xl.addEvents();	
	
}
