/**
 * Enables AJAX saving and validation for all forms derivates 
 * Hradecon_JQuery_Form.
 * 
 * (C) Hradecon, 2010 
 * http://hradecon.com
 * 
 * @author Vaclav Hradec <vh@hradecon.com>
 */

$(document).ready(function() {
	$('form.Hradecon_JQuery_Form').change(function(){
		$(this).find('.save').removeClass('saved not-saved');
	});
	$('form.Hradecon_JQuery_Form').submit(function(){
		var form = $(this);
		var reqUrl = form.attr('action') + '?format=json';
		
		form.find('input[type=submit]').attr('disabled', 'disabled');
		
		$.ajax({
			type: 'POST',
			url: reqUrl,
			data: form.serialize(),
			success: function(msg){
				form.find('.errors').remove();
				
				// refresh csrf token
				form.find('input[name=csrf]').val(msg['csrf']);
			
				if (msg['status'] === 1) {
					// saved
					form.find('.save').removeClass('not-saved').addClass('saved');
					
					// need to redirect?
					if (msg['redirPath']) {
						$('<form />').attr('action', msg['redirPath']).submit();
					}
				} else {
					form.find('.save').removeClass('saved').addClass('not-saved');
					
					// validation errors
					var err = msg['err'];
					for (var errId in err) {
						form.find('#' + errId).parent().append(getHtml(err[errId]));
					}
				}
			},
			complete: function(){
				form.find('input[type=submit]').attr('disabled', '');
			},
			error: function(){
				alert('AJAX error!');
			}
		});
		
		return false;
	});
});

function getHtml(errArray){
    var o = '<ul class="errors">';
    $.each(errArray,function(key,value){
        o += '<li>' + value + '</li>';
    });
    o += '</ul>';
    return o;
}
