/// <summary>
/// The client callback functions for Communities
/// </summary>
/// <created version="1.4.1.0" by="Etienne Cronje" date="2 August 2007"></created>


//My Favourite Control callback manager
var CreateFavouriteManager = function(params) {
	var favManager = new Object();
	
	//Attach events and properties
	if (params.onPostAdded) favManager.OnFavouritePostAdded = function(result) { params.onPostAdded(result) };
	if (params.onPostRemoved) favManager.OnFavouritePostRemoved = function(result) { params.onPostRemoved(result) };
	if (params.onSectionAdded) favManager.OnFavouriteSectionAdded = function(result) { params.onSectionAdded(result) };
	if (params.onSectionRemoved) favManager.OnFavouriteSectionRemoved = function(result) { params.onSectionRemoved(result) };
	if (params.onUserAdded) favManager.OnFavouriteUserAdded = function(result) { params.onUserAdded(result) };
	if (params.onUserRemoved) favManager.OnFavouriteUserRemoved = function(result) { params.onUserRemoved(result) };
	if (params.showDel) favManager.ShowDel = true;
	if (params.postNoneHtml) favManager.PostNoneHtml = params.postNoneHtml;
	if (params.sectionNoneHtml) favManager.SectionNoneHtml = params.sectionNoneHtml;
	if (params.userNoneHtml) favManager.UserNoneHtml = params.userNoneHtml;
	if (params.totalItems) favManager.TotalItems = params.totalItems;
	if (params.editLinkArea) favManager.EditLinkArea = params.editLinkArea;
	
	//Favourite Post
	favManager.AddFavouritePost = function(result) {
		
		if (result.value)
        {
            this.AddFavourite(result, 'Remove discussion from favourites');
            
            if (this.OnFavouritePostAdded)
				this.OnFavouritePostAdded(result);
        }
    }
	favManager.RemoveFavouritePost = function(result) {
		
		if (result.value)
        {
            this.RemoveFavourite(result, this.PostNoneHtml);
            
            if (this.OnFavouritePostRemoved)
				this.OnFavouritePostRemoved(result);
        }
	}
	
	//Favourite Section
	favManager.AddFavouriteSection = function(result) {
		
		if (result.value)
        {
            this.AddFavourite(result, 'Remove discussion board from favourites');
            
            if (this.OnFavouriteSectionAdded)
				this.OnFavouriteSectionAdded(result);
        }
    }
	favManager.RemoveFavouriteSection = function(result) {
		
		if (result.value)
        {
            this.RemoveFavourite(result, this.SectionNoneHtml);
            
            if (this.OnFavouriteSectionRemoved)
				this.OnFavouriteSectionRemoved(result);
        }
	}
	
	//Favourite User
	favManager.AddFavouriteUser = function(result) {
		
		if (result.value)
        {
            this.AddFavourite(result, 'Remove contributor from favourites');
            
            if (this.OnFavouriteUserAdded)
				this.OnFavouriteUserAdded(result);
        }
    }
	favManager.RemoveFavouriteUser = function(result) {
		
		if (result.value)
        {
            this.RemoveFavourite(result, this.UserNoneHtml);
            
            if (this.OnFavouriteUserRemoved)
				this.OnFavouriteUserRemoved(result);
        }
	}
	
	//Add new item
	favManager.AddFavourite = function(result, title) {
			
			var item = result.value;
            var favList = document.getElementById('Favourite'+item.Type+'List');
            var noneItem = document.getElementById(item.Type+'ItemNone');
            var newItem = document.createElement('<li>');
            var itemHtml = '';
            var nameLength = this.ShowDel ? 13 : 17;
            
            if (noneItem) 
            {
				//Remove none item
				noneItem.removeNode(true);
            }
            
            //Build new item body
            if (item.IconBody)
            {
				itemHtml += '<span class="floatleft">\n';
				itemHtml += '\t'+item.IconBody+'\n';
				itemHtml += '</span>\n';
            }
            
			itemHtml += '<span class="favourite_'+item.Type+'_link">\n';
			itemHtml += '\t<a href="'+item.Url+'" title="'+item.Name+'">'+validateStringLength(item.Name,nameLength)+'</a>\n';
			itemHtml += '</span>\n';
	        
	        if (this.ShowDel)
	        {
				itemHtml += '<div class="favourite_'+item.Type+'_del">\n';
				itemHtml += '\t<a title="'+title+'" onclick="eval(\'FavouriteAJAX.RemoveFavourite'+item.Type+'(\\\''+item.ItemId+'\\\', new Function(\\\'result\\\', \\\'if (result.error) { alert(result.error); } else { FavouriteManager.RemoveFavourite'+item.Type+'(result); }\\\'))\');">del</a>';
				itemHtml += '</div>';
	        }
	        
	        itemHtml += '<div class="transcleaner">&#160;</div>\n';
	        
			newItem.id = item.Type+'Item_'+item.ItemId;
			newItem.innerHTML = itemHtml;
			
			if (item.Type == 'Post')
				newItem.className = 'plain';
			else
				newItem.className = 'arrow';
			
            favList.appendChild(newItem);
            
            if (this.TotalItems == 0)
            {
				var editLinkArea = document.getElementById(this.EditLinkArea);
				editLinkArea.style.display = 'block';
				editLinkArea.style.visibility = 'visible';
			}
            
            this.TotalItems++;
	}
	//Remove existing item
	favManager.RemoveFavourite = function(result, noneHtml) {
	
		var item = result.value;
        var delItem = document.getElementById(item.Type+'Item_'+item.ItemId);
        var list = document.getElementById('Favourite'+item.Type+'List');
        
        delItem.removeNode(true);
        
        if (list.childNodes.length == 0)
        {
			//Display "No Item" message
			var newItem = document.createElement('<li>');
			newItem.id = item.Type+'ItemNone';
			newItem.className = 'plain';
			newItem.innerHTML = noneHtml;
			
			list.appendChild(newItem);
        }
        
		this.TotalItems--;
		
		if (this.TotalItems == 0)
		{
			var editLinkArea = document.getElementById(this.EditLinkArea);
			editLinkArea.style.display = 'none';
			editLinkArea.style.visibility = 'hidden';
		}
	}
	
	return favManager;
}
var FavouriteManager = null;

//General functions
function validateStringLength(value, length)
{
	if (value.length > length)
	{
		value = value.substring(0,length)+'...';
	}
	
	return value;
}
