function api(object, action, params, callback)
{
    var url = "/api/" + object + "/" + action;
    
    $.getJSON(url, params, callback);
}

(function($)
{
    $.fn.KPopup = function(options)
    {
        var defaults = {  
            'top': 200,
            'width': 600,
            'buttons': {'zavřít': function(popup) { $.fn.KPopup.close(); }}
        };  
         
        return this.each(function() 
        {
            var opts = {};
            $.extend(opts, defaults, options);
            var el = $(this);
            var _el = this;
            var expose = false;
            
            var wrapper = $('<div />').attr('id', 'kpopup').addClass('shadow-one');
            wrapper.append('<div class="corner-a"></div><div class="corner-b"></div>');
            var stwo = $('<div class="shadow-two"></div>');
            var sthree = $('<div class="shadow-three"></div>');
            var sfour = $('<div class="shadow-four"></div>');
            wrapper.append(stwo);
            stwo.append(sthree);
            sthree.append(sfour);
            sfour.append(el);
            var buttons = $('<div class="buttons"></div>');
            sfour.append(buttons)
            
            el.css('overflow', 'hidden');
            el.addClass('container').width(opts['width']).attr('id', 'kpopup-content');
            $('body').append(wrapper);
            wrapper.css('top', opts['top'] + $(window).scrollTop());
            var width = wrapper.outerWidth();
            wrapper.css('left', $(window).width() / 2 - width / 2);
            
            expose = wrapper.expose({api: true, 'closeOnClick': false, 'closeOnEsc': false, 'opacity': 0.2})
            
            expose.load(); 
            $.each(opts['buttons'], function(label, action) {
                var button = $('<button class="btn"><span><span>' + label + '</span></span></button>');
                button.click(function() {
                    action.call(this, wrapper);
                });
                buttons.append(button);
                buttons.append('&nbsp;');
            });
            
            $.fn.KPopup.close = function()
            {
                wrapper.remove();
                expose.close();
            }
            
            $.fn.KPopup.load = function()
            {
                if(opts['load'])
                {
                    var data = $('form', el).serializeArray();
                    opts['load'].call(this, el, data);
                }
            }
            $.fn.KPopup.load();   
            //~ return $()
        });
    };
})(jQuery);

(function($)
{
    var form = false;
    var opts = {}; 
    var container = false;
    var photo_container = false;
    var action_container = false;
    var photo = false;
    var uploader = false;
    var loader = false;
    var upload = false;
    var remove = false;
    var actions = false;
    
    $.fn.PhotoUpload = function(options)
    {
        opts = {
            text: 'Nahrávejte fotografie ve formátu <b>JPG</b>, <b>GIF</b> nebo <b>PNG</b>, doporučená velikost  je {width}x{height} pixelů. Větší fotky budou automaticky zmenšeny.',
            width: 180,
            height: 240,
            vwidth: 90,
            vheight: 120,
            max_file_size: 1000000,
            tmp_photo: '/images/tmp-foto.gif',
            'submit_upload': 'vybrat fotografii z počítače',
            'submit_remove': 'odstranit fotografii',
            'input': 'photo',
            'photo_container_class': 'span-3',
            'action_container_class': 'span-7 last parent'
        };
        opts = $.extend(opts, options);
        opts['text'] = opts['text'].replace(/{width}/, opts['width']);
        opts['text'] = opts['text'].replace(/{height}/, opts['height']);
        return this.each(function()
        {
            container = $(this);
            render();
        });
    };
    
    function setPhoto(src)
    {
        photo.hide();
        photo.width('auto');
        photo.height('auto');
        photo.attr('src', src);
        photo.unbind('load');
        photo.load(function() 
        {
            if(photo.height() > 0)
            {
                var rat = photo.width() / photo.height();
                if(photo.width() > opts['vwidth'])
                {
                    photo.width(opts['vwidth']);
                    photo.height(opts['vwidth'] / rat);
                }
                if(photo.height() > opts['vheight'])
                {
                    photo.width(opts['vheight'] * rat);
                    photo.height(opts['vheight']);
                }
            }
            else
            {
                photo.attr('src', opts['tmp_photo']);
            }
            photo.show();
        });
    }
    
    function getInput()
    {
        var input = $('input[name=' + opts['input'] +']');
        if(input.length == 0)
        {
            input = $('<input type="hidden" name="' + opts['input'] + '" value="" />');
            input.insertAfter(photo);
        }
        return input;
    }
    
    function addRemove()
    {
        if(remove)
        {
            remove.remove();
        }
        remove = $('<button><span><span>' + opts['submit_remove'] + '</span></span></button>')
        actions.html(remove);
        remove.click(function(e) 
        {
            if(e.screenX != 0)
            {
                var input = getInput();
                input.val('remove');
                setPhoto(opts['tmp_photo']);
                remove.remove();
                addUpload();
            }
            
            return false;
        });
        //~ remove.attr('disabled', 'disabled');
    }
    
    function addUpload()
    {
        if(upload)
        {
            upload.remove();
        }
        upload = $('<button><span><span>' + opts['submit_upload'] + '</span></span></button>');
        actions.html(upload);
        uploader = new AjaxUpload(upload, 
        {
            action: '/temp/save',
            name: 'tmp',
            data: {
                width : opts['width'],
                height: opts['height'],
                MAX_FILE_SIZE: opts['max_file_size']
            },

            onSubmit: function(file, ext)
            {
                if (! (ext && /^(jpg|png|jpeg|gif)$/.test(ext))){
                    alert('Můžete nahrávat pouze soubory s příponout jpg, png, jpeg a gif');
                    return false;
                }
                this.disable();
                upload.hide();
                if(remove)
                {
                    remove.hide();
                }
                loader = $('<span>nahrávám... <img src="/images/loader-white.gif" style="vertical-align:middle;"/></span>');
                loader.insertAfter(upload);
            },
            onComplete: function(file, response) 
            {
                if(response.substr(0, 5) == 'error')
                {
                    upload.show();
                    loader.remove();
                    alert(response.substr(6));
                }
                else
                {
                    upload.show();
                    loader.remove();
                    setPhoto('/temp/get/' + response);
                    
                    var input = getInput();
                    input.val(response);
                    addRemove();
                }
                this.enable();
            }
        });
    }
    
    
    function render()
    {
        var img = $('img', container);
        photo_container = $('<div class="' + opts['photo_container_class'] + '" ></div>');
        action_container = $('<div class="' + opts['action_container_class'] + '" ></div>');
        
        actions = $('<p></p>');
        
        action_container.append(actions);
        action_container.append('<p class="light">' + opts['text'] + '</p>');
        
        container.append(photo_container);
        container.append(action_container);
        photo = $('<img src="' + opts['tmp_photo'] + '" />');
        photo.hide();
        photo_container.append(photo);
        if(img.length)
        {   
            var src = img.attr('src');
            
            setPhoto(src);
            img.remove();
            addRemove();
            if(src.indexOf("/temp/get/") != -1)
            {
                var input = getInput();
                src = src.replace(/\/temp\/get\//, '');
                input.val(src);
            }
        }
        else
        {
            photo.show();
            addUpload();
        }
        
        container.append('<div class="clearfix"></div>');
    
    }
    
})(jQuery);

(function($)
{    
    $.fn.AjaxInputCheck = function(options)
    {
        var defaults = {  
            'callback': function() { return false; }, 
            'loader': '/images/loader-white.gif',
            'check_ok': '/images/icons/accept.png',
            'check_no': '/images/icons/stop.png',
            'url': '',
            'params': {},
            'name': 'value',
            'errormsg': '',
            'addcheck': false
        };  
         
        return this.each(function() 
        {
            var opts = {};
            $.extend(opts, defaults, options);
            var input = $(this);
            var loader = false;
            var check = false;
            
            input.change(function() 
            {
                if(check)
                {
                    check.remove();
                }
                if(input.val() != '')
                {
                    var errid = 'errormsg' + opts['name'];
                    var li = input.parents('li.error').removeClass('error');
                    $('p.errmsg', li).remove();
                    if(!loader)
                    {
                        loader = $('<img src="' + opts['loader'] + '" alt="testuji" />');
                        var iof = input.offset();
                        var ltop = iof.top + input.outerHeight() / 2 - 8;
                        var lleft = iof.left + input.outerWidth() - 20;
                        loader.css({'position': 'absolute', 'left': lleft, 'top': ltop, 'z-index': '1000'});
                        $('body').append(loader);
                    }
                    var params = opts['params'];
                    params[opts['name']] = input.val();
                    $.getJSON(opts['url'], params, function(result) 
                    {
                        var callback = opts['callback'];
                        var msg = callback.call(this, result, input);
                        if(msg != false)
                        {
                            var p = $('<p />').append(msg).addClass('errmsg').attr('id', errid);
                            var div = input.parents('div:first');
                            input.parents('li:first').addClass('error');
                            div.append(p);
                            if(opts['addcheck'])
                            {
                                check = $('<img src="' + opts['check_no'] + '" alt="ne" />');
                            }
                        }
                        else if(opts['addcheck'])
                        {
                            check = $('<img src="' + opts['check_ok'] + '" alt="ok" />');
                        }
                        if(opts['addcheck'])
                        {
                            var iof = input.offset();
                            var ltop = iof.top + input.outerHeight() / 2 - 8;
                            var lleft = iof.left + input.outerWidth() - 20;
                            check.css({'position': 'absolute', 'left': lleft, 'top': ltop, 'z-index': '1000'});
                            $('body').append(check);
                        }
                        loader.remove();
                        loader = false;
                    });
                }
            })
        });
    };
})(jQuery);

function specialKey(evt)
{
    var code = evt.keyCode;
    if(code == 9 || code == 16 || code == 17 || code == 18 || code == 144 || code == 20 || code == 145 || code == 27 || code == 19 || code == 91 || code == 92 || code == 93 || code == 116 || code == 37 || code == 38 || code == 39 || code == 40)
    {
        return true;
    }
    return false;
}

function show_ipaper(paper, document_id, filename, file_id, width, height)
{
    var ipaper_timer = false;
    
    paper.html('');
    if(document_id != '' )
    {
        if(!width)
        {
            width = paper.innerWidth()
        }
        if(!height)
        {
            height = paper.innerHeight()
        }
        paper.flash({
            src: 'http://static.issuu.com/webembed/viewers/style1/v1/IssuuViewer.swf?mode=embed&amp;viewMode=presentation&amp;layout=http%3A%2F%2Fskin.issuu.com%2Fv%2Fcolor%2Flayout.xml&amp;backgroundColor=FFFFFF&amp;showFlipBtn=true&amp;documentId=' + document_id + '&amp;docName=' + filename + '&amp;username=karieratest&amp;loadingInfoText=46ba9c9361f6cee138ba07149d44dfa0&amp;et=1255703159837&amp;er=61',
            width: width,
            height: height,
            menu: "false",
            allowfullscreen: "true"
        });
        
        //~ paper.flash({
            //~ src: 'http://d.scribd.com/ScribdViewer.swf?document_id=' + document_id + '&access_key=' + access_key +  '&page=1&version=1&viewMode=list',
            //~ width: width,
            //~ height: height,
            //~ quality: "high",
            //~ play: "true",
            //~ loop: "true",
            //~ scale: "showall",
            //~ wmode: "opaque",
            //~ devicefont: "false",
            //~ bgcolor: "#ffffff",
            //~ menu: "false",
            //~ allowFullScreen: "true",
            //~ allowScriptAccess: "always",
            //~ salign: "",
            //~ mode: "list"
        //~ });
    }
    else
    {
        var msg = $('<div class="notice" style="text-align:left;"><h6 class="top">Omlouváme se, ale náhled dokumentu zatím není k dispozici</h6></div>');
        paper.append(msg);
        if(file_id)
        {
            msg.append('Chvilku strpení, náhled bude k dispozici během několika sekund <img src="/images/loader-white.gif" />');
            ipaper_timer = setTimeout(function() { check_ipaper(ipaper_timer, paper, file_id, width, height, true); }, 2000);
        }
        else
        {
            msg.append('Chvilku strpení, náhled bude k dispozici do několika sekund.');
        }
        
    }
    
    function check_ipaper(ipaper_timer, paper, id, width, height, upload)
    {
        api('storage', 'get', {id: id}, function(response) 
        { 
            if(response['result'])
            {
                if(response['data']['scribd_id'] != '')
                {
                    clearTimeout(ipaper_timer);
                    show_ipaper(paper, response['data']['scribd_id'], response['data']['filename'], id, width, height);
                }
                else
                {
                    ipaper_timer = setTimeout(function() { check_ipaper(ipaper_timer, paper, id, width, height); }, 2000);
                }
            }
            else
            {
                
            }
        });
        if(upload == true)
        {
            api('storage', 'upload', {id: id}, function(response) { } );
        }
    }
}

function bindFilelistLi(filelist, li, flgid)
{
    var show = $('a.show', li);
    var filename = show.attr('href');
    if(filename)
    {
        var ext = filename.substr(-4).toLowerCase();
        if(ext == '.jpg' || ext == '.gif' || ext == '.png' || ext == '.bmp' || ext == 'jpeg')
        {
            show.attr('rel', 'flgid_' + flgid).addClass('fancybox');
        }
        else if(ext == '.doc' || ext == '.pdf' || ext == '.odt' || ext == '.txt' || ext == 'docx' || '.rtf')
        {
            var tmp = show.attr('id').split('_');
            var file_id = tmp[1];
            if(tmp.length == 4)
            {
                show.attr('href', '/temp/ifdoc/' + file_id + '?doc_id=' + tmp[2] + '&secret=' + tmp[3]);
                show.fancybox({frameWidth: 400, frameHeight: 500, hideOnContentClick: false});
            }
        }
    }
}

function bindMailFiles(files)
{
    var list = $('ul', files);
    
    var ico = '<img class="ico" src="/images/paperclip.png" style="margin-right:.5em;" />';
    var linktitle = ico + 'Připojit soubor z počítače';
    if($('li', list).length > 0)
    {
        linktitle = ico + 'Připojit další soubor z počítače';
    }
    
    var upload = $('<a href="#">' + linktitle + '</a>');
    upload.insertAfter(list);
    uploader = new AjaxUpload(upload, 
    {
        action: '/temp/put',
        name: 'tmp',
        responseType: 'html',
        data: {
            'MAX_FILE_SIZE': 1000000
        },

        onSubmit: function(file, ext)
        {
            this.disable();
            upload.hide();
            loader = $('<span>nahrávám... <img src="/images/loader-white.gif" style="vertical-align:middle;"/></span>');
            loader.insertAfter(upload);
        },
        onComplete: function(file, response) 
        {
            if(response.substr(0, 5) == 'error')
            {
                var errmsg = response.substr(6);
                if(errmsg == '')
                {
                    errmsg = 'Chyba při nahrávání souboru, zkuste to prosím znovu';
                }
                alert(errmsg);
            }
            else
            {
                upload.html(ico + 'Připojit další soubor z počítače');
                var input = $('<input type="checkbox" name="files[]" value="' + response + '" checked="checked" class="radio" />');
                var li = $('<li />').append(input).append(' ' + file);
                list.append(li);
                
            }
            this.enable();
            upload.show();
            loader.remove();
        }
    });
}

$(document).ready(function() {

    var formerror = $('form ul.kform li.error:first');
    if(formerror.length)
    {
        var targetOffset = formerror.offset().top;
        $('html,body').animate({scrollTop: targetOffset - 50}, 500);
    }
    
    var flashtimer = false;
    
    $('#flash').each(function() 
    {
        var flash = $(this);
        setTimeout(function() { flash.fadeOut('slow'); }, 10000);
    });
    $('#flash a.close').click(function() 
    {
        var flash = $(this).parent();
        flash.fadeOut('slow');
    });
	
	$('.collapsable a.toggle').toggle( function(){
			$(this).parents('.collapsable').addClass('opened').find('.hidden').show();
		}, function(){
			$(this).parents('.collapsable').removeClass('opened').find('.hidden').hide();
	});
	
    // if the function argument is given to overlay, it is assumed to be the onBeforeLoad event listener 
    $("a.expose").overlay({ 
        // custom expose settings 
        expose: { 
            color: '#e6e6e6', 
            opacity: 0.7, 
            closeSpeed: 800 
        } 
    }); 
	
	//tabs
	$(".tabbed-sections ul.tabbed").tabs("div.tabs-container", { 
		current: 'tabs-selected',
		tabs: 'li'
	});
    
	
	//table row hightlight
	$("table.table tr:not(.tfoot, .nohl)").hover(
		function() { $(this).addClass("highlight"); },
		function() { $(this).removeClass("highlight"); }
	);
	
	//pri zaskrtnuti checkboxu oznaci celej radek tabulky
    function selectTableRow(els)
    {
        if (els.attr("checked")) {
			els.parent().parent().addClass("selected");
		} else {
			els.parent().parent().removeClass("selected");
		}
    }
	$('table.table').each(function() { 
        $('td input[type=checkbox]', $(this)).each(function() {
            selectTableRow($(this));
        });
    });
	$('table.table td input[type=checkbox]').change(function() { selectTableRow($(this)); });

    
    $('a.showel').click(function() {
        var el = $($(this).attr('rel'));
        el.show();
        return false;
    });
    $('a.hideel').click(function() {
        var el = $($(this).attr('rel'));
        el.hide();
        return false;
    });
    $('a.toggleel').click(function() {
        var el = $($(this).attr('rel'));
        el.toggle();
		var collapsable = $(this).parent().parent();
		if(collapsable.is('.collapsable'))
		{
			if(collapsable.is('.opened'))
			{
				collapsable.removeClass('opened');
			}
			else
			{
				collapsable.addClass('opened');
			}
		}
        return false;
    });
	
    $('ul.filelist').each(function(flgid, el) {
        var filelist = $(this);
        $('li', filelist).each(function() 
        {
            bindFilelistLi(filelist, $(this), flgid);
        });
        $('a.fancybox', filelist).fancybox();
        
    });
    
    $('table.filelist').each(function(flgid, el) {
        var filelist = $(this);
        $('tr', filelist).each(function() 
        {
            bindFilelistLi(filelist, $(this), flgid);
        });
        $('a.fancybox', filelist).fancybox();
        
    });
    $('div.mailer #files').each(function() 
    {
        bindMailFiles($(this));
    });
    
    $('div.ipaper').each(function(i, el) {
        var paper = $(el);
        var tmp = paper.attr('id').split('_');
        var document_id = tmp[0];
        var access_key = tmp[1];
        var file_id = false;
        if(tmp[2])
        {
            file_id = tmp[2];
        }
        //~ if(document_id && access_key)
        //~ {
        show_ipaper(paper, document_id, access_key, file_id, false, false);
        //~ }
    });
    
	$('a.toggler').toggle( function()
    {
        $('#' + $(this).attr('rel')).show();
    }, function() {    
        $('#' + $(this).attr('rel')).hide();
    });
    
    $('a.askme').live('click', function(){
    	var yes = confirm('Continue?');
    	return yes;
    });
    
});
