var REST_HANDLER_COMPONENT = "/rest/bean/atg/extrasite/userprofiling/briefcase/BriefcaseRestHandler";
var REST_ADD_ITEM_METHOD = "handleAddBriefcaseItem";
var REST_DELETE_ITEM_METHOD = "handleDeleteBriefcaseItem";
var REST_ADD_FOLDER_METHOD = "handleAddFolder";
var REST_DELETE_FOLDER_METHOD = "handleDeleteFolder";
var REST_MOVE_ITEM_METHOD = "handleMoveBriefcaseItem";
var REST_RETURN_RECENT_METHOD = "handleReturnRecentBriefcaseItems";
var REST_CONTROL_PARAMETERS = "?atg-rest-depth=1&atg-rest-output=json";

var KEY_NEW_FOLDER = "newBriefcaseFolder";
var KEY_ORIGINAL_FOLDER = "originalBriefcaseFolder";
var KEY_EXISTING_FOLDER = "existingBriefcaseFolder";
var KEY_REMOVED_FOLDER = "removedBriefcaseFolder";
var KEY_NEW_ITEM = "newBriefcaseItem";
var KEY_EXISTING_ITEM = "exisitingBriefcaseItem";
var KEY_REMOVED_ITEM = "removedBriefcaseItem";

var ERROR_NONE = 0;
var ERROR_IS_TRANSIENT = 1;
var ERROR_ITEM_EXISTS = 2;
var ERROR_ITEM_NOT_EXISTS = 3;
var ERROR_INTERNAL = 4;
var ERROR_NO_RESULTS = 5;

var CLASS_ADD_BRIEFCASE_ITEM = ".brief";
var CLASS_ADD_OVERLAY = ".add-box";
var CLASS_REMOVE_OVERLAY = ".close";
var RECENT_ITEM_CONTENT_URL = "/en/briefcase/briefcase-recent.jsp";

var LOGIN_URL = "/en/briefcase/briefcase-login.jsp";

var isExistingItem = false;
var existingItemId = null;
var currentItemId = null;
var addItemCounter = 0;
var getRecentItemsState = 0;
var offsetTop = 0;
var offsetLeft = 0;
var isSolutionFinder = false;
var isItemAdded = false;

$(document).ready(function(){
	initializeAddOverlay();
	initializeAddItemLinks();
	initializeAddItemHandler();
});

// args = {contentItemIdentifier, briefcaseFolderIdentifier}, REST method
function briefcaseRestCall(pArguments, pRestMethod) {
	$.ajax({
		url: REST_HANDLER_COMPONENT + "/" + pRestMethod + REST_CONTROL_PARAMETERS,
		cache: false,
		type: "post",
		data: pArguments,
		dataType: "json",
		timeout: 10000
	});
}

function initializeAddOverlay() {
	$(CLASS_REMOVE_OVERLAY).live("click", function() {
		$(CLASS_ADD_OVERLAY).remove();
		$("#add-box-content").remove();
		getRecentItemsState = 0;
		addItemCounter = 0;
		if ((document.location.href.indexOf("en/myatg/") != -1) && (isItemAdded == true)) {
			document.location.reload();
		}
		return false;
	});
}

function initializeAddItemLinks() {
	$(CLASS_ADD_BRIEFCASE_ITEM).live("click", function() {
		if ((getRecentItemsState == 0) && (addItemCounter == 0)) {
			addItemCounter++;
			isExistingItem = false;
			var offset = $(this).offset();
			offsetTop = offset.top;
			offsetLeft = offset.left;
			var arguments = {arg1:$(this).attr("id")};
			briefcaseRestCall(arguments, REST_ADD_ITEM_METHOD);
		}
	});
}

function solutionFinderInitializeAddItemHandler() {
	$(CLASS_ADD_BRIEFCASE_ITEM).unbind("ajaxComplete");
	isSolutionFinder = true;
	initializeAddItemHandler();
}

function initializeAddItemHandler() {
	$(CLASS_ADD_BRIEFCASE_ITEM).ajaxComplete(function(pEvent, pRequest, pOptions) {

		var optionsData = pOptions.data;
		var optionsURL = pOptions.url;
		var targetId = $(pEvent.currentTarget).attr("id");
		var data = $.httpData(pRequest, pOptions.dataType);

		// add item complete handler
		if ((optionsURL.indexOf(REST_ADD_ITEM_METHOD) != -1) && (optionsData.indexOf(targetId) != -1) && (getRecentItemsState == 0) && (addItemCounter == 1)) {
			getRecentItemsState = 1;
			if(data.errorType == ERROR_NONE) {
				briefcaseRestCall(null, REST_RETURN_RECENT_METHOD);
				currentItemId = targetId;
				isItemAdded = true;
				_gaq.push(['_trackEvent', 'AddToBriefcase', 'Add', 'Success']);
			}
			else if (data.errorType == ERROR_ITEM_EXISTS) {
				briefcaseRestCall(null, REST_RETURN_RECENT_METHOD);
				isExistingItem = true;
				$.each(data.itemMap, function(pKey, pValue) {
					if (pKey == KEY_EXISTING_ITEM) {
						existingItemId = pValue.contentId;
					}
			    });
				currentItemId = targetId;
				_gaq.push(['_trackEvent', 'AddToBriefcase', 'Add', 'AlreadyExist']);
			}
			else if (data.errorType == ERROR_IS_TRANSIENT) {
				//var url = LOGIN_URL + "?TB_iframe=true&width=735&height=565";
				//tb_show("Login to My ATG", url);
				//HACK - Since we are reusing customed thickbox.js from Bitgroup
				if (isSolutionFinder == true) {
					SF.closeFinder();
				}
				tb_show("login",$("div.overlay-content"));
				getRecentItemsState = 0;
				addItemCounter = 0;
				_gaq.push(['_trackEvent', 'AddToBriefcase', 'Add', 'NotLoggedIn']);

			}
			else {
				alert("Sorry, that item cannot be added at this time");
				getRecentItemsState = 0;
				addItemCounter = 0;
				_gaq.push(['_trackEvent', 'AddToBriefcase', 'Add', 'Error']);

			}
		}
		
		// get recent items complete handler
		if ((optionsURL.indexOf(REST_RETURN_RECENT_METHOD) != -1) && (currentItemId == targetId) && (getRecentItemsState == 1)) {
			getRecentItemsState = 2;
			if (data.errorType == ERROR_NONE){
				displayRecentItems(pEvent.currentTarget, data);
			}			
			else {
				alert("Sorry, something went wrong");
				getRecentItemsState = 0;
				addItemCounter = 0;
			}
		}
		
		// get recent content complete handler
		if ((optionsURL.indexOf(RECENT_ITEM_CONTENT_URL) != -1) && (currentItemId == targetId) && (getRecentItemsState == 2)) {
			getRecentItemsState = 3;
			var offset = $(pEvent.currentTarget).offset();
			$("#header").prepend(data);
			$(".add-box").offset({top:Math.round(offsetTop - 310), left:Math.round(offsetLeft - 145)});
			$("#add-box-content").offset({top:Math.round(offsetTop - 305), left:Math.round(offsetLeft - 135)});
			if (isExistingItem) {
				$("#add-box-content p.msg").addClass("already").find("span").html("This item is already in ");
				$("#add-box-content ul li").addClass(function() {
					if ($(this).attr("id") == existingItemId) {
						$(this).addClass("already");
					}
				});
			}
		}
		
	});
}

function displayRecentItems(pElement,pData) {
	var argumentString = null;
	var count = 0;
	$.each(pData.itemMap, function(pKey, pValue) {
		if (count == 0) {
			argumentString = "contentIds=" + pValue.contentId;
		}
		else {
			argumentString = argumentString + "," + pValue.contentId;
		}
		count++;
    });
	$.ajax({
		url: RECENT_ITEM_CONTENT_URL,
		cache: false,
		type: "get",
		data: argumentString,
		dataType: "html"
	});
}