// ****************SET UP VARS FOR FANNATION HOST
//DEV
//var fannationHost = 'http://newfannation.dev.sportstechinc.com';
//PROD
var fannationHost = 'http://fannation.sportsillustrated.cnn.com';
//var fannationHost = 'http://192.168.1.209:3000';
//var fannationHost = 'http://0.0.0.0:3000';
//var fannationHost = 'http://qa.fannation.com';
// **************/SET UP VARS FOR FANNATION HOST

// dp registration
  var needFullProfile = 'true';
  var emptyUserField = "Username field is empty";
  var emptyPwdField = "Password field is empty";
  var loginServiceNotAvail = "Problem with login service."
  var newProfileCreated = "New user profile created successfully. Please login."
  var errorCreatingProfile = "Error creating new profile: "
  var fannation_logged_in;
  var fannation_display_name;
  var bcPerPageParam = 20;
  
//**********BEGIN TEST VARS



//***********END TEST VARS
function toggleSignIn(showForm, username, loginMsg, loginDiv, loginErrorDiv) {
	loginDiv = loginDiv || jQuery('#cnnDPLoginArea').get(0);
    loginErrorDiv = loginErrorDiv || jQuery('#cnndp_loginError2').get(0);
	var outHtml = '';
    var errorMsg = '';
	if (!username) { username='' };
	if (showForm == true )
    {
		if(loginDiv.id != "cnnDPLoginArea2" && !loginMsg) // loginarea 2 is the pop up loginform for thickbox
        {
            outHtml += '<form name="dpLoginForm" class="cnndp_logform" action="#" onsubmit="verifyUser(\'cnnDPLoginArea\')">';
            outHtml += '	<table class="userLogIn" border="0" cellpadding="0" cellspacing="0">';
            outHtml += '		<tr>';
            outHtml += '			<td class="cnnCol0"><a href="#" onclick="verifyUser(\'cnnDPLoginArea\',\'cnndp_loginError\');return false"><img src="http://i.cdn.turner.com/si/.element/img/4.0/story/danpatrick/login_cut1.jpg" width="65" height="23" alt="Login"></a></td>';
            outHtml += '			<td class="cnnCol1">EMAIL</td>';
            outHtml += '			<td class="cnnCol2"><input type="text" name="user" id="user"></td>';
            outHtml += '			<td class="cnnCol3">PASSWORD</td>';
            outHtml += '			<td class="cnnCol4"><input type="password" name="pwd" id="pwd"></td>';
            outHtml += '			<td class="cnndp_signin"><div class="cnnDP_button"><table border="0" cellpadding="0" cellspacing="0"><tr><td><a href="#" onclick="verifyUser(\'cnnDPLoginArea\',\'cnndp_loginError\');return false"><span><span>Sign In</span></span></a></td></tr></table></div></td>';
            outHtml += '			<td class="cnnCol6"><a href="http://www.m2omedia.com/danpatrick/nonmembers/forgot/">Forgot your Password</a></td>';
            outHtml += '			<td class="cnnCol7"><img src="http://i.cdn.turner.com/si/.element/img/4.0/story/danpatrick/create_acct1.jpg" alt=""/></td>';
            outHtml += '			<td class="cnnCol8"><div class="cnnDP_button"><table border="0" cellpadding="0" cellspacing="0"><tr><td><a href="/danpatrick/popupform.html?height=310&amp;width=500" class="thickbox"><span><span>Start Here</span></span></a></td></tr></table></div></td>';
            outHtml += '		</tr>';
            outHtml += '	</table>';
            outHtml += '</form>';
    		loginDiv.innerHTML = outHtml;
        }
        if (loginMsg)	 
        { 
            errorMsg += '<p style="padding-bottom:5px;"><span class="cnnDPloginMsg">' + loginMsg + '</span></p>'; 
            loginErrorDiv.innerHTML = errorMsg;
        }
	} else {
        outHtml += '<table class="welcomeUser" align="center" border="0" callpadding="0" cellspacing="0">';
        outHtml += '<tr>';
        outHtml += '<td align="center"><span>LOGGED IN:</span>'+username+'<span>|</span><a href="#" onclick="signOutUser();return false;">logout</a></td>';
        outHtml += '</tr>';
        outHtml += '</table>';
		loginDiv.innerHTML = outHtml;
        if(jQuery('#cnndp_loginError').get(0))
        {
            jQuery('#cnndp_loginError').get(0).innerHTML = '';
        }
		if ( jQuery("#TB_window").get(0) ) { tb_remove(); }
	}
}


/*  
	we are including a js file from fannation in htmlHead.
	this sets the login variables based on users login status
	on fannation
     - no more cookies!
 */
function checkPageAuth() {
	var jsonUrl = fannationHost + "/users/logged_in?format=json&callback=?";
    //alert(jsonUrl);
	jQuery.getJSON(jsonUrl , function(data){
        /*
    		sample returns from fannation
            ?({fannation_logged_in: true, fannation_display_name: "jhillmann"})
        */
        if(data.fannation_logged_in == true)
        {

        	toggleSignIn(false, data.fannation_display_name);
        }
        else
        {
        	toggleSignIn(true);
        }
    });
}


/*
	verifyUser is called when user tries to log in
	there are 2 log in forms
    	- one displayed at top of page
        - other the thickbox login displayed when logged out user tries to post comment
    the loginErrorDivId is passed in from top login box, else we assume it is the thickbox form
*/
function verifyUser( loginDivId, loginErrorDivId ) {
	loginDivId = loginDivId || 'cnnDPLoginArea';
    loginErrorDivId = loginErrorDivId || 'cnndp_loginError2';
	var loginDiv = jQuery('#'+loginDivId).get(0);
    var loginErrorDiv = jQuery('#'+loginErrorDivId).get(0);
	var aForm = jQuery('form', loginDiv).get(0);

	var user = aForm.user.value;
	var pwd = aForm.pwd.value;
    
	if (user=='') {
		toggleSignIn(true, user, "Error: " + emptyUserField, loginDiv, loginErrorDiv);
		return false;
	} else if (pwd=='') {
		toggleSignIn(true, user, "Error: " + emptyPwdField, loginDiv, loginErrorDiv);
		return false;
	}
    logIntoFannation(user, pwd, loginDivId);
}

  

function logIntoFannation( user, pwd, loginDivId ) {
    loginDivId = loginDivId || 'cnnDPLoginArea';
	var loginDiv = jQuery('#'+loginDivId).get(0);
    var loginErrorDiv = '';
    if(loginDivId == 'cnnDPLoginArea')
    {
    	loginErrorDiv = jQuery('#cnndp_loginError').get(0);
    }
    else
    {
    	loginErrorDiv = jQuery('#cnndp_loginError2').get(0);
    }
    var jsonUrl = fannationHost + '/dan_patrick/sign_in?username='+user+'&password='+pwd+'&format=json&callback=?';
    jQuery.getJSON(jsonUrl, function(data){
        /*
    		sample returns from fannation
            success:	{status: 200, uid: 999999}
            failure: ?({status: 401, message: "Wrong email address or password. Please try again."})
        */
		if ( data.status == 200 ) {
            checkPageAuth();
		}
        else if (data.status == 401 && data.message && data.message != '')
        {
            toggleSignIn(true, "", "Error: " + data.message, loginDiv,loginErrorDiv);
            return false;
        }
        else
        {
			toggleSignIn(true, "", "Error: " + loginServiceNotAvail, loginDiv,loginErrorDiv );
			return false;
        }
	});
}

/*
	signOutUser will sign a user out of FanNation
*/
function signOutUser() {
	var jsonUrl = fannationHost + '/users/logout?format=json&callback=?';
    //alert("signout: " + jsonUrl);
    jQuery.getJSON(jsonUrl, function(data){
    	/*
    		sample returns from fannation
            ?({fannation_logged_in: false, fannation_display_name: "null"})
        */
        if (data.fannation_logged_in == false)
        {
            toggleSignIn(true);
        }
        else
        {
        	toggleSignIn(true);
        }
    });
	return false;
}
/*
    postComment - locker room comments
    called from fancomments/index.html
    called from rightRail locker room box
*/
function postComment( commentForm ){
    var comment = commentForm["comment[comment_text]"].value;
    if ( !comment || comment == 'Your comment' )
    {
    	return false;
    }
	/*
    	disable submit button
    */
    if(jQuery('#comment_submit').get(0))
    {
    	toggleSubmitLink(jQuery('#comment_submit').get(0),'disable');
    }
    
    var escComment = escapeComment(comment);
    
    var submit_data = {
    	"comment[comment_text]": escComment
    };
    
    //alert('http://fannation.com/dan_patrick/create_comment/1?format=js&comment[comment_text]=' + comment + '&callback=?')
    var jsonUrl = fannationHost + '/dan_patrick/create_comment/1?format=json&callback=?'
    jQuery.getJSON( jsonUrl, submit_data, function(data){
    	if(data.status == 200)
        {
        	/*
    			sample returns from fannation
                ?({status: 200, uid: "Comment Saved"}) - 200 response sample
            */
            commentForm["comment[comment_text]"].value = '';
            refreshComments(1);
        }
        else if(data.status == 401)
        {
            jQuery('#login_register_anchor').click();
        	return false;
        }
        else
        {
            return false;
        }
        //enable submit button
        
    });
    toggleSubmitLink(jQuery('#comment_submit').get(0),'enable');
  	return false;
}

function reportAbuse(commentId){
    //  /comments/report_offensive?offensive_comment_message=Because%20I%20am%20overly%20sensitive%20to%20the%20internet&comment_id=9278&format=json&callback=?
    var jsonUrl = fannationHost + '/comments/report_offensive?offensive_comment_message=Generic%20Message=&comment_id=' + commentId + '&format=json&callback=?';
    var jLink = '#reportAbuseConfirm';
    jQuery.getJSON( jsonUrl,function(data){
        if(jQuery(jLink).get(0))
        {
        	jQuery(jLink).click();
        }
    });
}

var refreshCommentsInterval = 30 * 1000;
var maxCommentsRefreshes = 30;
var numCommentsRefreshes = maxCommentsRefreshes;
var refreshCommentsIntervalID;
var commentsCurrentPage = 1;


function refreshComments( pageNum, pageLoad ){
    var pageLoad = pageLoad || false;
    if ( !pageNum ) pageNum = commentsCurrentPage;
    // on blog comments page, page one of comments needs to be returned
    // for some reason the pageNum is setting to negatives or very high numbers
    // not sure why so added this if statement - jhillmann

    if (jQuery('#blogcomments').get(0))
    {
    	pageNum = 1;
    }
    if ( numCommentsRefreshes < 1 ) return;
    --numCommentsRefreshes;
    // only need to refresh if on page 1
    var commentForm = jQuery('#comment_form').get(0);
    if ( commentForm )
    {
        // the format below is js but it returns json
        var jsonUrl = fannationHost + "/dan_patrick/comments?format=js&page=" + pageNum + "&callback=?"
        jQuery.getJSON(jsonUrl, function(data){
        	// if need to reverse data order
            //jQuery.data.comments.reverse().each(data.comments, function(i,comment) 
            //
            /*
               if pageLoad==false (only comment area is loading in)
               need to load only comments not already in list (dom list)
               need to prepend new ones to top of list
            */
            if(!pageLoad)
            {
                jQuery.each(data.comments, function(i,comment) {
              		if(!jQuery('#comment_' + comment.id).get(0)){
                      	jQuery('#comments').prepend( formatComment( comment ) );
                    }
    			});
            }
            /*
               if pageLoad==true (entire web page is loading in, not just a comment refresh)
               need to load full contents by appending to bottom of list (dom list)
            */
            else
            {
                jQuery.each(data.comments, function(i,comment) {
                	jQuery('#comments').append( formatComment( comment ) );
                });
            }
            
            // set current page to data page returend
            commentsCurrentPage = data.page_number;
       		refreshPagination( '#comments_page_count', 'refreshComments',data.total_count,data.count,data.page_number );
			// refresh regularly if the first page of data is being displayed
        	if ( data.page_number == 1 )
        	{
                if ( !refreshCommentsIntervalID )
        		{
        			refreshCommentsIntervalID = setInterval( "refreshComments(1)", refreshCommentsInterval );
        			refreshBlogCommentIntervalID = refreshCommentsIntervalID;
        		}
        	}
        	else
        	{
        		// don't refresh if the user isn't reading the first page of data
        		if ( refreshCommentsIntervalID )
        		{
        			clearInterval( refreshCommentsIntervalID );
        			refreshCommentsIntervalID = undefined;
        		}
        	}
      	});
    }
}

var refreshBlogCommentInterval = 30 * 1000;
var maxBlogCommentRefreshes = 30;
var numBlogCommentRefreshes = maxBlogCommentRefreshes;
var refreshBlogCommentIntervalID;
var blogCommentsCurrentPage = 1;
var blogCommentsTotalPageCount = '';


//postBlogComment
// called from individual blog pages

function postBlogComment( commentForm,fieldName,blogId ){
    /*
    	disable submit button
    */
    if(jQuery('#blogcomment_submit').get(0))
    {
    	toggleSubmitLink(jQuery('#blogcomment_submit').get(0),'disable');
    }
    var comment = commentForm["blogcomment[comment_text]"].value;
   //var changePage = (dataPageNum != blogCommentsCurrentPage) ? true : false;
    var isQuote = (jQuery("#quoteBox").get(0)) ? true : false;
    var quoteId = (jQuery("#quote_id").get(0)) ? jQuery("#quote_id").get(0).value : '';
    var quoteText = (jQuery("#quote_text").get(0)) ? jQuery("#quote_text").get(0).value : '';

    //alert("quoteId: " + quoteId + "\nquoteText: " + quoteText);
    
    if ( !comment || comment == 'Your comment' )
    {
    	return false;
    }

    var escComment = escapeComment(comment);
    var escQuote = escapeComment(quoteText);
 /*  
    var submit_data = {
    	"comment_text": escComment,
        "commentable_id": blogId,
        "commentable_type": "SiBlogPost",
        "quotable_type" : "Comment",
        "quotable_id" : quoteId,
        "quoted_text" : quoteText,
        "per_page" : bcPerPageParam,
        "format" : "json"
    };
 */   
    var quoteParams = (isQuote) ? '&quotable_id=' + quoteId + '&quoted_text=' + escQuote + '&quotable_type=Comment' : "";
    //var quoteParams = '';

    // last=true param will return the last page of the comments
    var jsonUrl = fannationHost + '/comments/create?last=true&per_page=' + bcPerPageParam + '&comment_text=' + escComment + '&commentable_id=' + blogId +'&commentable_type=SiBlogPost' + quoteParams + '&format=json&callback=?';
	//alert(jsonUrl);
    jQuery.getJSON( jsonUrl, function(data){
    	if(data.comments)
        {
        	/*
    			sample returns from fannation
                ?({status: 200, uid: "Comment Saved"}) - 200 response sample
            */
            commentForm["blogcomment[comment_text]"].value = '';
            removeQuote();  // remove quote box if it exists
            var totalCount = data.total_entries;
            displayBlogComments(data,false,totalCount,true);
            toggleSubmitLink(jQuery('#blogcomment_submit').get(0),'enable');
        }
        else if(data.errors)
        {
            if(data.errors[0] == "You must be signed to post comments.")
            {
                jQuery('#login_register_anchor').click();
                toggleSubmitLink(jQuery('#blogcomment_submit').get(0),'enable');
            	return false;
            }
            else
            {
            	//alert("received error but without expected login message");
                toggleSubmitLink(jQuery('#blogcomment_submit').get(0),'enable');
                return false;
            }
        }
        else
        {
        	//alert("unexpected status");
            toggleSubmitLink(jQuery('#blogcomment_submit').get(0),'enable');
            return false;
        }
	});
    //toggleSubmitLink(jQuery('#blogcomment_submit').get(0),'enable');
    // clear out interval for refresh blog comments,
    // it will be set again after the post is complete
    // clearInterval( refreshBlogCommentsIntervalID );
    // refreshBlogCommentsIntervalID = undefined;
    return false;
}

function refreshBlogComments( pageNum,pageLoad ){
	// pageLoad is true means the entire page is loading in, not jsut a refresh
    var pageLoad = pageLoad || false;
    // change page used to determine whether a whole new data page is loading in rather than the
    // same page with additional comments
    // created in xslt
    var blogId = dp_blogpage_blogid; 

    if ( !pageNum ) pageNum = blogCommentsCurrentPage;
    //alert("refreshBlogComments pagenum: " + pageNum);
    
    if ( numBlogCommentRefreshes < 1 ) return;
   	 --numBlogCommentRefreshes;
    
	var commentForm = jQuery('#blogcomment_form').get(0);
    var jsonUrl = fannationHost + '/comments?commentable_type=SiBlogPost&page='+pageNum + '&commentable_id=' + blogId + '&per_page=' + bcPerPageParam + '&format=json&callback=?';
    //alert(jsonUrl);
    jQuery.getJSON(jsonUrl, function(data){
        displayBlogComments(data,pageLoad,'');
    });
    if ( jQuery('#comments').get(0) )
    {
        // schedule a blog refresh from here so IE won't have to deal with simultaneous getJSON calls
        // full page comments will never reach this, only the blog comments page will call this
        clearInterval( refreshCommentsIntervalID );
    	refreshCommentsIntervalID = undefined;
        setTimeout( "refreshComments(1)", 1000 );
    }
}

function displayBlogComments(data,pageLoad,totalCount,isPost){
	totalCount = totalCount || '';
    isPost = isPost || false;
	if(data.total_entries != 0)
    {
        refreshPagination( '#blogcomment_page_count', 'refreshBlogComments',data.total_entries,data.per_page,data.current_page,'#blogcomment_page_count_bottom' );
        var totalCommentCount = data.total_entries;
        var dataPageNum = data.current_page;
        var countPerPage = data.per_page;
        var totalCommentCountDisplay = jQuery('#total_comment_count_display').get(0); // div that displays comment total
        var changePage = (dataPageNum != blogCommentsCurrentPage) ? true : false;
        
        ///////// START get variables to display the # by each comment
        var endCount = dataPageNum * countPerPage; 
        // end count is last comment to be shown on a given page
       /*
        if(countPerPage == dataPageNum)
        {
            endCount = totalCommentCount;
        }
        */
        var startCount = (endCount - countPerPage) + 1; 
        
        
        ///////// END get variables to display the # by each comment
       
        // displays count at top of comments box
        if (totalCommentCountDisplay)
        {
        	jQuery(totalCommentCountDisplay).html( totalCommentCount);
        }
        // displays count in blog header comments box
        if(jQuery('#blog_comment_count').get(0))
        {
        	jQuery('#blog_comment_count').html( totalCommentCount)
        }
        
       /*
           if pageLoad==false (only comment area is loading in)
           need to load only comments not already in list (dom list)
           need to prepend new ones to top of list
        */
        if(!pageLoad)
        {
            /*
            	if the user changes the page, you need to empty out the div and load in the new data
            */
            if(changePage)
            {
               jQuery("#blogcomments").empty();
            }
            jQuery.each(data.comments, function(i,comment) {
            
            	if(!jQuery('#blogcomment_' + comment.id).get(0)){
                  	jQuery('#blogcomments').append( formatBlogComment( comment, startCount + i,totalCount ) );
                }
			});
        }
        /*
           if pageLoad==true (entire web page is loading in, not just a comment refresh)
           need to load full contents by appending to bottom of list (dom list)
        */
        else
        {
            jQuery.each(data.comments, function(i,comment) {
            	jQuery('#blogcomments').append( formatBlogComment( comment, startCount + i,totalCount ) );
            });
        }
        
        // if posting a new comment, scroll the page so the newly posted comment is top of the window
        if(isPost)
        {
            // d is the div container of the comment the user just posted
            var d = jQuery('#anchor_' + totalCount);
            if(jQuery(d).get(0))
            {
            	// offset() retuns top and left offset of viewport
                var offset = d.offset();
                //scroll body to just above the posted comment div
                jQuery("body").scrollTop(offset.top - 20);
            }
            
        }
        // if not posting a new comment, scroll the page so the blogcomments box is top of the window
        else if (changePage)
        {
        	// d is the div container of the comment the user just posted
            var d = jQuery('#blogcomment_page_count');
            if(jQuery(d).get(0))
            {
                // offset() retuns top and left offset of viewport
                var offset = d.offset();
                //scroll body to just above the posted comment div
                jQuery("body").scrollTop(offset.top - 20);
            }
        }

        
        // write out bottom paging widget
        if(jQuery('#blogcomment_page_count_bottom').get(0))
        {
            refreshPagination( '#blogcomment_page_count_bottom', 'refreshBlogComments',data.total_entries,data.per_page,data.current_page);
        }

        if ( !refreshBlogCommentIntervalID )
        {
        	 //alert("resetting blogcommentinterval id");
             refreshBlogCommentIntervalID = setInterval( "refreshBlogComments()", refreshBlogCommentInterval );
        }
    	
       blogCommentsCurrentPage = data.current_page; 
    }
    else
    {
    	var noComments = "";
        noComments += '<div class="cnnDP_commentbox"">';
        noComments += '<table border="0" cellpadding="0" cellspacing="0" class="wrapper"><tr>';
        noComments += '<td>Please be the first to leave a comment for this blog!</td>';
        noComments += '</tr></table>';
        noComments += '</div>';
        jQuery('#blogcomments').append( noComments );
        
        var totalCommentCountDisplay = jQuery('#total_comment_count_display').get(0);
        if (totalCommentCountDisplay)
        {
        	jQuery(totalCommentCountDisplay).html( "0");
        }
    }

}


    
// ****************** UTILITY FUNCTIONS ************************************* //

/*
	Note - the submit buttons are actually links instead of form buttons
    toggleSubmitLink - disable submit link until current post loaded in to fix multiple submits of one data set
*/
var submitPostOnclick = "";
function toggleSubmitLink(l,action){
	if(action == 'disable')
    {
    	submitPostOnclick = l.onclick;
		l.onclick = "";
        l.href = "javascript:void(0)";
        //alert("is disabled");
    }
    else if(action == 'enable')
    {
    	l.onclick = submitPostOnclick;
        l.href = "#";
        //alert("is able!!");
    }
}

function parseParams (name) {
    name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
    var regexS = "[\\?&]"+name+"=([^&#]*)";
    var regex = new RegExp( regexS );
    var results = regex.exec( window.location.href );
    if( results == null )
    	return "";
    else
   	 return results[1];
}

// currently not in use
function formatBlogCommentForm(blogId){
	var formHtml = "";
	formHtml += '<p>Remember to keep it clean. Bad words will get filtered, and offensive comments will be removed. <a href="#LINK">More Guidelines</a></p>';
	formHtml += '<div class="cnnDP_header">';
	formHtml += '<div class="cnnDP-right">';
    formHtml += '<a href="javascript:void(0)" onclick="postBlogComment(jQuery(\'#blogcomment_form\').get(0),\'blogcomment1[comment_text]\',\'' + blogId + '\',1);" id="blogcomment_submit2">POST</a></div>';
	formHtml += 'ENTER YOUR POST HERE';
	formHtml += '</div>';
	formHtml += '<div class="cnnDP_content">';
    formHtml += '<textarea id="blogcomment_comment_text1" name="blogcomment1[comment_text]" onchange="commentCookie(value);" onmouseout="commentCookie(value)" onfocus="if(value==\'Your comment\')value=\'\';" onblur="if(value==\'\')value=\'Your comment\';">Your comment</textarea></div>';
    return formHtml;

}

// locker room comments
function formatComment( comment )
{
  var commentBody = unescapeComment(comment.comment_text);
  return(
    '<div class="comment" id="comment_' + comment.id + '">' +
      '<span class="created_at">' + comment.created_at + '</span>' +
      '<span class="message">&nbsp;|&nbsp;'+ commentBody + '&nbsp;|&nbsp;</span>' +
      '<span class="user">' +
        '<a target="_top" href="'+ comment.user_url + '">' + comment.user_name + '</a>' +
      '</span>' +
    '</div>'
  );
}

function escapeComment(str){
	var escapeStr = escape(str);
    return escapeStr;
}

function unescapeComment(str){
	var unescapeStr = unescape(str);
    return unescapeStr;
}

// define object for holding comment data for quote function
document.blogComments = {};

function formatBlogComment( blogcomment,count ){
    var userImgSrc = 'http://img.fannation.com/images/layout/profile-headshot.gif';
    if(blogcomment.user.image && blogcomment.user.image != "null" && blogcomment.user.image != "")
    {
    	userImgSrc = blogcomment.user.image;
    }
    var commentBody = unescapeComment(blogcomment.body);
    var commentDate = dpFormatCommentDate(blogcomment.created_at);
    var userUrl = 'http://www.fannation.com/users/view_user_profile/' + blogcomment.user.id
    var city = blogcomment.user.city;
    var state = blogcomment.user.state;
    if(city == null) city = "";
    if(state == null) state = "";
    city = city.toLowerCase();
    state = state.toLowerCase();
    //alert("city: " + city + "\nstate: " + state);
    var bcHtml = "";
    bcHtml += '<a name="anchor_' + count + '" id="anchor_' + count + '"></a>';
    bcHtml += '<div class="cnnDP_commentbox" id="blogcomment_' + blogcomment.id + '">';
    bcHtml += '<table border="0" cellpadding="0" cellspacing="0" class="wrapper"><tr>';
    bcHtml += '<td class="cnnDP_commenter">';
    bcHtml += '<table border="0" cellpadding="0" cellspacing="0">';
    bcHtml += '<tr>';
    bcHtml += '<td class="cnnDP_comment-count">' + count + '</td>';
    bcHtml += '<td class="cnnDP_commenter-icon"><img src="' + userImgSrc + '" height="40px" width="40px" alt=""/></td>';
    bcHtml += '<td class="cnnDP_commenter-links"><div><a href="' + userUrl + '">Profile</a></div><div><a href="' + userUrl + '">Contact</a></div></td>';
    bcHtml += '</tr>';
    bcHtml += '</table>';
    bcHtml += '<div class="cnnDP_commenter-name">' + blogcomment.user.display_name + '</div>';
    if(city!='no city' && city!='' && city!='null' && state!='xx' && state!='' && state!='null')
    {
    	bcHtml += '<div class="cnnDP_commenter-loc">' + blogcomment.user.city + ', ' + blogcomment.user.state + '</div>';
    }
    bcHtml += '<div class="cnnDP_commenter-total">Comments <strong>(' + blogcomment.user.comments_count + ')</strong></div>';
    bcHtml += '</td>';
    bcHtml += '<td class="cnnDP_commentText">';
    bcHtml += '<div class="cnnDP_commentInfo">';
    bcHtml += '<div class="cnn_right"><a href="javascript:reportAbuse(\'' + blogcomment.id + '\')">REPORT ABUSE</a>';
    bcHtml += ' | <a href="javascript:formatQuoteBox(\'' + count + '\')"><strong>QUOTE</strong></a></div>'+ commentDate + '</div>';
    if(blogcomment.quotable.user )
    {
        bcHtml += '<div class="cnnDP_commentquote">';
        bcHtml += '<div class="cnn_title"><div class="cnn_right">Originally Posted by ' + blogcomment.quotable.user.display_name + '</div>QUOTE:</div>';
        bcHtml += '<p>' + blogcomment.quoted_text + '</p>';
        bcHtml += '</div>';
    }
    bcHtml += '<div class="cnnDP_comment"><p>' + commentBody + '</p></div>';
    ///////////////
    //TEST ONLY
   // bcHtml += '<div class="cnnDP_commentquote">';
     //   bcHtml += '<div class="cnn_title"><div class="cnn_right">Originally Posted by name of person</div>QUOTE:</div>';
      //  bcHtml += '<p>A beautiful article. Thank you Luke.  A beautiful article. Thank you Luke.  A beautiful article. Thank you Luke.  A beautiful article. Thank you Luke.</p>';
       // bcHtml += '</div>';
    ///////////////////

    bcHtml += '</td></tr></table></div>';
    //alert(bcHtml);
    
    // create object of comment information
	document.blogComments[count] = {
    	"id" :  blogcomment.id,
        "body" :  commentBody
    }

    return bcHtml;
}

/*
	create a textarea containing the text of the quoted comment
    user may edit before submitting
    only one quote may be submitted per post
*/
function formatQuoteBox(num){
	var str = "";
    str += '<div id="quoteBox" class="cnnDP-commentbox">';
    str += '<p>&nbsp;</p>';
    str += '<div class="cnnDP_header">';
	str += '<div class="cnnDP-right"><a onclick="removeQuote();return false" href="#">REMOVE QUOTE</a></div>';
	str += 'QUOTE';
	str += '</div><div class="cnnDP_content">';
    str += '<textarea id="quote_text" name="quote_text">' + document.blogComments[num].body + ' </textarea>';
    str += '</div></div>';
    removeQuote();
    jQuery("#blogcomment_form").append(str);
    
    var fld = "";
    fld += '<input type="hidden" id="quote_id" name="quote_id" value="' + document.blogComments[num].id + '">';
    jQuery("#blogcomment_form").append(fld);
    
    //scroll page to just above the comment textarea 
	var obj = jQuery('#blogCommentFormBottom');
    if(jQuery(obj).get(0))
    {
    	// offset() retuns top and left offset of viewport
        var offset = obj.offset();
        //scroll body to just above the posted comment div
        jQuery("body").scrollTop(offset.top);
    }
}

function removeQuote(){
	if(jQuery("#quoteBox").get(0))
    {
		jQuery("#quoteBox").remove();
        jQuery("#quote_id").remove();
    }
}

function dpFormatCommentDate (dt){
	//02:27 PM  08.25
    //2008-08-2511:06:07-04:00
    var year = dt.substring(0,4);
    var month = dt.substring(5,7);
    var day = dt.substring(8,10);
    var hour = dt.substring(11,13);
    var min = dt.substring(14,16);
    var time = dt.substring(11,16);
    var ampm = "AM";
    if (hour > 11) ampm = "PM";
    var displayHour = dpCommentsGetHour(hour);
    var tStr = displayHour + ':' +  min + ' ' + ampm;
    var dStr = month + '.' + day;
    var fullString = '<span class="time">' + tStr + '</span><span class="date">' + dStr + '</span>';
    //alert(fullString);
	return fullString;
}

function dpCommentsGetHour(hour){
	if (hour > 12)
    	hour -= 12;
    if(hour == 00){
     hour = '12';
     }
    hour = dpLeadingZero(hour);
    return hour;
}

function dpLeadingZero(h){
    if (h.toString().length == 1) h = "0" + h;
	return h;
}

// show page links if there's a place to show them
// VAR DESCRIPTION
// paginationDiv - dom element that paging widget will be put in
// callbackFuncName - function calling the paging widget
// totalCount - total count in collection, ie all comments
// numPerPageData - # of data items returned on one page of callback data
// pageNum - page # of current page
// paginationDiv2 - if there is a second element to receive the widget, it goes here
// a View is a set of number boxes in current widget view, standard is 1 - 5
function refreshPagination( paginationDiv, callbackFuncName,totalCount,numPerPageData, pageNum, paginationDiv2  )
{
	paginationDiv = jQuery(paginationDiv).get(0);
	if ( paginationDiv )
	{
        // numPerPageData is the number returned per data page in json
        //alert("refreshPagination: " + callbackFuncName);
        var shownextlast = false;
        var showprevfirst = false;
        var numInView = 5;
        var totalPages = Math.ceil(totalCount / numPerPageData);
        var thisViewNum = getView(pageNum, numInView);
        var endPageViewNum = thisViewNum * numInView; // this is the num of the last page to show in a view
        var startDiff = 0;
    	var showFirst = false;
    	var showLast = true;
        var totalViews = Math.ceil(totalPages / numInView);
    	
        if(thisViewNum != 1)
        {
        	showFirst = true;
        }
        if(thisViewNum == totalViews)
        {
        	showLast = false;
        }
        if(endPageViewNum > totalPages)
        {
        	startDiff = endPageViewNum - totalPages;
            endPageViewNum = totalPages;
        }
        var beginPageView = (endPageViewNum - numInView + startDiff) + 1; // page number starting the view
        // tester do not remove
        //alert("numPerPageData: " + numPerPageData + "\ntotalCount: " + totalCount + "\ntotalPages: " + totalPages + "\nnumInView: " + numInView + "\npageNum: " + pageNum + "\ntotalViews: " + totalViews + "\nthisViewNum: " + thisViewNum + "\nendPageViewNum: " + endPageViewNum + "\nstartDiff:  " + startDiff + "\nbeginPageView: " + beginPageView);

	
		var pageLinks = '';
        pageLinks += '<div class="cnnDP_pagination"><table border="0" cellpadding="0" cellspacing="0"><tr>';
        if(thisViewNum > 1)
        {
        	var backPageNum = pageNum - 1;
            pageLinks += '<td class="cnnFirst"><a href="javascript:'+callbackFuncName+'(1);">FIRST</a></td>';
            pageLinks += '<td><a href="javascript:'+callbackFuncName+'('+backPageNum+');">BACK 5</a></td>';
		 }
		for( var pageCounter = beginPageView;  pageCounter <= endPageViewNum;  ++pageCounter )
		{
			var linkClass = ( pageCounter == pageNum ? 'class="cnnOn"' : '' );
            pageLinks += '<td '+linkClass+' id="page_link_wrapper_'+pageCounter+'"><a id="page_link_'+pageCounter+'" href="javascript:'+callbackFuncName+'('+pageCounter+');">'+pageCounter+'</a></td>';
			
		}
        if(thisViewNum < totalViews)
        {
            var nextPageNum = endPageViewNum + 1;
            pageLinks += '<td><a href="javascript:'+callbackFuncName+'('+nextPageNum+');">NEXT 5</a></td>';
			
        }
        if(showLast)
        {
        	pageLinks += '<td class="cnnLast"><a href="javascript:'+callbackFuncName+'('+totalPages+');">LAST</a></td>';
        }
        
        pageLinks += '</tr></table></div>';
        //alert(pageLinks);
		jQuery(paginationDiv).html(pageLinks);
        if ( paginationDiv2 )
        {
        	paginationDiv2 = jQuery(paginationDiv2).get(0);
            jQuery(paginationDiv2).html(pageLinks);
        }
	}
}

// util function for paging widget
// a view is the 1 - 5 box display on page 1
// view is 6 -10 on page 6, etc
function getView(pageNum,numInView){
	if(pageNum % numInView == 0)
    {
    	return pageNum / numInView;
    }
    else
    {
    	var num = pageNum / numInView;
        return Math.ceil(num);
    }
}

    // ****************** 	RUN ON DOCUMENT LOAD ************************************* //
    
jQuery(document).ready(function(){
    jQuery(document).mousemove( function(){
     //alert("mousemove here");
     	
        // not sure what these are for
        numCommentsRefreshes = maxCommentsRefreshes;
        numBlogCommentRefreshes = maxBlogCommentRefreshes;
    } );
    if ( jQuery('#blogcomments').get(0) )
    {
        //alert("about to refresh BLOGCOMMENTS from doc ready statement.\npageNum undefined")
        refreshBlogComments(1,true);
    
    }
    else 
    {
        if( jQuery('#comments').get(0) )
        //alert("about to refresh COMMENTS from doc ready statement. \npageNum undefined")
        refreshComments(1,true);
    
    }
});

var document_loaded = false;
jQuery(document).ready( function() {
	document_loaded = true;
});


