/**
 * the id of the error div's should be the destinated field name, for global errors use '__stripes_global_error', 
 * if there is no div for global errors they would be shown in the message div,
 * the message div is marked by id <messageDivId>, this will be also shown in case of successful sending
 */

var ajaxFormHandler = {

	baseUrl: '', // host + context path of the URL
	inputClass: '', // class name of input field
	messageDivId: '', // message div id, div is shown and hidden
	messageInnerDivId: '', // id of the inner message div for changing class name and text content
	successMsg: '', // message displayed in case of successful request
	action: '', // action to be called
	
	init: function() {
		var ref = this;
		var form = $('recForm');
		
		if (form) {
			form.onsubmit = function(){ref.sendAjaxRequest(this); return false;};
		}
	},
	sendAjaxRequest: function(form) {
		var parameters = form.serialize(true);
		Utils.sendRequest(ajaxFormHandler.baseUrl + ajaxFormHandler.action, parameters, ajaxFormHandler.handleRequest);
	},
	handleRequest: function(json) {
		
		ajaxFormHandler.resetElements();
		
		if (json.success) {
			
			ajaxFormHandler.showMessage(ajaxFormHandler.successMsg, 'successBorder');
		}
		else {
			
			var values = json.values;
			
			for (var i = 0; i < values.length; i++) {
				var input = document.getElementsByName(values[i].id)[0];
				
				if (input) {
					input.addClassName('error');
				}
				
				var errorDiv = $(values[i].id);
				
				if (errorDiv) {
					errorDiv.innerHTML = values[i].msg;
					errorDiv.show();
				}
				else if(values[i].id == '__stripes_global_error') {
					ajaxFormHandler.showMessage(values[i].msg, 'errorBorder');
				}
			}
			
			
		}
	},
	resetElements: function() {
		var inputs = $$('input.' + ajaxFormHandler.inputClass); 
			
		for (var i = 0; i < inputs.length; i++) {
			inputs[i].removeClassName('error');
				
			var errorDiv = $(inputs[i].name);
			errorDiv.innerHTML = '';
			errorDiv.hide();
		}
		
		var errorDiv = $('__stripes_global_error');
		
		if (errorDiv) {
			errorDiv.innerHTML = '';
			errorDiv.hide();
		}
	},
	showMessage: function(message, className) {
		$(ajaxFormHandler.messageInnerDivId).innerHTML = message;
		$(ajaxFormHandler.messageInnerDivId).className = className;
		
		Effect.BlindDown(ajaxFormHandler.messageDivId, { duration: 0.5 });
		window.setTimeout('ajaxFormHandler.hideMessage()', 4000);
	},
	hideMessage: function() {
		Effect.BlindUp(ajaxFormHandler.messageDivId, { duration: 0.8 });
	}
};

Iberico.addPageLoadModule(ajaxFormHandler);
