glow.onDomReady(function(){

    function truncate(text) {
      var maximum_character_length = 200;
      return text.slice(0, maximum_character_length) + '&#8230;';
    }
    
    function create_link(text, callback) {
      var link = glow.dom.create('<span class="link"> [&nbsp;<a href="#">' + text + '</a>&nbsp;]</span>');
      glow.events.addListener(link, 'click', callback );
      return link;
    }
    
    function show_link() {
      var link = create_link('read more', function () { synopsis_html_short_form.replaceWith(synopsis_html_long_form); return false; } );
      return link;
    }
    
    function hide_link() {
      var link = create_link('hide', function () { synopsis_html_long_form.replaceWith(synopsis_html_short_form); return false; } );
      return link;
    }
    
    function find_last_paragraph_in(container) {
      var paragraphs = container.get('p');
      return paragraphs[paragraphs.length-1];
    }
    
    function convert_to_html_paragraphs(text) {
        var html = '<p>' + glow.lang.replace(text, /\n/g, '</p>\n<p>') + '</p>';
        return html;  
    }
    
    function convert_to_text_with_line_breaks(html) {
      if (html.indexOf("\r\n") != -1) {
        var text = glow.lang.replace(html, /<p>|<\/p>\r\n<p>|<\/p>/ig, "\r\n");
      } else {
         var text = glow.lang.replace(html, /<p>|<\/p>\n<p>|<\/p>/ig, "\r\n");
      }
      return text;
    }
    
    var synopsis = glow.dom.get("#summary .synopsis");
    
    if (synopsis.text().length > 200) {
      var synopsis_html_long_form = synopsis.clone(); 
          hide_link().appendTo(find_last_paragraph_in(synopsis_html_long_form));
    
      var synopsis_html_short_form = glow.dom.create('<div class="synopsis">' + convert_to_html_paragraphs(truncate(glow.lang.trim(convert_to_text_with_line_breaks(synopsis.html())))) + '</div>');
          show_link().appendTo(find_last_paragraph_in(synopsis_html_short_form));
     
      synopsis.replaceWith(synopsis_html_short_form);
    }

});

