// methods for channelling blog feed into NTSC Club News
// created by Peter Liepa, http://brainjam.ca
// 

function DEBUG (s)
{
    var newsDebugDiv = document.getElementById ('newsdebug') ;
    if (newsDebugDiv){
        var entry = document.createElement('div') ;
        entry.innerHTML = s ;
        newsDebugDiv.appendChild(entry) ;
    }
}

function addDateline(viewDate)
{
    var months = ['January', 'February', 'March', 'April', 'May', 'June',
                'July', 'August', 'September', 'October', 'November', 'December'] ;
    var lastMonday = dayOffset (viewDate, -daysSinceMonday(viewDate)) ;
    DEBUG ('lastMonday='+lastMonday) ;
    var dateDiv = document.getElementById ('newsdate') ;
    var mondayStr = months[lastMonday.getMonth()]+' '+lastMonday.getDate()+
                    ', '+lastMonday.getFullYear() ;
    var dateline = document.createElement('h2') ;
    dateline.innerHTML = '<strong>Club News (week of '+mondayStr+')</strong>' ; 
    dateDiv.appendChild (dateline) ;
    
}

function addHeadline (title,content, jumper)
{
    var s = '' ;
    var el = document.createElement ('div') ;
    el.innerHTML = content ;
    var blockquotes = el.getElementsByTagName('blockquote') ;
    if (blockquotes && blockquotes[0]){
        s = blockquotes[0].innerHTML ;
    }
    var newsHeadlineDiv = document.getElementById ('newsheadlines') ;
    var titleElement = document.createElement('h3') ;
    titleElement.innerHTML = '<strong>'+title+'</strong><br/>'+s ;
    newsHeadlineDiv.appendChild(titleElement) ;
    var jump = document.createElement('h3') ;
    jump.innerHTML = '<a href="#'+jumper+'">Read here</a> for more details.' ;
    newsHeadlineDiv.appendChild (jump) ;
    var separator = document.createElement('hr') ;
    separator.className = 'separator' ;
    newsHeadlineDiv.appendChild (separator) ;
}
function addDetails (title, content, jumper)
{
    //document.write(s) ;
    var newsDetailsDiv = document.getElementById ('newsdetails') ;
    var jump = document.createElement('a') ;
    jump.id = jumper ;
    newsDetailsDiv.appendChild (jump) ;
    var titleElement = document.createElement('h2') ;
    titleElement.innerHTML = title ;
    newsDetailsDiv.appendChild(titleElement) ;
    var entry = document.createElement('div') ;
    entry.innerHTML = content ;
    var blockquotes = entry.getElementsByTagName('blockquote') ;
    if (blockquotes && blockquotes[0] && blockquotes[0].parentNode){
        blockquotes[0].parentNode.removeChild(blockquotes[0]) ;
    }
    
    newsDetailsDiv.appendChild(entry) ;
    var separator = document.createElement('hr') ;
    separator.className = 'separator' ;
    newsDetailsDiv.appendChild (separator) ;
}

// calculate the Date that is date+offsetDays
function dayOffset (date, offsetDays){
    return new Date(date - (-offsetDays*1000*60*60*24)) ;
}

function daysSinceMonday(now){
    var day = now.getDay() ;
    return (day+6) % 7 ;
}

function sameDate(date1, date2){
    return (date1.getFullYear() === date2.getFullYear() &&
            date1.getMonth() === date2.getMonth() &&
            date1.getDate() === date2.getDate() ) ;
}

// finds the tag (if any) matching the given date, and returns
// the priority.  A tag is of the form 'news-date-priority'.
// Returns false if no tag matching the date is found.
function priorityMatchingDate (tags, date){
    for (var i=0; i < tags.length; i++){
        // convert tag to date
        var tag = tags[i].getTerm() ;  // retrieve string for this tag
        var parts = tag.split('-') ;
        if (parts[0] != 'news'){
            continue ;
        }
        if (parts[1]){
            var tagDate = new Date (parts[1]) ;
            if (sameDate(tagDate,date)){
                return parts[2] ;
            }
        }
    }
    return false ;
}

// Blog feed navigation adapted from
// http://code.google.com/apis/blogger/docs/1.0/developers_guide_js.html#Interactive_Samples

// Create the blogger service object
var bloggerService =  new google.gdata.blogger.BloggerService('GoogleInc-jsguide-1.0');

// feed used to retrieve blog
var postsFeedUri = 'http://www.blogger.com/feeds/1823808769416639201/posts/default' ;

// The callback method used when getBlogFeed() returns the list of our blogs
var getBlogFeed = function(viewDate) {
    viewDate.setHours(23) ;
    viewDate.setMinutes(59) ;
    DEBUG ('viewDate='+viewDate) ;
    addDateline (viewDate) ;
    var startDate = dayOffset(viewDate,-30);
    DEBUG ('startDate='+startDate) ;
    var endDate = viewDate ;
    DEBUG ('endDate='+endDate) ;
  
  // Make query global to use in queryResultsCallback() 
  query = new google.gdata.blogger.BlogPostQuery(postsFeedUri);
  query.setPublishedMin(new google.gdata.DateTime(startDate));
  query.setPublishedMax(new google.gdata.DateTime(endDate));
  
  
  bloggerService.getBlogPostFeed(query, handleQueryResults, handleError);
};


// A callback method invoked when getBlogPostFeed() returns the query results
var handleQueryResults = function(resultsFeedRoot) {
    var i,j ;
    var post ;
    var blogFeed = resultsFeedRoot.feed;
    var blogTitle = blogFeed.getTitle().getText();

    // Retrieve our query parameters
    var startTime = query.getPublishedMin().getDate() ;
    var endTime =   query.getPublishedMax().getDate() ;
    var viewDate = endTime ;
    var lastMonday = dayOffset (viewDate, -daysSinceMonday(viewDate)) ;

    DEBUG('Query: <b>' + blogTitle + '</b> posts between <i>' + 
        startTime + '</i> and <i>' + endTime) + '</i>';

    var postEntries = blogFeed.getEntries();
    priorityArray = [] ;
    for (i = 0; post = postEntries[i]; i++) {
        var tags = post.getCategories() ;
        var priority = priorityMatchingDate(tags,lastMonday) ;
        if (false===priority){
            continue ;
        }
        priorityArray.push([priority,i]) ;
    }
    
    priorityArray.sort() ;

    for (j=0; j<priorityArray.length; j++){
        i = priorityArray[j][1] ;
        post = postEntries[i] ;
        var pubDate = post.getPublished().getValue().getDate();
        var postTitle = post.getTitle().getText();
        var postContent = post.getContent().getText() ;

        var jumper = 'jumper'+i ;
        addHeadline(postTitle, postContent, jumper);
        addDetails( postTitle, postContent, jumper);
    }
};

var handleError = function(error) {
  alert('handleError'+error);
};


