YAHOO.namespace("Youniverse");

YAHOO.Youniverse.group_comments = function ()
{
	var displayingSend;
	var userImage;
	var contObject;
	var currentPage;
	var numPages;
	var groupId;
	var ownerId;
	var userInGroup = false;
	var isOwner = false;
	
	var maxMessages;
	
	this.setIsOwner = function (bNum)
	{
		if (bNum == 1)
		{
			isOwner = true;
		}
	}
	
	this.setUserInGroup = function (uig)
	{
		userInGroup = uig;
	}
	
	this.setGroupId = function(gId)
	{
		groupId = gId;
	}
	
	this.setMaxMessages = function(mxMsgs)
	{
		maxMessages = mxMsgs;
	}
	
	this.setNumPages = function (count)
	{
		numPages = count;
	}
	
	this.setSentPages = function (sent)
	{
		sentPages = sent;
	}
	
	/*
	* Initialise class when window dom loaded
	*/
	this.initClass = function ()
	{
		
	}
	
	/*
	 * Load the desired comments page
	 * @ box is the box name
	 * @ pageNum
	 */
	this.selectPage = function (pageNum)
	{
		if (!pageNum)
		{
			pageNum = 1
		}
		
		currentPage = pageNum;
		
		var callback =
		{
			success: this.displayComments,
			failure: this.ajaxFailure,
			cache: false
		};
		
		var request = YAHOO.util.Connect.asyncRequest('GET', "/group_comments/fetch.json?groupId=" + groupId + "&page=" + pageNum, callback);
		
		group_comments.clearForm();
	}
	
	/*
	* Display the messages page
	* @ o is the response json
	*/
	this.displayComments = function (o)
	{
		var contObject = YAHOO.lang.JSON.parse(o.responseText);
		group_comments.contObject = contObject;
		
		var messagesBlock = document.getElementById('shoutBoxBody');
		
		if (contObject.totalMessages)
		{
			group_comments.pagination(contObject.numPages, 'pageBoxTop');
			group_comments.pagination(contObject.numPages, 'pageBoxBottom');
		}
		
		if (messagesBlock == null)
		{
			return false;
		}
		
		// This is an IE-safe equivalent of doing innerHTML = '';
		while (messagesBlock.hasChildNodes()) messagesBlock.removeChild(messagesBlock.firstChild);
		
		group_comments.displayingReply = false;
		
		// loop through the message objects and create a div for each one
		var count = 0;
		//console.log(contObject);
		for (messageId in contObject.comments)
		{
			if (contObject.comments[messageId].groupCommentId)
			{
				if (messageId == 'totalMessages' || messageId == 'numPages') 
				{
					break;
				}
				
				count++;
				
				var message = contObject.comments[messageId];
				var messageContainer = document.createElement('div');
				messageContainer.className = 'shoutBoxPost';
				if (ownerId == message.senderId)
				{
					messageContainer.className += ' sbYourPost';	
				}
				
				var profilePhotoCell       = document.createElement('div');
				profilePhotoCell.className = 'sbImage';

				if (message.profileLink && message.profilePhoto)
				{
					profilePhotoCell.innerHTML = '<a href="' + message.profileLink + '"><img src="' + message.profilePhoto + '" alt="" /></a>';
				}
				else if (message.profilePhoto)
				{
					profilePhotoCell.innerHTML = '<img src="' + message.profilePhoto + '" alt="" />';
				}
				else
				{
					profilePhotoCell.innerHTML = '<img src="/img/icons/userDefault.png" alt="" />';
				}
				
				var messageDiv = document.createElement('div');
				messageDiv.className = 'sbPost';
				
				var messageInnerDiv = document.createElement('div');
				messageInnerDiv.className = 'inner';
				
				if (isOwner)
				{
					//var reportUserDiv = document.createElement('div');
					//reportUserDiv.className = 'sbReport';
					//reportUserDiv.innerHTML = '<a href="#" onclick="group_comments.reportUser(\'' + message.groupCommentId +'\'); return false" title="Report this user!"><img src="/img/shoutbox/sb_icon_report.gif" alt="Report this user for abuse!" /></a>';
				}
				
				if (isOwner)
				{
					var messageDeleteDiv = document.createElement('div');
					messageDeleteDiv.className = 'sbDelete';
					messageDeleteDiv.innerHTML = '<a href="#" onclick="group_comments.deleteMessage(\'' + message.groupCommentId +'\'); return false" title="Delete this comment"><img src="/img/shoutbox/sb_icon_delete.gif" alt="Delete" /></a>';
				}
				
				var messageDivDL = document.createElement('dl');
				
				var messageDivDT = document.createElement('dt');
				messageDivDT.innerHTML = '<a href="/me/' + message.friendlyUrl + '" title="View this users profile">' + message.senderName + '</a> <span>' + message.timeAgo + '</span>';
				
				var messageDivDD = document.createElement('dd');
				messageDivDD.innerHTML = message.message;
				
				var messageGoToProfileDiv = document.createElement('div');
				messageGoToProfileDiv.className = 'sbGoToProfile';
				messageGoToProfileDiv.innerHTML = '<a href="/me/' + message.friendlyUrl + '#replyForm" title="Post a comment on this user\'s profile"><img src="/img/shoutbox/sb_icon_reply.gif" alt="Post a comment on this user\'s profile" /></a>';
				
				var messageClear = document.createElement('div');
				messageClear.className = 'clear';
		
				messageDivDL.appendChild(messageDivDT);
				messageDivDL.appendChild(messageDivDD);
				
				if (isOwner)
				{
					messageInnerDiv.appendChild(messageDeleteDiv);
					//messageInnerDiv.appendChild(reportUserDiv);
				}
				
				messageInnerDiv.appendChild(messageDivDL);
				messageInnerDiv.appendChild(messageGoToProfileDiv);
				
				messageDiv.appendChild(messageInnerDiv);
				
				messageContainer.appendChild(messageDiv);
				messageContainer.appendChild(profilePhotoCell);
				messageContainer.appendChild(messageClear);
				
				messagesBlock.appendChild(messageContainer);
			}
		}
		
		group_comments.showMessageDetails(contObject.totalMessages);
		
		return true;
	}
	
	/**
	 * shows the number of messages and pages
	 */
	this.showMessageDetails = function (total)
	{
		var container = document.getElementById('shoutPageTotals');
		
		if (!container)
		{
			return;
		}
		
		while (container.hasChildNodes()) container.removeChild(container.firstChild);
		
		// show message total
		var totalMessages = total + " comment";
		if (total > 1 || total == 0) totalMessages += "s";
		document.getElementById("sbMessageTotal").innerHTML = totalMessages;
		
		// calculate pages
		var totalPages = (Math.ceil(total / 10) == 0) ? '1': Math.ceil(total / 10);
		
		// write it
		var pageTotals = document.createElement('p');
		var text = "Page " + currentPage + " of " + totalPages;
		pageTotals.innerHTML = text;
		
		container.appendChild(pageTotals);
	}
	
	/**
	 * clears the textarea ready for next message
	 */
	this.clearForm = function ()
	{
		var textarea = document.getElementById("replyMessage");
		
		if (!textarea)
		{
			return;
		}
		
		textarea.value = "Type a comment...";
	}
	
	/**
	 * pagination
	 */
	this.pagination = function (numPages,container)
	{
		var pageBlockSize = 5; // how many page numbers to display
		var minPage = 1, maxPage = numPages, pageBefore, pageAfter, showPrev = false, showNext = false, nextPage, prevPage;
		var paginationBlock = document.getElementById(container); // pagination div id
		
		while (paginationBlock.hasChildNodes()) paginationBlock.removeChild(paginationBlock.firstChild);
		
		var listBlock = document.createElement('ul');
		
		// display previous link?
		if(currentPage>1){
			showPrev = true;
		}
		
		if(numPages>=pageBlockSize)
		{
			maxPage = pageBlockSize;
			pageBefore 	= Math.floor((pageBlockSize-1)/2);
			pageAfter	= (pageBlockSize-1)-pageBefore;
			if(currentPage==1){
				maxPage = pageBlockSize;
			}else{
				if(currentPage+(pageBlockSize-1)<numPages)
				{
					minPage = ((currentPage-pageBefore)<=0)? 1:currentPage-pageBefore;
					maxPage = minPage+(pageBlockSize-1);
				}
				else if(currentPage+(pageBlockSize-1)==numPages)
				{
					minPage = ((currentPage-pageBefore)==0)? 1:currentPage-pageBefore;
					maxPage = currentPage+pageAfter;
					if((minPage+maxPage)<=numPages){
						if(minPage+pageBlockSize<=numPages){
							maxPage = minPage + (pageBlockSize-1);
						}
					}
				}
				else
				{
					minPage = ((currentPage-pageBefore)==0)? 1:currentPage-pageBefore;
					maxPage = ((currentPage+pageAfter)>numPages)? numPages:currentPage+pageAfter;
					if(maxPage-(minPage-1)<pageBlockSize){
						minPage = numPages - (pageBlockSize-1);
					}
					if((minPage+maxPage)==numPages){
						maxPage = minPage + (pageBlockSize-1);
					}else if((minPage+maxPage)<numPages){
						maxPage = numPages;	
					}
				}
			}
		}

		// display previous link?
		if((currentPage+1)<numPages){
			showNext = true;
		}
		
		// create previous link
		if (showPrev)
		{
			liPrev   = document.createElement('li');
			prevPage = parseInt(currentPage) - 1;
			liPrev.innerHTML = '<a href="#" onclick="group_comments.selectPage(' + prevPage + ');">Prev</a>';
			listBlock.appendChild(liPrev);
		}
		
		// create page link(s)
		for (page = minPage; page <= maxPage; page++)
		{
			li = document.createElement('li');
			li.className = (currentPage == page) ? 'selected' : '';
			li.innerHTML = '<a href="#" onclick="group_comments.selectPage(' + page + ');">' + page + '</a>';
			listBlock.appendChild(li);
		}
		
		// create next link
		if (showNext)
		{
			liNext   = document.createElement('li');
			nextPage = parseInt(currentPage) + 1;
			liNext.innerHTML = '<a href="#" onclick="group_comments.selectPage(' + nextPage + ');">Next</a>';
			listBlock.appendChild(liNext);
		}
		
		// add links to page
		paginationBlock.appendChild(listBlock);
	}
	
	/**
	 * Sends a reply
	 */
	this.send = function ()
	{
		var formObject = document.getElementById('replyForm'); 
		YAHOO.util.Connect.setForm(formObject);
		
		var callback = 
		{
			success: this.onSendMessage,
			failure: this.ajaxFailure,
			cache: false
		};
		
		var cObj = YAHOO.util.Connect.asyncRequest('POST', formObject.action, callback);
	}
	
	/*
	 * onSend Message
	 * @param object o is the response object
	 */
	this.onSendMessage = function (o)
	{
		eval(o.responseText);
		
		if (sendSuccess == 1)
		{
			group_comments.selectPage();
			group_comments.clearForm();
			pageTracker._trackPageview('/groups/comments/post');
		}
	}
	
	/*
	* Ajax Failure	
	*/
	this.ajaxFailure = function ()
	{
		alert(msg.translate('err02'));
	}
	
	/**
	 * Deletes an individual message
	 *
	 * @param string messageId
	 */
	this.deleteMessage = function (groupCommentId)
	{
		if (confirm('Are you sure you wish to delete this comment?'))
		{
			var postData = '&data[GroupComment][groupId]=' + groupId + '&data[GroupComment][comment][' + groupCommentId + ']=1';
			dataFlag = true;
			
			var callback =
			{
				success: this.handleMARSuccess,
				failure: this.handleFailure,
				cache: false
			};
			
			var sUrl     = '/group_comments/delete/';
			var request  = YAHOO.util.Connect.asyncRequest('POST', sUrl, callback, postData);
		}
	}

	/**
	 * Report a user for misuse of shoutbox messaging
	 *
	 * @param string messageId
	 */
	this.reportUser = function (groupCommentId)
	{
		if (confirm('Are you sure you report this user?'))
		{
			var postData = '&data[GroupComment][groupId]=' + groupId + '&data[GroupComment][comment][' + groupCommentId + ']=1';
			dataFlag = true;
			
			var callback =
			{
				success: this.handleMARSuccess,
				failure: this.handleFailure,
				cache: false
			};
			
			var sUrl     = '/group_comments/report/';
			var request  = YAHOO.util.Connect.asyncRequest('POST', sUrl, callback, postData);
		}
	}
	
	this.handleMARSuccess = function (o)
	{
	    eval(o.responseText);
	}

	this.handleFailure = function (o)
	{

	}
	
	/*
	* Displays error
	* @ errorText
	*/
	this.displayError = function (errorText)
	{
		contentMessaging = document.getElementById('shoutBox');
		
		var dialogError = document.createElement('div');
		dialogError.setAttribute('id', 'dialogError');
		dialogError.innerHTML = errorText;
		
		contentMessaging.appendChild(dialogError);
		
		eff =  new YAHOO.widget.Effects.Appear(dialogError);
		eff.onEffectComplete.subscribe(function()
		{
			setTimeout('dialogBox.clearError()', 2500);
		});
		
	}
	
	/*
	* Clears error
	*/
	this.clearError = function ()
	{
		dialogError = document.getElementById('dialogError');
		
		eff =  new YAHOO.widget.Effects.Fade(dialogError);
		eff.onEffectComplete.subscribe(function()
		{
			dialogError.parentNode.removeChild(dialogError);
		});	
	}
}