// on server: error 411 on POST requests when not sending any data (use least empty callback function)

// extend jQuery with chainable function .reset() for forms
$.fn.extend({ reset: function(){return this.each(function() {$(this).is('form') && this.reset();} )} });

// get absolute scroll top position
function getScrollY() {
    return (window.pageYOffset) ? window.pageYOffset : (document.documentElement) ? document.documentElement.scrollTop : document.body.scrollTop;
}

function setCookie(name, value, days) {
    var today = new Date();
    var expire = new Date();
    if (days==null || days==0) days=1;
    expire.setTime(today.getTime() + 3600000*24*days);
    document.cookie = name+'='+escape(value) + ';path=/;expires='+expire.toGMTString();
}

// create url from title
function myUrlEncode(url) {
    url = url.replace(/ /gi, '-');
    url = url.replace(/Ä/g, 'Ae').replace(/ä/g, 'ae');
    url = url.replace(/Ö/g, 'Oe').replace(/ö/g, 'oe');
    url = url.replace(/Ü/g, 'Ue').replace(/ü/g, 'ue');
    url = url.replace(/ß/g, 'ss');
    url = url.replace(/[^\w-]/gi, '-');
    url = url.replace(/-+/g, '-');
    if (url.charAt(0) == '-') url = url.slice(1, url.length);
    if (url.lastIndexOf('-') == url.length-1) url = url.slice(0, url.length-1);
    return url
}

function CreateBookmarkLink()
{
    var url = document.URL;
    var title = document.title;

    // moz
    if (window.sidebar) window.sidebar.addPanel(title, url,'');
    // ie
    else if( window.external ) window.external.AddFavorite(url, title);
    else alert('Bitte CTRL+D drücken');
}

function CreateSocialNetworkLinks() {
    var url = escape(document.URL);
    var title = escape(document.title);
    var networks = [
        ['Delicious', 'delicious', 'http://del.icio.us/post?url=#url#&amp;title=#title#'],
        ['Digg', 'digg', 'http://digg.com/submit?phase=2&amp;url=#url#&amp;title=#title#'],
        ['Facebook', 'facebook', 'http://de.facebook.com/sharer.php?u=#url#&amp;t=#title#'],
        ['Google&nbsp;Bookmarks', 'google_bookmarks', 'http://www.google.com/bookmarks/mark?op=add&amp;bkmk=#url#&amp;title=#title#'],
        ['LinkArena', 'linkarena', 'http://linkarena.com/bookmarks/addlink/?url=#url#&amp;title=#title#'],
        ['Mister&nbsp;Wong', 'mister_wong', 'http://www.mister-wong.de/index.php?action=addurl&amp;bm_url=#url#&amp;bm_description=#title#'],
        ['MySpace', 'myspace', 'http://www.myspace.com/index.cfm?fuseaction=postto&amp;u=#url#&amp;t=#title#'],
        ['reddit', 'reddit', 'http://reddit.com/submit?url=#url#&amp;title=#title#'],
        ['StudiVZ', 'studivz', 'http://www.studivz.net/Suggest/Selection/?u=#url#&amp;desc=#title#'],
        ['StumbleUpon', 'stumbleupon', 'http://www.stumbleupon.com/submit?url=#url#&amp;title=#title#'],
        ['Twitter', 'twitter', 'http://twitter.com/home?status=#url#'],
        ['Windows&nbsp;Live', 'windows_live', 'https://favorites.live.com/quickadd.aspx?marklet=1&amp;mkt=en-us&amp;url=#url#&amp;title=#title#&amp;top=1'],
        ['Yahoo', 'yahoo', 'http://myweb2.search.yahoo.com/myresults/bookmarklet?t=#title#&amp;d=&amp;tag=&amp;u=#url#'],
        ['Y!gg', 'yigg', 'http://www.yigg.de/neu?exturl=#url#&amp;exttitle=#title#']
    ];
    var html = '';
    for (var i=0; i<networks.length; i++) {
        html += '<a target="_blank" class="icon_label icon_' + networks[i][1] + '" href="' + networks[i][2] + '" title="' + networks[i][0] + '">' + networks[i][0] + '</a>';
    }
    $('.social_networks').html(html.replace(/#url#/g, url).replace(/#title#/g, title) + '<br class="breaker" />');
}

// set default value in search inputs
function set_default_search_input_value(input_selector, default_search_value) {
    if ($(input_selector).val() == '')
        $(input_selector).css('color', '#777').val(default_search_value);
    $(input_selector)
        .focus(function() {
            if ($(this).val() == default_search_value) $(this).css('color', '#333').val('');
            else $(this).select();
        })
        .blur(function() {
            if ($(this).val() == '') $(this).css('color', '#777').val(default_search_value);
        });
}


// INIT
$(function() {
    //preload ajax spinner or ff will not login correctly
    $('#loading').hide();

    $("a[rel^='lightbox']").livequery(function() {
        $(this).colorbox({opacity: 0.3 , current:'{current}/{total}', maxHeight:'99%'});
    });

    CreateSocialNetworkLinks();

    // header search dropdown select
    $('#header_search_filter_select span').click(function(e) {
        e.preventDefault();
        target = $(this).html();
        $('#header_search_filter_select span').css('font-weight', 'normal');
        $(this).css('font-weight', 'bold');
        $('#header_search_filter_choice').html(target);
        if (target == 'Autor') $('#search_filter_target').val('author');
        else if (target == 'Forum') $('#search_filter_target').val('forum');
        else $('#search_filter_target').val('page');
        $('#header_search_filter_select').slideToggle(200);
    });

    //init dropdown menu
    $('ul.sf-menu').superfish({ speed: 0, delay: 500 });

    $('.reset').live('click', function(e) { e.preventDefault(); $(this).closest('form').reset(); });
    $('.submit').live('click', function(e) { e.preventDefault(); $(this).closest('form').submit(); });
    $('.onclick_select').live('click', function(e) { $(this).select(); });

    //simple form validation on required fields
    $('form').live('submit', function(e) {
        var error = false;
        $($(this).find('.required')).each( function() {
            if ( $(this).val() == '' ) { $(this).addClass('required_highlight'); error = true; }
            else $(this).removeClass('required_highlight');
        });
        if (error) { e.preventDefault(); alert('Die markierten Felder sind zwingend erforderlich.'); }
        else $('#loading').show();
    });
    $('.ajax_form').live('submit', function(e) {
        e.preventDefault();
        var error = false;
        var form = $(this).closest('form');
        $(form.find('.required')).each( function() { if ( $(this).val() == '' ) error = true; });
        if (!error) form.ajaxSubmit({ success: function(response) { $(form.attr('rel')).html(response); } });
    });
    //prevent_submit *must* be placed below form-submit or loading spinner will show after prevented submit
    $('.prevent_submit').live('submit', function() { $('#loading').hide(); return false; });

    $('.confirm_link').live('click', function(e) {
        if (!confirm( $(this).attr('rel')?$(this).attr('rel'):'Eintrag wirklich löschen?' )) e.preventDefault();
    });

    $('.ajax_link').live('click', function(e) {
        e.preventDefault();
        var target = $(this).attr('rel');
        if ($(this).attr('confirm') == null || confirm($(this).attr('confirm')))
            $.post($(this).attr('href'), function(data){ $(target).html(data); });
    });

    $('.open_modal').live('click', function(e) {
        e.preventDefault();
        if ($(this).attr('confirm') == null || confirm($(this).attr('confirm')))
            $.post($(this).attr('href'), function(data){
                $.fn.colorbox({ html: data, overlayClose: false, opacity: 0.5 });
            });
    });

    $('.show_rel').live('click', function(e) { e.preventDefault(); $($(this).attr('rel')).fadeIn(500); });
    $('.hide_rel').live('click', function(e) { e.preventDefault(); $($(this).attr('rel')).fadeOut(500); });
    $('.scroll_to_rel').live('click', function(e) { e.preventDefault(); $.scrollTo($(this).attr('rel'), 500); });
    $('#loading').ajaxSuccess(function(){ $(this).hide(); });
    $('#loading').ajaxStart(function(){ $('#loading_error').hide(); $(this).css({ top: (getScrollY()+190)+'px', left: ($(window).width()/2-78)+'px'}).show(); });
    $('#loading_error').ajaxError(function(){ $('#loading').hide(); $(this).css ({ top: (getScrollY()+190)+'px', left: ($(window).width()/2-78)+'px'}).show(); setTimeout("$('#loading_error').fadeOut()", 3000); });
    $('.check_all').live('click', function(e) { $($(this).attr('rel')).attr('checked', $(this).attr('checked')); });

    // max_length for textareas
    $('.textarea_maxlength').live('keyup', function() {
        var textarea = $(this);
        var max = parseInt(textarea.attr('rel'));
        if (textarea.val().length > max) textarea.val(textarea.val().substr(0, max));
        $(this).parent().find('.chars_remaining').html('Noch ' + (max - $(this).val().length) + ' Zeichen übrig.');
    });

    // show new comment and mark as read
    $('.show_comment').click(function(e) {
        e.preventDefault();
        comment_pk = $(this).attr('rel');
        $(this).slideToggle(200).next('div').slideToggle(300);
        $.post('/accounts/comments/set_status_direct/'+comment_pk+'/?action=read', function(data) {});
    });

    $('.autocomplete_user').livequery(function() {
        $(this).autocomplete({
            minChars: 3, maxHeight: 200, serviceUrl:'/accounts/messages/compose/autocomplete/',
            onSelect: function(value, data){ $('.autocomplete_user').val(data); }
        });
    });

    // open and close messages
    $('.toggle_message').click(function(e) {
        e.preventDefault();
        message_pk = $(this).attr('rel');
        subject_link = $('#subject_'+message_pk);
        $('.message_bg_'+message_pk).toggleClass('bg_color1');
        $('#message_details_'+message_pk).slideToggle(300);
        subject_link.toggleClass('icon_10px_right').toggleClass('icon_10px_down');
        if (subject_link.hasClass('is_new')) {
            subject_link.removeClass('is_new');
            $('#new_mark_'+message_pk).remove();
            $.post('/accounts/messages/set_message_status_read/'+message_pk+'/', function(data) {});
        }
    });
    $('.direct_reply').live('click', function(e) {
        e.preventDefault();
        message_pk = $(this).attr('rel');
        form_data = {'text': $('#message_form_'+message_pk).find('textarea').val()};
        $.post('/accounts/messages/direct_reply/'+message_pk+'/', form_data, function(data) {
            $('#message_form_'+message_pk).html(data);
        });
    });
    $('.get_previous_messages').live('click', function(e) {
        e.preventDefault();
        link = $(this);
        container = $('#previous_messages_'+message_pk);
        message_pk = $(this).attr('rel');
        if ( container.html() == '' ) {
            link.html('Vorhergehende Nachrichten ausblenden');
            $.post('/accounts/messages/previous/'+message_pk+'/', function(data){ container.html(data); });
        } else {
            if (container.is(':hidden')) {
                link.html('Vorhergehende Nachrichten ausblenden');
                container.slideToggle(300);
            }
            else {
                link.html('Vorhergehende Nachrichten anzeigen');
                container.slideToggle(300);
            }
        }
    });

    //toggle more less buttons of subcats
    $('.toggle_more').live('click', function(e) {
        e.preventDefault();
        $(this).parent().find('.toggle').each( function() { $(this).toggle(); });
    });

    //tab-menu
    $('.show_tab').live('click', function(e) {
        e.preventDefault();
        $('.tabs').hide();
        $('.show_tab').removeClass('selected_tab');
        $(this).addClass('selected_tab');
        $( $(this).attr('rel') ).show();
    });

    // popup divs
    $('.popup').live('click', function(e) {
        e.preventDefault();
        // create clone for appending to body and thereby setting *real* absolute position
        var handle = $(this);
        var target = handle.next('.popup_container').clone(true);
        target.appendTo('body');

        var handle_left = handle.offset().left;
        var handle_top = handle.offset().top;
        var handle_bottom = handle_top + handle.outerHeight();
        var full_bottom = handle_bottom + $(target).outerHeight();

        if (handle_left > ($(window).width()/2))
            var left = handle_left + handle.outerWidth()-$(target).outerWidth();
        else
            var left = handle_left;

        if (full_bottom > getScrollY() + $(window).height() || handle.attr('rel') == 'force_top')
            var top = handle_top -$(target).outerHeight() - 4;
        else
            var top = handle_bottom + 4;
        $(target).css({ position: 'absolute', top: top+'px', left: left+'px', 'z-index': '20000'}).fadeIn(300)
            .hover( function() {}, function() { $(target).remove(); } )
            .find('h4').click(function() { $(target).remove(); });
        if ($.fn.draggable) $(target).draggable();
    });

    // ajax popup divs
    $('.ajax_popup').live('click', function(e) {
        e.preventDefault();
        var handle = $(this);
        $.post(handle.attr('href'), function(response) {
            var target = $('<div style="display: none; position: absolute;"></div>').hide().html(response);
            target.appendTo('body');
            x = $(window).width()/2 - $(target).outerWidth()/2
            y = getScrollY() + $(window).height()/2 - $(target).outerHeight()/2
            if (y < 0 || handle.attr('rel') == 'force_top') y = getScrollY() + 5;
            $(target).css({ top: y+'px', left: x+'px', 'z-index': '20000'}).fadeIn(300);
            if ($.fn.draggable) $(target).draggable();
        });
    });

    // common functions for page edit and page create
    $('.get_category select').live('change', function() {
        var url = $('.get_category').attr('rel')
        var form_data = $(this).closest('form').serialize()
        $.post(url, form_data, function(data){ $('.get_category').html(data); });
        $('.category_change_marker').show();
    });
});
