var currentPage     = 0;
var commentsPerPage = 10;
var commentsSorting = '';
var commentsType	= '';
var abuseReportMax  = 3;
var isCommentPageEmpty = false;
var articleID;
var articleKey;
var userObj;
var embargo = false;

function verifierEmbargo(time)
{
	var data = time;
	var currentTime = (new Date(data)).getTime();								
	
	var beginTime = (new Date(2011,04,27,8,0,0,0)).getTime();
	var endTime =   (new Date(2011,04,27,10,30,0,0)).getTime();
	
	if(beginTime <= currentTime && endTime >= currentTime)
	{
		return true;
	}	
	else
	{
		return false;	
	}
}

function src_loadArticle(ID, moveToPage, sortingVal, type) {
 if(isPluckActive===false)return; 
	//getTime('GMT', function(time)
	//{		
		//embargo = verifierEmbargo(time);					
		embargo = false;
		articleID  = ID;
		articleKey = new ArticleKey(articleID);
	
		currentPage = src_validatePageNumber(moveToPage);
		commentsSorting = src_validateSorting(sortingVal);
		commentsType = src_validateCommentType(type);
	
		//Build & send request
		var requestBatch = new RequestBatch();
		requestBatch.AddToRequest(new CommentPage(articleKey, commentsPerPage, currentPage, commentsSorting));  //[0] - CommentPage object request
		requestBatch.AddToRequest(articleKey);          //[1] - Article Object request
		requestBatch.AddToRequest(new UserKey(null));   //[2] - making a DAAPI request with a null UserKey returns the logged in user		
		requestBatch.BeginRequest(src_serverUrl, src_renderResponse);
		
		if(embargo)
		{
			showNoCommentLegalNotice();
		}
		else
		{				
			showCommentBox(0);				
		}
	//});						
}

function getTime(zone, success) 
{
	var url = 'http://json-time.appspot.com/time.json?tz=' + zone,
	ud = 'json' + (+new Date());
	window[ud]= function(o){
		success && success(new Date(o.datetime), o);
	};

	document.getElementsByTagName('head')[0].appendChild(
		(function()
		{
			var s = document.createElement('script');
			s.type = 'text/javascript';
			s.src = url + '&callback=' + ud;
			return s;
		}
	)());
}

function src_renderResponse(responseBatch) {	
  if(isPluckActive===false)return; 

    if (responseBatch.Responses.length == 0) {
		//alert('Error processing response from Pluck');
    } else {
        var agreedArray	= new Array();
		var commentPage, article, user;

		for (var i = 0; i < responseBatch.Responses.length; i++) {
			if (responseBatch.Responses[i].Article) {			//Article Object
				article = responseBatch.Responses[i].Article;
			} else if (responseBatch.Responses[i].CommentPage) {//CommentPage Object
				commentPage = responseBatch.Responses[i].CommentPage;
			} else if (responseBatch.Responses[i].User) {		//User Object
				user = responseBatch.Responses[i].User;
			}
		}
		src_renderArticleComments(article, commentPage, agreedArray);
        src_renderWithUser(user);
		src_renderDisapprovals(commentPage);
		src_renderCommentRecommendationStatus(agreedArray);
    }
}

function src_renderArticleComments(article, commentPage, agreedArray) {
  if(isPluckActive===false)return; 

    src_displayCommentsTotal(article);
    src_displayCommentsList(commentPage, agreedArray);
    src_embedNavigation(commentPage.NumberOfComments, commentPage.NumberPerPage);

	//Display divs
	if (!isCommentPageEmpty) {
		document.getElementById('sortSelect').style.display = 'block';
		document.getElementById('commentTotalTitle').style.display = 'block';
		document.getElementById('commentNav').style.display = 'block';
	}
	document.getElementById('commentForm').style.display = 'block';
	document.getElementById('commentDisplayText').innerHTML = 'Commentez ' + src_returnCommentTitle();
}

function src_extractUserID() {
  if(isPluckActive===false)return; 

	//var userID = src_extractUserID();
	var sCookie = src_readCookie('at');
	if (sCookie != null) {
		var s = sCookie.split('&');
		for (var i = 0; i < s.length; i++) {
			if (s[i].substring('u=', s[i].length))
				return s[i].substring(2, s[i].length);
		}
	}
	return null;
}

function src_readCookie(name) {
 if(isPluckActive===false)return; 

	var nameEQ = name + '=';
	var ca = document.cookie.split(';');
	for(var i = 0; i < ca.length; i++) {
		var c = ca[i];
		while (c.charAt(0) == ' ') c = c.substring(1, c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length, c.length);
	}
	return null;
}

function src_renderWithUser(user) {
 if(isPluckActive===false)return; 

	var status		 = 'nonConnecte';
    var loginLink	 = document.getElementById('loginLink');
    var commentText	 = document.getElementById('commentText');
    var submitButton = document.getElementById('btnSubmit');
	var formBtn		 = document.getElementById('formBtn');
	var confirmSignedComments = document.getElementById('confirmSignedComments');
	
	var commentText1 = document.getElementById('commentText');
	var loggedIn = (user != null && user.UserKey.Key != 'anonymous');
	
	userObj = user;

    commentText.disabled	   = !loggedIn; //Enable/Disable comment form textarea
    submitButton.disabled	   = !loggedIn; //Enable/Disable comment form submit button
	formBtn.style.display  	   = loggedIn ? 'block' : 'none'; //Enable/Disable comment form submit button
	//confirmSignedComments.style.display = loggedIn ? 'block' : 'none';
	
	commentText1.style.background = loggedIn ? '#ffffff' : '#eeeeee';

	if (loggedIn) {
	
		var html = '<p><strong>Connect&eacute; en tant que <a href="https://mesabonnements.radio-canada.ca/ViewMember.aspx?u=' + userObj.UserKey.Key + '&HasKey=1" target="_blank">' + getUserNameConnected(user) + '</a></strong><br />';
		html += '<a href="https://mesabonnements.radio-canada.ca/logout.aspx?redirecturl=' + window.location + '">Se d&eacute;connecter &raquo;</a></p>';
		loginLink.innerHTML = html;
		status = 'connecte';
	}
	src_pushStats(status); //Compile stats
}

function src_displayCommentsTotal(article) {
 if(isPluckActive===false)return; 

    if (article) {
		var html = '';
		//Head - Barre partager
		try
		{
			oSrc.oPlusX.showCommentBtn({'n':article.Comments.NumberOfComments});
		}
		catch(err)
		{
		}
		
			

		//Title
		if (article.Comments.NumberOfComments > 0) {
			var HTMLBlock = document.getElementById('commentTotalTitle');
			html = '<h3>';
			html += article.Comments.NumberOfComments <= 1 ? 'Les commentaires' : 'Les commentaires';
			html += ' <span>(' + article.Comments.NumberOfComments + ')</span>';		
			if(!embargo)
			{
				html += '<span id=btnCommentaire><a href="#commenter" class="' + src_returnCommentButtonClass() + '"><span>Commentez</span></a></span>';			
			}
			html += '</h3>';
			HTMLBlock.innerHTML = html;
		}
	}
}

function getUserNameConnected(user)
{
	var name = '';
	if(sectionLimitee())
	{		
		name = user.DisplayName;
	}
	else
	{
		if(user.ExtendedProfile["First Name"] && user.ExtendedProfile["Last Name"])
		{
			name = capitaliseFirstLetter(user.ExtendedProfile["First Name"]) + ' ' + capitaliseFirstLetter(user.ExtendedProfile["Last Name"]);
		}
		else
		{
			name = user.DisplayName;
		}
	}	
	return name
}

function getUserInfo(comment)
{
	var info = '';
	var nom = '';
	var location = '';
	if(sectionLimitee() || ancienCommentaire(comment))
	{
		info = getUserName(comment);	
	}
	else
	{	
		nom = getNom(comment);		
		info = nom;
	}
	return info;
}

function ancienCommentaire(comment)
{
	ancien = false;
	var dateLimite = new Date(2011, 6, 13); //13 Juillet 2011

	if(comment.PostedAtTime)
	{
		//alert('date limite: ' + dateLimite);
		//alert('date commentaire: ' + comment.PostedAtTime);
		
		var strDate = comment.PostedAtTime;
		var indexMois = strDate.indexOf('/',0);
		var mois = parseInt(strDate.substring(0,(indexMois)))-1;
		var indexJour = strDate.indexOf('/',indexMois+1);
		var jour = strDate.substring(indexMois+1,indexJour);
		var annee = strDate.substring(indexJour+1,indexJour+5);

		var datePoster = new Date(annee, mois, jour);				
		
		if(datePoster < dateLimite)
		{
			ancien = true;
		}
	}
	return ancien;
}

function sectionLimitee()
{
	var path = location.pathname;
	return path.startsWith('/jeunesse');
}

String.prototype.startsWith = function(str){
    return (this.indexOf(str) === 0);
}

function getNom(comment)
{
	var name = '';

	if(comment.Author.ExtendedProfile["First Name"] && comment.Author.ExtendedProfile["Last Name"])
	{
		name = capitaliseFirstLetter(comment.Author.ExtendedProfile["First Name"]) + ' ' + capitaliseFirstLetter(comment.Author.ExtendedProfile["Last Name"]) + '</a>';
		name += getLocation(comment);	
	}
	else
	{
		name = getUserName(comment);
	}	
	return name;

}


function capitaliseFirstLetter(string)
{
    return string.charAt(0).toUpperCase() + string.slice(1);
}


function getUserName(comment)
{	
	var name = comment.Author.DisplayName + '</a>';
	return name;

}

function getLocation(comment)
{
	var location = '';
	if(comment.Author.ExtendedProfile["City"])
	{
		location = ' de ' + capitaliseFirstLetter(comment.Author.ExtendedProfile["City"]); /* + ', ' + comment.Author.ExtendedProfile["Province"]*/
	}
	return location;
}


function src_displayCommentsList(commentPage, agreedArray) {
 if(isPluckActive===false)return; 

    var html = '';
    var comment;
    var HTMLBlock = document.getElementById('commentList'); //Containing Div

	if (commentPage.Comments.length < 1) {
		isCommentPageEmpty = true;
	} else {
		isCommentPageEmpty = false;
		for (var i = 0; i < commentPage.Comments.length; i++) {
			comment = commentPage.Comments[i];
			//Do not show comment if : reported abuse more than max, author is blocked, comment is blocked
			if (comment.AbuseReportCount < abuseReportMax && comment.Author.IsBlocked == 'False' && comment.ContentBlockingState == 'Unblocked') {
				html += '<div class="comment">';
					html += '<div class="commentAuthor"><p>Envoy&eacute; par <a href="https://mesabonnements.radio-canada.ca/ViewMember.aspx?u=' + comment.Author.UserKey.Key + '&HasKey=1" target="_blank">' +  getUserInfo(comment) + '</p></div>';
				html += '<div class="commentPosted"><p>' + src_formatDateTime(comment.PostedAtTime) + '</p></div>';
				html += '<div class="commentBody"><p>' + comment.CommentBody + '</p></div>';

				//Recommend comment link
				html += '<div class="commentRecommendation">';
				html += '<div class="boxRecom">';
				if (comment.CurrentUserHasRecommended == 'False') {
					html += '<div id="RecommendLabel:' + comment.CommentKey.Key + '"></div>'; //DO NOT REMOVE!!!
					html += '<a class="recommend" id="RecommendThumbImg:' + comment.CommentKey.Key + '" href="#" onclick="javascript:src_submitApproval(\'' + comment.CommentKey.Key + '\'); return false;">';
					html += 'En accord (<span id="RecommendCount:' + comment.CommentKey.Key + '">' + comment.NumberOfRecommendations + '</span>)';
					html += ' &raquo;</a>';
				} else {
					html += '<div class="recommend recommendChk" id="RecommendLabel:' + comment.CommentKey.Key + '">';
					html += 'En accord (<span id="RecommendCount:' + comment.CommentKey.Key + '">' + comment.NumberOfRecommendations + '</span>)';
					html += '</div>';
					agreedArray.push(comment.CommentKey.Key); //Push in CommentKey into Array to parse later
				}

				//Disagree comment link
				html += '<div id="DisapproveLabel:CommentArticle:' + comment.CommentKey.Key + '"></div>'; //DO NOT REMOVE!!!
				html += '<a class="disapprove" id="DisapproveThumbImg:CommentArticle:' + comment.CommentKey.Key + '" href="#" onclick="javascript:src_submitDisapproval(\'' + comment.CommentKey.Key + '\'); return false;">';
				html += 'En d&eacute;saccord (<span id="DisapproveCount:CommentArticle:' + comment.CommentKey.Key + '">0</span>)';
				html += ' &raquo;</a>';
				html += '<div id="DecisionLabel:' + comment.CommentKey.Key + '" class="approvalValid"></div>';
				html += '</div>';

				//Report abuse
				html += '<div class="boxMod">';
				if (comment.CurrentUserHasReportedAbuse == 'True'){
					html += '<span id="AbuseAction:' + comment.CommentKey.Key + '" class="reported">Ce commentaire a &eacute;t&eacute; signal&eacute;</span></div>';
				} else {
					html += '<a id="AbuseAction:' + comment.CommentKey.Key + '" onclick="src_openAbuseForm(this, \'' + comment.CommentKey.Key + '\'); return false;" href="#" class="moderateur">Signalez un abus &raquo;</a>';	
				}
				html += '</div></div>';
				html += '</div>';
			} 
			//Comment has been blocked by moderators
			else if (comment.ContentBlockingState != 'Unblocked') {
				html += '<div class="comment">';
				html += '<div class="commentAuthor"><p>Envoy&eacute; par un utilisateur non divulgu&eacute;</p></div>';
				html += '<div class="commentPosted"><p>' + src_formatDateTime(comment.PostedAtTime) + '</p></div>';
				//html += '<div class="commentBody"><p>Ce commentaire est consid&eacute;r&eacute; comme non pertinent et a &eacute;t&eacute; retir&eacute;.</p></div>';
				html += '<div class="commentBody"><p>Ce commentaire a &eacute;t&eacute; retir&eacute; par le mod&eacute;rateur.</p></div>';
				html += '</div>';
			}
		}
	}
	HTMLBlock.innerHTML = html;
}



////////////////////
////////////////////
//Comment submission
function src_submitComment() {
  if(isPluckActive===false)return; 
	
    var text = document.getElementById('commentText').value;
    if (text == '') {
        alert('Vous devez entrer un commentaire.');
    } else {
		replaceUserName();
		text = encodeToHTMLEntities(text.replace(new RegExp('\\n','g'), '<br />'));
		var requestBatch = new RequestBatch();
        var commentAction = new CommentAction(articleKey, document.location.href, src_splitTitle(document.title), text);
        requestBatch.AddToRequest(commentAction);
        requestBatch.BeginRequest(src_serverUrl, src_commentSubmittedComplete);
    }
}

function src_commentSubmittedComplete(responseBatch) {
 if(isPluckActive===false)return; 

    if (responseBatch.Messages[0].Message == 'ok') {
        src_pushStats('commentaireEnvoye'); //Compile stats
		document.getElementById('commentText').value = '';

        alert("Votre commentaire a été envoyé avec succès\n\n Il sera modéré avant d'être publié.");
		src_toCount('commentText', 'sBann', '2500 caract&egrave;res restants', 2500); //reset word counter
		src_loadArticle(articleID, 1, null, commentsType); //Go back to first post
    } else {
        alert(responseBatch.Messages[0].Message);
    }
}

////////////////////////////////////////////////
////////////////////////////////////////////////
//Decision labeling (for comment agree/disagree)
function src_renderCommentRecommendationStatus(agreedArray) {
  if(isPluckActive===false)return; 

	if (agreedArray.length > 0) {
		for (var i = 0; i < agreedArray.length; i++) {
			src_displayDecisionLabelText(agreedArray[i], true);
		}
	}
}

function src_displayDecisionLabelText(CommentKey, agree) {
 if(isPluckActive===false)return; 

	var decisionLabel = document.getElementById('DecisionLabel:' + CommentKey);
	decisionLabel.innerHTML = agree == true ? 'Vous &ecirc;tes en accord avec ce commentaire' : 'Vous &ecirc;tes en d&eacute;saccord avec ce commentaire';

	//Find agree IDs
	var recommendThumbImg	= document.getElementById('RecommendThumbImg:' + CommentKey);
	var recommendLabel		= document.getElementById('RecommendLabel:' + CommentKey);
	var recommendCountLabel	= document.getElementById('RecommendCount:' + CommentKey);
	var recommendCount		= recommendCountLabel.innerHTML;

	//Once user clicks on agree or disagree link, de-activate both links
	if (recommendThumbImg) {
		//Remove current Html elements
		recommendLabel.parentNode.removeChild(recommendLabel);
		recommendCountLabel.parentNode.removeChild(recommendCountLabel);

		var newDiv = document.createElement('div');
		newDiv.id = 'RecommendLabel:' + CommentKey;
		newDiv.className = 'recommend recommendChk';
		newDiv.innerHTML = 'En accord (<span id="RecommendCount:' + CommentKey + '">' + recommendCount + '</span>)';

		recommendThumbImg.parentNode.insertBefore(newDiv, recommendThumbImg);
		recommendThumbImg.parentNode.removeChild(recommendThumbImg);
	}

	//Find disagree IDs
	var disapproveThumbImg	 = document.getElementById('DisapproveThumbImg:CommentArticle:' + CommentKey);
	var disapproveLabel		 = document.getElementById('DisapproveLabel:CommentArticle:' + CommentKey);
	var disapproveCountLabel = document.getElementById('DisapproveCount:CommentArticle:' + CommentKey);
	var disapproveCount		 = disapproveCountLabel.innerHTML;

	if (disapproveThumbImg) {
		//Remove current Html elements
		disapproveLabel.parentNode.removeChild(disapproveLabel);
		disapproveCountLabel.parentNode.removeChild(disapproveCountLabel);

		var newDiv2 = document.createElement('div');
		newDiv2.id = 'DisapproveLabel:CommentArticle:' + CommentKey;
		newDiv2.className = 'disapprove disapproveChk';
		newDiv2.innerHTML = 'En d&eacute;saccord (<span id="DisapproveCount:CommentArticle:' + CommentKey + '">' + disapproveCount + '</span>)';

		disapproveThumbImg.parentNode.insertBefore(newDiv2, disapproveThumbImg);
		disapproveThumbImg.parentNode.removeChild(disapproveThumbImg);
	}
}

/////////////////////////////
/////////////////////////////
//Comments approval handeling
function src_submitApproval(key) {
 if(isPluckActive===false)return; 

    var requestBatch = new RequestBatch();
    requestBatch.AddToRequest(new RecommendAction(new CommentKey(key)));
    requestBatch.AddToRequest(new CommentPage(articleKey, commentsPerPage, currentPage, commentsSorting));
    requestBatch.BeginRequest(src_serverUrl, src_renderSubmitRecommendation);
}

function src_renderSubmitRecommendation(responseBatch) {
 if(isPluckActive===false)return; 

	for (var i = 0; i < responseBatch.Responses.length; i++) {
		if (responseBatch.Responses[i].CommentPage) {
			for (var j = 0; j < responseBatch.Responses[i].CommentPage.Comments.length; j++) {
				var thisComment = responseBatch.Responses[i].CommentPage.Comments[j];
				if (thisComment) {
					src_pushStats('commentaireAccord'); //Compile stats
					src_renderRecommendationDisplay(thisComment);
				}
			}
		}
	}
}

function src_renderRecommendationDisplay(thisComment) {
 if(isPluckActive===false)return; 

	if (thisComment && thisComment.CommentBody) {
		var thisCommentKeyObj				= thisComment.CommentKey;
		var thisCommentKeyStr				= thisCommentKeyObj.Key;
		var theRecommendationThumbImgDiv	= document.getElementById('RecommendThumbImg:' + thisCommentKeyStr);
		var theRecommendationLabelDiv		= document.getElementById('RecommendLabel:' + thisCommentKeyStr);
		var theRecommendationCountSpan		= document.getElementById('RecommendCount:' + thisCommentKeyStr);

		if (theRecommendationThumbImgDiv) {
			if (thisComment.CurrentUserHasRecommended == "True") {
				var newDiv	= document.createElement('div');
				newDiv.id	= 'RecommendLabel:' + thisCommentKeyStr;
				newDiv.className = 'recommend recommendChk';
				newDiv.innerHTML = 'En accord (<span id="RecommendCount:' + thisCommentKeyStr + '">' + thisComment.NumberOfRecommendations + '</span>)';
				theRecommendationThumbImgDiv.parentNode.removeChild(theRecommendationThumbImgDiv);
				theRecommendationLabelDiv.parentNode.insertBefore(newDiv, theRecommendationLabelDiv);
				theRecommendationLabelDiv.parentNode.removeChild(theRecommendationLabelDiv);
				//Decision label
				src_displayDecisionLabelText(thisCommentKeyStr, true);
			} else {
				theRecommendationThumbImgDiv.className = 'recommend';
			}
		}
		if (theRecommendationCountSpan) {
			theRecommendationCountSpan.innerHTML = thisComment.NumberOfRecommendations;
		}
	}
}

////////////////////////////////
////////////////////////////////
//Comments disapproval handeling
function src_renderDisapprovals(commentPage) {
 if(isPluckActive===false)return; 

	var nbArticles = 0;
	var requestBatch = new RequestBatch();
	for (var j = 0; j < commentPage.Comments.length; j++) {
		requestBatch.AddToRequest(new ArticleKey('CommentArticle:' + commentPage.Comments[j].CommentKey.Key));
        nbArticles++;
	}
	if (nbArticles > 0) requestBatch.BeginRequest(src_serverUrl, src_renderDisapprovalsComplete);
}

function src_renderDisapprovalsComplete(responseBatch) {
 if(isPluckActive===false)return; 

	for (var i = 0; i < responseBatch.Responses.length; i++) {
		if (responseBatch.Responses[i].Article) {
			if (responseBatch.Responses[i].Article.ArticleKey && responseBatch.Responses[i].Article.ArticleKey.Key) {
				src_pushStats('commentaireDesaccord'); //Compile stats
				src_renderDisapprovalDisplay(responseBatch.Responses[i].Article);
			}
		}
	}
}

function src_renderDisapprovalDisplay(thisArticle) {
 if(isPluckActive===false)return; 

	if (thisArticle && thisArticle.ArticleKey && thisArticle.ArticleKey.Key) {
		var thisArticleKeyObj			= thisArticle.ArticleKey;
		var thisArticleKeyStr			= thisArticle.ArticleKey.Key;
		var thisCommentKeyStr			= thisArticleKeyStr.substr(15, thisArticleKeyStr.length);
		var theDisapprovalThumbImgDiv	= document.getElementById('DisapproveThumbImg:' + thisArticleKeyStr);
		var theDisapprovalLabelDiv		= document.getElementById('DisapproveLabel:' + thisArticleKeyStr);
		var theDisapprovalCountSpan		= document.getElementById('DisapproveCount:' + thisArticleKeyStr);

		if (theDisapprovalThumbImgDiv && (thisArticle.Ratings.CurrentUserRating != '0')) {
	        var newDiv = document.createElement('div');
    	    newDiv.id  = 'DisapproveLabel:' + thisArticleKeyStr;
        	newDiv.className = 'disapprove disapproveChk';
	        newDiv.innerHTML = 'En d&eacute;saccord (<span id="DisapproveCount:' + thisArticleKeyStr + '">' + thisArticle.Ratings.NumberOfRatings + '</span>)';
    	    theDisapprovalThumbImgDiv.parentNode.removeChild(theDisapprovalThumbImgDiv);
        	theDisapprovalLabelDiv.parentNode.insertBefore(newDiv, theDisapprovalLabelDiv);
	        theDisapprovalLabelDiv.parentNode.removeChild(theDisapprovalLabelDiv);
			//Decision label
			src_displayDecisionLabelText(thisCommentKeyStr, false);
		}
    	if (theDisapprovalCountSpan) {
			theDisapprovalCountSpan.innerHTML = thisArticle.Ratings.NumberOfRatings;
		}
	}
}

function src_submitDisapproval(disapprovalCommentWithKey) {
 if(isPluckActive===false)return; 

	var requestBatch = new RequestBatch();
    var dummyArticleKey = new ArticleKey('CommentArticle:' + disapprovalCommentWithKey);
    requestBatch.AddToRequest(new UpdateArticleAction(dummyArticleKey, '', '', null, null));
    requestBatch.AddToRequest(new RateAction(dummyArticleKey, 1));
    requestBatch.AddToRequest(dummyArticleKey);
    requestBatch.BeginRequest(src_serverUrl, src_renderSubmitDisapprovalComplete);
}

function src_renderSubmitDisapprovalComplete(responseBatch) {
 if(isPluckActive===false)return; 

	for (var i = 0; i < responseBatch.Responses.length; i++) {
		if (responseBatch.Responses[i].Article) {
			if (responseBatch.Responses[i].Article.ArticleKey && responseBatch.Responses[i].Article.ArticleKey.Key) {
				if (responseBatch.Responses[i].Article.ArticleKey.Key.substr(0, 26) == 'CommentArticle:CommentKey:') {
					src_renderDisapprovalDisplay(responseBatch.Responses[i].Article);
				}
			}
		}
	}
}

/////////////////
/////////////////
//Abuse reporting
function src_submitAbuse() {
 if(isPluckActive===false)return; 

	var key = document.getElementById('abuseKey').value;
	var reason = document.getElementById('abuseType').value;
	var description = document.getElementById('abuseComment').value;

	if (reason == '') {
		alert('Veuillez s&eacute;lectionner un type d\'abus.');
	} else {
		description = (description != '' && description != 'undefined' && description != null) ? encodeToHTMLEntities(description) : description;
		src_reportAbuse(key, reason, description);
	}
}
function src_reportAbuse(key, reason, description) {
 if(isPluckActive===false)return; 

	var requestBatch = new RequestBatch();
    var commentKey	 = new CommentKey(key);
	var abuseReport	 = new ReportAbuseAction(commentKey, reason, description);
	requestBatch.AddToRequest(abuseReport);
	requestBatch.BeginRequest(src_serverUrl, src_renderAbuseReported);
}

function src_renderAbuseReported(responseBatch) {
 if(isPluckActive===false)return; 

	if (responseBatch.Messages[0].Message == 'ok') {
		var key = document.getElementById('abuseKey').value;
		var abuseLink = document.getElementById('AbuseAction:' + key);

		//Remove link and replace it with a SPAN
		var newDiv = document.createElement('span');
		newDiv.className = 'reported';
		newDiv.innerHTML = 'Ce commentaire a &eacute;t&eacute; signal&eacute;';
		abuseLink.parentNode.insertBefore(newDiv, abuseLink);
	    abuseLink.parentNode.removeChild(abuseLink);
		
		src_pushStats('commentaireAbus'); //Compile stats
		src_closeAbuseForm();
	}
}

function src_openAbuseForm(parent, key) {
  if(isPluckActive===false)return; 

	var offsetLeft = 0;
	var offsetTop = 486; //sports et information

	document.getElementById('abuseKey').value = key; //Insert CommentKey into hidden field
	var div = document.getElementById('commentAbuse');
	div.style.display = 'block';

	var placement = src_findPos(parent);
	div.style.right = offsetLeft + 'px';
	div.style.top = placement[1] - offsetTop + 'px';
}

function src_closeAbuseForm() {
 if(isPluckActive===false)return; 

	document.getElementById('abuseKey').value = '';
	document.getElementById('abuseType').value = '';
	document.getElementById('abuseComment').value = '';
	document.getElementById('commentAbuse').style.display = 'none';
}

function src_findPos(obj) {
 if(isPluckActive===false)return; 

	var curleft = curtop = 0;
	if (obj.offsetParent) {
		curleft = obj.offsetLeft;
		curtop = obj.offsetTop;
		while (obj = obj.offsetParent) {
			curleft += obj.offsetLeft;
			curtop += obj.offsetTop;
		}
	}
	return [curleft,curtop];
}

/////////////////////
/////////////////////
//Navigation controls
function src_embedNavigation(nbComments, commentsPerPage) {
 if(isPluckActive===false)return; 

    var html = '';
    var HTMLBlock = document.getElementById('commentNav'); //Div where nav will be created
	var nbPages = Math.ceil(nbComments / commentsPerPage);

	//Display only 5 nav pages at a time
	//Almost Smart Nav...
	var startPage = 1;
	var endPage = nbPages;
	if (nbPages > 5) {
	    if (currentPage >= 4) { //Navigation swap starts at page 4
	        startPage = currentPage - 2; //Always show 2 previous pages
	        endPage = currentPage + 2 > endPage ? endPage : currentPage + 2; //Always show 2 next pages
	        startPage = endPage - startPage < 5 ? startPage - (4 - (endPage - startPage)) : startPage; //Removes overflow of nbPages Vs endPage
	    } else {
	        endPage = endPage > 5 ? 5 : endPage;
	    }
	}

	if (nbComments > 0) {
		//Navigation info
		html += '<table cellspacing="0" id="navInfo"><tr>';
		html += '<td class="resultat">R&eacute;sultats ';
		html += Number(currentPage * commentsPerPage) - commentsPerPage + 1;
		html += ' &agrave; ';
		html += Number(currentPage * commentsPerPage) > nbComments ? nbComments : Number(currentPage * commentsPerPage);
		html += ' de ' + nbComments;
		html += '</td>';

		//MoveFirst + previous
		html += currentPage > 1 ? '<td id="navMoveFirst" class="navOn">' : '<td id="navMoveFirst" class="navOff">';
		html += currentPage > 1 ? '<a href="#commentaires" onclick="src_loadArticle(\'' + articleID + '\', 1, \'' + commentsSorting + '\', \'' + commentsType + '\');">&nbsp;</a>' : '';
		html += currentPage > 1 ? '<a href="#commentaires" onclick="src_loadArticle(\'' + articleID + '\', ' + Number(currentPage - 1) + ', \'' + commentsSorting + '\', \'' + commentsType + '\');">&nbsp;</a>' : '';
		html += '</td>';

		//Navigation
		html += '<td id="navList">';
		for (var i = startPage; i <= endPage; i++) {
			html += i != currentPage ? '<a href="#commentaires" onclick="src_loadArticle(\'' + articleID + '\', ' + i + ', \'' + commentsSorting + '\', \'' + commentsType + '\');">' + i + '</a>' : '<span>' + i + '</span>';
		}
		html += '</td>';

		//MoveLast + next
		html += currentPage >= nbPages ? '<td id="navMoveLast" class="navOff">' : '<td id="navMoveLast" class="navOn">';
		html += currentPage < nbPages ? '<a href="#commentaires" onclick="src_loadArticle(\'' + articleID + '\', ' + Number(currentPage + 1) + ', \'' + commentsSorting + '\', \'' + commentsType + '\');">&nbsp;</a>' : '';
		html += currentPage < nbPages ? '<a href="#commentaires" onclick="src_loadArticle(\'' + articleID + '\', ' + nbPages + ', \'' + commentsSorting + '\', \'' + commentsType + '\');">&nbsp;</a>' : '';
		html += '</td>';
		html += '</tr></table>';

		//Display
            HTMLBlock.innerHTML = html;
	}
}

////////////////
////////////////
//Util functions
 

function src_splitTitle(s) {
 if(isPluckActive===false)return; 

	var title = s.split('|');
	return (title.length > 0) ? title[0] : document.title;
}

function src_returnCommentTitle() {
 if(isPluckActive===false)return; 

	switch (commentsType) {
		case 'article' :
			return ' cet article';
			break;
		case 'chronique' :
			return ' cette chronique';
			break;
	}
}

function src_returnCommentButtonClass() {
 if(isPluckActive===false)return; 

	switch (commentsType) {
		case 'article' :
			return 'btnCommenterArt'; //CSS Class
			break;
		case 'chronique' :
			return 'btnCommenterChro'; //CSS Class
			break;
	}
}

function src_validateCommentType(t) {
 if(isPluckActive===false)return; 

	var a = new String(t);
	a = t != null || t == 'undefined' ? t.toLowerCase() : '';
	switch (a) {
		case 'chroniques' :
			return 'chronique';
			break;
		default : 
			return 'article';
	}
}

function src_validatePageNumber(pageNumber) {
 if(isPluckActive===false)return; 

    return pageNumber <= 0 || isNaN(pageNumber) ? 1 : Number(pageNumber);
}

function src_validateSorting(sort) {
 if(isPluckActive===false)return; 

    return (sort == 'TimeStampAscending' || sort == 'RecommendationsDescending' || sort == 'RecommendationsAscending') ? sort : 'TimeStampDescending';
}

function src_sortComments(ddn, s) {
 if(isPluckActive===false)return; 

    if (s != '' && s != commentsSorting) {
		if (document.getElementById('commentNav')) document.getElementById('commentNav').style.display = 'none';
		if (document.getElementById('commentList')) document.getElementById('commentList').innerHTML = '<div id="loadingAnim"><span>Veuillez patienter</span></div>';
		//ddn.selectedIndex = 0;
		src_pushStats('commentaireFiltre'); //Compile stats
		src_loadArticle(articleID, 1, s, commentsType);
	}
}

function src_formatDateTime(d) {
 if(isPluckActive===false)return; 

    var d_names = new Array('dimanche', 'lundi', 'mardi', 'mercredi', 'jeudi', 'vendredi', 'samedi');
    var m_names = new Array('janvier', 'f&eacute;vrier', 'mars', 'avril', 'mai', 'juin', 'juillet', 'ao&ucirc;t', 'septembre', 'octobre', 'novembre', 'd&eacute;cembre');

        d = new Date(d);
    var curr_day = d.getDay();
    var curr_date = d.getDate();
    var curr_month = d.getMonth();
    var curr_year = d.getFullYear();
	var sup = curr_date == 1 ? 'er' : '';

    var dt = /*d_names[curr_day] + ' ' +*/ curr_date + '<sup>' + sup + '</sup> ' + m_names[curr_month] + ' ' + curr_year;
    var tm = src_padLeft(d.getHours()) + ' h ' + src_padLeft(d.getMinutes());
	var dst = d >= src_setDSTStart(d.getFullYear()) && d < src_setDSTEnd(d.getFullYear()) ? 'HAE' : 'HNE';

	return dt + ' &agrave; ' + tm + ' ' + dst;
}

function src_setDSTStart(y) {	//DST starts on 2nd Sunday of March
 if(isPluckActive===false)return; 

	var sunday = 0;
	var n = new Date(y, 2, 1, 0, 0, 0, 0); //March 1st 20??

	for (var i = 1; i <= 31; i++) {
		n.setDate(i);
		if (n.getDay() == 0) {
			sunday++;
			if (sunday == 2) break;
		}
	}
	return (n);
}

function src_setDSTEnd(y) {	//DST ends on 1st Sunday of November
 if(isPluckActive===false)return; 

	var sunday = 0;
	var n = new Date(y, 10, 1, 0, 0, 0, 0); //November 1st 20??

	for (var i = 1; i <= 30; i++) {
		n.setDate(i);
		if (n.getDay() == 0)
			break;
	}
	return (n);
}

function src_padLeft(val) {
 if(isPluckActive===false)return; 

	return val < 10 ? '0' + val : val;
}

function encodeToHTMLEntities(s) {
 if(isPluckActive===false)return; 

	var result = '';
	for (var i = 0; i < s.length; i++) {
		var c = s.charAt(i);
		result += { '&':'&amp;','Ÿ':'&Yuml;','¡':'&iexcl;','¢':'&cent;','£':'&pound;','¤':'&curren;','¥':'&yen','¦':'&brvbar;','§':'&sect;',
					'¨':'&uml;','©':'&copy;','ª':'&ordf;','«':'&laquo;','¬':'&not;','­':'&shy;','®':'&reg;','¯':'&masr;','°':'&deg;','±':'&plusmn;',
					'²':'&sup2;','³':'&sup3;','´':'&acute;','µ':'&micro;','¶':'&para;','·':'&middot;','¸':'&cedil;','¹':'&sup1;','º':'&ordm;','»':'&raquo;',
					'¼':'&frac14;','½':'&frac12;','¾':'&frac34;','¿':'&iquest;','À':'&Agrave;','Á':'&Aacute;','Â':'&Acirc;','Ã':'&Atilde;','Ä':'&Auml;',
					'Å':'&Aring;','Æ':'&Aelig','Ç':'&Ccedil;','È':'&Egrave;','É':'&Eacute;','Ê':'&Ecirc;','Ë':'&Euml;','Ì':'&Igrave;','Í':'&Iacute;','Î':'&Icirc;',
					'Ï':'&Iuml;','Ð':'&eth;','Ñ':'&Ntilde;','Ò':'&Ograve;','Ó':'&Oacute;','Ô':'&Ocirc;','Õ':'&Otilde;','Ö':'&Ouml;','×':'&times;','Ø':'&Oslash;',
					'Ù':'&Ugrave;','Ú':'&Uacute;','Û':'&Ucirc;','Ü':'&Uuml;','Ý':'&Yacute;','Þ':'&thorn;','ß':'&szlig;','à':'&agrave;','á':'&aacute;','â':'&acirc;',
					'ã':'&atilde;','ä':'&auml;','å':'&aring;','æ':'&aelig;','ç':'&ccedil;','è':'&egrave;','é':'&eacute;','ê':'&ecirc;','ë':'&euml;','ì':'&igrave;',
					'í':'&iacute;','î':'&icirc;','ï':'&iuml;','ð':'&eth;','ñ':'&ntilde;','ò':'&ograve;','ó':'&oacute;','ô':'&ocirc;','õ':'&otilde;','ö':'&ouml;',
					'÷':'&divide;','ø':'&oslash;','ù':'&ugrave;','ú':'&uacute;','û':'&ucirc;','ü':'&uuml;','ý':'&yacute;','þ':'&thorn;','ÿ':'&yuml;'}[c] || c;
	}
	return result;
}

function src_getObject(obj) {
 if(isPluckActive===false)return; 

    var theObj;
    if (document.all) {
        if (typeof obj == "string") {
            return document.all(obj);
        } else {
            return obj.style;
        }
    }
    if (document.getElementById) {
        if (typeof obj == "string") {
            return document.getElementById(obj);
        } else {
            return obj.style;
        }
    }
    return null;
}

function src_toCount(entrance, exit, text, characters) {
 if(isPluckActive===false)return; 

    var entranceObj = src_getObject(entrance);
    var exitObj = src_getObject(exit);
    var length = characters - entranceObj.value.length;
    if (length <= 0) {
        length = 0;
        text = text;
        entranceObj.value = entranceObj.value.substr(0,characters);
    }
    exitObj.innerHTML = text.replace("{CHAR}", length);
}

function src_showHideCounter(show) {
 if(isPluckActive===false)return; 

	var counter = document.getElementById('sBann');
	if (counter) counter.style.visibility = show == true ? 'visible' : 'hidden';
}

function src_pushStats(contenu) {
 if(isPluckActive===false)return; 

	statsToClics(
		'WT.clic', 'clics_commentaire',
		'clic_action', articleID,
		'clic_contenu', contenu
	);
}

/////////////////////////////////////
/////////////////////////////////////
//Draw Comment content + Form content
function src_drawCommentContent(id) {
  if(isPluckActive===false)return; 


		var HTMLBlock = document.getElementById('pluckComments-' + id);
	if (HTMLBlock) {
		var output = '';
		output += '<a name="commentaires"></a>';
		output += '<div id="commentStart"></div>';
		//output += '<div id=avertissementEmbargo class="txtLegalElection">La loi &eacute;lectorale nous interdit de diffuser des r&eacute;sultats &eacute;lectoraux sur Internet avant la fermeture de tous les bureaux de scrutin au pays. Pour cette raison, vous ne pourrez pas publier de commentaires avant 22 h (HAE).</div>';
		output += '<div id=avertissementEmbargo></div>';
		//output += '<div id=avertissementEmbargo class="txtLegalElection">Radio-Canada est pr&eacute;sentement en train de mettre &agrave; jour le syst&egrave;me de gestion des commentaires. Nous pr&eacute;voyons r&eacute;tablir cette fonctionnalit&eacute; sous peu.</div>';	
		output += '<div id="commentTotalTitle"></div>';

		output += '<select id="sortSelect" class="sortSelect" size="1" onchange="src_sortComments(this, this.options[this.selectedIndex].value);">';
		output += '<option value="">Trier</option>';
		output += '<option value="TimeStampDescending">Plus r&eacute;cents</option>';
		output += '<option value="TimeStampAscending">Plus anciens</option>';
		output += '<option value="RecommendationsDescending">Plus appr&eacute;ci&eacute;s</option>';
		output += '</select>';

		output += '<div id="commentAbuse">';
		output += '<input type="hidden" id="abuseKey" name="abuseKey" value="" />';
		output += '<a href="#" onclick="src_closeAbuseForm(); return false;" class="fermer">X</a>';
		output += '<h3>Signalez un abus</h3>';
		output += '<p>Signalez dans un commentaire : (Requis)</p>';
		output += '<select id="abuseType" name="abuseType" size="1">';
		output += '<option value=""></option>';
		output += '<option value="Propos vulgaires">Propos vulgaires</option>';
		output += '<option value="Propos haineux">Propos haineux</option>';
		output += '<option value="Propos racistes">Propos racistes</option>';
		output += '<option value="Propos sexistes">Propos sexistes</option>';
		output += '<option value="Propos homophobes">Propos homophobes</option>';
		output += '<option value="Attaque personnelle">Attaque personnelle</option>';
		output += '<option value="Publicit&eacute; ind&eacute;sirable">Publicit&eacute; ind&eacute;sirable</option>';
		output += '<option value="Violation de droits d\'auteur / plagiat">Violation de droits d\'auteur / plagiat</option>';
		output += '<option value="Autre">Autre</option>';
		output += '</select>';
		output += '<p>Commentaire : (Facultatif)</p>';
		output += '<textarea id="abuseComment"></textarea>';
		output += '<input type="button" id="abuseSubmit" value="Soumettre" onclick="src_submitAbuse();" />';
		output += '</div>';

		output += '<div id="commentList"><div id="loadingAnim"><span>Veuillez patienter</span></div></div>';
		output += '<div id="commentNav"></div>';
		HTMLBlock.innerHTML = output;
	}

}

function src_drawFormContent(id) {
 if(isPluckActive===false)return; 
}

function removeHTMLTags(inputName)
{
	if(document.getElementById && document.getElementById(inputName))
	{
 		var strInputCode = document.getElementById(inputName).value;
 		/*
  			This line is optional, it replaces escaped brackets with real ones,
  			i.e. < is replaced with < and > is replaced with >
 		*/
 	 	strInputCode = strInputCode.replace(/&(lt|gt);/g, function (strMatch, p1){
 		 	return (p1 == "lt")? "<" : ">";
 		});
 		var strTagStrippedText = strInputCode.replace(/<\/?[^>]+(>|$)/g, "");


 		//alert("Output text:\n" + strTagStrippedText);
		//alert("Input code:\n" + strInputCode + "\n\nOutput text:\n" + strTagStrippedText);
		document.getElementById(inputName).value = strTagStrippedText;
 	}
}

function showNoCommentLegalNotice(id)
{
	document.getElementById('avertissementEmbargo').style.display = "block";
}

function submitComment()
{
	removeHTMLTags('commentText');  
	document.getElementById('btnSubmit').href = "#";
	src_submitComment(); 
	return false;
}

function alertSignedComments()
{
	alert('Vous devez accepter que votre pr\u00E9nom et nom de famille soient publi\u00E9s');		
}

function showCommentBox(id)
{

	var HTMLBlock = document.getElementById('pluckForm-' + id);
	if (HTMLBlock) {		
		var output = '';
		output += '<a name="commenter"></a>';
		output += '<div id="commentForm" style="display:block">';
		output += '<h3 id="commentDisplayText"></h3>';
		output += '<p class="txtLegal">Note: En nous soumettant vos commentaires, vous reconnaissez que Radio-Canada a le droit de les ';
		output += 'reproduire et de les diffuser, en tout ou en partie et de quelque mani&egrave;re que ce soit. Veuillez ';
		output += 'noter que Radio-Canada ne cautionne pas les opinions exprim&eacute;es. Vos commentaires seront mod&eacute;r&eacute;s, ';
		output += 'et publi&eacute;s s\'ils respectent la <a href="#" onclick="oSrc.popup(\'http://www.radio-canada.ca/apropos/politiquesDiffusions/netiquette/popUp.shtml\', \'popup\', \'width=600,height=500,scrollbars=yes\'); return false;">n&eacute;tiquette</a>.</p>';

		output += '<div id="loginLink">';
		output += '<p class="note">Vous devez &ecirc;tre connect&eacute; pour soumettre un commentaire</p>';
		output += '<p><a href="#" onclick=\"connect()\">Se connecter &raquo;</a> | ';
		output += '<a href="https://mesabonnements.radio-canada.ca/Register.aspx?redirecturl=' + window.location + '#commentaires" target="_blank">Cr&eacute;er un compte &raquo;</a></p>';
		output += '</div>';

		output += '<p id="sBann">2500 caract&egrave;res restants</p>';
		output += '<textarea id="commentText" disabled="disabled" onclick="src_showHideCounter(true);" onpaste="src_toCount(\'commentText\', \'sBann\', \'{CHAR} caract&egrave;res restants\', 2500);" onblur="src_toCount(\'commentText\', \'sBann\', \'{CHAR} caract&egrave;res restants\', 2500); src_showHideCounter(false);" onkeyup="src_toCount(\'commentText\', \'sBann\', \'{CHAR} caract&egrave;res restants\', 2500);"></textarea>';

		var btnSubmitClass = "btnEnvoyerDisabled";
		
			
		
		output += '<div id="formBtn"><p>';
		output += '<p class="txtLegal"><a href="#" onclick="oSrc.popup(\'http://www.radio-canada.ca/apropos/politiquesDiffusions/netiquette/popUp.shtml\', \'popup\', \'width=600,height=500,scrollbars=yes\'); return false;">N&eacute;tiquette &raquo;</a>';

		output += '<a id="btnSubmit" name="btnSumbit" class="btnEnvoyer" href="#btnSumbit" onclick="return submitComment()"><span>Envoyer</span></a>';

		output += '</p></p></div>';
		HTMLBlock.innerHTML = output;
	}
}

function replaceUserName()
{
	try
	{	
		var cookieName = 'at';	
		var cookieValue = readCookie(cookieName);
				
		var currentNickname = getCurrentNickname(cookieValue);			
		var newNickname = getNewNickname(cookieValue); 		
		replaceNickname(cookieValue, cookieName, currentNickname, newNickname);	
		
		cookieValue = readCookie(cookieName);		
	}
	catch(err)
	{
	
	}
}

function replaceNickname(cookieValue, cookieName, currentNickname, newNickname)
{
	var newCookieValue = cookieValue.replace('&a=' + currentNickname, '&a=' + newNickname);	
	Set_Cookie(cookieName, newCookieValue );
	cookieValue = readCookie(cookieName);	
}

function getNewNickname(cookieValue)
{
	var ARRcookies = cookieValue.split("&pd=");
	var pd = ARRcookies[1];
	var pd2 = UTF8.decode(pd);
	
	var pd3 = decode_base64(pd2);
	
	var tabExtendedProfil = pd3.split("&");
	var firstNameComplete = tabExtendedProfil[1].split("=");
	var lastNameComplete = tabExtendedProfil[2].split("=");
	var cityComplete = tabExtendedProfil[4].split("=");
	
	var firstName = firstNameComplete[1];
	var lastName = lastNameComplete[1];
	var city = cityComplete[1];
	var nickname = firstName + ' ' + lastName + ' de ' + city;
	return nickname;
}

function getCurrentNickname(cookieValue)
{
	var afterNickname = cookieValue.split("&a=");
	var nicknameComplete = afterNickname[1].split("&");
	return nicknameComplete[0];
}
UTF8 = {
	encode: function(s){
		for(var c, i = -1, l = (s = s.split("")).length, o = String.fromCharCode; ++i < l;
			s[i] = (c = s[i].charCodeAt(0)) >= 127 ? o(0xc0 | (c >>> 6)) + o(0x80 | (c & 0x3f)) : s[i]
		);
		return s.join("");
	},
	decode: function(s){
		for(var a, b, i = -1, l = (s = s.split("")).length, o = String.fromCharCode, c = "charCodeAt"; ++i < l;
			((a = s[i][c](0)) & 0x80) &&
			(s[i] = (a & 0xfc) == 0xc0 && ((b = s[i + 1][c](0)) & 0xc0) == 0x80 ?
			o(((a & 0x03) << 6) + (b & 0x3f)) : o(128), s[++i] = "")
		);
		return s.join("");
	}
};

function decode_base64(s) {
    var e={},i,k,v=[],r='',w=String.fromCharCode;
    var n=[[65,91],[97,123],[48,58],[47,48],[43,44]];

    for(z in n){for(i=n[z][0];i<n[z][1];i++){v.push(w(i));}}
    for(i=0;i<64;i++){e[v[i]]=i;}

    for(i=0;i<s.length;i+=72){
    var b=0,c,x,l=0,o=s.substring(i,i+72);
         for(x=0;x<o.length;x++){
                c=e[o.charAt(x)];b=(b<<6)+c;l+=6;
                while(l>=8){r+=w((b>>>(l-=8))%256);}
         }
    }
    return r;
}
	
function connect()
{
	window.location = 'https://inscription.radio-canada.ca/SSOAuthenticationDomain.ashx?mode=login&redirecturl=' + window.location + '#commentaires';
}

