
if (typeof(LITHIUM) == "undefined") {
	var LITHIUM = {};
}

if (typeof(LITHIUM.Tagging) == "undefined") {
	LITHIUM.Tagging = {};
}

LITHIUM.Tagging.communityId; // set in html_header.tag
LITHIUM.Tagging.dialogArea = null;
LITHIUM.Tagging.lieu_edits = null;
LITHIUM.Tagging.focusedItem = null;
LITHIUM.Tagging.dialog = null;
LITHIUM.Tagging.currentContainer = null;

LITHIUM.Tagging.handleSuccess = function(o){
	var lt = LITHIUM.Tagging;
	
	if(o.responseText !== undefined){	
		if (o.argument.action == "changingTags") {
			// editing done; let's refresh the tags
			var msgId = o.argument.messageId;
			var boardId = o.argument.boardId;
			var tags = o.argument.tags;
			var actionType = o.argument.actionType;

			if (actionType == "add") {
				lt.alertTagsAdded(msgId, tags);
			}
			
			if (actionType == "delete") {
				lt.alertTagsDeleted(msgId, tags);
			}
			
		} else if (o.argument.action == "fetchingEditor") {
			var el = o.argument.element;
			lt.dialog.innerHTML = o.responseText;
			lt.showEditTagDialog(el);
		} else if (o.argument.action == "refreshingTags") {				
			var el = o.argument.element;
			el.innerHTML = o.responseText;
			
			var msgId = o.argument.messageId;
			var boardId = o.argument.boardId;
			var btnId = "tse-" + boardId + "-" + msgId;
							
			lt.setupAllPopups();				
		}
	} else {
		// Should get a response.
	}
};

LITHIUM.Tagging.notify = function(msg){
	alert(msg);
}

LITHIUM.Tagging.handleFailure = function(o){
	var responseMsg = "";
	if(o.responseText !== undefined){
		var errorDescRegex = /<span[\s]+id="error-description"[^>]*>([\s\S]*?)<\/span>/;
		var errorDescMatch = errorDescRegex.exec(o.responseText);

		if (errorDescMatch !== null) {
			responseMsg = errorDescMatch[1].replace(/<br>/g, "\n").replace(/&nbsp;/g, " ");
		} else if(o.responseText.indexOf("Flooding Detected") != -1) {
			responseMsg = LITHIUM.Tagging.promptFloodingDetected;
		} else if (o.responseText.indexOf("Service Temporarily Unavailable") != -1) {
			responseMsg = LITHIUM.Tagging.promptSystemOutage;
		} else {		
			responseMsg = LITHIUM.Tagging.promptDisconnected;
		}
	} else {
		responseMsg = LITHIUM.Tagging.promptCantAddTag;
	}
	LITHIUM.Tagging.notify(responseMsg);
};

LITHIUM.Tagging.fetchEditTagDialog = function(e, el) {
	YAHOO.util.Event.stopEvent(e);
	
	var lt = LITHIUM.Tagging;
	var url = el.href;
	
	url += "&lieu=true";
	
	var callback = {success:lt.handleSuccess,failure:lt.handleFailure,argument:{action:"undefined"}};
	callback.argument = { action: "fetchingEditor", element: el };
	YAHOO.util.Connect.asyncRequest("POST", url, callback);
};

LITHIUM.Tagging.setupPopups = function(el){
	YAHOO.util.Event.on( el, "click",LITHIUM.Tagging.fetchEditTagDialog, el );
};

LITHIUM.Tagging.setupAllPopups = function(){
	var lieu_popups = YAHOO.util.Dom.getElementsByClassName("lieu-popup-link");
	YAHOO.util.Dom.batch(lieu_popups, LITHIUM.Tagging.setupPopups);
};

LITHIUM.Tagging.setupAddTagDisplay = function(el){	
	YAHOO.util.Event.on( el.id, "click",LITHIUM.Tagging.showAddTagDisplay, el );
};

LITHIUM.Tagging.setupAllAddTagDisplays = function() {
	var addTagDisplays = YAHOO.util.Dom.getElementsByClassName("add-tag-toggle-button");	
	YAHOO.util.Dom.batch(addTagDisplays, LITHIUM.Tagging.setupAddTagDisplay);	
}

LITHIUM.Tagging.setupHideTagDisplay = function(el){	
	YAHOO.util.Event.on( el.id, "click",LITHIUM.Tagging.hideAddTagDisplay, el );
};

LITHIUM.Tagging.setupAllHideTagDisplays = function() {
	var hideTagDisplays = YAHOO.util.Dom.getElementsByClassName("hide-tag-display");	
	YAHOO.util.Dom.batch(hideTagDisplays, LITHIUM.Tagging.setupHideTagDisplay);
}

LITHIUM.Tagging.showAddTagDisplay = function(e, el) {	
	var currentElementNummber = el.id.replace("add-tag-toggle-button-", "");
	var addTagDisplayElement = document.getElementById("add-tag-display-" + currentElementNummber);
	var inputElement = document.getElementById("li-newtags-" + currentElementNummber);
 
	YAHOO.util.Dom.setStyle(addTagDisplayElement, 'display', "block");
	YAHOO.util.Dom.setStyle(el.id, 'display', 'none');		
}

LITHIUM.Tagging.hideAddTagDisplay = function(e, el) {	
		
	var currentElementId = "add-tag-display-" + el.id.replace("hide-tag-display-", "");		
	var addButtonElementId = "add-tag-toggle-button-" + el.id.replace("hide-tag-display-", "");
	var addTagDisplayElement = document.getElementById(currentElementId);
	
	//YAHOO.util.Dom.setStyle(addTagDisplayElement, 'opacity', 1);
	var msgAttributes = {					
		opacity: { to: 0 }
	};
	var myAnim = new YAHOO.util.Anim(addTagDisplayElement, msgAttributes, 1, YAHOO.util.Easing.easeOutStrong);
	
	//myAnim.animate();
	YAHOO.util.Dom.setStyle(addTagDisplayElement, 'display', "none");		
	YAHOO.util.Dom.setStyle(addButtonElementId, 'display', 'block');
}

LITHIUM.Tagging.addTagsSubmit = function(e, el) {
	YAHOO.util.Event.stopEvent(e);
	
	var lt = LITHIUM.Tagging;
	
	var oForm = el.form;
	
	var curBoardId = oForm["board.id"].value;
	var curMessageId = oForm["message.id"].value;
	
	var callback = {success:lt.handleSuccess,failure:lt.handleFailure,argument:{action:"undefined"}};
	callback.argument= { action:"changingTags", element: el, boardId:curBoardId, messageId:curMessageId, tags:oForm["tag.add"].value, actionType: "add"  };
	
	YAHOO.util.Connect.setForm(oForm);
	YAHOO.util.Connect.asyncRequest("POST", "/" + LITHIUM.Tagging.communityId + "/tagging/add_tags_widget?lieu=true", callback);
	
	oForm["tag.add"].value = "";
};

LITHIUM.Tagging.checkForEnterKey = function(e, el) {
	if (e.keyCode == 13) {
		LITHIUM.Tagging.addTagsSubmit( e, el );
	}
}

LITHIUM.Tagging.alertTagsAdded = function(msgId, tags) {
	var tagAlertElement = document.getElementById("li-tag-alert-" + msgId);
	var tagAlertContainerElement = document.getElementById("li-tag-alert-container-" + msgId);	
	var tagAlertTitleElement = document.getElementById("li-tag-action-title-" + msgId);
	
	while (tagAlertElement.firstChild) {
	    tagAlertElement.removeChild(tagAlertElement.firstChild);
	}
	
	while (tagAlertTitleElement.firstChild) {
	    tagAlertTitleElement.removeChild(tagAlertTitleElement.firstChild);
	}
	
	tagAlertElement.appendChild(document.createTextNode(tags));
	tagAlertTitleElement.appendChild(document.createTextNode(LITHIUM.Tagging.tagsAddedTitle))
	tagAlertContainerElement.style.display = "block";
}

LITHIUM.Tagging.alertTagsDeleted = function(msgId, tags) {
	var tagAlertElement = document.getElementById("li-tag-alert-" + msgId);
	var tagAlertContainerElement = document.getElementById("li-tag-alert-container-" + msgId);	
	var tagAlertTitleElement = document.getElementById("li-tag-action-title-" + msgId);
	
	while (tagAlertElement.firstChild) {
	    tagAlertElement.removeChild(tagAlertElement.firstChild);
	}
	
	while (tagAlertTitleElement.firstChild) {
	    tagAlertTitleElement.removeChild(tagAlertTitleElement.firstChild);
	}

	tagAlertElement.appendChild(document.createTextNode(tags));
	tagAlertTitleElement.appendChild(document.createTextNode(LITHIUM.Tagging.tagsDeletedTitle))
	tagAlertContainerElement.style.display = "block";
}

LITHIUM.Tagging.showEditTagDialog = function(el) {	
	var test = document.getElementById("lieu-submit");
	var lt = LITHIUM.Tagging;

	
	YAHOO.util.Event.on( document.getElementById("lieu-submit"),"click", lt.lieuSubmit, { panelName: "edit_tag_panel", el: el } );
	YAHOO.util.Event.on( document.getElementById("lieu-cancel"),"click", lt.closeDialog );
	
	// document.getElementById("enter_tags").value = "";
	
	YAHOO.util.Dom.setStyle("dialog","opacity","0");
	YAHOO.util.Dom.setStyle("dialog-area","opacity","0");

	YAHOO.util.Dom.setStyle("dialog","display","block");
	
	var tagNode = el.parentNode;
	var par2 = tagNode.parentNode;
	var par3 = par2.parentNode;
	var tagSetNode = par3.parentNode;
	
	var startLoc = YAHOO.util.Dom.getXY(el);
	var btm = YAHOO.util.Dom.getRegion(el).bottom;
	
	var startTop = startLoc[1];
	var endTop = btm;
	
	var btnLeft = startLoc[0];
	
	var tagLeft = YAHOO.util.Dom.getRegion(tagNode).left;
	var tagSetLeft = YAHOO.util.Dom.getRegion(tagSetNode).left;
	
	if (btnLeft < tagLeft) {
		startLoc[0] = tagSetLeft;
	} else {
		startLoc[0] = tagLeft;
	}

	YAHOO.util.Dom.setXY("dialog",startLoc);
	YAHOO.util.Dom.setStyle("dialog","opacity","1");

	var openAnim = new YAHOO.util.Anim("dialog",{top:{from:endTop,to:endTop}},0.2);

	openAnim.onComplete.subscribe(lt.doFinishShow);
	
	//Removing this function call for LIA-2587.  This function call appears to
	//add a class to the clicked arrow button that opened the dialog.  The added class does
	//not appear to play any role in the dispaly.  This was causing a problem in IE where the background image
	//would dissapear afteer being clicked.
	
	//lt.addFocus(el);
	openAnim.animate();
};


LITHIUM.Tagging.addFocus = function(el){
	var lt = LITHIUM.Tagging;
	
	lt.removeFocus();
	lt.focusedItem = el;
	YAHOO.util.Dom.addClass(lt.focusedItem,"focusedItem");
};

LITHIUM.Tagging.removeFocus = function(){
	var lt = LITHIUM.Tagging;
	
	if (lt.focusedItem) {
		YAHOO.util.Dom.removeClass(lt.focusedItem,"focusedItem");
	}
	lt.focusedItem = null;
};

LITHIUM.Tagging.closeDialog = function(e){
	var lt = LITHIUM.Tagging;
	
	YAHOO.util.Event.stopEvent(e);
	
	var closeAnim = new YAHOO.util.Anim("dialog",{opacity:{from:1,to:0}},0.3);
	closeAnim.onComplete.subscribe(lt.doHide);
	closeAnim.animate();
	lt.removeFocus();
};

LITHIUM.Tagging.doFinishShow = function(){
	var lt = LITHIUM.Tagging;
	YAHOO.util.Dom.setStyle("dialog","opacity",1);
	YAHOO.util.Dom.setStyle("dialog-area","opacity",0);
	var openAnim = new YAHOO.util.Anim("dialog-area",{opacity:{from:0,to:1}},0.3);
	openAnim.onComplete.subscribe(lt.enableHover);
	openAnim.animate();
}

LITHIUM.Tagging.doHide = function(){
	YAHOO.util.Dom.setStyle("dialog","display","none");
	YAHOO.util.Dom.setStyle("dialog-area","opacity","0");
	LITHIUM.Tagging.clearHovers();
}

LITHIUM.Tagging.enableHover = function(){
	var lt = LITHIUM.Tagging;
	YAHOO.util.Event.on("cancel", 'mouseover', lt.doHover);
	YAHOO.util.Event.on("add", 'mouseover', lt.doHover);
	YAHOO.util.Event.on("cancel", "mouseout", lt.clearHovers);
	YAHOO.util.Event.on("add", "mouseout", lt.clearHovers);
};

LITHIUM.Tagging.doHover = function(e){
	YAHOO.util.Dom.addClass(e.target, 'hovering');
};

LITHIUM.Tagging.clearHovers = function(){
	YAHOO.util.Dom.removeClass("cancel", 'hovering');
	YAHOO.util.Dom.removeClass("add", "hovering");
};



LITHIUM.Tagging.setupAddBtns = function(el){
	YAHOO.util.Event.on( el, "click", LITHIUM.Tagging.addTagsSubmit, el );
};

LITHIUM.Tagging.setupAddFlds = function(el){
	YAHOO.util.Event.on( el, "keypress", LITHIUM.Tagging.checkForEnterKey, el );
};
	
LITHIUM.Tagging.lieuSubmit = function(e, args){
	var lt = LITHIUM.Tagging;
	YAHOO.util.Event.stopEvent(e);		
	
	var oForm = document.getElementById(args.panelName);
	
	var curBoardId = oForm["board.id"].value;
	var curMessageId = oForm["message.id"].value;
	
	// need to generalize this
	var callback = {success:lt.handleSuccess,failure:lt.handleFailure,argument:{action:"undefined"}};

	callback.argument= { action:"changingTags", boardId:curBoardId, messageId:curMessageId, actionType: "delete", tags: args.el.id.replace("li-tag-", "") };
	
	YAHOO.util.Connect.setForm(oForm);

	YAHOO.util.Connect.asyncRequest("POST", "/" + LITHIUM.Tagging.communityId + "/tagging/" + args.panelName,callback);
	
	lt.closeDialog(e);
};