/**
 * Enables AJAX saving and validation for all forms derivates 
 * Hradecon_JQuery_Form.
 * 
 * (C) Hradecon, 2011
 * 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');
		form.find('.ajaxloader').show();
		
		$.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 reset form (clear)?
					if (msg['clear']) {
						$(':input', form)
						 .not(':button, :submit, :reset, :hidden')
						 .val('')
						 .removeAttr('checked')
						 .removeAttr('selected');
						$('.uploadifyQueue div').remove();
					}
					
					// need to redirect?
					if (msg['redirPath']) {
						// build form for redirect
						var redirect = $('<form style="display:none;" method="get" action="'+
											msg['redirPath']+
											'"><input type="submit" /></form>');
						
						// IE fix is now Firefox too, so now it is not a fix
						$('body').append(redirect);
						redirect.find('input').click();
					}
				} else {
					form.find('.save').removeClass('saved').addClass('not-saved');
					
					// validation errors
					var err = msg['err'];
					for (var errId in err) {
						if (errId === msg['subform']) {
							var subform = msg['subform'] + '-';
							for (var errId2 in err[errId]) {
								form.find('#' + subform + errId2).parent().append(getHtml(err[errId][errId2]));
							}
						}
						form.find('#' + errId).parent().append(getHtml(err[errId]));
					}
				}
			},
			complete: function(){
				form.find('input[type=submit]').attr('disabled', '');
				form.find('.ajaxloader').hide();
			},
			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;
}
