﻿var spazquest = spazquest || {};
spazquest.blog = spazquest.blog || {

  defaultArgs: {
    postsContainer: "#content",
    archiveLinksContainer: "#archiveLinks",
    archiveLinks: []
  },

  initialized: false, 
  init: function init(args) {
    if (this.initialized) return false;
    //this.self = this; // argh
    
    // make this a loop through
    this.postsContainer = args.postsContainer || this.defaultArgs.postsContainer;
    this.archiveLinksContainer = args.archiveLinksContainer || this.defaultArgs.archiveLinksContainer;
    this.archiveLinks = args.archiveLinks || this.defaultArgs.archiveLinks;
    
    this.initialized = true;
    return true;
  },
  
  isArchivePage: function isArchivePage() {
    return location.href.indexOf("archive") != -1;
  },
  
  getCommentsLink: function getCommentsLink(allowComments, commentsCount, commentsUrl) {
    var commentsLinkHtml;
    if (!allowComments) {
      commentsLinkHtml = 'Reader comments are not allowed on this entry.';
    } else {
      var linkText, countText;
      switch (commentsCount) {
        case 0: 
          linkText = "Add comment";
          countText = "There are no comments."
          break;
        case 1:
          linkText = "Add/view comments";
          countText = "There is 1 comment."
          break;
        default:
          linkText = "Add/view comments";
          countText = "There are " + commentsCount + " comments.";
      }
      commentsLinkHtml = countText + ' <a href="' + commentsUrl + '">' + linkText + '</a>';
    }
    return commentsLinkHtml;
  },
  
  // there's no template tag for this, so we extract it from metadata
  getBlogId: function getBlogId() {
    var ls=$("link[rel='EditURI']");
    if (ls.length == 0) {
      return null;
    }
    var matchResult = href.match('blogID=(\\d+)');
    if (matchResult && matchResult[1]) {
      return matchResult[1];
    }
  },
  
  getAllPostElements: function getAllPostElements(container) {
    return $("div.blogPost", spazquest.blog.postsContainer);
  },

  addCommentsLinkSections: function addCommentsLinkSections() {
    spazquest.blog.getAllPostElements().each(function() {
      var containerEl = $(this);
      var commentsCountEl = $(".blogCommentsCount", containerEl);
      var commentsUrl = $("a.permalink", containerEl).attr("href");
      var allowComments = !! $("input.enabled", commentsCountEl).val();
      var commentCount = $("input.count", commentsCountEl).val() * 1; // cast to number
      var linkHtml = spazquest.blog.getCommentsLink(allowComments, commentCount, commentsUrl);
      commentsCountEl.html(linkHtml);
    })
  },
  
  addArchiveLinks: function addArchiveLinks() {
    var archiveLinks = spazquest.blog.archiveLinks;
    var containerEl = $(spazquest.blog.archiveLinksContainer);
    
    if (archiveLinks.length > 0 && containerEl.length > 0) {
      containerEl.append("<h2>Archives</h2>")
        .append("<ul>");
        
      
      var listEl = $("ul", containerEl);
      for (var len=archiveLinks.length,i=len-1;i>=0;i--) {
        var linkData = archiveLinks[i];
        var linkUrl = linkData[0] || "";
        var linkText = linkData[1] || "";
        listEl.append('<li><a href="'+linkUrl+'">'+linkText+'</a></li>');
      }
      if (spazquest.blog.isArchivePage()) {
        listEl.append('<li><a href="'+homeUrl+'" class="linkToCurrent">Go To Current Posts</a></li>');
      }
    }
  }
};


