jQuery(function() {

    $('#navigation').navigation();
    $('#nav').navigationAdmin();

    /**
     * misc
     */

    $('#pageform').each(function() {
        var errors = $('ul.errors li:first');

        if (errors.length > 0) {
            var id = errors.closest('fieldset').attr('id').replace(/fieldset-/, '#');
            location.hash = id;
        } else {
            if (location.hash.length == 0) {
                location.hash = 'details';
            }
        }
    });

    $('div.tabs.hashchange').each(function() {
        if (location.hash.length < 1) {
            location.hash = $('fieldset:first').attr('id').substr(9);
        }
        $(window).hashchange(function() {
            var hash = location.hash.replace(/#/, '');
            var content = $('#content');
            $('fieldset:not(.fieldset-file)', content).hide();
            $('#fieldset-' + hash, content).show();
            $('li a.active', content).removeClass('active');
            $('li a[href="' + location.hash + '"]', content).addClass('active');
        }).hashchange();
    });

    $('#save').click(function() {
        var items = [];
        $('li.item').each(function() {
            //rows.push($(this).attr('id'));
            var item = {};
            var id = $(this).attr('id');
            var parentId = $(this).closest('li.item').attr('id');

            items.push({id: id, parentId: parentId});
        });
        alert($.toJSON(items));
    });


    /*
     * settings for date picker
     */
    $.datepicker.setDefaults($.datepicker.regional['de']);
    $("input.form-date:not([readonly])").datepicker({
        dateFormat:  'dd.mm.yy',
        showWeek:    true,
        changeMonth: true,
        changeYear:  true
    });
    $("input.form-date").click(function() {
        $(this).focus();
        $(this).select();
    });
    $("input.form-date").keyup(function() {
        $(this).datepicker('hide');
    });




    //$('#teaser-element, #text-element').css({'padding': 0, clear: 'both', 'margin': 0, 'paddingTop': '10px', 'paddingBottom': '10px'});

    $('#details-template').change(function() {
        var id  = $(this).val();
        var url = '/pages/admin/template/id/' + id;

        $.ajax({url: url, type: 'post', dataType: 'json', success: function(data) {
            $('#template').html(data.template);
        }});
    
        return false;
    });


    $('#template a.variable').live('click', function() {
        var parts  = $(this).attr('rel').split('_');
        var block  = parts[0];
        var key    = parts[1];
        var uuid   = parts[2];
        var value  = $('#var_value_' + uuid + '_' + key).val();
        var url    = '/pages/admin/variable';
        var data   = {block: block, key: key, uuid: uuid, value: value};

        $.ajax({url: url, type: 'post', data: data});
        return false;
    });

    $('#variableForm a.submit').live('click', function(event) {
        var win   = $(this).closest('#variableForm');
        var ta    = $('textarea', win);
        var value = ta.val();
        var key   = ta.attr('id');

        key = key.replace(/var_edit_/, "");

        $('#var_value_' + key).val(value);
        $('#var_content_' + key).html(value);

        $(this).closest('.window').dialog('close');

        return false;
    });

    $('#template select.templateAddBlock').live('change', function() {
        var select = $(this);
        var val = $(this).val();
        var url = '/pages/templates/get/id/' + val;
        var loader = $('<div class="blockLoader">Block wird geladen...</div>');

        select.closest('div.block').before(loader);

        $.ajax({url: url, type: 'post', dataType: 'json', success: function(data) {
            loader.remove();
            select.closest('div.block').before(data.block);

            var i = 0;
            $('div.block', '#template').each(function() {
                $('input[type="hidden"]', this).each(function() {
                    var name = $(this).attr('name');
                    name = name.replace(/variable\[[0-9]*\]/, 'variable[' + i + ']');
                    $(this).attr('name', name);
                });
                i++;
            });
        }});

        $(this)[0].selectedIndex = 0;
        $(this).blur();
        return false;
    });

    $('#template a.templateDeleteBlock').live('click', function() {
        var title = $(this).attr('title');
        var result = window.confirm(title);
        if (result) {
            $(this).closest('div.block').remove();
        }
        return false;
    });

    $('div.window').livequery(function() {
        $(this).bind('dialogclose', function() {
            $('textarea.wysiwyg-full', this).remove();
        });
    });

    $('button.close').live('click', function() {
        $(this).closest('div.window').dialog('close');
        return false;
    });

    $('input.gallery').live('change', function() {
        var block = $(this).closest('div.block');
        var hidden = $('input:first', block);

        var val = $.parseJSON(hidden.val());
        val['gallery'] = $(this).val()

        hidden.val($.toJSON(val));
    });

    $('input.gallery:checked').change();

    /**
     * gallery upload
     */
    $('#attachmentResultFiles').bind('add', function(event, params, data) {
        var span = $('<span />')
            .addClass('image')
            .appendTo(this);
        var input = $('<input type="hidden" />')
            .attr('name', params.element)
            .appendTo(span)
            .val($.toJSON(params));
        var anker = $('<a />')
            .attr('href', '#delete')
            .appendTo(span);
        var img = $("<img />")
            .hide()
            .load(function() {
                $(this).fadeIn('fast');
            })
            .appendTo(anker)
            .attr('src', params.url);
    });


    $('#attachmentResultFiles a').live('click', function() {
        var title = 'Möchten Sie das Bild wirklich löschen?';
        var result = window.confirm(title);
        if (result) {
            var span = $(this).closest('span').fadeOut('fast');
            var input = span.find('input');
            var data = $.parseJSON(input.val());
            data.status = 'delete';
            input.val($.toJSON(data));
        }
        return false;
    });

    $('dd.multicheckbox').wrapInner('<div class="multicheckbox" />');


    /**
     * single file upload window (ajax)
     *
     */

    $('div.window input[type="file"]').livequery('change', function() {
        var elem = $(this);
        var form = elem.closest('form');
        var id   = elem.attr('id');
        var url  = form.attr('action');
        var win  = form.closest('div.window');

        win.uploading();

        $.ajaxFileUpload({
            url: url,
            fileElementId: id,
            secureuri: false,
            dataType: 'json',
            success: function (data, status) {
                win.stopUploading();
                $(data).run();
            },
            error: function (data, status, e) {
                win.stopUploading();
                alert(e.message + "\n" + $.toJSON(data));
            }
        });
    });

    /**
     * updates or removes profile image / logo
     */

    $('#head-image').bind('edit', function(event, data) {
        $(this).val($.toJSON(data));
        
        var container = $(this).next();
        container.html('');

        var img = $('<img />').appendTo(container).load(function() {
            container.fadeIn('fast');
        });

        img.attr('src', data.url);
    });

    $('div.inlineimage a.inlineImageDelete').click(function() {
        var container = $(this).closest('.inlineimage');
        $('div.preview', container).html('');
        $('input', container).val('');
        return false;
    });


    $('textarea.wysiwyg-full, textarea.wysiwyg-basic').livequery(function() {
        $(this).tinymce({
            script_url: '/javascripts/vendor/tinymce/jscripts/tiny_mce/tiny_mce.js',
            content_css : '/stylesheets/wysiwyg.css',
            plugins: 'safari,style,layer,table,advimage,inlinepopups,preview,media,contextmenu,paste,fullscreen,visualchars,nonbreaking',
            language: 'de',
            theme: 'advanced',
            theme_advanced_buttons1: 'bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright,justifyfull,styleselect,formatselect',
            theme_advanced_buttons2: 'cut,copy,paste,pastetext,pasteword,|,bullist,numlist,|,outdent,indent,blockquote,|,undo,redo,|,link,unlink,anchor,image,cleanup,code,|,forecolor,backcolor',
            theme_advanced_buttons3: 'tablecontrols,|,removeformat,visualaid,|,sub,sup,|,charmap,media,|,fullscreen',
            theme_advanced_toolbar_location: 'top',
            theme_advanced_toolbar_align: 'left',
            theme_advanced_statusbar_location: 'bottom',
            theme_advanced_resizing: false,
            accessibility_warnings: false,
            convert_urls: false,
            file_browser_callback: function (field_name, url, type, win) {
                tinyMCE.activeEditor.windowManager.open({
                    width: 800,
                    height: 520,
                    file: '/media/browse/type/' + type + '/browser/true?url=' + url,
                    title: 'Browser',
                    resizable: "no",
                    close_previous: "no",
                    inline: "yes",
                    popup_css: false
                }, {
                    window: win,
                    input: field_name,
                    style_css_window: null
                });
                return false;
            }
        });
    });

    /**
     * MediaBrowser
     */
    $('div.MediaBrowser ul li').hover(function() {
        $('span.actions', this).show();
    }, function() {
        $('span.actions', this).hide();
    });

    // apply selected item
    $('a.apply').live('click', function() {
        FileBrowserDialogue.apply($(this).attr('rel'));
        return false;
    });

    // reload page, after all uplods completed
    $('button.upload').bind('uploadComplete', function(event, data) {
        if ($(this).swfupload().getStats().files_queued == 0) {
            //location.reload();
        }
    });




    $('#filesList').bind('thumbnail', function(event, file) {
        var span = $('<span />')
            .addClass('image')
            .appendTo(this);
        var input = $('<input type="hidden" />')
            .attr('name', 'photos[files][' + file.uuid + ']')
            .appendTo(span)
            .val($.toJSON(file));
        var anker = $('<a />')
            .attr('href', '#delete')
            .appendTo(span);
        var img = $("<img />")
            .hide()
            .load(function() {
                $(this).fadeIn('fast');
            })
            .appendTo(anker)
            .attr('src', file.thumbnails[0]);
    });

    $('input.upload').each(function() {
        var reload = ($('#formgallery').length == 0);
        var options  = $.parseJSON($(this).next('input').val());
        var settings = {
            uploader        : '/javascripts/vendor/uploadify/uploadify.swf',
            checkExisting   : '/javascripts/vendor/uploadify/check.php',
            cancelImg       : '/javascripts/vendor/uploadify/cancel.png',
            buttonImg       : '/images/uploadbutton.png',
            buttonText      : '',
            fileDataName    : 'file',
            fileDesc        : 'Bilder und Dokumente',
            fileExt         : '*.jpg;*.png;*.pdf,*.ppt,*.doc,*.xls',
            hideButton      : false,
            multi           : true,
            auto            : true,
            width           : 127,
            height          : 23,
            onComplete      : function(event, ID, fileObj, response, data) {
                try {
                    //console.debug(response);
                    var json = $.parseJSON(response);
                    $(json).run();
                } catch (e) {
                    console.debug(response);
                    alert('Datei-Upload ist fehlgeschlagen.');
                }
            },
            onAllComplete: function(event, ID, fileObj, response, data) {
                if (reload) {
                    location.reload();
                }
                //$(response).run();
                //console.debug('all');
            }
        }
        $.extend(settings, options);
        $(this).uploadify(settings);
    });


    $('div.companies h2 a').click(function() {
        var dl = $(this).closest('h2').next('dl');

        if (dl.is(':hidden')) {
            dl.slideDown('slow');
        } else {
            dl.slideUp('slow');
        }

        return false;
    });

    $('div.google-map:first').each(function() {
        $.getScript('http://maps.google.com/maps/api/js?sensor=false&callback=GoogleMapLoader');
    });

    $('#formgallery span.image').click(function() {
        var title = 'Möchten Sie das Bild wirklich löschen?';
        var result = window.confirm(title);
        if (result) {
            $(this).fadeOut('fast', function() {
                $(this).remove();
            });
        }
        return false;
    });

});

function GoogleMapLoader() {
    $('div.google-map').each(function() {
        var id = (10000+parseInt(Math.random()*(99999-10000+1)));
        $(this).attr('id', id).html('');

        try {
            var data = $.parseJSON($(this).attr('title').replace(/'/g, '"'));
            var options = {
                zoom: data.zoom,
                center: new google.maps.LatLng(data.lat, data.lng),
                mapTypeId: google.maps.MapTypeId.ROADMAP
            };
            var map = new google.maps.Map(document.getElementById(id), options);
            var marker = new google.maps.Marker({
                position: new google.maps.LatLng(data.lat, data.lng),
                map: map,
                title: data.title
            });
        } catch (e) {
            alert('Error while loading Google Maps (#' + id + '): ' + e.message);
        }
    });
}


var FileBrowserDialogue = {
    init : function () {

    },
    apply : function (url) {
        var win = tinyMCEPopup.getWindowArg("window");

        // insert information now
        win.document.getElementById(tinyMCEPopup.getWindowArg("input")).value = url;

        // are we an image browser
        if (typeof(win.ImageDialog) != "undefined") {
            // we are, so update image dimensions and preview if necessary
            if (win.ImageDialog.getImageData) win.ImageDialog.getImageData();
            if (win.ImageDialog.showPreviewImage) win.ImageDialog.showPreviewImage(url);
        }

        // close popup window
        tinyMCEPopup.close();
    }
}

