// ########################################################################################################################################################################################################################
$(document).ready(function()
{

// ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
// VALIDNI NAHRADA ZA target="_blank" - otevreni noveho okna pomoci javascriptu
$(function(){
    $('a.blank').click(function(){
        window.open(this.href);
        return false;
    });
});

    $(".AlbumBox, .PhotoBox, .AlbumAdd, .PhotoAdd, .AlbumBack").hover(
      function () {$(this).css('opacity', 0.8);},
      function () {$(this).css('opacity', 1.0); }); //fotogalerie

// ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
$(".AlbumCaption, .AlbumCounter").css({ opacity: 0.8 }); // pruhlednost popisku v boxu albumu
// ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    // FANCYBOX cms gallery preview
    $("a[rel=PhotoPreview]").fancybox({
            'opacity'	        : true,
            'overlayShow'	: true,
            'transitionIn'	: 'none',
            'transitionOut'	: 'none',
            'titlePosition' 	: 'over',
            'titleFormat'	: function(title, currentArray, currentIndex, currentOpts) {
                    return '<span id="fancybox-title-over">Obrázek ' + (currentIndex + 1) + ' / ' + currentArray.length + (title.length ? ' &nbsp; ' + title : '') + '</span>';
            }
    });
// ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    // FANCYBOX article append gallery
    $("a[rel=ArticleGallery]").fancybox({
            'opacity'	        : true,
            'overlayShow'	: true,
            'transitionIn'	: 'elastic',
            'transitionOut'	: 'elastic',
            'titlePosition' 	: 'outside',
            'titleFormat'	: function(title, currentArray, currentIndex, currentOpts) {
                    return '<span id="fancybox-title-over">Image ' + (currentIndex + 1) + ' / ' + currentArray.length + (title.length ? ' &nbsp; ' + title : '') + '</span>';
            }
    });
// ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    $('.TableCapsule.Menus').tableDnD({
        onDrop: function(table, row) {

            var rows = table.tBodies[0].rows;
            var positions = '';
            for (var i=0; i<(rows.length-1); i++) // vytvoreni serializace
            {
                if(rows[i].id != '' && rows[i].id != undefined) {positions += rows[i].id+"-";} // pokud radek tabulky vlastni cislo poradi (odfiltrovani radku tabulky (zahlavi) ktere nejsou polozkami menu)
            }

            result = Ajax('ajax/request.php',"request=ChangeMenuCellPosition&id_menu=" + table.id + "&positions=" + positions); //preserializovat
        },
        dragHandle: "dragHandle",
        onDragClass: "Dragging"
    });
// ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    $('.TableCapsule.Articles').tableDnD({
        onDrop: function(table, row) {

            var rows = table.tBodies[0].rows;
            var positions = '';
            for (var i=0; i<(rows.length-1); i++) // vytvoreni serializace
            {
                if(rows[i].id != '' && rows[i].id != undefined) {positions += rows[i].id+"-";} // pokud radek tabulky vlastni cislo poradi (odfiltrovani radku tabulky (zahlavi) ktere nejsou polozkami menu)
            }

            result = Ajax('ajax/request.php',"request=ChangeArticlePosition&id_article=" + table.id + "&positions=" + positions); //preserializovat
//            alert(result);
        },

        dragHandle: "dragHandle",
        onDragClass: "Dragging"
    });
// ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


// ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    // Pocitadlo znaku u textboxu 
    $('.Counted').each(function() {
    $(this).after('<input class="InputCounter" readonly="readonly" name="'+$(this).attr('name')+'_counter" value="*" tabindex="-1" size="3">'); // vygeneruju pocitadlo ke kazdemu elementu input ktery ma class Counted
    });
    $(".TextBox").keyup(function()
    {
        var strLen = $(this).val().length;
        var max = $(this).attr('maxLength');
        var rest = max - strLen;
        if (rest == 0) {$('input[name="'+this.name+'_counter"]').css({'color' : 'red'});} else {$('input[name="'+this.name+'_counter"]').css({'color' : '#555'});}
        $('input[name="'+this.name+'_counter"]').val(rest);
    });
// ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
// SOLUTION SPECIAL -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    // Hover efekt u boxu 
    $("#MainScreenBoxA, #MainScreenBoxB").hover(
      function () {
        $(this).css('opacity', 0.8);
      },
      function () {
        $(this).css('opacity', 1.0);
      }
    );
// ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    // vysuvny panel vyberu jazyka na webu 
    $('#LanguageSelector').css('opacity', 0.6);
    $("#LanguageSelector").hover(
      function () {
        $('#LanguageSelector').css('height','50px');
      },
      function () {
        $('#LanguageSelector').css('height','15px');
      }
    );
    // ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    // TOOLTIP NAPOVEDA
    $('.type-selector'
        ).bt
    (
         {
          cornerRadius: 6,
          fill: 'rgba(0,0,0, .90)',
          strokeWidth: 1,
          strokeStyle: '#ccc',
          cssStyles: {color: '#ccc', fontWeight: 'normal', fontSize:'12px', padding:'5px', width:'300px', height:'80px', textAlign:'center'},
          spikeGirth: 12,
          spikeLength: 12,
          positions: 'right'
        }
    );

    $(".type-selector").hover(
      function () {
        $(this).btOn();
      },
      function () {
        $(this).btOff();
      }
    );
        
    imagePreview();
    
    $(".EditorHandle").click( function()
    {
        $('.Advanced').toggle('normal');
    })
        
        
        
        
        


// SOLUTION SPECIAL -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
}); // ####################################################################################################################################################################################################################
// DOCUMENT READY #########################################################################################################################################################################################################
//
//
//
//
//
//
//
//
//
//
// FUNKCE PRO CMS #########################################################################################################################################################################################################

/*
 * Image preview script 
 * powered by jQuery (http://www.jquery.com)
 * 
 * written by Alen Grakalic (http://cssglobe.com)
 * 
 * for more info visit http://cssglobe.com/post/1695/easiest-tooltip-and-image-preview-using-jquery
 *
 */
 
this.imagePreview = function(){	
	/* CONFIG */
		
        xOffset = 10;
        yOffset = 30;
		
	/* END CONFIG */
	$("a.preview").hover(function(e){
		this.t = this.title;
		this.title = "";	
		var c = (this.t != "") ? "<br/>" + this.t : "";
		$("body").append("<p id='preview'><img src='"+ this.href +"' alt='Image preview' />"+ c +"</p>");								 
		$("#preview")
			.css("top",(e.pageY - xOffset) + "px")
			.css("left",(e.pageX + yOffset) + "px")
			.fadeIn("fast");						
    },
	function(){
		this.title = this.t;	
		$("#preview").remove();
    });	
	$("a.preview").mousemove(function(e){
		$("#preview")
			.css("top",(e.pageY - xOffset) + "px")
			.css("left",(e.pageX + yOffset) + "px");
	});			
};
// ************************************************************************************************************************************************************************************************************************

function SelectAllFiles() // prepis submitu na odeslani formulare pro nehled
{
    if($('input[name=select_all]').is(':checked'))
    {
        $('input[name=group[]]').attr('checked', true);
    }
    else
    {
        $('input[name=group[]]').attr('checked', false);
    }
}
// ************************************************************************************************************************************************************************************************************************
function HighlightSelected() // prepis submitu na odeslani formulare pro nehled
{
//     alert(this);
    $("input[name=group[]]").each
    (
        function(index, value) 
        { 
            //alert($(value).is(':checked')); 
            var data = explode('-',$(value).attr('id')) 
            var id=data[1];
            if($(value).is(':checked')) // pokud je tento checkbox zaskrknut
            {
                $('#filetd' + id).css ('background', '#90ffb2');
            }
            else
            {
                $('#filetd' + id).css ('background', 'white');
            }
        }
    );
}
// ************************************************************************************************************************************************************************************************************************

function ArticlePreview() 
{
    $('#service').val('ArticlePreview');
}
// ************************************************************************************************************************************************************************************************************************
function AppendsDelete(service_id,file_id)
{
    result = Ajax('ajax/appends_driver.php',"request=Delete&service_id=" + service_id + "&file_id=" + file_id);
    $('#Appends').html(result);
}
// ************************************************************************************************************************************************************************************************************************
function AppendsSave(service_id)
{
    var file_id = $('#AppendSelect').val();
    result = Ajax('ajax/appends_driver.php',"request=Save&service_id=" + service_id + "&file_id=" + file_id);
    $('#Appends').html(result);
}
// ************************************************************************************************************************************************************************************************************************
function AppendsSelect(service_id)
{
    result = Ajax('ajax/appends_driver.php',"request=Select&service_id=" + service_id);
    $('#AppendSelectorBtn').html(result);
}
// ************************************************************************************************************************************************************************************************************************
// GALLERY APPANEDS 
// ************************************************************************************************************************************************************************************************************************
function GalleryAppendsDelete(service_id,album_id)
{
    result = Ajax('ajax/gallery_appends_driver.php',"request=Delete&service_id=" + service_id + "&album_id=" + album_id);
    $('#GalleryAppends').html(result);
}
// ************************************************************************************************************************************************************************************************************************
function GalleryAppendsSave(service_id)
{
    var album_id = $('#GalleryAppendSelect').val();
    
//    alert(album_id);
    
    result = Ajax('ajax/gallery_appends_driver.php',"request=Save&service_id=" + service_id + "&album_id=" + album_id);
    
    //alert(result);
    $('#GalleryAppends').html(result);
}
// ************************************************************************************************************************************************************************************************************************
function GalleryAppendsSelect(service_id)
{
    result = Ajax('ajax/gallery_appends_driver.php',"request=Select&service_id=" + service_id);
    $('#GalleryAppendSelectorBtn').html(result);
}
// ************************************************************************************************************************************************************************************************************************
// Validace formularu =====================================================================================================================================================================================================
function PhotoValidate()
{
    if(jQuery.trim($('#caption').val()) == '') { MessageShow(10,"Nebylo vyplněno povinné pole název fotografie!","e"); return false} else {return true;}
}
// ************************************************************************************************************************************************************************************************************************
function AlbumValidate()
{
    if(jQuery.trim($('#name').val()) == '') { MessageShow(11,"Nebylo vyplněno povinné pole název albumu!","e"); return false} else {return true;}
}
// ************************************************************************************************************************************************************************************************************************
function NewsValidate()
{
    if(jQuery.trim($('#caption').val()) == '') { MessageShow(12,"Nebylo vyplněno povinné pole titulek!","e"); return false} else {return true;}
}
// ************************************************************************************************************************************************************************************************************************
function ArticleValidate()
{
    if(jQuery.trim($('#caption').val()) == '') { MessageShow(13,"Nebylo vyplněno povinné pole nadpis článku!","e"); return false} else {return true;}
}
// ************************************************************************************************************************************************************************************************************************
function SurveyValidate()
{
    if(jQuery.trim($('#caption').val()) == '') { MessageShow(14,"Nebylo vyplněno povinné pole název ankety!","e"); return false} else {return true;}
}
// ************************************************************************************************************************************************************************************************************************
function ContestValidate()
{
    if(jQuery.trim($('#name').val()) == '') { MessageShow(15,"Nebylo vyplněno povinné pole název soutěže!","e"); return false} else {return true;}
}
// ************************************************************************************************************************************************************************************************************************
function MenusCellsValidate()
{
    if(jQuery.trim($('#caption').val()) == '') { MessageShow(16,"Nebylo vyplněno povinné pole popisek na tlačítku!","e"); return false} else {return true;}
}
// ************************************************************************************************************************************************************************************************************************
function UserGroupValidate()
{
    if(jQuery.trim($('#name').val()) == '') { MessageShow(16,"Nebylo vyplněno povinné pole název skupiny!","e"); return false} else {return true;}
}
// ************************************************************************************************************************************************************************************************************************
function UserValidate()
{
    if(jQuery.trim($('#username').val()) == '') { MessageShow(16,"Nebylo vyplněno povinné pole uživatelské jméno!","e"); return false} else {return true;}
}
// Validace formularu =====================================================================================================================================================================================================
// ************************************************************************************************************************************************************************************************************************
function Service(service_name,id,module)
{
    if(id != undefined)
    {
        result = Ajax('ajax/service_driver.php',"service=" + service_name + "&service_id=" + id);
    }
    else
    {
        result = Ajax('ajax/service_driver.php',"service=" + service_name);
    }

//    if(service_name == 'Storno')
//    {
//        $.fancybox.close();
//        tinyMCE.execCommand('mceRemoveControl', false, 'tinybox');
//    }
//    else
//    {
//        alert(module);
        if( module == undefined) // pokud neni zadan cilovy modul k presmerovani
        {
            Jump(url_prefix + result); // presmeruj na aktualni
        }
        else
        {
            Jump(url_prefix + module); // presmeruj na zvoleny (url prefix nastavuje skrze PHP konstanta BASE definovana v !settings.php)
        }
//    }
}


// ************************************************************************************************************************************************************************************************************************
function Service2(service_name,id,module) // sluzba otevirajici editor
{
    if(id != undefined)
    {
        result = Ajax('ajax/service_driver.php',"service=" + service_name + "&service_id=" + id);
    }
    else
    {
        result = Ajax('ajax/service_driver.php',"service=" + service_name);
    }

    if(service_name == 'Storno') // uzavreni editoru
    {
        $.fancybox.close();
    }
    else
    {
        // otevrit editor
        $.fancybox({
            'type'	        : 'ajax',
            'scrolling'         : 'no',
            'href'	        : 'ajax/editor.php',
            'padding'	        : 0,
            'opacity'	        : true,
            'overlayShow'	: true,
            'transitionIn'	: 'fade',
            'transitionOut'	: 'none',
            'modal'             : true,
            'titleShow'         : false,
            'titlePosition'     : 'inside',
            'overlayOpacity'    : '0.5',
            'overlayColor'      : '#034',
            'speedIn'           : 300,
            'speedOut'          : 300
        });
    }
}





// FUNKCE PRO CMS #########################################################################################################################################################################################################
//
//
//
//
//
//
//
//
//
//
// FUNKCE PRO WEB #########################################################################################################################################################################################################
function SurveyVote(answer, id_survey) // HLASOVANI V ANKETE VYRIDI QUICK SERVICE BEZ REFRESHU
{
    result = Ajax('cms/ajax/request.php',"request=SurveyVote&vote_answer=" + answer + "&id_survey=" + id_survey);
    $('#SurveyBox').html(result);
}
// ************************************************************************************************************************************************************************************************************************
var MaxLengthLock = false;
function MaxLengthCount(fieldObj,fieldMaxLength) // Pocitadlo znaku u textboxu
{
  if (!MaxLengthLock)
  {
    MaxLengthLock = true;
    if (fieldObj.value.length > fieldMaxLength)
    {
      alert("Text je delší než " + fieldMaxLength + " znaků!");
      fieldObj.value = fieldObj.value.substring(0,fieldMaxLength);
    }
    var percentage = parseInt(100 - (( fieldMaxLength - fieldObj.value.length) * 100)/fieldMaxLength);
    $('#' + fieldObj.id + "_bar").css(
        {
            'width' : parseInt((parseInt(fieldObj.offsetWidth)*percentage)/100)+"px"
        });
        $('#' + fieldObj.id + "_bar").html('Zbývajících&nbsp;znaků&nbsp;' + (fieldMaxLength - fieldObj.value.length) + '/' + fieldMaxLength);
    MaxLengthLock = false;
  }
}
// ************************************************************************************************************************************************************************************************************************
// FUNKCE PRO WEB #########################################################################################################################################################################################################
//
//
//
//
//
//
//
//
//
//
// OBECNE FUNKCE ##########################################################################################################################################################################################################
// Funkce pro dynamicky zapis jedne Session promenne
// Autor Martin Marada, DiS.
function DynamicVariableSet(variable_name,variable_value,flag,flag2)
{
    //if(variable_value.charAt(0)== '#') {variable_value = $(variable_value).val();} // Pokud je prvni znak variable_value # tak hodnotu vezmi z prvku podle id predane jako variable_value
    if(flag == undefined) {$flag=0;}
    result = Ajax("ajax/dynamic.php","setting_name=" + variable_name + "&setting_value=" + variable_value + "&flag=" + flag2);
//    alert(result);
    if(flag == 'ReloadPage') // pokud se dodatecna informace rovna ReloadPage, preskoc na soucasnou adresu
    {
      Jump(url_prefix + result); // problem nefunguje historie next back
    }
}
// ************************************************************************************************************************************************************************************************************************
function Ajax(target_file,params,method) // nastavuje nebo cte php soubor skrze ajax
{
    if(method==undefined || method == '' ) {method = 'POST';}
    if(params==undefined || params == '' ) {params = '';}

    result =
        $.ajax
        ({
            url: target_file,
            type: method,
            data: params,
            async:false
        }).responseText;
    return result; // vraci vysledek
}
// ************************************************************************************************************************************************************************************************************************
function Jump(target,add_root) // prechod na zadanou adresu
{
//    alert(target);
    if (add_root)
    {
        window.location= url_prefix + target;
    }
    else
    {
        window.location=target;
    }
//location.replace(target);
}
// ************************************************************************************************************************************************************************************************************************
function GenerateUsername (from1,from2,to)
{
var source2 = $('#' + from1).val();
var source =  $('#' + from2).val();

//$('#' + to).val(source + source2);

var onechar = ""
	for (i=0;i<=8;i++) // prvnich 8 znaku z prijmeni
	{
            switch(source.charAt(i))
            {
            case '\u011b':
              onechar = onechar + 'e'
              break;
            case 'š':
              onechar = onechar + 's'
              break;
            case 'č':
              onechar = onechar + 'c'
              break;
            case 'ř':
              onechar = onechar + 'r'
              break;
            case 'ž':
              onechar = onechar + 'z'
              break;
            case 'ý':
              onechar = onechar + 'y'
              break;
            case 'á':
              onechar = onechar + 'a'
              break;
            case 'í':
              onechar = onechar + 'i'
              break;
            case 'é':
              onechar = onechar + 'e'
              break;
            case 'ú':
              onechar = onechar + 'u'
              break;
            case 'ů':
              onechar = onechar + 'u'
              break;
            case 'ď':
              onechar = onechar + 'd'
              break;
            case 'ť':
              onechar = onechar + 't'
              break;
            case 'ň':
              onechar = onechar + 'n'
              break;
            case 'Ě':
              onechar = onechar + 'E'
              break;
            case 'Š':
              onechar = onechar + 'S'
              break;
            case 'Č':
              onechar = onechar + 'C'
              break;
            case 'Ř':
              onechar = onechar + 'R'
              break;
            case 'Ž':
              onechar = onechar + 'Z'
              break;
            case 'Ý':
              onechar = onechar + 'Y'
              break;
            case 'Á':
              onechar = onechar + 'A'
              break;
            case 'Í':
              onechar = onechar + 'I'
              break;
            case 'É':
              onechar = onechar + 'E'
              break;
            case 'Ú':
              onechar = onechar + 'U'
              break;
            case 'Ů':
              onechar = onechar + 'U'
              break;
            case 'Ď':
              onechar = onechar + 'D'
              break;
            case 'Ť':
              onechar = onechar + 'T'
              break;
            case 'Ň':
              onechar = onechar + 'N'
              break;
            case ' ':
              onechar = onechar + ''
              break;
            case '\'':
              onechar = onechar + ''
              break;
            case '\"':
              onechar = onechar + ''
              break;
            case '!':
              onechar = onechar + ''
              break;
            case '.':
              onechar = onechar + ''
              break;
            case '-':
              onechar = onechar + ''
              break;
            default:
              onechar = onechar + source.charAt(i)
            }
	}
    $('#' + to).val((onechar + source2.charAt(0)).toLowerCase());
}
// ************************************************************************************************************************************************************************************************************************
function IsNumeric(sText,Valid)
{
   var IsNumber=true;
   var Char;
   for (i = 0; i < sText.length && IsNumber == true; i++)
      {
      Char = sText.charAt(i);
      if (Valid.indexOf(Char) == -1)
         {
         IsNumber = false;
         }
      }
   return IsNumber;
}
// ************************************************************************************************************************************************************************************************************************
function isNumber(x)
{
  return ( (typeof x === typeof 1) && (null !== x) && isFinite(x) );
}
// ************************************************************************************************************************************************************************************************************************
function explode (delimiter, string, limit) {
    // Splits a string on string separator and return array of components. If limit is positive only limit number of components is returned. If limit is negative all components except the last abs(limit) are returned.
    //
    // version: 1006.1915
    // discuss at: http://phpjs.org/functions/explode
    // +     original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +     improved by: kenneth
    // +     improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +     improved by: d3x
    // +     bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // *     example 1: explode(' ', 'Kevin van Zonneveld');
    // *     returns 1: {0: 'Kevin', 1: 'van', 2: 'Zonneveld'}
    // *     example 2: explode('=', 'a=bc=d', 2);
    // *     returns 2: ['a', 'bc=d']

    var emptyArray = { 0: '' };

    // third argument is not required
    if ( arguments.length < 2 ||
        typeof arguments[0] == 'undefined' ||
        typeof arguments[1] == 'undefined' ) {
        return null;
    }

    if ( delimiter === '' ||
        delimiter === false ||
        delimiter === null ) {
        return false;
    }

    if ( typeof delimiter == 'function' ||
        typeof delimiter == 'object' ||
        typeof string == 'function' ||
        typeof string == 'object' ) {
        return emptyArray;
    }

    if ( delimiter === true ) {
        delimiter = '1';
    }

    if (!limit) {
        return string.toString().split(delimiter.toString());
    } else {
        // support for limit argument
        var splitted = string.toString().split(delimiter.toString());
        var partA = splitted.splice(0, limit - 1);
        var partB = splitted.join(delimiter.toString());
        partA.push(partB);
        return partA;
    }
}
// ************************************************************************************************************************************************************************************************************************
function format_Of_Number (stat, num) {
  stat = stat.toLowerCase();
    nStr = num + '';
    var x = nStr.split('.');
    var x1 = x[0];
    var x2;
    if(stat=='cz')
    x2 = x.length > 1 ? ',' + x[1] : ''; // nahradime tecku carkou
    else if(stat=='us')
    x2 = x.length > 1 ? '.' + x[1] : ''; // us format

    var rgx = /(\d+)(\d{3})/;
    while (rgx.test(x1)) {
        if(stat=='cz')
        x1 = x1.replace(rgx, '$1' + ' ' + '$2'); // nahradime mezerou cesky format 1 000,00
        else if(stat=='us')
        x1 = x1.replace(rgx, '$1' + ',' + '$2'); // us format 1,000.00
    }
    return x1 + x2;
}
// ************************************************************************************************************************************************************************************************************************
function unserialize (data) {
    // Takes a string representation of variable and recreates it
    //
    // version: 1006.1915
    // discuss at: http://phpjs.org/functions/unserialize
    // +     original by: Arpad Ray (mailto:arpad@php.net)
    // +     improved by: Pedro Tainha (http://www.pedrotainha.com)
    // +     bugfixed by: dptr1988
    // +      revised by: d3x
    // +     improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +        input by: Brett Zamir (http://brett-zamir.me)
    // +     improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +     improved by: Chris
    // +     improved by: James
    // +        input by: Martin (http://www.erlenwiese.de/)
    // +     bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +     improved by: Le Torbi
    // +     input by: kilops
    // +     bugfixed by: Brett Zamir (http://brett-zamir.me)
    // -      depends on: utf8_decode
    // %            note: We feel the main purpose of this function should be to ease the transport of data between php & js
    // %            note: Aiming for PHP-compatibility, we have to translate objects to arrays
    // *       example 1: unserialize('a:3:{i:0;s:5:"Kevin";i:1;s:3:"van";i:2;s:9:"Zonneveld";}');
    // *       returns 1: ['Kevin', 'van', 'Zonneveld']
    // *       example 2: unserialize('a:3:{s:9:"firstName";s:5:"Kevin";s:7:"midName";s:3:"van";s:7:"surName";s:9:"Zonneveld";}');
    // *       returns 2: {firstName: 'Kevin', midName: 'van', surName: 'Zonneveld'}
    var that = this;
    var utf8Overhead = function(chr) {
        // http://phpjs.org/functions/unserialize:571#comment_95906
        var code = chr.charCodeAt(0);
        if (code < 0x0080) {
            return 0;
        }
        if (code < 0x0800) {
             return 1;
        }
        return 2;
    };
    var error = function (type, msg, filename, line){throw new that.window[type](msg, filename, line);};
    var read_until = function (data, offset, stopchr){
        var buf = [];
        var chr = data.slice(offset, offset + 1);
        var i = 2;
        while (chr != stopchr) {
            if ((i+offset) > data.length) {
                error('Error', 'Invalid');
            }
            buf.push(chr);
            chr = data.slice(offset + (i - 1),offset + i);
            i += 1;
        }
        return [buf.length, buf.join('')];
    };
    var read_chrs = function (data, offset, length){
        var buf;

        buf = [];
        for (var i = 0;i < length;i++){
            var chr = data.slice(offset + (i - 1),offset + i);
            buf.push(chr);
            length -= utf8Overhead(chr);
        }
        return [buf.length, buf.join('')];
    };
    var _unserialize = function (data, offset){
        var readdata;
        var readData;
        var chrs = 0;
        var ccount;
        var stringlength;
        var keyandchrs;
        var keys;

        if (!offset) {offset = 0;}
        var dtype = (data.slice(offset, offset + 1)).toLowerCase();

        var dataoffset = offset + 2;
        var typeconvert = function(x) {return x;};

        switch (dtype){
            case 'i':
                typeconvert = function (x) {return parseInt(x, 10);};
                readData = read_until(data, dataoffset, ';');
                chrs = readData[0];
                readdata = readData[1];
                dataoffset += chrs + 1;
            break;
            case 'b':
                typeconvert = function (x) {return parseInt(x, 10) !== 0;};
                readData = read_until(data, dataoffset, ';');
                chrs = readData[0];
                readdata = readData[1];
                dataoffset += chrs + 1;
            break;
            case 'd':
                typeconvert = function (x) {return parseFloat(x);};
                readData = read_until(data, dataoffset, ';');
                chrs = readData[0];
                readdata = readData[1];
                dataoffset += chrs + 1;
            break;
            case 'n':
                readdata = null;
            break;
            case 's':
                ccount = read_until(data, dataoffset, ':');
                chrs = ccount[0];
                stringlength = ccount[1];
                dataoffset += chrs + 2;

                readData = read_chrs(data, dataoffset+1, parseInt(stringlength, 10));
                chrs = readData[0];
                readdata = readData[1];
                dataoffset += chrs + 2;
                if (chrs != parseInt(stringlength, 10) && chrs != readdata.length){
                    error('SyntaxError', 'String length mismatch');
                }

                // Length was calculated on an utf-8 encoded string
                // so wait with decoding
//                readdata = that.utf8_decode(readdata);
            break;
            case 'a':
                readdata = {};

                keyandchrs = read_until(data, dataoffset, ':');
                chrs = keyandchrs[0];
                keys = keyandchrs[1];
                dataoffset += chrs + 2;

                for (var i = 0; i < parseInt(keys, 10); i++){
                    var kprops = _unserialize(data, dataoffset);
                    var kchrs = kprops[1];
                    var key = kprops[2];
                    dataoffset += kchrs;

                    var vprops = _unserialize(data, dataoffset);
                    var vchrs = vprops[1];
                    var value = vprops[2];
                    dataoffset += vchrs;

                    readdata[key] = value;
                }

                dataoffset += 1;
            break;
            default:
                error('SyntaxError', 'Unknown / Unhandled data type(s): ' + dtype);
            break;
        }
        return [dtype, dataoffset - offset, typeconvert(readdata)];
    };

    return _unserialize((data+''), 0)[2];
}
// ************************************************************************************************************************************************************************************************************************
// OBECNE FUNKCE ##########################################################################################################################################################################################################
//
//
//
//
//
//
//
//
//
//
// SOLUTION SPECIAL #######################################################################################################################################################################################################
function ChangeContest(module) // vyber souteze v modulu prispevky
{
    Jump(url_prefix + '/' + module + '/' + $('#ContestSelectBox').val() + '/')
}
// SOLUTION SPECIAL #######################################################################################################################################################################################################

//
//
//function onBlur() {}
//function onFocus() // otestuj platnost prihlaseni
//{
//    var logged = Ajax('ajax/autologout.php',"request=IsLogged");  //zjistim zda-li je nekdo prihlasen
//    if(logged) // pokud je nekdo prihlasen, proved autologout kontrolu
//    {
//        var module = Ajax('ajax/autologout.php',"request=ActualModule");
//        var result = Ajax('ajax/autologout.php',"request=TestLogin");
//    //    alert(result);
//        if(jQuery.trim(result) != '')
//        {
//    //        window.alert('Platnost Vašeho přihlášení vypršela, prosím přihlaste se znovu.');
//          MessageShow(10,"Platnost Vašeho přihlášení vypršela, prosím přihlaste se znovu!","e");
//    //          Jump(url_prefix + module + '/' );  
//        }
//    }
//}
//if (/*@cc_on!@*/false) { // check for Internet Explorer
//	document.onfocusin = onFocus;
//	document.onfocusout = onBlur;
//} else {
//	window.onfocus = onFocus;
//	window.onblur = onBlur;
//}

// VAROVANI AUTOLOGOUT SE SPOUSTI I Z PREZENTACE NIKOLI JEN Z CMS - NAPROSTY NESMYSL - OSETRIT!!
