MessageFeed = function(feed_container_id){
    var that = this;
    that.feed_container_id = '#'+feed_container_id+' ';
    that.feed = $j(that.feed_container_id);
    that.append = false;
    that.more_button = $j('#more-posts');
    that.more_loading_gif = $j('.more-posts-container img');
    that.no_msgs = $j('.more-posts-container .no-msgs');
    that.title_flashing_interval = null;
    that.my_tags = $j('#my-tags'); //From the right navbar
    that.message_tpl = $j( '#message_tpl' ); //Message template
    init();

    //initializer function
    function init(){
        addAllEvents();
        //hide all tag lists when click occurs
        $j(document).click(function (e) {
            $j(that.feed_container_id+" .tag-list").hide().parent().css('position', 'relative');
        });
        that.message_tpl.html(that.message_tpl.html().replace(/\n/g, ''));
        $j(document).bind( 'click', stopFlashingTitle );
    }

    function stopFlashingTitle()
    {
        clearInterval(that.title_flashing_interval);
        that.title_flashing_interval = null;
        
        if( typeof view.public_id == 'undefined' || view.public_id == false )
        	document.title = 'Edmodo | ' + translated_text['title-goes-here'];
    };
 
    function addAllEvents(){
        //Added: message
        that.feed.click(function(e){
            var target = $j(e.target);
            var message_id = that.getValue(target, 'input.activity-id');
            var creator_id = $j('#creator-id-' + message_id).val();
            var msg_type = $j('#activity-type-'+ message_id).val();
            var comment_inputs = $j('#message-comment-' + message_id);
            var comment_textarea = comment_inputs.children('textarea');
            
            if(target.hasClass('comment')){
                //The user wants to reply to a message
                comment_inputs.show();
                comment_textarea.elastic().focus();    
            }else if(target.hasClass('send-reply-button')){
                var params = {
                        'message_id' : message_id,
                        'original_msg_creator_id': creator_id,
                        'message'    : comment_textarea.val()
                };
                goAjax( '/message/ajax-comment-message', params, view.feed_handler.forceUpdate4Comment);
                comment_inputs.hide();
                comment_textarea.val('');
                $j('#comment-loading-' + message_id).show();
            }else if(target.hasClass('cancel-button')){
                if(target.parent().hasClass('message-comment')){
                    //Cancel comment
                    comment_inputs.hide();
                    comment_textarea.val('');
                }else if(target.parent().hasClass('edit-container')){
                    //Cancel message edit
                    that.hideEditMessage(message_id, msg_type);
                }
            }else if(target.hasClass('tag')){
                //the "Tag" option was clicked in the post entry footer
                that.tag_list_toggle(message_id);
            }
            else if(target.hasClass('new-tag')){
                //the "New Tag..." option was selected from a tag list
                that.createTag(message_id);
            }
            else if(target.parent().hasClass('tag-entry')){
                //tag was chosen from "my tags" list in a post
                that.addTagToMessage(target.parent(), message_id);
            }else if(target.hasClass('remove-tag')){
                var tag_id = target.siblings('.tag-id').text();
                goAjax('/tags/ajax-remove-tag-from-message', {'tag_id': tag_id, 'message_id' : message_id}, that.updateRightNavBar);
                target.parent().remove();
            }else if(target.hasClass('make-public')){
                //User wants to make a message public
                goAjax( '/message/ajax-change-message-public-status', { 'message_id':message_id, 'public_status':1 }, that.afterChangeMessagePublicStatus);
            }else if(target.hasClass('make-private')){
                goAjax( '/message/ajax-change-message-public-status', { 'message_id':message_id, 'public_status':0 }, that.afterChangeMessagePublicStatus);
            }else if(target.hasClass('refresh-poll')){
                that.refreshPoll(message_id, creator_id);
            }else if(target.hasClass('vote-btn')){
                that.voteOnPoll(message_id, creator_id);
            }else if(target.hasClass('delete')){
                that.deleteConfirm(message_id, msg_type);
            }else if(target.hasClass('edit')){
                that.showEditMessage(message_id, msg_type);
            }else if(target.hasClass('save-edit-button')){
                that.saveEditMessage(message_id, msg_type);
            }else if(target.hasClass('popout')){
                that.showPopoutMessage(message_id);
            }else if(target.hasClass('delete-comment')){
                var comment_id = that.getValue(target, 'input.comment-id');
                that.deleteConfirm(comment_id, 'comment');
            }else if(target.hasClass('edit-comment')){
                var comment_id = that.getValue(target, 'input.comment-id');
                that.showEditComment(comment_id);
            }else if(target.hasClass('cancel-comment-button')){
                //Cancel comment edit
                var comment_id = that.getValue(target, 'input.comment-id');
                that.hideCommentElements(comment_id);
            }else if(target.hasClass('save-comment-button')){
                var comment_id = that.getValue(target, 'input.comment-id');
                that.saveEditComment(comment_id);
            }else if(target.hasClass('show-comments')){
                //Show collapsed comments
                $j('#comments-'+ message_id +' .collapsed-comments-' + message_id).show();
                target.hide();
            }
        });

        //Show delete, popout, edit options
        addDeleteEditPopoutOptions();
        addPagination();
    }

    this.clearFeed = function(){
        $j(that.feed_container_id).empty();
        that.more_button.hide();
        that.no_msgs.hide();
        that.more_loading_gif.show();
    };

    this.handleActivities = function( activities, append, max_messages )
    {
        that.append = typeof(append) != 'undefined' ?  append : false;
        var new_posts_html = '';
        var messages = [];
        var comments = [];
        var comment_pos = 0;

        for (var i = 0; i < activities.length; i++){
            var activity = activities[i];
            //there's room for more messages to be displayed in the feed
            switch( activity['object_type'] ){
                case 'message':
                    if(activity['type'] == 'comment'){
                        if( that.append ){
                            //concatenate the comment to the new_posts_html string
                            var new_comment_html = getCommentHtmlWrapper(activity, messages[messages.length-1], comment_pos++);

                            var comment_placeholder = '<!-- comment-placeholder -->';
                            var last_placeholder_start = new_posts_html.lastIndexOf(comment_placeholder);
                            var last_placeholder_end = last_placeholder_start + comment_placeholder.length;
                            new_posts_html = new_posts_html.substring(0, last_placeholder_start) + new_comment_html + new_posts_html.substring(last_placeholder_end);
                        }else{
                            //single comment, append it via jquery now
                            var comment_html = getNewCommentHtml(activity);
                            var comments_container = $j('#comments-'+activity['comment_to']);
                            comments_container.append(comment_html);
                            $j('#comment-loading-' + activity['comment_to']).hide();
                        }
                        comments.push(activity);
                    }else{
                        if( messages.length < max_messages ){
                            //Regular message
                            if( typeof(activity['viewable']) != 'undefined' && !activity['viewable'] )
                            {
                                new_posts_html += profile_feed.getNewActivityHtml(activity);
                            }
                            else
                            {
                                new_posts_html += getNewMessageHtml(activity);
                            }
                            messages.push(activity);
                            comment_pos = 0;
                        }else{
                            //Maximum capacity reached, show the "More" button
                            that.showMoreOption();
                            activities.length = 0;
                        }
                    }
                break;
            }
            if( !activity['sent'] && !that.append )
            {
                if( typeof(rightNavbar) != 'undefined' )
                {
                    rightNavbar.updateSpotlight(activity);
                }
            }
        }

        if(that.append)
        {
            $j(that.feed_container_id).append(new_posts_html);
            clearFlashingTitleInterval();
            //hide loading gif for more posts
            that.more_loading_gif.hide();

            if( new_posts_html == '' )
            {
                // In IE, regardless of the content, the feed still shows, moving
                // everything down (such as the the "no messages" label)
                $j(that.feed_container_id).css('height', '0px');
                var error_text = feed_handler.getEmptyErrorText();
                that.no_msgs.find('strong').html( error_text['strong'] );
                that.no_msgs.find('span').html( error_text['span'] );
                that.no_msgs.show();
            }
        }
        else
        {
            $j(that.feed_container_id).fadeIn('slow').prepend(new_posts_html);
        }
        if( new_posts_html != '' )
        {
            that.no_msgs.hide();
            $j(that.feed_container_id).css('height', 'auto');
        }

        for (var i = 0; i < messages.length; i++){
            var message = messages[i];
            addMessagePublicLink(message);
            addTags(message['message_id'], message['tags']);
            customizeLookDependingOnMsgType(message);
            addAvatar(message);
            addLink(message);
            if(!message['sent'] && !that.append){
                //a new message arrived
                if(that.title_flashing_interval == null)
                {
                    that.title_flashing_interval = setInterval(that.flashingTitle, 1000);
                }
                //set a green background as a highlighter
                $j('#msg-info-' + message['message_id']).css('background', '#EEFFAA'); 
            }
        }

        for (var i = 0; i < comments.length; i++){
            var comment = comments[i];
            if(comment['delete_rights']){
                $j('#comment-content-' + comment['message_id'] + ' .edit-delete').show(); 
            }
        }
        addDeleteEditPopoutOptions();
    };


    //returns the maximum current message_id being displayed (message or comment)
    this.getMaxMessageId = function(){
        max_message_id = 0;
        $j(that.feed_container_id + '.activity-id, '+ that.feed_container_id + '.comment-id').each(function(){
            var id = parseInt($j(this).val());
            if(id > max_message_id){
                max_message_id = id;
            }
        });
        return max_message_id;
    }

    this.hideMoreOption = function(){
        that.more_button.hide();
    };

    this.showMoreOption = function(){
        that.more_button.show();
    };

    // page title flashing
    this.flashingTitle = function(){
        if (document.title != translated_text['new-post-title']) {
		    document.title = translated_text['new-post-title'];
        } else {
            document.title = 'Edmodo | '+translated_text['title-goes-here'];
        }
    };

    this.deleteConfirm = function(message_id, msg_type){
        var confirm_dialog = $j('#delete_msg_tpl').html();
        $j.facebox(confirm_dialog);
        $j.facebox.setTitle(translated_text['delete-msg-title']);
        $j('#facebox .ok-button').click(function(){
            that.deleteMessage(message_id, msg_type);
            $j.facebox.close();
        });
    };

    this.createTag = function(message_id){
        var tag_dialog = $j('#create_new_tag_tpl').html();
        $j.facebox(tag_dialog);
        $j('#facebox .new-tag-name').select();
        $j.facebox.setTitle(translated_text['tag-title']);
        $j('#facebox .ok-button').click(function(){
            var tag_name = $j('#facebox .new-tag-name').val();
            var added_tag = $j("#msg-tags-container-"+ message_id + " .msg-tag .tag-name:contains('"+tag_name+"')").filter(function(){
                return ($j(this).text() == tag_name);
            });
            if(added_tag.length == 0){
                //this tag hasn't been added to the message
                var existing_tag = $j('#tag-list-' + message_id +" .tag-name:contains('"+tag_name+"')").filter(function(){
                    return ($j(this).text() == tag_name);
                }).parent();
                if(existing_tag.length > 0){
                    //this tag name has been created already
                    that.addTagToMessage(existing_tag, message_id);
                }else{
                    //this tag name hasn't been created yet
                    goAjax('/tags/ajax-create-tag', {'message_id' : message_id, 'tag_name' : tag_name}, that.afterCreateTag);
                }
            }   
            $j.facebox.close();
        });
    };

    this.afterCreateTag = function( json_response){
        var response = eval('(' + json_response + ')');
        var new_tag_info = response['new_tag'];
        var my_tags = response['my_tags'];
        
        var new_msg_tag = $j('#msg_tag_tpl').html();
        new_msg_tag = new_msg_tag.replace(/{TAG_ID}/g, new_tag_info['tag_id']);
        new_msg_tag = new_msg_tag.replace(/{TAG_NAME}/g, new_tag_info['tag_name']);
        //add the new tag to the tagged message
        $j('#msg-tags-container-'+ new_tag_info['message_id']).append(new_msg_tag);
        
        //add the new tag to the user_tags array
        view.user_tags.push({tag_id: parseInt(new_tag_info['tag_id']), tag_name: new_tag_info['tag_name']});
        if (typeof(rightNavbar) != 'undefined'){
            rightNavbar.refreshMyTags(my_tags);
        }
    };

    this.addTagToMessage = function(tag, message_id){
        var new_msg_tag = $j('#msg_tag_tpl').html();
        var tag_name = $j(tag).children(' .tag-name').text();
        var tag_id = $j(tag).children(' .tag-id').text();
        new_msg_tag = new_msg_tag.replace(/{TAG_ID}/g, tag_id);
        new_msg_tag = new_msg_tag.replace(/{TAG_NAME}/g, tag_name);
        //add the tag to the tagged message
        $j('#msg-tags-container-'+ message_id).append(new_msg_tag); 
        
        goAjax('/tags/ajax-add-tag-to-message', {'tag_id': tag_id, 'message_id' : message_id}, that.updateRightNavBar);
        //remove tag from tag list in the feed posts
        $j(tag).remove();
    };

    this.updateRightNavBar = function(json_response){
        var response = eval('(' + json_response + ')');
        var my_tags = response['my_tags'];
        if (typeof(rightNavbar) != 'undefined'){
            rightNavbar.refreshMyTags(my_tags);
        }
    }

    this.deleteMessage = function(message_id, msg_type)
    {
        msg_type = msg_type == '' ? 'comment' : msg_type;
        var params = {
            'type' : msg_type,
            'message_id' : message_id
        };
        if (msg_type == 'comment'){
            var this_comment = $j('#comment-content-' + message_id);
            params['comment_to'] = that.getValue(this_comment, '.activity-id');
        }
        $j('#act-msg-' + message_id ).fadeOut( 500 );
        $j('#comment-content-' + message_id ).fadeOut( 500 );
        goAjax('/message/ajax-delete-message', params, that.afterDeleteMessage);
    };

    this.afterDeleteMessage = function (json_response){
        //var response = eval('(' + json_response + ')');
    };

    function getText(text_container){
        var html = text_container.html();
        
        // THIS
        /*
        var container = document.createElement("p");
        container.innerHTML = html;
        */
        
        // IS REPLACED WITH THIS
        var
        container_j = $j( '<p></p>' )
            .html( html )
        ,
        container   = container_j[0];
        

        $j(container).find('a').each(function(){
            var href = $j(this).attr('href');
            $j(this).replaceWith(unescape(href));
        });
        return $j(container).html().replace(/\n/gi, '').replace(/<br>/gi, '\n');
    }

    this.showEditMessage = function(message_id, msg_type){
        var edit_container = $j('#edit-container-'+ message_id);
        var msg_content = $j('#msg-content-text-' + message_id);
        var text = getText(msg_content);
        
		var textLinkClean = text;
		var intIndexOfMatch = textLinkClean.indexOf( "/link?url=" );
		while (intIndexOfMatch != -1){
		  // Relace out the current instance.
		  textLinkClean = textLinkClean.replace( "/link?url=", "" );
		  
		  // Get the index of any next matching substring.
		  intIndexOfMatch = textLinkClean.indexOf( "/link?url=" );
		}       
		text = textLinkClean; 
        
        if(msg_type == 'chalk') {
	        msg_content = $j('#msg-content-text-' + message_id + ' .chalk-title-header');
        	text = getText(msg_content);
        	$j('#msg-content-text-' + message_id + ' .chalk-options').hide();
        }

        var edit_textarea = edit_container.children('.edit-textarea').elastic();
        edit_textarea.val( trim(text) ).show();
        msg_content.hide();

        if(msg_type == 'link' || msg_type == 'video' || msg_type == 'feed')
        {
            var msg_link = $j('#link-msg-'+ message_id);
//            text = msg_link.children('a.link-anchor').attr('href');
            
            var tmp_text = msg_link.children('a.link-anchor').attr('href');
            var tmp_split = tmp_text.split('=');
            text = unescape(tmp_split[2]);

            edit_container.children('.edit-link').val( trim(text) ).show();
            msg_link.hide();
        }
        else
        {
            edit_textarea.css('height', '50px');
        }
        if(msg_type == 'assignment')
        {
            var title = msg_content.children('div.assignment-title').text();
            var due_date = msg_content.children('input.due-date-hidden').val();
            var description = getText(msg_content.children('div.assignment-description'));

            edit_container.children('.edit-assignment-title').show().val( trim(title) );
            edit_textarea.val( trim(description) );
            edit_container.children('.edit-due-date').show().val(due_date).datePicker();
            edit_container.children('.dp-choose-date').show();
        }
        edit_container.children('.save-edit-button').show();
        edit_container.children('.cancel-button').show();

    };

    this.afterEditMessage = function (json_response){
        var response = eval('(' + json_response + ')');
        var message_id = response['message_id'];
        var msg_content = $j('#msg-content-text-' + message_id);
        var msg_content_container = msg_content.parent();
        switch(response['msg_type']){
            case 'assignment':
                msg_content.children('div.assignment-title').text( response['title'] );
                msg_content.children('input.due-date-hidden').val( response['hidden_due_date'] );
                msg_content.children('div.assignment-description').html( response['description'] );
                msg_content.find('.due-date > strong').text( response['due_date'] );
                break;
            case 'alert':
                msg_content.html('<span class="alert-msg">'+ response['content'] + '</span>');
                break;
            case 'chalk':
		        msg_content = $j('#msg-content-text-' + message_id + ' .chalk-title-header').html(response['content']);
	        	$j('#msg-content-text-' + message_id + ' .chalk-options').show();            
	        	$j('#msg-content-text-' + message_id + ' .chalk-title-header').show();            
                break;
            case 'link':
                var msg_link = $j('#link-msg-'+ message_id);
                var url_text = response['url'].length > 50 ? response['url'].substring(0, 47) + '...' : response['url'];
                msg_link.children('a.link-anchor').attr('href', response['url']).text(url_text);
                msg_link.show();
                msg_content.html(response['content']);
                break;
            case 'video':
                //Remove the current video
                var video = $j('#embeded-video-' + message_id);
                video.children('object').remove();
                var template = $j('#embeded_video_tpl').html().replace(/(%7B|\{)URL(%7D|\})/g, response['url']);
                video.html(template);
                msg_content.html(response['content']);
                break;
            default:
                msg_content.html(response['content']);
                break;
        }
        that.hideEditMessage( message_id, response['msg_type'] );
    };

    this.showPopoutMessage = function(message_id){
        var height = $j('#act-msg-' + message_id).css('height');
        var pop = window.open("", "Message", "height="+parseInt(height)+",width=630,scrollbars=1,resizable=1");
        pop.document.write('<html><head><title>'+ translated_text['message'] +'</title>');
        $j("link[rel='stylesheet']").each(function(i){
            var href = $j(this).attr('href');
            pop.document.write('<link rel="stylesheet" href="'+href+'" type="text/css">');
        });
        pop.document.write('</head><body>');
        pop.document.write('</body></html>');
        pop.document.close();
        $j( pop.document.body).html($j('#act-msg-' + message_id).clone().html());
        $j( pop.document.body ).find('.post-entry-footer').hide(); //DE268 
        //hide the delete/edit/popout functions in the new popout
        $j( pop.document.body ).find('#entry-options-'+message_id).hide();
        if (window.focus){
            pop.focus()
        }
    };

    this.saveEditMessage = function(message_id, msg_type){
        var edit_container = $j('#edit-container-'+ message_id);
        var msg_content = $j('#msg-content-text-' + message_id);
        var edit_textarea = edit_container.children('.edit-textarea');
        var params = {
            'message_id' : message_id,
            'content'    : edit_textarea.val(),
            'msg_type'   : msg_type
        };
        switch(msg_type){
            case 'link':
                params['url']     = edit_container.children('.edit-link').val();
                params['link_id'] = $j('#link-msg-'+message_id + ' > .link-id').text();
                break;
             case 'video':
                params['url']     = edit_container.children('.edit-link').val();
                params['link_id'] = $j('#embeded-video-'+message_id + ' > .link-id').text();
                break;
             case 'embed':
                params['embed_id'] = $j('#embeded-code-'+message_id + ' > .embed-id').val();
                break;
            case 'assignment':
                params['title'] = edit_container.children('.edit-assignment-title').val();
                params['due_date'] =  edit_container.children('.edit-due-date').val();
                params['description'] = edit_textarea.val();
                break;
        }
        goAjax('/message/ajax-edit-message', params, that.afterEditMessage);
    };

    this.saveEditComment = function(comment_id){
        var params = {'message_id' : comment_id,
                      'content'    : $j('#comment-content-' + comment_id + ' .edit-comment-textarea').val(),
                      'msg_type'   : 'comment',
                      'link_id'    : '',
                      'url'        : ''
        };
        goAjax('/message/ajax-edit-message', params, that.afterEditComment);
    };

    this.getValue = function(feed_item, needed_value){
        return feed_item.closest(":has('"+ needed_value +"')", that.feed).children(needed_value).val();
    };

    this.getActivityCount = function(){
        return $j(that.feed_container_id+'.post-entry').length;
    };

    this.showEditComment = function(comment_id){
        var text = getText($j('#comment-content-' + comment_id + ' .comment-wrapper'));
		var textLinkClean = text;
		var intIndexOfMatch = textLinkClean.indexOf( "/link?url=" );
		while (intIndexOfMatch != -1){
		  // Relace out the current instance.
		  textLinkClean = textLinkClean.replace( "/link?url=", "" );
		  
		  // Get the index of any next matching substring.
		  intIndexOfMatch = textLinkClean.indexOf( "/link?url=" );
		}       
		text = textLinkClean;         
        
        var editor = $j('#comment-content-' + comment_id + ' .edit-comment-textarea');
        editor.val(text).show().elastic();
        $j('#comment-content-' + comment_id + ' .comment-content-text').hide();
        $j('#comment-content-' + comment_id + ' .save-comment-button').show();
        $j('#comment-content-' + comment_id + ' .cancel-comment-button').show();
        $j('#comment-content-' + comment_id + ' .edit-comment-container img').show();
    };

    this.afterEditComment = function (json_response){
        var response = eval('(' + json_response + ')');
        var comment_id = response['message_id'];
        var text = response['content'];
        $j('#comment-content-' + comment_id + ' .comment-wrapper').html(text);
        that.hideCommentElements(comment_id);
    };

    this.tag_list_toggle = function(message_id) {
      var tag_list = $j('#tag-list-' + message_id);
      if (!tag_list.is(':visible')){
         setTimeout(function(){that.showTagList(tag_list, message_id);}, 10);
      }else{
         tag_list.hide();
      }
    };

    //Shows the tag list when the user clicks the "Tag" option on a message's footer
    this.showTagList = function(tag_list, message_id){
        var my_tags = tag_list.children('.my-tags');
        
        //get an array with this message's tags
        var msg_tags_ids = $j('#msg-tags-container-'+ message_id + ' .msg-tag .tag-id');
            
        var my_tags_html = '';
        var already_added = null;
        var new_tag_entry_tpl = $j('#tag_entry_tpl').html();
        var new_tag_entry = null;
        var next_id = null;
        var tag_id = null;
        for(var i = 0; i < view.user_tags.length; i++){
            tag_id = view.user_tags[i]['tag_id'];
            already_added = false;
            for(var e = 0; e < msg_tags_ids.length && !already_added; e++){
               if(tag_id == msg_tags_ids.filter(':eq('+e+')').text()){
                  already_added = true;
               }
            }
            if(!already_added){
                //This tag hasn't been added to the message
                new_tag_entry = new_tag_entry_tpl;
                new_tag_entry = new_tag_entry.replace(/{TAG_ID}/g, tag_id);
                new_tag_entry = new_tag_entry.replace(/{TAG_NAME}/g, view.user_tags[i]['tag_name']);
                my_tags_html += new_tag_entry;
            }
        }
        my_tags.html(my_tags_html);
        //place all other tag lists in the background using static positioning (TO FIX FUCKING IE)
        var tags_wrapper = $j('#tag-list-'+message_id).parent(); 
        tags_wrapper.addClass('selected');
        that.feed.find('.post-entry-footer .tag-wrapper:not(.selected)').each(function(){
            $j(this).css('position', 'static');    
        });
        tags_wrapper.removeClass('selected');
        
        tag_list.show();
    };      

   /**
    * Vote on a Poll
    * @param int message_id Poll on which we are voting
    */
    this.voteOnPoll = function(msg_id, creator_id)
    {
        var poll_answer_id = $j(':radio[name=vote-' + msg_id +']:checked').val();
        if( typeof poll_answer_id == 'undefined' )
        {
            $j('#poll-empty-'+msg_id).show();
        }
        else
        {
            var params = {
            'message_id' : msg_id,
            'creator_id' : creator_id,
            'poll_answer_id' : poll_answer_id
            };
            goAjax( '/message/ajax-vote-on-poll', params, that.afterRefreshPoll);
        }
    };

   /**
    * Refreshes a Poll
    * @param int message_id Poll to be refreshened
    */
    this.refreshPoll = function(msg_id, creator_id)
    {
        var params = {
            'message_id' : msg_id,
            'creator_id' : creator_id
        };
        goAjax( '/message/ajax-refresh-poll', params, that.afterRefreshPoll);
    };

    this.afterRefreshPoll = function(xhresponse)
    {
        var poll = eval('(' + xhresponse + ')');
        var poll_html = addPollIntoTemplate(poll, '{CONTENT}', true);
        $j("#poll-answers-" + poll['message_id']).html(poll_html);
    };

    this.afterChangeMessagePublicStatus = function ( xresponse ){
        var response = eval('(' + xresponse + ')');
        if ( response['public_status'] == 1 ){
            $j('#make-public-' + response['message_id']).hide();
            $j('#msg-public-' + response['message_id']).show();
        }
        else{
            $j('#msg-public-' + response['message_id']).hide();
            $j('#make-public-' + response['message_id']).show();
        }
    };

    this.hideEditMessage = function(message_id, msg_type){
        var edit_container = $j('#edit-container-'+ message_id);
        var edit_textarea = edit_container.children('.edit-textarea');
        edit_textarea.hide();
        var msg_content = $j('#msg-content-text-' + message_id);
        msg_content.show();

        if(msg_type == 'link' || msg_type == 'feed'){
            edit_container.children('.edit-link').val('');
            var msg_link = $j('#link-msg-'+ message_id);
            msg_link.show();
            edit_container.children('.edit-link').val('').hide();
        }
        else if(msg_type == 'video'){
            edit_container.children('.edit-link').val('').hide();
        }
        else if( msg_type == 'assignment' )
        {
            edit_container.children('.edit-assignment-title').hide();
            edit_container.children('.edit-due-date').hide();
            edit_container.children('.dp-choose-date').hide();
        }
        
        edit_container.children('.save-edit-button').hide();
        edit_container.children('.cancel-button').hide();
    };

    this.hideCommentElements = function(comment_id){
        $j('#comment-content-' + comment_id + ' .comment-content-text').show();
        $j('#comment-content-' + comment_id + ' .edit-comment-textarea').hide();
        $j('#comment-content-' + comment_id + ' .save-comment-button').hide();
        $j('#comment-content-' + comment_id + ' .cancel-comment-button').hide();
        $j('#comment-content-' + comment_id + ' .edit-comment-container img').hide();
    };

    // PRIVATE METHODS 

    function addMessagePublicLink(message){
        var user_has_public_rights = message['public_rights'];
        var message_is_public = message['public'];
        
        if ( user_has_public_rights ){
            if( message_is_public == 1 ){
                $j('#make-public-'+ message['message_id']).hide();
            }
            else{
                $j('#msg-public-'+ message['message_id']).hide();
            }
        }
        else{
            $j('#show-public-'+ message['message_id']).hide();
        }
    }

    function addTags(message_id, tags){
        var tags_container = $j('#msg-tags-container-' + message_id);
        var msg_tags_html = '';
      
        for(i in tags){
            var new_msg_tag = $j('#msg_tag_tpl').html();
            new_msg_tag = new_msg_tag.replace(/{TAG_ID}/g, tags[i]['tag_id']);
            new_msg_tag = new_msg_tag.replace(/{TAG_NAME}/g, tags[i]['tag_name']);
            //add the tag to the message
            msg_tags_html += new_msg_tag;
        }
        tags_container.html(msg_tags_html);
    }

    function getActivityHtml(regexMap, activity, post_html){
        //-----------------------
        // Necessary replaces for all feeds:
        // onerror function for the user's image and the creator's id
        regexMap['creator_id'] = /(%7B|{)CREATOR_ID(%7D|})/g;
        regexMap['creation_date'] = /{CREATION_DATE}/g;
        post_html = post_html.replace(/{DELETE_RIGHTS}/g, activity['delete_rights'] ? 'delete_rights' : '');

        for(var key in regexMap){
            post_html = post_html.replace(regexMap[key], activity[key]);
        }

        var content_style   = '';
        var bubble_triangle = '';
        if ( activity['sender_type'] == 'ADMINISTRATOR' ){
            content_style = 'admin-msg-content-container';
            bubble_triangle = 'admin_';
        }
        post_html = post_html.replace(/(%7B|{)CONTENT_STYLE(%7D|})/g, content_style);
        post_html = post_html.replace(/(%7B|{)BUBBLE_TRIANGLE(%7D|})/g, bubble_triangle);

        var reply_display_class = '';
        if ( !activity['user_can_reply_to_message'] ){
            reply_display_class = 'hidden-reply-button';
        }
        post_html = post_html.replace(/(%7B|{)REPLY_DISPLAY_CLASS(%7D|})/g, reply_display_class);

        return post_html;
    }

    function addAssignmentIntoTemplate(activity, new_feed_html)
    {
        //------------------
        // Get the Assignment template and remove all the new lines
        var new_assignment_html = $j( '#new_assignment_tpl' ).html().replace(/\n/g, '');

        new_assignment_html = new_assignment_html.replace(/{CONTENT}/g, activity['content']);
        new_assignment_html = new_assignment_html.replace(/{DUE_DATE}/g, activity['due_date']);
        new_assignment_html = new_assignment_html.replace(/{DESCRIPTION}/g, activity['description']);
        new_assignment_html = new_assignment_html.replace(/{HIDDEN_DUE_DATE}/g, activity['hidden_due_date']);

        new_feed_html = new_feed_html.replace(/(%7B|\{)MESSAGE_ID(%7D|\})/g, activity['message_id']);

        return new_feed_html.replace('{CONTENT}', new_assignment_html);
    };

    function addPollIntoTemplate(activity, new_feed_html, just_poll_content)
    {
            var just_poll_content = just_poll_content || false;
            //------------------
            // We need to Embbed the Poll Template into the Message Container,
            // but first, we need to set up the Answer's and the bottom bar,
            // depending on whether the user is able to vote on the poll or not

            //------------------
            // Get the Poll template and remove all the new lines
            var new_poll = $j( '#new_poll_tpl' ).html().replace(/\n/g, '');

            //------------------
            // This Array maps the type of display of the answers 
            // and the bottom bar, depending on whether the user 
            // can vote on the poll or only view it
            var poll_regex_map = 
            {
                'viewable' : {
                    'answers' : /<!--ANSWER-VIEWABLE-->(.)+<!--\/ANSWER-VIEWABLE-->/,
                    'bar'     : /<!--BAR-VIEWABLE-->(.)+<!--\/BAR-VIEWABLE-->/
                },
                'editable' : {
                    'answers' : /<!--ANSWER-EDITABLE-->(.)+<!--\/ANSWER-EDITABLE-->/,
                    'bar'     : /<!--BAR-EDITABLE-->(.)+<!--\/BAR-EDITABLE-->/
                }
            };

            //------------------
            // Fetch the templates for the answers and delete the bar that's not needed
            var answer_key = activity['read_only'] ? 'viewable' : 'editable';
            var bar_key = !activity['read_only'] ? 'viewable' : 'editable';
            var answer_tpl = new_poll.match(poll_regex_map[answer_key]['answers']);
            answer_tpl = answer_tpl[0];
            new_poll = new_poll.replace(poll_regex_map[bar_key]['bar'], '');

            if( just_poll_content )
            {
                //Remove Html for the Question as it is not needed
                new_poll = new_poll.replace(/<!--POLL-QUESTION-->(.)+<!--\/POLL-QUESTION-->/, '');
            }
            else
            {
                //Remove the "Edit" Button on the Msg
                new_feed_html = new_feed_html.replace(/<!--EDIT-BUTTON-->(.)+<!--\/EDIT-BUTTON-->/, '');
            }

            var answers = '';
            var answer = '';
            var percentage = '';
            for( var i in activity['poll_answers'])
            {
                answer = answer_tpl;
                if( activity['read_only'] )
                {
                    percentage = activity['poll_answers'][i]['percentage'];
                    percentage = percentage != 0 ? percentage + '%,' : '';
                    div_width = 'width:' + activity['poll_answers'][i]['percentage'] + '%';
                    answer = answer.replace(/{VOTES}/g, activity['poll_answers'][i]['votes']);
                    answer = answer.replace(/WIDTH:(\s)*0%/i, div_width);
                    answer = answer.replace(/{PERCENTAGE}/g, percentage);
                }

                answer = answer.replace(/{ANSWER}/g, activity['poll_answers'][i]['answer']);
                answer = answer.replace(/{POLL_ANSWER_ID}/g, activity['poll_answers'][i]['poll_answer_id']);
                answers += answer;
            }

            //------------------
            //Remove the answers' tpl and replace it with the actual answers
            new_poll = new_poll.replace(/<!--DYNAMIC-CONTENT-->(.)+<!--\/DYNAMIC-CONTENT-->/, answers );
            new_poll = new_poll.replace(/{MESSAGE_ID}/g, activity['message_id']);
            new_poll = new_poll.replace(/{TOTAL_VOTES}/g, activity['total_votes']);

            return new_feed_html.replace('{CONTENT}', new_poll);
    };

    function getNewCommentHtml( comment , original_message){
        regexMap = [];
        regexMap['creator_id']  = /(%7B|{)CREATOR_ID(%7D|})/g;
        regexMap['sender_name']  = /{SENDER_NAME}/g;
        regexMap['message_id']  = /(%7B|{)MESSAGE_ID(%7D|})/g;
        regexMap['creation_date'] = /{CREATION_DATE}/g;
        regexMap['content'] = /{CONTENT}/g;
        regexMap['sender_page_type'] = /(%7B|{)SENDER_PAGE_TYPE(%7D|})/g;

        if(comment['sender_type'] == 'TEACHER'){
            comment['sender_page_type'] = "profile";
        }
        else{
            comment['sender_page_type'] = "user";
        }

        var post_html = $j( '#comment_tpl').html();
        for(var key in regexMap){
            post_html = post_html.replace(regexMap[key], comment[key]);
        }
        if(typeof (original_message) != 'undefined' && original_message['public'] == 1){
            //hide the sender's link
            post_html = post_html.replace('/profile?uid=' + comment['creator_id'], 'javascript:;');
            post_html = post_html.replace('/user?uid=' + comment['creator_id'], 'javascript:;');
        }
        return post_html;
    }

    function getNewMessageHtml(message)
    {
        var post_html = that.message_tpl.html();

        if ( message['sender_type'] == 'TEACHER' )
        {
            var sender = '<a href="/profile?uid=' + message['creator_id'] + '" class="msg-receiver">' + message['sender_name'] + '</a>';
        }
        else
        {
            var sender = '<span class="msg-receiver">' + message['sender_name'] + '</span>';
        }
        //add the individual message receivers
        var receivers = message['receivers'];
        var message_to_myself = (message['sent'] && receivers.length == 1 && receivers[0]['type'] == 'user' && receivers[0]['id'] == user_id);
        var first_group_color = '';

        if(message_to_myself){
            //No need to show my name in the recipients list if I sent the message and I'm the only receiver
            message['sender_and_receivers'] = sender;
        }else{
            var receivers_html = '';
            for(var i = 0; i < receivers.length; i++){
                if(i != 0){
                    receivers_html += ', ';
                }
                if( typeof receivers[i]['user_type'] != 'undefined' && receivers[i]['user_type'] == 'TEACHER' && receivers[i]['id'] != user_id )
                {
                    receivers_html += '<a class="msg-receiver" style="color:'+ receivers[i]['receiver_color'] +'" href="/profile?uid=' + receivers[i]['id'] + '">' + receivers[i]['receiver_name'] + '</a>';
                }
                else
                {
                    receivers_html += '<span class="msg-receiver" style="color:'+ receivers[i]['receiver_color'] +'">' + receivers[i]['receiver_name'] + '</span>';
                }
                if(first_group_color == '' && receivers[i]['type'] != 'user'){
                    //set the color of the first group that appears in the list (to color the avatar's border)
                    first_group_color = receivers[i]['receiver_color'];
                }
            }
            message['sender_and_receivers'] = translateSenderAndReceivers(sender, receivers_html);
        }
        message['first_group_color'] = first_group_color;
		var type_code = message['type'];
        if (type_code == 'alert') {
        	type_code = 'alert-notnew';
        }
        message['translated_type'] = translated_text[type_code];

        switch(message['type']){
            case 'poll':
                post_html = addPollIntoTemplate(message, post_html);
                // Remove the Assignment Options from the Template
                post_html = post_html.replace(/<!--ASSIGNMENT-OPTIONS-->(.)+<!--\/ASSIGNMENT-OPTIONS-->/, '');
                break;
            case 'assignment':
                post_html = addAssignmentIntoTemplate(message, post_html);
                break;
            case 'system':
                //Remove the "Edit" Button on the Msg
                post_html = post_html.replace(/<!--EDIT-BUTTON-->(.)+<!--\/EDIT-BUTTON-->/, '');
                post_html = post_html.replace(/<!--ASSIGNMENT-OPTIONS-->(.)+<!--\/ASSIGNMENT-OPTIONS-->/, '');
                break;
            default:
                // Remove the Assignment Options from the Template
                post_html = post_html.replace(/<!--ASSIGNMENT-OPTIONS-->(.)+<!--\/ASSIGNMENT-OPTIONS-->/, '');
                break;
        }
        var regexMap = {
            'sender_and_receivers'  : /{SENDER_AND_RECEIVERS}/g,
            'content'               : /{CONTENT}/g,
            'message_id'            : /(%7B|\{)MESSAGE_ID(%7D|\})/g,
            'link_id'               : /(%7B|\{)LINK_ID(%7D|\})/g,
            'embed_id'               : /(%7B|\{)EMBED_ID(%7D|\})/g,
            'type'                  : /{TYPE}/g,
            'translated_type'       : /{TRANSLATED_TYPE}/g
        };
        post_html = getActivityHtml(regexMap, message, post_html);
        return post_html;
    }

    function addLink(message)
    {
        switch( message['type'] )
        {
            case 'feed':
            case 'link':
                if( typeof message['url'] != 'undefined' )
                {
                    $j('#act-msg-' + message['message_id'] + ' a.link-anchor').attr('href', '/link?id='+message['link_id']+'&url='+escape(message['url']));
                    var url_text = message['url'].length > 50 ? message['url'].substring(0, 47) + '...' : message['url'];
                    $j('#act-msg-' + message['message_id'] + ' a.link-anchor').html( url_text );
                }
                break;
            case 'video':
                //$j('#act-msg-' + message['message_id'] + ' param[name=movie]').attr('value', message['url']);
                //$j('#act-msg-' + message['message_id'] + ' embed').attr('src', message['url']);
                break;
        }
    };

    function addAvatar(message)
    {
        var avatar = $j('#act-msg-' + message['message_id'] + ' a.avatar');
        avatar.find('img').attr('src', message['sender_thumb']);

        avatar.attr('href', message['avatar_link']);
    }

    function customizeLookDependingOnMsgType(message){
        // The proper title for the activity is displayed
        switch ( message['type'] )
        {
            case 'link':  
                $j('#link-msg-'+message['message_id']).show();
                $j('#link-msg-'+message['message_id']).append('<img src="http://www.shrinktheweb.com/xino.php?embed=1&inside=1&STWAccessKeyId=4bc3adb04a0b529&stwsize=sm&stwUrl='+message['url']+'" style="display:none;" />');                
                break;
            case 'feed':
                $j('#link-msg-'+message['message_id']).show();
                break;
            case 'embed':
                var embed_obj = $j('#embeded-code-' + message['message_id']);
                embed_obj.append( message['embeded_code'] ).show();
                break;
            case 'video':
                var template = $j('#embeded_video_tpl').html().replace(/(%7B|\{)URL(%7D|\})/g, message['url']);
                var video_obj = $j('.embeded-video-' + message['message_id']);
                video_obj.append(template).show();
                break;
            case 'chalk':
                var chalk_title = $j('#msg-content-text-' +message['message_id']);
                var content = chalk_title.html();
                chalk_title.html('<div class="chalk-title-header">'+ content +'</div>');
                var chalk_options = '';
                if (message['chalk_creator']) {
                	if (message['chalk_status'] == 'OPEN') {
						chalk_options = '<a id="chalk-launcher-'+message['message_id']+'-'+message['chalk_id']+'" class="chalk-launcher" href="http://chalk'+message['chalk_server']+'.edmodo.com/'+message['etherpad_code']+'?token='+message['chalk_token']+'" target="_blank">'+translated_text['launch-chalk']+'</a> <span>'+translated_text['or']+'</span> <a id="chalk-locker-'+message['message_id']+'-'+message['chalk_id']+'" class="chalk-locker" href="javascript:;" onclick="lockChalk('+message['message_id']+','+message['chalk_id']+')">'+translated_text['lock']+'</a>';
					} else {
						chalk_options = '<a id="chalk-launcher-'+message['message_id']+'-'+message['chalk_id']+'" class="chalk-launcher" href="http://chalk'+message['chalk_server']+'.edmodo.com/ep/pad/view/'+message['etherpad_code']+'/latest?token='+message['chalk_token']+'" target="_blank">'+translated_text['view']+'</a> <span>'+translated_text['or']+'</span> <a id="chalk-locker-'+message['message_id']+'-'+message['chalk_id']+'" class="chalk-locker" href="javascript:;" onclick="unlockChalk('+message['message_id']+','+message['chalk_id']+')">'+translated_text['unlock']+'</a>';					
					}
                } else {
                	if (message['chalk_status'] == 'OPEN') {
						chalk_options = '<a id="chalk-launcher-'+message['message_id']+'-'+message['chalk_id']+'" class="chalk-launcher" href="http://chalk'+message['chalk_server']+'.edmodo.com/'+message['etherpad_code']+'?token='+message['chalk_token']+'" target="_blank">'+translated_text['launch-chalk']+'</a>';
					} else {
						chalk_options = '<a id="chalk-launcher-'+message['message_id']+'-'+message['chalk_id']+'" class="chalk-launcher" href="http://chalk'+message['chalk_server']+'.edmodo.com/ep/pad/view/'+message['etherpad_code']+'/latest?token='+message['chalk_token']+'" target="_blank">'+translated_text['view']+'</a>';					
					}                
                }
                $j('#msg-content-text-'+message['message_id']).append('<div class="chalk-options">'+chalk_options+'</div>');
				break;
            case 'file':
                addFilesToMessage(message);
                $j('.file-href-'+message['message_id']).show();
                $j('.file-href-'+message['message_id'] + ' a[rel*=facebox]').facebox();
                break;
            case ASSIGNMENT:
                $j('.assignment-' +message['message_id']).show();
                $j('.assignment-href-'+message['message_id']).show();
                $j('#msg-content-text-'+message['message_id']).show();
                addFilesToMessage(message);
                $j('.file-href-'+message['message_id']).show();

                var link = $j('#act-msg-' + message['message_id'] + ' .assignment-link' );
                var label = $j('#act-msg-' + message['message_id'] + ' .assignment-label' );
                if( message['is_teacher'] )
                {
                    link.text = translated_text['turned-in'];
                    label.text('(' + message['turned_in_count'] + ')');
                }
                else if( message['status'] == 'not-turned-in' )
                {
                    link.text( translated_text['turn-in'] );
                    label.hide();
                }
                else if( message['status'] == 'graded' )
                {
                    link.text( translated_text['graded'] );
                    label.text( '(' + message['grade'] + ')' );
                }
                else
                {
                    link.text( translated_text['graded'] );
                    label.text( '(' + translated_text['waiting'] + '...)');
                }
                break;
             case 'alert':
                 var alert = $j('#msg-content-text-' +message['message_id']);
                 var content = alert.html();
                 alert.html('<span class="alert-msg">'+ content +'</span>');
                 break;
        }
    }

    function addFilesToMessage(message){
        for(var type in message['files']){
            var files_of_certain_type = message['files'][type];
            for(var i = 0; i < files_of_certain_type.length; i++){
                var template = $j('#file_tpl').html();
                var file = files_of_certain_type[i];
                template = template.replace(/(%7B|\{)FILE_PATH(%7D|\})/g, file['file_path']);
                template = template.replace(/(%7B|\{)FILE_NAME(%7D|\})/g, file['file_name']);
                template = template.replace(/(%7B|\{)FILE_ID(%7D|\})/g, file['file_id']);
                template = template.replace(/(%7B|\{)MESSAGE_ID(%7D|\})/g, message['message_id']);
                template = template.replace(/(%7B|\{)TYPE(%7D|\})/g, file['type']);
                template = template.replace(/(%7B|\{)THUMB_NAME(%7D|\})/g, getThumbnail(file['file_name']));
                $j('.file-href-'+message['message_id']).append(template);
                var file_selector = '.file-href-'+message['message_id'] + ' .file-label:last';
                if(file['type'] == 'image'){
                    $j( file_selector +' .thumb-link').show();
                }else if(file['type'] == 'audio'){
                    var name_array = file['file_name'].split('.');
                    var ext = name_array[name_array.length - 1];
                    if (ext == 'mp3'){
                        //mp3 player must be shown
                        var mp3player = $j( file_selector +' .mp3player');
                        mp3player.prepend(
                                '<embed width="500" height="20" flashvars="width=500&amp;height=20&amp;file='+ 
                                FILES_SERVER + file['file_path'] + file['file_name'] +
                                '" allowscriptaccess="always" src="/bin/mediaplayer.swf" wmode="transparent"></embed>');
                        mp3player.show();
                    }else{
                        $j( file_selector +' .filename').show();
                    }
                }else{
                    if (file['converted']) {
                        $j( file_selector +' .doc-view').show();
                    }
                    $j( file_selector +' .filename').show();
                }
            }
        }
    }

    function translateSenderAndReceivers(sender_name, receivers_html){
        var formatted_template = translated_text['sender-and-receivers'];
        return formatted_template.replace(/%1\$s/g, sender_name).replace(/%2\$s/g, receivers_html);
    }

    function getThumbnail(filename){
        var dot_pos = filename.indexOf('.');
        var name = filename.substring(0, dot_pos);
        var ext = filename.substring(dot_pos);
        return name + '_t' + ext;
    }

    function clearFlashingTitleInterval(){
        if(that.title_flashing_interval != null) {
            clearInterval(that.title_flashing_interval);
            that.title_flashing_interval = null;
            document.title = 'Edmodo | ' + translated_text['title-goes-here']; 
        }
    }

    function addPagination(){
        that.more_button.click(function(){
            view.feed_handler.showMoreMessages();
            that.hideMoreOption();
            //show loading.gif
            that.more_loading_gif.show();
        });
    }

    function getCommentHtmlWrapper(comment, current_message, comment_pos){
        var new_comment_html = '';
        if(current_message['comment_count'] > 3){
            //gotta contract the comments if there are too many
            if(comment_pos == 1){
                var hidden_comments = current_message['comment_count'] - 2;
                new_comment_html = '<a href="javascript:;" class="show-comments">'+ translateMoreReplies(hidden_comments) +'</a>';
                new_comment_html += '<div class="collapsed-comments-' + current_message['message_id'] + '" style="display:none">';
            }else if(comment_pos == current_message['comment_count'] - 1){
                new_comment_html = '</div>';
            }
        }
       
        return new_comment_html + getNewCommentHtml(comment, current_message);
    }

    function translateMoreReplies(hidden_comments){
        var formatted_template = translated_text['show-more-comments'];
        return formatted_template.replace(/%1\$d/g, hidden_comments);
    }
    
    function addDeleteEditPopoutOptions(){
        that.feed.find('div.post-entry').unbind('hover').hover(
                function(){
                    var message_id = $j(this).children('input.activity-id').val();
                    var user_options = $j("#entry-options-"+message_id);
                    user_options.show();
                    if(!$j(this).hasClass('delete_rights')){
                        //user shouldn't delete/edit message
                        user_options.children('.edit').hide();
	 	                user_options.children('.delete').hide();
                    }
                },
                function(){
                    var message_id = $j(this).children('input.activity-id').val();
                    $j("#entry-options-"+message_id).hide();
                }       
            );  
    }

};

function showDocViewer(file_id, original_doc, message_id){
  	files_url = 'http://s3.amazonaws.com/edmodo/docs/';
  	viewer_url = 'http://s3.amazonaws.com/edmodo/docs/modoviewer12.swf';
  	var slideplayer = '';
  	if (original_doc.search(".ppt") != -1 || original_doc.search(".pptx") != -1) {
  		slideplayer = '&viewer=1';
  	}
	var doc_viewer_content = "<object classid=\"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\" codebase=\"http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0\" width=\"505\" height=\"438\" id=\"myMovieName\"><param name=\"wmode\" value=\"transparent\"></param><param name=\"movie\" value=\""+viewer_url+"\"/><param name=\"quality\" value=\"high\"/><param name=\"bgcolor\" value=\"#FFFFFF\"/><param name=\"flashvars\" value=\"doc_url="+files_url+file_id+".swf&orig_doc="+original_doc+slideplayer+"\"/><param name=\"allowScriptAccess\" value=\"always\"/><param name=\"allowFullScreen\" value=\"true\"/><embed wmode=\"transparent\" flashvars=\"doc_url="+files_url+file_id+".swf&orig_doc="+original_doc+slideplayer+"\" src=\""+viewer_url+"\" allowScriptAccess=\"always\" allowFullScreen=\"true\" quality=\"high\" bgcolor=\"#FFFFFF\" width=\"505\" height=\"438\" name=\"myMovieName\" align=\"\" type=\"application/x-shockwave-flash\" pluginspage=\"http://www.macromedia.com/go/getflashplayer\"></embed></object>"; 
	var msg_specifier = '';
	if (message_id != 0) {
		msg_specifier = message_id + '-';
	}
	$j('#doc-viewer-'+msg_specifier+file_id).html(doc_viewer_content);
	$j('#doc-viewer-'+msg_specifier+file_id).css('display', 'block');	
	$j('#doc-view-launch-'+msg_specifier+file_id).css('display', 'none');			 
} 

function lockChalk(message_id, chalk_id){
    var params = { 'chalk_id' : chalk_id };
    goAjax( '/chalk/ajax-lock-chalk', params, function() {updateChalkOptions(message_id, chalk_id, 'LOCKED')});
}

function unlockChalk(message_id, chalk_id){
    var params = { 'chalk_id' : chalk_id };
    goAjax( '/chalk/ajax-unlock-chalk', params, function() {updateChalkOptions(message_id, chalk_id, 'OPEN')});
}

function updateChalkOptions(message_id, chalk_id, status){
	if (status == 'LOCKED') {
		$j('#chalk-launcher-'+message_id+'-'+chalk_id).html(translated_text['view']);
		$j('#chalk-locker-'+message_id+'-'+chalk_id).html(translated_text['unlock']);
		$j('#chalk-locker-'+message_id+'-'+chalk_id).removeAttr("onclick");
		$j('#chalk-locker-'+message_id+'-'+chalk_id).unbind('click');
		$j('#chalk-locker-'+message_id+'-'+chalk_id).click(function (e) {
            unlockChalk(message_id, chalk_id);
        });			
        var view_url = $j('#chalk-launcher-'+message_id+'-'+chalk_id).attr('href');
        view_url = view_url.replace('.com/', '.com/ep/pad/view/');
        view_url = view_url.replace('?token', '/latest?token');        
        $j('#chalk-launcher-'+message_id+'-'+chalk_id).attr('href', view_url);
	} else {
		$j('#chalk-launcher-'+message_id+'-'+chalk_id).html(translated_text['launch-chalk']);			
		$j('#chalk-locker-'+message_id+'-'+chalk_id).html(translated_text['lock']);
		$j('#chalk-locker-'+message_id+'-'+chalk_id).removeAttr("onclick");
		$j('#chalk-locker-'+message_id+'-'+chalk_id).unbind('click');	
		$j('#chalk-locker-'+message_id+'-'+chalk_id).click(function (e) {
            lockChalk(message_id, chalk_id);
        });		
        var view_url = $j('#chalk-launcher-'+message_id+'-'+chalk_id).attr('href');
        view_url = view_url.replace('.com/ep/pad/view/', '.com/');
        view_url = view_url.replace('/latest?token', '?token');        
        $j('#chalk-launcher-'+message_id+'-'+chalk_id).attr('href', view_url);        					
	}
}