// ----------------------------------------------------------------------
// PublikumsKommentarListe-klasse
// ----------------------------------------------------------------------
PublikumsKommentarListe = Class.create();
PublikumsKommentarListe.prototype = {
    initialize: function(id) {
        this.id = id; // (tmapi)Topic-id'en til emnen som skal kommenteres

        this.comment_form_prefix = ''; // prefix til feltene som inneholder 
            // kommentar, tittel og navn

        this.comment_service_url = '/ajax/kommentar.php';

        // div som inneholder feilmeldinger og statusmeldinger
        this.message_container_id = 'kommentar_feedback';
        this.recaptcha_publickey = null;
    },

    // Intern funksjon
    // Funksjonen som kalles når det oppstår en feil i AJAX-requesten.
    _err_handler: function(t) {
        var errorstr = 'Error ' + t.status + ' -- ' + t.statusText;
        var err = new Error(errorstr);
        logger.log(err);
    },

    // ------------------------------------------------------------------
    // Messaging "framework". Skal flyttes til egen klasse
    // ------------------------------------------------------------------

    // Intern funksjon
    // TODO: Burde flyttes til et eget objekt
    show_message: function(message, className) {
        var id = this.message_container_id;
        var node = $(id);
        if (node) {
            node.className = className;
            node.innerHTML = message+' ';
            var link = document.createElement('a');
            link.href='#';
            link.onclick = function() {
                var node = $(id);
                node.hide(); 
                // Vi vil ikke kreve scriptaculous for publikum
                //Effect.Fade(id,{duration: 0.25, queue: 'end'});
                return false;
            }
            link.appendChild(document.createTextNode('OK'));
            node.appendChild(link);
            // Vi vil ikke kreve scriptaculous for publikum
            //Effect.Appear(id,{duration: 0.25, queue: 'end'});
            $(id).show();
        }
    },   
    // ------------------------------------------------------------------

    set_comment_form_prefix: function(prefix) {
        this.comment_form_prefix = prefix;
    },

    new_comment_cancel: function() {
        $(this.comment_form_prefix+'tekst').value = ''; // Slett kommentaren
        $(this.comment_form_prefix+'tittel').value = ''; // Slett kommentaren
        $(this.comment_form_prefix+'navn').value = ''; // Slett kommentaren
        // TODO: Slett tittel og navn
        $('ny_kommentar_form').hide();
        $('ny_kommentar_lenke').show();
        Recaptcha.destroy();
        return false;
    },

    new_comment_post: function() {
        var kommentar = $(this.comment_form_prefix+'tekst').value;
        this._post_comment(kommentar);
        return false;
    },

    new_comment_show: function() {
        $('ny_kommentar_form').show();
        $('ny_kommentar_lenke').hide();
        Recaptcha.create(this.recaptcha_publickey,
                "recaptcha_div", {
                theme: "clean",
                callback: Recaptcha.focus_response_field
        });
        return false;
    }, 

    _parse_result: function(t) {
        var obj = eval('('+t.responseText+')');
        this.show_message(obj.message, obj.messageclass);
        this._update_list();
    },

    _parse_new_comment: function(t) {
        var obj = eval('('+t.responseText+')');
        this.show_message(obj.message, obj.messageclass);
        if (obj.status) {
            this.new_comment_cancel(); // Fjern og tom skjema
            this._update_list();
        } else {
            Recaptcha.reload();
        }
    },

    _update_list_reponse: function(t) {
        var div = $('kommentar_liste');
        div.innerHTML = t.responseText;
    },

    // Intern funksjon
    // Starter asynkron lagring av kommentaren
    _post_comment: function(kommentar) {
        var paramstr = "id="+encodeURIComponent(this.id)+"&"
            +Form.serialize('ny_kommentar_form_content');
        new Ajax.Request(this.comment_service_url,
              {parameters:paramstr,
              onSuccess:this._parse_new_comment.bind(this),
              onFailure:this._err_handler.bind(this)});
    },

    _update_list: function() {
        var paramstr = "id="+encodeURIComponent(this.id)+"&action=list";
        new Ajax.Request(this.comment_service_url,
              {parameters:paramstr,
              onSuccess:this._update_list_reponse.bind(this),
              onFailure:this._err_handler.bind(this)});
    },

    set_public_key: function(key) {
        this.recaptcha_publickey = key;
    }
}



