/**
 * Conversations manager
 * 
 * @author Pierre HUBERT
 */

ComunicWeb.components.conversations.manager = {

	/**
	 * @var {String} The ID of the conversation container
	 */
	__conversationsContainerID: "conversationsElem",

	/**
	 * Display conversations manager
	 * 
	 * @return {Boolean} True for a success
	 */
	display: function(){

		//Try to get conversation manager
		var conversationsContainerElem = byId(this.__conversationsContainerID);

		//Check if element exists or not
		if(conversationsContainerElem){
			ComunicWeb.debug.logMessage("NOTICE : couldn't initializate conversation manager because a conversation manager is already on the page");

			return true;
		}

		//Else inform user and create conversation manager
		ComunicWeb.debug.logMessage("INFO : initializate conversation manager");

		//Create conversations manager element
		var conversationsContainerElem = createElem("div");
		conversationsContainerElem.id = this.__conversationsContainerID;
		
		//Insert the element at the right place
		var pageTarget = byId("pageTarget");
		if(pageTarget){
			//Insert disucssion element before it
			byId("wrapper").insertBefore(conversationsContainerElem, pageTarget);
		}
		else{
			//Just apply the element
			byId("wrapper").appendChild(conversationsContainerElem);
		}

		//Initializate conversation element
		this.init(conversationsContainerElem);

		//Success
		return true;
	},

	/**
	 * Initializate conversations element
	 * 
	 * @param {HTMLElement} conversationsContainerElem The container of the conversation element
	 * @return {Boolean} True for a success
	 */
	init: function(conversationsContainerElem){
		
		//First, add the "open a conversation" new
		this.addOpenConversationButton(conversationsContainerElem);

		//Intializate conversation service
		ComunicWeb.components.conversations.service.init();

		//Then, open any already active conversation
		var openedConversations = ComunicWeb.components.conversations.cachingOpened.getAll();
		
		//Process opened conversations
		for(i in openedConversations){
			if(i < openedConversations.length)
				ComunicWeb.components.conversations.chatWindows.openConversation(openedConversations[i]);
		}

	},

	/**
	 * Add the "open conversation" button
	 * 
	 * @param {HTMLElement} targetElem The target of the button
	 * @return {Boolean} True for a success
	 */
	addOpenConversationButton: function(targetElem){

		//Create the button
		var addButton = createElem("button", targetElem);
		addButton.className = "btn btn-primary open-conversation-button";
		addButton.innerHTML = "Conversations";
		
		
		//Make button lives
		addButton.onclick = function(){
			ComunicWeb.components.conversations.list.display(this);
		}
	},

	/**
	 * Add a new conversation to the list of opened conversation accordingly to specified informations
	 * 
	 * @param {number} convID Informations about the conversation to open
	 */
	addConversation: function(convID){

		//Check if the conversation is already open or not
		if(ComunicWeb.components.conversations.cachingOpened.isopen(convID)){
			ComunicWeb.debug.logMessage("The conversation " + convID + " is already opened !");
			return;
		}

		//Save conversation ID in session storage
		ComunicWeb.components.conversations.cachingOpened.add(convID);

		//Open the conversation
		ComunicWeb.components.conversations.chatWindows.openConversation(convID);
	},

	/**
	 * Open a private conversation with only one user
	 * 
	 * @param {Integer} otherID The ID of the user with who the conversation will be started
	 * @return {Boolean} True for a success
	 */
	openPrivate: function(otherID){

		//Search for such conversation in the database, create it in case of failure
		//Prepare what to do next
		var callback = function(result){

			//In case of error
			if(result.error){
				//Notify user
				ComunicWeb.common.notificationSystem.showNotification("Couldn't create a conversation with this user ! Please try again...", "danger", 2);
				return false;
			}

			//Open the first conversation
			ComunicWeb.components.conversations.manager.addConversation(result.conversationsID[0]);

		};

		//Peform request
		ComunicWeb.components.conversations.interface.searchPrivate(otherID, true, callback);

		//Success
		return true;

	},
}