// sorting constants, keep them in sync with the ReviewCache's constants
var MOST_RECENT_SORT_ORDER = 1;
var HIGHEST_RATED_SORT_ORDER = 3;
var REVIEW_TYPE_SORT_ORDER = 5;
var UP_AND_COMING_SORT_ORDER = 6;
var MOST_DISCUSSED_SORT_ORDER = 7;

// filter constants
var MISC_FILTER = 1;
var BZZGUIDE_FILTER = 2;
var FROG_LIBS_FILTER = 4;
var HAIKU_FILTER = 8;
var FREESTYLE_FILTER = 16;
var SHOWALL_FILTER = 0;

// sorting and filter globals
if (!currentSortingCriteria) {
  var currentSortingCriteria = MOST_RECENT_SORT_ORDER;
}
if (!currentFilter) {
  var currentFilter = SHOWALL_FILTER;
}
if (!currentPageIndex) {
  var currentPageIndex = 0;
}

// paginator globals
var numPerPage = 20;
var bookmarkDisplayLimit = 8;
var currentFrame = 0;

var globalError = "An error occurred while processing your request";

	function flagFrog(frogIdent,username,flagStatusId, reasonId){
	
		var frogId = "frog" + frogIdent;
		
		if(reasonId ==""){
			reasonId = 0;
			}
		
		FrogAjax.flagFrog(frogIdent, username, flagStatusId,reasonId,function(success){
	
		if (success){
			var srcElement = document.getElementById(frogId);
			srcElement.className = "flagged";
			Shadowbox.close();
		} 
		});

	}
	
	function flagFrogHome(frogIdent, username, flagStatusId, reasonId){
		
		if(reasonId ==""){
			reasonId = 0;
			}
		
		FrogAjax.flagFrog(frogIdent, username, flagStatusId, reasonId);

		window.parent.location='/frog/FrogPond.do?action=browse&msg=flagged';
	}
	

function subscribeToCategory(srcElm, username, catId, catName){
    FrogAjax.subscribeToFrogCategory(username, catId, function(success) {
        if (success){
            alert("Okay, subscribed to Frog Category " + catName);
            window.location.reload( true );
        } else {
            alert("There was a problem subscribing to Frog Category " + catName);
            window.location.reload( true );

        }
    });
}
function unSubscribeToCategory(srcElm, username, catId, catName){
    FrogAjax.unSubscribeToFrogCategory(username, catId, function(success) {
        if (success){
            alert("Okay, unsubscribed from Frog Category " + catName);
            window.location.reload( true );
        } else {
            alert("There was a problem unsubscribing from Frog Category " + catName);
            window.location.reload( true );

        }
    });
}	

function addSavedFrog(frogIdent, username, srcElm) {
    FrogAjax.addSavedFrog(frogIdent, username, function(success) {
   $j(srcElm).parent().addClass("lightGreenBg");
    if (success) {
      $j(srcElm).parent().html("Added");
    }
    else {
      $j(srcElm).parent().html(globalError);
    }

    
  });
}

function removeSavedFrog(frogIdent, username, srcElm) {
	FrogAjax.removeSavedFrog(frogIdent, username, function(success) {

    /*var msg = $j(srcElm).parent();
   // msg = Element.extend(msg);
    msg.addClass("savingMessage");*/
	$j(srcElm).parent().addClass("lightGreenBg");

    if (success) {
      $j(srcElm).parent().html("Removed");
    }
    else {
      $j(srcElm).parent().html(globalError);
    }

  });
}

function rate(reviewIdent, username, wasHelpful, srcElm) {
  FrogAjax.rateReview(reviewIdent, username, wasHelpful, function(success) {
    $j(srcElm).parent().addClass("lightGreenBg");

    if (success) {
     $j(srcElm).parent().html("Thanks for rating");
    }
    else {
      $j(srcElm).parent().html(globalError);
    }

  });
}

function flag(reviewIdent, username, srcElm) {
  FrogAjax.flagReview(reviewIdent, username, function(success) {
    $j(srcElm).parent().addClass("lightGreenBg");

    if (success) {
      $j(srcElm).parent().html("Thanks for your input");
    }
    else {
      $j(srcElm).parent().html(globalError);
    }

  });
}

function constructReviewComponent(rowClass, review, flaggedPostIdents, ratedPostIdents, clientPostIdentMap) {

  var row = document.createElement("tr");
  row = $j(row);
  row.addClass(rowClass);

  var td = document.createElement("td");
	td = $j(td);
  //td.vAlign = "top";

  var hrDiv = document.createElement("div");
	hrDiv = $j(hrDiv);
  hrDiv.addClass("threadhr");
  hrDiv.append(document.createElement("hr"));
  td.append(hrDiv);

  var thumb = document.createElement("dd");
	thumb = $j(thumb);
  thumb.addClass("thumb");
  td.append(thumb);

  var avatar = document.createElement("div");
	avatar = $j(avatar); 
  avatar.addClass("thumbavatar");
  //avatar.align = "center";

  var authorLink = document.createElement("a");
	authorLink = $j(authorLink);
  authorLink.href = "/frog/FrogProfile.do?agent=" + review.authorName;

  var avatarImg = document.createElement("img");
  /*avatarImg.className = "avatar";
    avatarImg.width = 60;
    avatarImg.height = 60;
    avatarImg.alt = review.authorName;*/

  $j(avatar).append(authorLink);
  if (clientPostIdentMap[review.ident] == review.ident) {
    avatarImg.src = "/img/frogpond/" + review.frogIdent + "/icon.jpg";
    authorLink.append(document.createTextNode(review.authorName));
    authorLink.append(avatarImg);
  }
  else {
    if (review.authorPicUrl) {
      avatarImg.src = review.authorPicUrl;
      authorLink.append(document.createTextNode(review.authorName));
      authorLink.append(avatarImg);
    }
    else {
      avatarImg.src = "/img/frogpond/avatar_unknown.jpg";

      var authorNameSpan = document.createElement("span");
      authorNameSpan = $j(authorNameSpan);
      authorNameSpan.addClass("avatar_username");
      $j(authorNameSpan).append(review.authorName);

      $j(authorLink).append(authorNameSpan);
      $j(avatar).append(avatarImg);
    }
  }
  thumb.append(avatar);

  var commentsBlock = document.createElement("dd");
	commentsBlock = $j(commentsBlock);
  commentsBlock.addClass("comments_list");
  td.append(commentsBlock);

  var commentsLeftBlock = document.createElement("div");
	commentsLeftBlock = $j(commentsLeftBlock);
  commentsLeftBlock.addClass("opinion_midsection_list");
  commentsBlock.append(commentsLeftBlock);

  var textBlock = document.createElement("div");
	textBlock = $j(textBlock);
  textBlock.addClass("opinion_text");

  if (clientPostIdentMap[review.ident] == review.ident) {
    textBlock.append(document.createTextNode("(Client post)"));
    textBlock.append(document.createElement("br"));
  }

	textBlock.append(document.createTextNode(review.text));
  /*var tokens = review.split("\n");
  tokens.each(function(token) {
    
    if (!token.blank()) {
      textBlock.append(document.createElement("br"));
    }
  });*/
  commentsLeftBlock.append(textBlock);

  var ratingBlock = document.createElement("div");
	ratingBlock = $j(ratingBlock);
  ratingBlock.addClass("ratingblock");

  var ratingBlockStrong = document.createElement("strong");
	ratingBlockStrong = $j(ratingBlockStrong);
  ratingBlockStrong.append(document.createTextNode("I rated this Frog: "));
  ratingBlock.append(ratingBlockStrong);

  var stars = document.createElement("img");
  stars.src = "/img/frogpond/stars/star_" + review.stars + ".0.png";
    stars.height = 8;
    stars.width = 49;
    stars.className = "pngTrans";
  ratingBlock.append(stars);

  commentsLeftBlock.append(ratingBlock);

  var dateBlock = document.createElement("div");
	dateBlock = $j(dateBlock);
  dateBlock.className = "dateblock";

  var opinionPostDateBlock = document.createElement("div");
	opinionPostDateBlock = $j(opinionPostDateBlock);
  opinionPostDateBlock.className = "opinion_postdate";

  opinionPostDateBlock.append(document.createTextNode("Posted on "
      + formatDate(new Date(review.created.time), "MM/dd/yyyy h:mma")));
  dateBlock.append(opinionPostDateBlock);

  commentsLeftBlock.append(dateBlock);
  commentsLeftBlock.append(document.createElement("br"));
  commentsLeftBlock.append(document.createElement("br"));

  var discussAnchor = document.createElement("a");
	discussAnchor = $j(discussAnchor);
	var discussUrl = "/frog/Thread.do?action=view&threadIdent=" + review.ident;
  discussAnchor.attr('href', discussUrl);

  var discussImg = document.createElement("img");
  discussImg.src = "/img/frogpond/discuss_btn_small.gif";
  discussImg.width = 51;
  discussImg.height = 17;
  discussImg.align = "absmiddle";
  discussAnchor.append(discussImg);

  commentsLeftBlock.append(discussAnchor);
  commentsLeftBlock.append(document.createTextNode(" " + review.responseCount + " response(s) to this post"));
  commentsLeftBlock.append(document.createElement("br"));

  var commentsRightBlock = document.createElement("div");
	commentsRightBlock = $j(commentsRightBlock);
  commentsRightBlock.className = "opinionrightside";
  commentsBlock.append(commentsRightBlock);

  var commentRightCenterBlock = document.createElement("div");
	commentRightCenterBlock = $j(commentRightCenterBlock);
  commentRightCenterBlock.align = "center";
  commentsRightBlock.append(commentRightCenterBlock);

  var scoreNumberBlock = document.createElement("div");
	scoreNumberBlock = $j(scoreNumberBlock);
  scoreNumberBlock.className = "scorenumber";
  if (currentSortingCriteria == HIGHEST_RATED_SORT_ORDER || currentSortingCriteria == UP_AND_COMING_SORT_ORDER) {
    scoreNumberBlock.append(document.createTextNode("Helpful rating: " + review.score));
  }
  else if (currentSortingCriteria == MOST_DISCUSSED_SORT_ORDER) {
    scoreNumberBlock.append(document.createTextNode("Responses: " + review.responseCount));
  }

  if (currentSortingCriteria == HIGHEST_RATED_SORT_ORDER || currentSortingCriteria == UP_AND_COMING_SORT_ORDER
      || currentSortingCriteria == MOST_DISCUSSED_SORT_ORDER) {
    commentRightCenterBlock.append(scoreNumberBlock);
  }

  if (!username || (username && review.authorName != username)) {
    var votingBlock = document.createElement("div");
	votingBlock = $j(votingBlock);
    votingBlock.className = "opinionhelpful";
    votingBlock.align = "center";

    var votingBlockPara = document.createElement("p");
		votingBlockPara = $j(votingBlockPara);
    votingBlockPara.append(document.createTextNode("Was this helpful? "));
    votingBlockPara.append(document.createElement("br"));

    var thumbUpAnchor = document.createElement("a");
		thumbUpAnchor = $j(thumbUpAnchor);
    /*thumbUpAnchor.style.cursor = "pointer";*/
    var thumbUpImg = document.createElement("img");
    thumbUpImg.src = "/img/frogpond/yes.gif";
    thumbUpImg.width = 30;
    thumbUpImg.height = 17;
    thumbUpImg.alt = "Yes";
    thumbUpImg.align = "absmiddle";
    thumbUpAnchor.append(thumbUpImg);
    votingBlockPara.append(thumbUpAnchor);

    var thumbDownAnchor = document.createElement("a");
	thumbDownAnchor = $j(thumbDownAnchor); 
    /*thumbDownAnchor.style.cursor = "pointer";*/
    var thumbDownImg = document.createElement("img");
    thumbDownImg.src = "/img/frogpond/no.gif";
    thumbDownImg.width = 30;
    thumbDownImg.height = 17;
    thumbDownImg.alt = "No";
    thumbDownImg.align = "absmiddle";
    thumbDownAnchor.append(thumbDownImg);
    votingBlockPara.append(thumbDownAnchor);

    if (username) {
      thumbUpAnchor.onclick = function(e) {
        rate(review.ident, username, true, thumbUpAnchor)
      };
      thumbDownAnchor.onclick = function(e) {
        rate(review.ident, username, false, thumbDownAnchor)
      };
    }
    else {
      thumbUpAnchor.href = "/frog/FrogClick.do?action=login&type=froghome&frogIdent=" + review.frogIdent;
      thumbDownAnchor.href = "/frog/FrogClick.do?action=login&type=froghome&frogIdent=" + review.frogIdent;
    }

    if (ratedPostIdents && ratedPostIdents[review.ident]) {
      var ratingMessageSpan = document.createElement("span");
      ratingMessageSpan.className = "ratingMessage";
      ratingMessageSpan.appendChild(document.createTextNode("Thanks for rating"));
      votingBlock.append(ratingMessageSpan);
    }
    else {
      votingBlock.append(votingBlockPara);
    }

    commentsRightBlock.append(votingBlock);
  }

  var helpfulSpan = document.createElement("span");
	helpfulSpan = $j(helpfulSpan);
  helpfulSpan.className = "helpful";
  var helpfulDiv = document.createElement("div");
	helpfulDiv = $j(helpfulDiv);
  helpfulDiv.append(document.createTextNode(review.helpful + " of " + review.total + " found this helpful"));
  helpfulSpan.append(helpfulDiv);
  commentsRightBlock.append(helpfulSpan);

  var iconActionDiv = document.createElement("div");
	iconActionDiv = $j(iconActionDiv);
  iconActionDiv.className = "icon_action";

  var flagAnchor = document.createElement("a");
	flagAnchor = $j(flagAnchor);
  flagAnchor.className = username ? "pointer" : "flagpointer";

  if (username) {
    commentsRightBlock.append(iconActionDiv);
    flagAnchor.onclick = function(e) {
      flag(review.ident, username, flagAnchor);
    };
  }
  else {
    commentsRightBlock.append(iconActionDiv);
    flagAnchor.href = "/frog/FrogClick.do?action=login&type=froghome&frogIdent=" + review.frogIdent;
  }

  var flagDiv = document.createElement("div");
	flagDiv = $j(flagDiv);
  flagDiv.className = "action";
  flagDiv.append(document.createTextNode("Flag this as inappropriate!"));
  flagAnchor.append(flagDiv);

  if (flaggedPostIdents && flaggedPostIdents[review.ident]) {
    var flaggingMessageSpan = document.createElement("span");
		flaggingMessageSpan = $j(flaggingMessageSpan);
    flaggingMessageSpan.className = "flaggingMessage";
    flaggingMessageSpan.append(document.createTextNode("Thanks for your input"));
    iconActionDiv.append(flagAnchor);
  }
  else {
    iconActionDiv.append(flagAnchor);
  }

  row.append(td);

  return row;
}

function filterReviewList(frogIdent, filterBy, element) {
  if (element.checked) {
    currentFilter += filterBy;
  }
  else {
    currentFilter -= filterBy;
  }

  gotoReviewListPage(frogIdent, currentPageIndex, currentSortingCriteria, currentFilter);
}

function sortReviewList(frogIdent, sortBy, element) {
  element = $j(element);
  if (element.hasClass("sortOrder")) return;

  currentSortingCriteria = sortBy;

  var parent = element.parentNode;
  parent = $j(parent);
  var anchors = parent.childElements();

  for ( var i = 0; i < anchors.length; i++) {
    if ($j(anchors[i]).hasClass("sortOrder")) {
      $j(anchors[i]).removeClass("sortOrder");
    }
  }

  element.addClass("sortOrder");

  gotoReviewListPage(frogIdent, currentPageIndex, currentSortingCriteria, currentFilter);
}

function constructSticky(sticky) {
	alert(sticky);
  var row = document.createElement("tr");
  row = $j(row);
  row.addClass("sticky-box");

  var cell = document.createElement("td");
	cell = $j(cell);
  cell.append(document.createElement("br"));

  var div = document.createElement("div");
	div = $j(div);

  var a = document.createElement("a");
  a.href = "/frog/Thread.do?action=view&threadIdent=" + sticky.ident;

  var data = sticky.text.replace(/(\n|\r\n)+/gm, "<br />");
  a.innerHTML = data.escapeHTML();

  div.append(a);
  cell.append(div);

  cell.append(document.createElement("br"));

  row.append(cell);
  return row;
}

function gotoReviewListPage(frogIdent, pageNum, sortBy, filterBy) {
  currentPageIndex = pageNum;

  var reviewList = $j("table#reviewList");

  $j("progressInfo").html("loading...");

  function doRenderReviews(clientPostIdentMap) {
    if (username) {
      renderReviewsWithRatedAndFlaggedMaps(clientPostIdentMap);
    }
    else {
      renderReviews(frogIdent, numPerPage, pageNum, sortBy, filterBy, null, null, clientPostIdentMap);
    }
  }

  function renderReviewsWithRatedAndFlaggedMaps(clientPostIdentMap) {
    FrogAjax.getAgentFlaggedPostIdents(username, frogIdent, function(result) {
		 
      var flaggedPostIdents = result;

      FrogAjax.getAgentRatedPostIdents(username, frogIdent, function(result) {

		 
        var ratedPostIdents = result;

        renderReviews(frogIdent, numPerPage, pageNum, sortBy, filterBy, flaggedPostIdents, ratedPostIdents,
            clientPostIdentMap);
      });
    });
  }

  function renderReviews(frogIdent, numPerPage, pageNum, sortBy, filterBy, flaggedPostIdents, ratedPostIdents,
      clientPostIdentMap) {

    FrogAjax.getReviews(frogIdent, numPerPage, pageNum, sortBy, filterBy,
        function(results) {
			 
          var reviews = eval(results);
			

          for ( var i = 0; i < reviews.length; i++) {
            var reviewBlock;
            var review = reviews[i];
			

            if (i % 2 == 1) {
              reviewBlock = constructReviewComponent("odd", review, flaggedPostIdents, ratedPostIdents,
                  clientPostIdentMap);
            }
            else {
              reviewBlock = constructReviewComponent("even", review, flaggedPostIdents, ratedPostIdents,
                  clientPostIdentMap);
            }

            $j("table#reviewList").append(reviewBlock);
          }

          FrogAjax.getReviewCount(frogIdent, currentFilter, function(count) {

            updatePaginator(numPerPage, pageNum, reviews.length, count);
            $j("progressInfo").innerHTML = "";

          });

        });
  }

  FrogAjax.getClientPostIdentMap(frogIdent, function(result) {
	 
    var clientPostIdentMap = result;

    clearReviewList();


      doRenderReviews(clientPostIdentMap);
 
  });
}

function removeAllChildren(element) {
  var queue = [];
  var i;
  for (i = 0; i < element.childNodes.length; i++) {
    queue.push(element.childNodes[i]);
  }
  for (i = 0; i < queue.length; i++) {
    element.removeChild(queue[i]);
  }
}

function updatePaginator(numPerPage, pageNum, reviewsDisplaying, total) {

  var pageStart = 0;
  if (reviewsDisplaying > 0) {
    pageStart = ((numPerPage * pageNum) + 1);
  }

  var pageEnd = pageStart + reviewsDisplaying - 1;
  if (pageEnd < 0) {
    pageEnd = 0;
  }

  var totalPages = Math.ceil(total / numPerPage);
  var totalFrame = Math.ceil(totalPages / bookmarkDisplayLimit);

  var frameStartPageIndex = currentFrame * bookmarkDisplayLimit;
  var frameEndPageIndex = 0;

  // bound the paginator sliding window frame
  if (frameStartPageIndex + bookmarkDisplayLimit - 1 < totalPages) {
    frameEndPageIndex = frameStartPageIndex + bookmarkDisplayLimit - 1;
  }
  else {
    frameEndPageIndex = totalPages - 1;
  }

  var firstPageIndex = 0;
  var lastPageIndex = totalPages - 1;
  var previousPageIndex = (pageNum - 1 >= 0) ? (pageNum - 1) : 0;
  var nextPageIndex = (pageNum + 1 <= lastPageIndex) ? (pageNum + 1) : lastPageIndex;

  var paginators = $j(".paginator");

  for ( var i = 0; i < paginators.length; i++) {

    var paginator = $j(paginators[i]);

    
    $j('span.pagebanner').html(total + " items found, displaying " + pageStart + " to " + pageEnd);

    var pageLinks = $j('span.pagelinks');
    pageLinks.empty();

    if (totalPages > 0) {

      pageLinks.append(document.createTextNode("["));

      var firstPage = document.createElement("a");
		firstPage = $j(firstPage);
		firstPage.addClass('firstLink');
		firstPage.append(document.createTextNode("First"));
		firstPage.attr('onClick', 'gotoReviewListPage('+frogIdent+', 0, '+currentSortingCriteria+' , '+currentFilter+');');
      pageLinks.append(firstPage);
      
      firstPage.click(function(e) {
        currentFrame = 0;
        gotoReviewListPage(frogIdent, firstPageIndex, currentSortingCriteria, currentFilter);
      });

      pageLinks.append(document.createTextNode(" / "));

      var previousPage = document.createElement("a");
		previousPage = $j(previousPage);
		previousPage.addClass('preLink');
		previousPage.attr('onClick', 'gotoReviewListPage('+frogIdent+', '+previousPageIndex+', '+currentSortingCriteria+' , '+currentFilter+');');
		previousPage.append(document.createTextNode("Prev"));
      pageLinks.append(previousPage);
      
      previousPage.click(function(e) {
        if (previousPageIndex != firstPageIndex && previousPageIndex < frameStartPageIndex) {
          currentFrame--;
        }
        gotoReviewListPage(frogIdent, previousPageIndex, currentSortingCriteria, currentFilter);
      });

      pageLinks.append(document.createTextNode("] "));

      for ( var j = frameStartPageIndex; j <= frameEndPageIndex; j++) {

        if (j == pageNum) {
          var strong = document.createElement("strong");
			strong = $j(strong);
          strong.append(document.createTextNode(j + 1));
          pageLinks.append(strong);
        }
        else {
          var bookmark = document.createElement("a");
			bookmark = $j(bookmark);
			var curPageIndex = j + 1;
			bookmark.attr('onClick', 'gotoReviewListPage('+frogIdent+', '+curPageIndex+', '+currentSortingCriteria+' , '+currentFilter+');');
			bookmark.append(document.createTextNode(j + 1));
          pageLinks.append(bookmark);
          
          // work around, force a pass by value
          bookmark.attr('pageIndex', j);
          bookmark.click(function() {
            gotoReviewListPage(frogIdent, this.pageIndex, currentSortingCriteria, currentFilter);
          });
        }

        if (j < frameEndPageIndex) {
          pageLinks.append(document.createTextNode(", "));
        }
        else if (j == frameEndPageIndex && j < totalPages - 1) {
          pageLinks.append(document.createTextNode("..."));
        }
      }

      pageLinks.append(document.createTextNode(" ["));

      var nextPage = document.createElement("a");
		nextPage = $j(nextPage);
		nextPage.attr('onClick', 'gotoReviewListPage('+frogIdent+', '+nextPageIndex+', '+currentSortingCriteria+' , '+currentFilter+');');
		nextPage.append("Next");
      pageLinks.append(nextPage);
      
      nextPage.click(function(e) {
        if (nextPageIndex <= lastPageIndex && nextPageIndex > frameEndPageIndex) {
          currentFrame++;
        }
        gotoReviewListPage(frogIdent, nextPageIndex, currentSortingCriteria, currentFilter);
      });

      pageLinks.append(document.createTextNode(" / "));

      var lastPage = document.createElement("a");
		lastPage = $j(lastPage);
		lastPage.attr('onClick', 'gotoReviewListPage('+frogIdent+', '+lastPageIndex+', '+currentSortingCriteria+' , '+currentFilter+');');
		lastPage.html("Last");
      pageLinks.append(lastPage);
      
      lastPage.click(function(e) {
		alert('clicked');
        currentFrame = totalFrame - 1;
        gotoReviewListPage(frogIdent, lastPageIndex, currentSortingCriteria, currentFilter);
      });

      pageLinks.append(document.createTextNode("]"));
    }
  }
}

function clearReviewList() {
  var reviewList = $j("table#reviewList").empty();

}

function toogleExpand(id, origin, offset, postCount) {
  var rows = $j("#" + id + " tr");

  for ( var i = 0; i < rows.length; i++) {
    if (i >= offset) {
      if (!rows[i].style || rows[i].style.display == "") {
        rows[i].style.display = "none";
      }
      else {
        rows[i].style.display = "";
      }
    }
  }

  var expanderImg = origin.childNodes[0];
  expanderImg = $j(expanderImg);
  if (expanderImg.src.endsWith("arrow_down.gif")) {
    expanderImg.src = expanderImg.src.replace("arrow_down.gif", "arrow_up.gif");
  }
  else {
    expanderImg.src = expanderImg.src.replace("arrow_up.gif", "arrow_down.gif");
  }

  var expanderText = origin.childNodes[1].data;

  if (expanderText == " expand to view " + postCount + " posts") {
    origin.childNodes[1].data = " contract to view " + (postCount < offset ? postCount : offset) + " posts";
  }
  else {
    origin.childNodes[1].data = " expand to view " + postCount + " posts";
  }
}

