/**
 * AJAX Snippet Dialog plugin for jquery
 *
 * @copyright   Copyright (c) 2011 Vaclav Prokes
 * @version     $Id$
 */


(function($) {
	var dialogs = {};

	function getDialog(id){
		var path = id.toString().split('-');
		while (path[0] == "snippet" || path[0] == ""){
			path.shift();
		}
		var snippet = path.join('-');
		if (dialogs[snippet]) 
			return dialogs[snippet];
		return false;
	}
	function updateDialog(id, html) {
		var dialog = getDialog(id);
		if (dialog){
			var width = dialog['width'] ? dialog['width'] : 600;
			var height = dialog['height'] ? dialog['height'] : 400;
			$('<div id="dialog-modal" title="'+dialog['title']+'"><div class="block"><div class="block-content" id="'+id+'">'+html+'</div></div></div>').hide().appendTo('#dialogs');
			$( "#dialog-modal" ).dialog({
				minHeight: height,
				minWidth: width,
				modal: true,
				close: function() {
					$( "#dialog-modal:ui-dialog" ).dialog( "destroy" ).remove();
				}
			});
			
			/* Forms initialization */
			$("#dialog-modal form").each(function() {
				if (Nette){
					Nette.initForm(this);				
				}
				/* AJAX forms */
				if ($(this).hasClass('ajax')){
					$(this).removeClass('ajax');
					// odeslání na formulářích
					$(this).submit(function () {
						$(this).ajaxSubmit(onFormSuccess);
						return false;
					});
					// odeslání pomocí tlačítek
					$(":submit", this).click(function () {
						$(this).ajaxSubmit(onFormSuccess);
						return false;
					});
				}
			});
			return true;
		}
		return false;
	}
	
	function onFormSuccess(payload) {
		$( "#dialog-modal:ui-dialog" ).dialog( "destroy" ).remove();
		if (payload){
			jQuery.nette.success(payload);
		}
	}
	
	function onSuccess(payload){
		if (payload == null)
			return;
		if (payload.snippets) {
			for (var i in payload.snippets) {
				updateDialog(i, payload.snippets[i]);
			}
		}
	}
	
	$.fn.snippetDialog = function() {
		$(this).livequery("click",function(e){
			e.preventDefault();
			var jsonData = {};
			var data = eval("[{"+$(this).attr("dialog")+"}]");
			var snippet = data[0]['target'];
			dialogs[snippet] = data[0];
			dialogs[snippet]['title'] = $(this).attr("title");
			if (dialogs[snippet]['title'] == undefined || dialogs[snippet]['title'] == ""){
				dialogs[snippet]['title'] = $(this).text();
			}
			if (dialogs[snippet]['control']){
				jsonData[dialogs[snippet]['control']+'-invalidate'] = snippet;
			} else {
				jsonData['invalidate'] = snippet;
			}
			$.ajax({
				url: $(this).attr("href"),
				dataType: "json",
				type: "get",
				data: jsonData,
				success: onSuccess
			});
		});
	};
})(jQuery);

$(function () {
	$("a[dialog]").snippetDialog();
});

