/**
*
*	Validator scripts, excluded from Dosia
*
*/

var Validator = new Object();

/** Initiate on-the-fly validation, capture on submit */

Event.observe(window,'load',function(){
	Validator.CaptureOnSubmit();
	Validator.CaptureOnBlur();
});

/** Capture the submit action **/
Validator.CaptureOnSubmit = function(){
	var forms = $$('form.validatorForm');
	for(i = 0; i<forms.length; i++){
		
		Event.observe(forms[i],'submit',function(event){
			
			Validator.ValidForm(Event.element(event));
			Event.stop(event);
			
		});
	}
};

Validator.CaptureOnBlur = function() {
	var fields = $$('.validatorField');
	for(i = 0; i<fields.length; i++){
		
		Event.observe(fields[i],'blur',function(event){
			
			Validator.ValidField(Event.element(event));
			Event.stop(event);
			
		});
	}
}

Validator.ValidField = function(field) {
	var postBody = Form.serialize(field.form) + '&field=' + field.name;
//	var postBody = field.name + '=' + field.value + '&field=' + field.name;
	var action = field.form.action;
	var formMethod = field.form.method;
	var form = field.form;
	
	new Ajax.Request(action, {
		method : formMethod,
		postBody : postBody,
		onCreate : function(transport){
//			Validator.FormLoading(form);
		},
		onSuccess : function(transport){
			Validator.FormLoaded(form);
			if(transport.responseText.isJSON()){
				var odp = transport.responseText.evalJSON();
				Validator.FormParseJSONResponse(odp,form,field);
			}
		}
	});
}

Validator.ValidForm = function(form){
	var postBody = Form.serialize(form) + '&action=submit';
	var action = form.action;
	var formMethod = form.method;
	Validator.FormLoading(form);
	new Ajax.Request(action, {
		method : formMethod,
		postBody : postBody,
		onCreate : function(transport){
			Validator.FormLoading(form);
		},
		onSuccess : function(transport){
			Validator.FormLoaded(form);
			if(transport.responseText.isJSON()){
				var odp = transport.responseText.evalJSON();
            	if(odp.redirect != null) {
            		window.location = odp.redirect;
            	}else {
            		Validator.FormParseJSONResponse(odp,form,null);
            	}
			}else{
				eval(transport.responseText);
				
			}
		}
	});
//	Validator.FormLoaded(form);
	
};

Validator.FormLoading = function(form){
	form.disable();
};

Validator.FormLoaded = function(form){
	form.enable();
};

Validator.FormParseJSONResponse = function(json,form,field){
	var inputs = form.getElements();
	if(field != null)Validator.UpdateFieldState(field,'clear','clear');
	
	for(var i = 0; i < inputs.length; i++){
		if(field == null){
			Validator.UpdateFieldState(inputs[i],'clear','clear');
		}
		if(json.fields[inputs[i].name] != null){
			if(inputs[i].name == json.fields[inputs[i].name].field){
				Validator.UpdateFieldState(inputs[i],'error',json.fields[inputs[i].name].msg);
				json.fields[inputs[i].name] = null;
			}else if($(json.fields[inputs[i].name].field) != null){
				Validator.UpdateFieldState($(json.fields[inputs[i].name].field),'error',json.fields[inputs[i].name].msg);
				json.fields[inputs[i].name] = null;
			}
			
		}


	}
	for(i in json.fields){
		if(json.fields[i] != null){
			Validator.UpdateFieldState($(json.fields[i].field),'error',json.fields[i].msg);
		}
	}
};

Validator.UpdateFieldState = function(field,state,msg){
	switch(state){
	case 'error':
		/*on error code*/
		Validator.ERRORaction(field,msg);
		break;
	case 'clear':
		/*on clear code*/
		Validator.CLEARaction(field);
		break;
	case 'ok':
		/*on ok code*/
		Validator.OKaction(field,msg);
		break;
	default:
	}
}

Validator.OKaction = function(field,msg){
}

Validator.ERRORaction = function(field,msg){
	field.style.borderColor = 'red';
	if(field.uid != null && $(field.uid) != null){
		MessageCloud.UpdateCloud($(field.uid), 'nic');
	}else{
		var uid = Validator.GenerateUID();
		MessageCloud.Create(msg,uid);
		field.uid = uid;
		Event.observe(field,'mousemove',function(event){
			var field = Event.element(event);
			$(field.uid).show();
			$(field.uid).style.left = (event.pointerX() + 10) + 'px';
			$(field.uid).style.top = (event.pointerY() + 10) + 'px';
		});
		Event.observe(field,'mouseout',function(event){
			var field = Event.element(event);
			$(field.uid).hide();
		});
	}

}

Validator.CLEARaction = function(field){
	field.style.borderColor = '#47453D';
	Event.stopObserving(field,'mouseover');
	Event.stopObserving(field,'mousemove');
	Event.stopObserving(field,'mouseout');
	if(field.uid != null){
		Element.remove($(field.uid));
		field.uid = null;
	}
}

Validator.GenerateUID = function(){
	var uid = (Math.random()*1000000).toString().replace('.','');
	if($(uid)!=null){
		return Validator.GenerateUID();
	}else{
		return uid;
	}
}

var MessageCloud = new Object();

MessageCloud.Create = function(msg,uid){
//	var obj = new Element('div',{'class' : 'messageCloud','id' : uid});
//	obj.setStyle({'background-color':'#ffffff','border':'1px solid black','padding':'10px','position':'absolute','z-index':'1000'});
//	obj.update(msg);
//	obj.hide();
//	$('messages2').insert(obj);
//	return obj;
}

MessageCloud.UpdateCloud = function(obj,msg){
//	alert(obj.value);
//	obj.update(msg);
}
