/* 
 * Knihovna trid a funkci
 */

/**
 * Spinner - Ukazatel prubehu
 */
var Spinner = function() {
	this._spinner = $('<div id="ajax-spinner"></div>').css({
					position: 'fixed',
					left: '50%',
					top: '50%',
					zIndex: '10000'
				})
		.appendTo('body')
		.hide();
}
Spinner.prototype = {
	show: function() {
		this._spinner.show();
	},
	hide: function() {
		this._spinner.hide();
	}
}

//--- JsWindow --------------------------------------------------------------------
/**
 * Otevira odkazy s css tridou .sel-js-window do JS okna
 *
 * @dependsOn jquery.js
 */
var JsWindow = function() {
	/**
	 * Reference na otevrena okna
	 */
	this._windows = [];
}

JsWindow.prototype = {

	/**
	 * Zmeni defaultni udalost kliknuti na odkazy na oevreni JS okna
	 */
	init: function() {
		var _this = this;
		$('a.sel-js-window').click( function(){
			var url = $(this).attr('href');
			_this.open( url);
			return false;
		});
	},

	/**
	 * Otevre JS okno
	 *
	 * @param <String> p_link
	 */
	open: function(p_link) {
		var _windowName = 'w' + this._windows.length;
		var position = this._windows.length * 20;
		var w = window.open(p_link, _windowName, 'width=640,height=480,scrollbars=yes,menubar=nolocation=no,resizable=yes,left='+position+',top='+position+'');
		this._windows[ this._windows.length] = w;
	}
}

//--- Dialog --------------------------------------------------------------------

var Dialog = function() {

	this._spinner = new Spinner;

	this._dialog = this._dialog = $('<div id="dialog"></div>')
	.dialog({
		autoOpen: false,
		modal:true,
		position: ['center', 80],
		width:600,
//		show: 'scale',
//		hide: 'scale',
		autoResize:true,
		close: function() {
			$(this).html('');
		}
	});
	//callback fce, ktera se spusti
	this._afterCloseCallback = null;
	//Prvek, ktery otevrel okno
	this._opener = null;
}

Dialog.prototype = {

	open: function( url, opener) {
		this._spinner.show();
		this._opener = opener;

		var _this = this;
		$.getJSON( url, {}, function( p_json) {
			if(!p_json['snippets'] || !p_json['snippets']['snippet--window']) {
				alert('Doslok chybe, zopakujte akci pozdeji prosim');
				_this._spinner.hide();
				return false;
			}

			_this._dialog
				.html(p_json['snippets']['snippet--window'])
				.dialog('option', 'title', $(opener).attr('title'));
			_this._initForm();
			_this._dialog.dialog('open');
			_this._spinner.hide();
			return true;
		});
	},

	_initForm: function() {
		var _this = this;
		this._dialog.dialog('widget').find('form').submit( function() {
			_this._spinner.show();
			_this._dialog.dialog('disable');
			var _url = $(this).attr('action');
			var _data = $(this).serialize();

			$.post( _url, _data, function( json) {
				_this.close();
				if(_this._afterCloseCallback == null) {
					_this._callAfterCloseCallback( json, this._opener);
				}
				else {
					_this.callUserAfterCloseCallback( json);
				}
				_this._dialog.dialog('enable');
				_this._spinner.hide();
			}, 'json');
			return false;
		});
	},

	registerAfterCloseCallback: function( callback) {
		this._afterCloseCallback = callback;
	},

	callUserAfterCloseCallback: function( json) {
		this._afterCloseCallback( json, this._opener);
	},

	_callAfterCloseCallback: function( json) {
		alert('close!');
	},

	close: function() {
		this._dialog.dialog('close');
	}
}

//--- AJAX Window --------------------------------------------------------------
/**
 * @deprecated ...
 */
//$.fn.ajaxSubmit.debug = true;

var WINDOW_SNIPPET_NAME = 'snippet--window';

var spinner = '<div id="dialog"><center><img src="/images/ajax_loader.gif" alt="Pracuji..." /><h2>Pracuji...</h2></center></div>';
var saveSpinner = '<div id="dialog"><center><img src="/images/ajax_loader.gif" alt="Pracuji..." /><h2>Pracuji...</h2></center></div>';

var onSubmitAttribute = "";

/**
 * Inicializace po nahrani fomrualre do dialogu
 *
 * @param window - dialog
 * @param html  - obsah dialogu
 */
function initForm( window, html) {
	window.html('<div id="'+WINDOW_SNIPPET_NAME+'">' + html + '</div>');
	//	$('.datepicker').datepicker({minDate:'+1d'});
	//Odstranim Nettovske onsubmit kontrolu formu }volam ji sam pozdeji...
	//big bastl!!!
	onSubmitAttribute = "";
	onSubmitAttribute = $('#dialog form').attr('onsubmit');
	if(onSubmitAttribute != undefined) {
		onSubmitAttribute = onSubmitAttribute.substr( 7, onSubmitAttribute.length);
	}
	else {
		onSubmitAttribute = true;
	}

	$('#dialog form').attr('onsubmit', "");
	//see application.js
	/* @var Application app*/
	//app.init();
}


$(function() {
	$('a.sel-ajax-window').live('click', function() {
		var href = $(this).attr('href');
		var title = $(this).attr('title');
		//vytvori dialog
		var createDialog = function( json) {
			if(json.snippets == undefined || json.snippets[ WINDOW_SNIPPET_NAME] == undefined) {
				window.html('<strong>Ouuu nasatala neocekavana chyba... Na oprave se pracuje, pockejte prosim. </strong>');
				return false;
			}

			initForm(window, json.snippets[ WINDOW_SNIPPET_NAME]);

//			$('input[name=cancel]').livequery('click', function() {
//				window.dialog('close');
//				return false;
//			});

			$('#dialog form').livequery('submit', function (e) {
				$(this).ajaxSubmit( {
					global: false,
					success: function( payload, statusText) {
						if (payload.snippets) {
							for (var i in payload.snippets) {

								//-- pokud je obsahem odpovedi ajaxwindow vyklerslim ho a okno necham otevrene...
								if(i == WINDOW_SNIPPET_NAME) {
									initForm(window, payload.snippets[i]);
									return;
								}
								$.nette.updateSnippet(i, payload.snippets[i]);
							}
						}
						if(payload.redirect) {
							top.location.href = payload.redirect;
							return;
						}
						app.init();
						$(window).dialog('close');
					},
					beforeSubmit: function(formData, jqForm, options) {
						eval('var isValid = ' + onSubmitAttribute);

						if(isValid) {
							$(window).html(saveSpinner);
							return true;
						}
						return false;
					}
				});
				// Zabránění odeslání formuláře a vykonání všech dalších navěšených eventů
				e.stopImmediatePropagation();
				return false;
			});
			return false;
		};

		var window = $(spinner).dialog({
			modal:true,
			position: ['center', 80],
			title:title,
			width:600,
			autoResize:true,
			close: function(event, ui) {
				$(this).remove();
			}
		});

		$.ajax({
			global: false,
			url: href,
			type: 'get',
			dataType: 'json',
			success: createDialog
		});
		return false;
	});
});

//--- DataPicker ---------------------------------------------------------------
var DatePicker = function() {
	this._inputName = ".calendar";
}

/**
 * @access private
 */
DatePicker.prototype._createCalendar = function() {
	$(this._inputName).datepicker(
		{
			buttonImage: '/images/icons/16/kontact_date.png',
			dateFormat: 'dd.mm.yy',
			buttonImageOnly: true,
			showOn: 'both'
		});
}
DatePicker.prototype.init = function() {
	this._createCalendar();
}

//--- Texyla -------------------------------------------------------------------
/**
 * Vytvori texyla editor nad elelmentem textarea s css tridou .texyla
 */
function createTexyla()
{
	var txts = $('textarea.texyla');
	var txtId;
	for (var i = 0; i < txts.length; i++) {
		if($(txts[i]).attr("id") == undefined) {
			$(txts[i]).attr("id", 'txt'+i);
		}
		txtId = $(txts[i]).attr("id");

		var options = Texyla.configurator.admin(txtId);
		options.toolbar = 'admin';
		options.submitButton = false;
		options.allowHtmlPreview = false;
		options.preview = false;
		new Texyla(options);
	}
}

function autosubmitForm( element)
{
	element.form.submit();
}

//--- AJAX links ---------------------------------------------------------------


var AjaxLink = function()
{
	
}

AjaxLink.prototype.init = function()
{
	$('a.sel-ajax').click( function() {
		var _that = this;
		var spinner = new Spinner();
		spinner.show();
		$.getJSON(this.href,{},function( json){
			var snippetName = $(_that).attr('data-for');
			$('#' + snippetName).html( json['snippets']['snippet--' + snippetName]);
			spinner.hide();
		});
		return false;
	})
}


//--- Confirmation -------------------------------------------------------------

/**
 * Potvrzeni provedeni akce - kliknuti
 * Prida nad kazdy element
 */
var Confirmation = function() {
	this._selector = '.confirm';
}
Confirmation.prototype = {
	init: function() {
		var _this = this;
		$(this._selector).click( function( e) {return _this.show( e)});
	},
	
	show: function( e) {
		var q = $(this).attr('title');
		if(q) {
			return confirm(q + "\nOpravdu chcete pokracovat?");
		}
		else {
			return confirm("Opravdu chcete pokracovat?");
		}
	}
}

//==============================================================================

/**
 * Odstrani diakritiku z textu
 */
function bezdiak(text)
{
	var sdiak = "áäčďéěíĺľňóô öŕšťúů üýřžÁÄČĎÉĚÍĹĽŇÓÔ ÖŔŠŤÚŮ ÜÝŘŽ";
	var bdiak = "aacdeeillnoo orstuu uyrzAACDEEILLNOO ORSTUU UYRZ";

	return str_replace(sdiak, bdiak, text);
}

function toSeoText(text)
{
	text = bezdiak(text);
	text = text.toLowerCase();
	return str_replace(' ', '-', text);
}

function str_replace(what, where, s)
{
	var tx = "";
	for(var p = 0; p < s.length; p++) {
		if (what.indexOf(s.charAt(p)) != -1) {
			tx += where.charAt(what.indexOf(s.charAt(p)));
		}
		else {
			tx += s.charAt(p);
		}
	}
	return tx;
}

function strReplace( what, where, s)
{
	return str_replace(what, where, s);
}

function isInt(x)
{
	var y=parseInt(x);
	if (isNaN(y)) return false;
	return x==y && x.toString()==y.toString();
}
function isInteger( s)
{
	return isInt(s);
}

function _updateSnippet(snippet, content) {
	$('#' + snippet).html( content);
}

