

function showMessageThread(location_id) {
    var ee = document.getElementById('header_' + location_id);
    if (ee) ee.style.display = "none";
    
    var el = document.getElementById('content_' + location_id);
    if (el) el.style.display = "";
}

function hideMessageThread(location_id) {
    var ee = document.getElementById('header_' + location_id);
    if (ee) ee.style.display = "";
    
    var el = document.getElementById('content_' + location_id);
    if (el) el.style.display = "none";
}

function loadMessageThread(location_id, board, board_id, thread_id, admin_mode, reload) {
    loadJSON('ajax_load_message_thread.php?board=' + board + '&board_id=' + board_id + '&thread_id=' + thread_id + '&admin_mode=' + admin_mode, function(result) {showMessageThreadCallback(location_id, result, reload);});
}

function showMessageThreadCallback(location_id, result, reload) {
    var el = document.getElementById(location_id);
    if (el) {
        el.loaded = true;
        el.innerHTML = "<div class='full_thread'><a class='collapse' href='#' onclick=\"hideMessageThread('" + location_id + "'); return false;\" style='float:right';>Collapse</a>" + result + "</div>";
        showMessageThread(location_id);
    }
	if (reload) {
        // this is dangerous if an anchor is not present!
        if (document.location.href.indexOf('#') != -1) {
            document.location.href = document.location.href;
        }
	}
}

function deleteMessage(mb, mb_id, message_id, depth, recurse) {
    if (recurse == undefined) recurse = false;
    var answer;
    if (recurse) {
        if (depth == 0) {
            answer = confirm("Are you sure you want to delete this entire thread?");
        } else {
            answer = confirm("Are you sure you want to delete this message and all the replies to it?");
        }
    }
    else answer = confirm("Are you sure you want to delete this?");
    if (answer) {
        var form = document.createElement('FORM');
        form.method = 'POST';

        form.appendChild(createFormInput('hidden', '_submit_check', 'delete_message'));
        form.appendChild(createFormInput('hidden', 'board', mb));
        form.appendChild(createFormInput('hidden', 'board_id', mb_id));
        form.appendChild(createFormInput('hidden', 'message_id', message_id));

        document.body.appendChild(form);

        form.submit();
    }
}

function postComment(action, entity_id, entity_type, comment_id) {
    var title;
    var reply_to = null;
    var new_subject = '';
    var new_body = '';

    switch (action) {
    case 'post':
        title = 'Post Your Message';
        break;
    case 'reply':
        var comments = $$('.comment-'+comment_id);
        if (comments.length == 0)
            return;

        reply_to = comments[0];
        reply_to = {'id': comment_id,
                    'subject': reply_to.select('span.subject')[0].innerHTML,
                    'posted_by': reply_to.select('a.posted_by')[0].innerHTML,
                    'body': reply_to.select('div.comment-body')[0].innerHTML}
        title = 'Reply To ' + reply_to.posted_by;
        new_subject = reply_to.subject.indexOf('RE:') == -1 ? 'RE: '+reply_to.subject : reply_to.subject;

        break;

    case 'edit':
        var comments = $$('.comment-'+comment_id);
        if (comments.length == 0)
            return;

        edit = comments[0];
        title = 'Edit Message';
        if (edit.up('.comment-board.threaded')) {
            if (edit.select('span.subject').length > 0)
                new_subject = edit.select('span.subject')[0].innerHTML.replace(/<br\s*?\/?>/g, '');
            else
                new_subject = '';
        }
        else
            new_subject = false;

        new_body = edit.select('div.comment-body-editable')[0];
        new_body = new_body.innerHTML.replace(/<br\s*?\/?>/g, '').unescapeHTML();

        break;

    default:
        return;
    }

    var popup = new Popup(400, title);

    var div = document.createElement('div');
    div.className = 'commentForm';

    if (reply_to) {
        var d = document.createElement("div");
        d.style.overflow="auto";
        d.style.height="100px";
        d.style.border="1px solid gray";
        d.style.width = "100%";
        d.innerHTML = reply_to.body;
        div.appendChild(d);
        div.appendChild(document.createElement('br'));
    }

    var form = document.createElement('form');
    form.method = 'post';
    form.id = createUID('post_message');


    if (new_subject !== false) {

        var label = document.createElement('label');
        label.innerHTML = "Subject";
        form.appendChild(label);

        form.appendChild(document.createElement('br'));

        var subject = createFormInput('text', 'subject');
        subject.style.width = "373px";
        subject.className = "input";
        subject.value = new_subject;
        form.appendChild(subject);
    }

    form.appendChild(document.createElement('br'));
    form.appendChild(document.createElement('br'));

    var textarea = document.createElement('textarea');
    textarea.name = 'body';
    textarea.style.width = "373px";
    textarea.rows = 10;
    textarea.className="input";
    textarea.value = new_body;
    form.appendChild(textarea);

    if (action == 'reply') {
        form.appendChild(createFormInput('hidden', 'reply_to_id', comment_id));
    }
    
    if (action == 'edit') {
        form.appendChild(createFormInput('hidden', '_submit_check', 'edit_comment'));
        form.appendChild(createFormInput('hidden', 'comment_id', comment_id));
    }
    else {
        form.appendChild(createFormInput('hidden', '_submit_check', 'comment'));
        form.appendChild(createFormInput('hidden', 'entity_id', entity_id));
        form.appendChild(createFormInput('hidden', 'entity_type', entity_type));
    }

    div.appendChild(form);


    var buttons = document.createElement('div');
    buttons.className = 'action_buttons';
    var link = createButton('auto-post');

    link.onclick = function() {
        form.submit();
        return false;
    };

    buttons.appendChild(link);
    buttons.appendChild(createCancelButton(popup));
    div.appendChild(buttons);

    popup.setContent(div);
    popup.show();

}

function deleteComment(comment_id, recurse) {
    if (recurse == undefined)
        recurse = false;
    new Ajax.Request(location.href, {parameters: 
            {'_submit_check': 'delete_comment',
                    'comment_id': comment_id, 
                    'recurse': (recurse ? 0 : 1)},
             onSuccess: function(t) {
                 var json = t.responseText.evalJSON();
                 if (typeof(json.error) != 'undefined') {
                     $$('.comment.comment-'+comment_id).invoke('removeClassName', 'deleted');
                     alert(json.error);
                 }
            }
    });

    $$('.comment-board .comment.comment-'+comment_id).each(function(el) {
        el.addClassName('deleted');

        //can't just use select().invoke() here because we only want
        //immediate descendants, not all descendants
        $(el).childElements().each(function (c) {
           if (!c.hasClassName('comment-text'))
               return;
           c.addClassName('deleted');
        });

        if (el.up('.comment-board').hasClassName('unthreaded')) {
            el.blindUp({delay: 1}).fade({delay: 1});
        }
    });
}

function viewThread(comment_id) {
    setThreadAsViewed(comment_id);
    $$('.comment-'+comment_id).invoke('toggleClassName', 'expanded');
    $$('.comment-'+comment_id + ' li.comment').invoke('toggleClassName', 'expanded');
}

function setThreadAsViewed(comment_id) {
    if (typeof(setThreadAsViewed.viewed[comment_id]) == 'undefined') {
        new Ajax.Request(location.href, {parameters:
                {'_submit_check': 'view_thread',
                        'comment_id': comment_id}});
        setThreadAsViewed.viewed[comment_id] = 1;
    }
}
setThreadAsViewed.viewed = new Array();

function admin_mode(a) {
    if (a) {
        $$('div.comment-board').invoke('removeClassName', 'admin-hidden');
        $$('div.comment-board').invoke('addClassName', 'admin-visible');

    }
    else {
        $$('div.comment-board').invoke('removeClassName', 'admin-visible');
        $$('div.comment-board').invoke('addClassName', 'admin-hidden');
    }
}

HLG.comment = {
    initialize: function() {
        HLG.loadFunction(HLG.comment.add);
    },
    add: function(event, context) {
        if (typeof(context) == "undefined") context = $(document.body);
        else context = $(context);

        context.select('div.comment-board div.comment-form div.widgets div.actions a').invoke('obs', 'click', HLG.comment.toggle_widgets);
        context.select('div.comment-board div.comment-form div.widgets form.widget.add-video a.button').invoke('obs', 'click', HLG.comment.add_video);
        context.select('div.comment-board div.comment-form div.widgets form.widget.add-image a.auto-add').invoke('obs', 'click', HLG.comment.add_photo);
        context.select('div.comment-board div.comment-form div.widgets form.widget.add-image a.auto-upload').invoke('obs', 'click', HLG.comment.upload_photo);
        context.select('div.comment-board div.comment-form div.notice').each(function (el) {
            if (el.visible()) {
                HLG.comment.notice(el, el.innerHTML);
                setTimeout(function(){el.scrollTo();}, 500);
            }
        });
    },

    toggle_widgets: function(event) {
        event.stop();

        var cl = event.element().className;
        var anim_props = {duration: .5};
        var ef = [];
        var to_height = 0;
        var to_border_color = 'rgb(255,255,255)';
        event.element().up('div.widgets').select('div.fields form').each(function(el) {
            if (el.hasClassName(cl)) {
                if (el.visible()){
                    ef.push(new Effect.BlindUp(el, {sync: true}));
                    ef.push(new Effect.Opacity(el, {from:1.0,to:0, sync: true}));
                    to_height = 0;
                }
                else {
                    ef.push(new Effect.BlindDown(el, {sync: true}));
                    ef.push(new Effect.Opacity(el, {from:0,to:1.0,sync: true}));
                    to_height = el.getHeight();
                    to_border_color = 'rgb(0,0,0)';
                }
            }
            else if (!el.visible()) {
                return;
            }
            else {
                ef.push(new Effect.BlindUp(el, {sync: true}));
                ef.push(new Effect.Opacity(el, {from:1,to:0, sync: true}));
            }
        });
        ef.push(new Effect.Morph(event.element().up('div.widgets').down('div.fields'), 
                                 {sync: true, style:{height: to_height+'px', borderColor: to_border_color},
                                  beforeStart: function(ef) {if(to_border_color=='rgb(0,0,0)')ef.element.setStyle({borderWidth:'1px'});},
                                  afterFinish: function(ef) {if(to_border_color=='rgb(255,255,255)')ef.element.setStyle({borderWidth:0});}}));
        new Effect.Parallel(ef, anim_props);
    },

    notice: function(el, message) {
        if (!el || !message)
            return;

        var n = el.up('div.comment-form').down('.notice');
        n.innerHTML = message;
        if (n.effect)
            n.effect.cancel();
        n.effect = new Effect.Opacity(n, {from: 1, to: 0, delay: 4, beforeStart: function(ef) {n.show(); n.setOpacity(1);}, afterFinish: function() {delete n.effect;}});
    },

    add_video: function(event) {
        event.stop();
        var input = event.element().up('form.widget').down('input.youtube-url');
        var textarea = event.element().up('div.comment-form').down('form.comment-form textarea.comment-body');
        var r = /https?:\/\/[-a-zA-Z0-9.]*youtube\.com\/.*v(=|\/)([-a-zA-Z0-9]+)/;
        var m = r.exec(input.getValue());
        if (!m || !m[2]) {
            alert('Could not understand the data you entered. Please try again.');
            return;
        }
        textarea.value += ' [[youtube|'+m[2]+']] ';
        textarea.focus();
        input.value = '';

        HLG.comment.notice(event.element(), 'Added video! Click "Say It" to post your comment.');
    },

    add_photo: function(event) {
        event.stop();
        
        var textarea = event.element().up('div.comment-form').down('form.comment-form textarea.comment-body');
        textarea.value += ' [[image|'+event.element().up('form').down('input.photo-url').getValue().replace(/]/g,'&#93;') + ']]';

        HLG.comment.notice(event.element(), 'Added photo! Click "Say It" to post your comment.');
    },

    upload_photo: function(event) {
        event.stop();
        var f = event.element().up('form.widget');
        f.down('textarea.comment-body').value = f.up('div.comment-form').down('form.comment-form textarea.comment-body').getValue();
        f.submit();
    }
}
HLG.comment.initialize();
