function go(form) {
    if (form.selectedIndex == 0)
        null;
    else
        location = form.options[form.selectedIndex].value;
}

(function($) {
    var 
        articles = new Array(),
        busy = false,
        ajax_url = '/aktuell/kommentare/kommentator.php',        
    
    cm_get_num_comments = function() {
        $.ajax({
            type:     "GET",
            dataType: 'json',
            data:     "action=num&ids=" + articles.join(','),
            url:      ajax_url,
            success:  function(data) {
                $.each(data, function(key, value) {
                    var anc = $('#nav-comments-' + key);
                    anc.html(value + ' Kommentare');
                    if (value < 1) {
                        anc.unbind('click').bind('click', function(e) { e.preventDefault(); });
                    }                    
                });
            } 
        });
    }    
        
    cm_show_ajax_result = function(id, data) {
        var htmlBtnHide = '<a href="#" class="hide">Ausblenden</a>';        
        $("#comments-" + id)
            .html(htmlBtnHide)
            .append(data)
            .slideDown();
        // Event-Handler
        $(".hide").bind('click', function(e) {
            e.preventDefault();
            $(this).parent().slideUp();
        });
        $("#btn-submit").bind('click', function(e) {
            e.preventDefault();
            cm_submit_comment(id);
        });
        $("#btn-correct").bind('click', function(e) {
            e.preventDefault();
            cm_submit_comment(id, true);
        });
        
    }
    
    cm_show_ajax_error = function() {
        alert('Kommentare können nicht geladen werden.');
    }
    
    cm_show_comments = function(id) {
        $.ajax({
            type:    "GET",
            data:    "action=show&id=" + id,
            url:     ajax_url,
            error:   function() { cm_show_ajax_error(); },
            success: function(data) { cm_show_ajax_result(id, data); }
        });	
        busy = false;
    },
    
    cm_show_form = function(id) {
        $.ajax({
            type:    "GET",
            data:    "action=add&id=" + id,
            url:     ajax_url,
            error:   function() { cm_show_ajax_error(); },
            success: function(data) { cm_show_ajax_result(id, data); }
        });        
        busy = false;
    },
    
    cm_submit_comment = function(id, btnCorrectPressed) {
        var action = $("#action").val();
        var author_name = $("#author_name").val();
        var author_email = $("#author_email").val();
        var entry_text = $("#entry_text").val();
        var error = 0;
        
        if (author_name == '') {
            $("#author_name").addClass("highlight").after('<span class="error">Bitte geben Sie Ihren Namen an.</span>');
            error++;
        }
        if (author_email == '') {
            $("#author_email").addClass("highlight").after('<span class="error">Bitte geben Sie Ihre E-Mail-Adresse an.</span>');
            error++;
        }
        if (entry_text == '') {
            $("#entry_text").addClass("highlight").after('<br><span class="error">Sie haben keinen Kommentar eingetragen.</span>');
            error++;
        }
        
        if (error == 0) {            
            formData = "id=" + id 
                        + "&action=" + action 
                        + "&author_name=" + author_name
                        + "&author_email=" + author_email
                        + "&entry_text=" + entry_text
                        + "&location=" + window.location.href;
            if (btnCorrectPressed) {
                formData += "&btn-correct=Korrigieren";
            }
            
            $.ajax({
                type: "POST",
                data: formData,
                url: ajax_url,
                error: function() {
                    alert('Der Kommentar konnte nicht gespeichert werden.');
                },
                success: function(data) { cm_show_ajax_result(id, data); }
            });
            busy = false;
        }
    };
    
    var public_methods = {
        init : function() {
            
            this.each( function() {
                                
                var _this = $(this);
                var id = _this.attr('rel') || '';
                
                if (id != '') {
                    articles.push(id);
                    _this.unbind('click').bind('click', function(e) {                                                           
                        e.preventDefault();
        
                        if (busy) {
                            return;
                        }
                        busy = true;
                        
                        if ($(this).attr('class') == 'nav-comment') {
                            cm_show_form(id);
                        }
                        else {
                            cm_show_comments(id);
                        }
        
                        return false;
                    });    
                }                                
            });
            
            cm_get_num_comments();
            
            return this;
        }
    };
    
    $.fn.kommentator = function( method ) {
        // Method calling logic
        if ( public_methods[method] ) {
            return public_methods[method].apply( this, Array.prototype.slice.call( arguments, 1 ));
        } else if ( typeof method === 'object' || ! method ) {
            return public_methods.init.apply( this, arguments );
        } else {
            $.error( 'Method ' +  method + ' does not exist on jQuery.kommentator' );
        }    
    };    
}) (jQuery);
