// Form wich supports Django serverside validation

var DjangoForm = function(el, callback) {
	
	var form = null;
	var useIFrame = false;
	var iframe_name = 'upload_target_iframe';
	
	function showErrors(errors){
		for (var key in errors) {
			var element_errors = errors[key];
			
			var errsEl = $('<ul class="errorlist"></ul>');
			for (i=0;i<element_errors.length;i++) {
				var text = element_errors[i];
				errsEl.append("<li>" +text+"</li>");
			}

			var field = $('#id_'+key).parent(".field");
			field.append(errsEl);
		};
	}
	
	function clearErrors(errors) {
		$(".errorlist").remove();
	}
	
	function onFormData(data) {
		if (window.iframe_callback) {
			jQuery.event.trigger("ajaxStop");
			window.iframe_callback = undefined;
		}
		
		$(form).find('input[type=submit], button').removeAttr('disabled');

		if (!data.ok) {
			showErrors(data.form_errors);
			return;
		}
		if (callback) {
			callback(data);
		}		
	}
	
	function onFormSubmit(evt) {
		evt.preventDefault();
		clearErrors();
		
		form = evt.target;
				
		var enctype = form.enctype;
		
		useIFrame = enctype == 'multipart/form-data';

		
		$(form).find('input[type=submit], button').attr('disabled', 'disabled');
		
		
		if (!useIFrame) {
			var url = evt.target.action;
			var data = $(form).serialize(); 
			$.post(url, data, onFormData, "json");
		} else {
			$('body').append('<iframe id="' + iframe_name + '" name="' + iframe_name + '" src=""></iframe>');
			form.target = iframe_name;
			$(form).append('<input type="hidden" name="X-Requested-With" value="iframe">')
			
			window.iframe_callback = onFormData;
			
			jQuery.event.trigger("ajaxStart");
			form.submit();
		}					
	}


	$(el).submit(onFormSubmit);

	$(el).find(".ajax-spinner").ajaxStart(function(){
		$(this).show();
	}).ajaxStop(function(){
		$(this).hide();	
	});
		
};


var RemoteDjangoForm = function(el, callback, params) {

	function onFormData(data) {
		$.modal.close();

		if (callback) {
			callback(data, params);
		}		
	}

	function onFormClose(evt) {
		evt.preventDefault();
		$.modal.close();
	}
	
	function onFormShow(dialog) {
		var inputs = $(dialog.data).find("input[type!=hidden]")
		if (inputs.length > 0) {
		    inputs[0].focus();
		}
		
		if ($(dialog.data).find("textarea").length > 0) {
		    $(dialog.data).find("textarea")[0].focus();
		}
		
		$(dialog.data).find('.back-button').click(onFormClose);
	}

	function onFormLoaded(data) {
        var modal_bg_top = "<div class='modal-bg-top iePNG'/>"
        var modal_bg_btm = "<div class='modal-bg-btm iePNG'/>"
		    
		$.modal(modal_bg_top+"<div class='modal-bg-mdl'>"+data+"</div>"+modal_bg_btm, {
			/*modalClose: "back-button",*/
			position:[20,],
			onShow: onFormShow
		});
		
		$("div#modalContainer").keypress(function(e){
			if(e.keyCode == 27) {
				$.modal.close();
			}
		});
		
		DjangoForm("#modalContainer form", onFormData);			
	}
	
	function onClick(evt) {
		evt.preventDefault();
		var url = this.href;
		$.get(url, onFormLoaded);
	} 
	
	$(el).click(onClick);
}

$.fn.remote_form = function(callback, params) {
	return this.each(function(idx, el) {
		RemoteDjangoForm(el, callback, params);
	});
}
