// include required libraries
var libraries = [
	'/js/switchbox.js',
	'/js/date_select.js'
];
IncludeLibraries(libraries);

// submit form via Ajax call to controller method
function AjaxSubmit(id) {
	// post form
	$(id).request({
		onComplete: function(transport) {
			// get response (expecting JSON)
			var response = transport.responseJSON;
			
			// errors?
			if (response.errors) {
				// clear previous errors
				ClearErrors(id);
				
				// build error message and highlight fields
				var msg    = '';
				var errors = $H(response.errors);
				errors.each(function(pair) {
					msg = msg + '<li>' + pair.value + '</li>';
					$('f-' + pair.key).addClassName('error');
				});
				
				// display notice
				var notice = '<strong>Please note the following issues:</strong><ul>' + msg + '</ul>';
				SetNotice(escape(notice), 'error');
			} else if (response.notice) {
				// clear errors
				ClearErrors(id);
				
				// reset form
				$(id).reset();
				
				// display notice
				SetNotice(escape(response.notice));
			}
		}
	});
}

// clear error styled rows for a given form
function ClearErrors(id) {
	var list = $$('#' + id + ' table tbody > tr[id]');
	list.each(function(row) {
		$(row.id).removeClassName('error');
	});
}

// define behavior to highlight field on focus
var FieldFocus = Behavior.create({
	onfocus:function() {
		this.element.addClassName('field-focus');
	},
	onblur:function() {
		this.element.removeClassName('field-focus');
	}
});

// add behavior to form fields
function AddFieldFocus(input) {
	// init list
	var list = [];
	
	// check input, can be either array of form ids or an element id
	// if neither, default to all forms in document
	if (IsArray(input)) {
		list = input;
	} else if (input != '' && (input = $(input))) {
		list = $A(input.getElementsByTagName('form'));
	} else {
		list = $A(document.getElementsByTagName('form'));
	}
	
	// add behavior
	list.each(function(form) {
		if (form = $(form)) {
			$A(form.getElements()).each(function(e) {
				var types = ['text', 'textarea', 'select-one', 'select-multiple', 'password'];
				if (types.indexOf(e.type) >= 0) {
					FieldFocus.attach(e);
				}
			});
		}
	});
}

// add when loaded
Event.observe(window, 'load', function() {
	AddFieldFocus();
});
