﻿/// <reference name="MicrosoftAjax.js" />
/// <reference name="Util.js" />
/// <reference path="../../GlobalJSFunctionsDetail.js" />
/// <reference path="../LiveEdit.js" />

try {
	Sys.Application.add_load(loadOrAjaxUpdate);
}
catch (ex) { }

function addLink(categoryID) {
	var theForm = document.frmQLLinkAdd;
	theForm.strAction.value = 'qlLinkAdd';
	theForm.ysnSave.value = 0;
	theForm.intQLCategoryID.value = categoryID;
	theForm.lngContainerID.value = categoryID;
	theForm.submit();
}

function linkModifyDelete(linkID, action, updatePanelID, catId) {
	var doSubmit = true;
	var theForm = document.aspnetForm;
	
	switch(action) {
		case 'Publish':
			theForm.strActionFE.value = 'qlPublish';
			break;
		case 'Unpublish':
			theForm.strActionFE.value = 'qlUnpublish';
			break;
		case 'Reject':
			theForm.strActionFE.value = 'qlReject';
			break;
		case 'Submit':
			theForm.strActionFE.value = 'qlSubmit';
			break;
		case 'Link': {
			toClipboard("/quicklinks.aspx?CID=" + linkID);
			doSubmit = false;
			break;
		}
		case 'Delete':
			if (confirm('Are you sure you want to delete this Item?')) {
				theForm.strActionFE.value = 'qlDelete';
			}
			else
				doSubmit = false;
			break;
		default:
			doSubmit = false;
			break;
	}
	if(doSubmit)
	{
		theForm.ysnSaveFE.value = 1;
		theForm.QLLinkID.value = linkID;
		theForm.QLCategoryID.value = catId;
		raiseAsyncPostback(updatePanelID, catId, 0);
	}
}

function linkChangeOrder(linkID, direction, updatePanelID, catId) {
	var theForm = document.aspnetForm;
	theForm.strActionFE.value = 'qlLinkChangeOrder';
	theForm.ysnSaveFE.value = 1;
	theForm.QLLinkID.value = linkID;
	theForm.QLDirection.value = direction;
	theForm.QLCategoryID.value = catId;
	raiseAsyncPostback(updatePanelID, catId, 0);
}

function openEditWindowQL(CategoryID, ItemID, isCopy, order, updatePanelID) {
	behavior = $find('editItemBehavior');
	if (behavior) {
		var ifr = document.getElementById('liveEditDialog');
		
		ifr.style.height = '345px';

		var url = '/common/modules/QuickLinks/QuickLinksLiveEdit.aspx?QLLinkID=' + ItemID + '&QLCategoryID=' + CategoryID + '&order=' + order + '&updatePanelID=' + updatePanelID;

		if (isCopy)
			ifr.src = url + '&strPage=qlLinkCopy';
		else
			ifr.src = url + '&strPage=itemForm';
		
		ifr.style.display = 'block';
		behavior.show();
	}
}

function LinkSaveFE(linkID, catId, actionTaken, updatePanelID, order) {
	if (linkVerify())
	{
		var frmQL = document.frmQLLinkList;
		frmQL.ysnSave.value = 1;
		frmQL.frmFrontEndSave.value = 1;
		frmQL.QLLinkID.value = linkID;
		frmQL.QLCategoryID.value = catId;
		frmQL.saveAction.value = actionTaken;
		frmQL.updatePanelID.value = updatePanelID;
		frmQL.order.value = order;
		frmQL.action = 'QuickLinksLiveEdit.aspx';
		if(frmQL.ysnNewWindow.checked)
				frmQL.ysnNewWindow.value = 1;
			else
				frmQL.ysnNewWindow.value = 0;
		frmQL.submit();
	}
}

// ==== NEW CODE BELOW =====

// Live edit related:
if (!window.QLLE) {
	QLLE = function() { };
	window.QLLE = QLLE;
}

function raiseAsyncPostback(updatePanelID, topicID, closePopUp) {
	if (closePopUp)
		closeModalDialog('editItemBehavior');
	
	blockMenuSpawn = true;
	qlItemHideMenu();
	qlCategoryHideMenu();
	
	__doPostBack(updatePanelID, topicID);
}

function qlActionsInit() {
	// Set up state variables (they change per item).
	QLLE.updatePanelID = '';
	QLLE.categoryID = 0;
	QLLE.itemID = 0;
	QLLE.counter = 0;
	QLLE.order = 0;
	QLLE.status = 0;
	QLLE.rights = 0;
	
	// Get invisible bullpen (where hidden stuff is stored).
	QLLE.elemLiveEditBullpen = $get('qlLiveEditBullpen');
	
	// Set up KAM tooltip.
	QLLE.elemTooltip = $get('qlLiveEditToolTip');
	if (!showToolTip)
		QLLE.elemTooltip.style.display = 'none';
	
	// Set up category action menu.
	QLLE.elemCatMenu = $get('qlCategoryLiveEditMoreActions');
	
	QLLE.elemCatActionNew = $get('qlCategoryNewItem');
	hookAnchorClick(QLLE.elemCatActionNew,
		function(sender, eventArgs) {
			qlCategoryHideMenu();
			var updatePanel = (QLLE.updatePanelID + '').trim();
			
			if (updatePanel == 'search' || updatePanel == '')
				openEditWindowQL(0, 0, 1, 0, 'search');
			else
				openEditWindowQL(QLLE.categoryID, 0, 0, 0, QLLE.updatePanelID);
		});

	// Set up item action menu.
	QLLE.elemItemMenu = $get('qlItemLiveEditMoreActions');
	QLLE.elemItemMoveHeading = $get('qlItemMoveHeading');
	QLLE.elemItemActionMoveUpIcon = $get('qlItemMoveUpIcon');
	QLLE.elemItemActionMoveDownIcon = $get('qlItemMoveDownIcon');
	QLLE.elemItemActionModify = $get('qlItemModify');
	QLLE.elemItemActionCommands = $get('qlItemCommands');
	hookAnchorClick(QLLE.elemItemActionModify,
		function(sender, eventArgs) {
			if (!QLLE.elemItemActionModify.inactive) {
				qlItemHideMenu();
				openEditWindowQL(QLLE.categoryID, QLLE.itemID, 0, -1, QLLE.updatePanelID);
			}
		});

	QLLE.elemItemActionMoveUp = $get('qlItemMoveUp');
	hookAnchorClick(QLLE.elemItemActionMoveUp,
		function(sender, eventArgs) {
			if (!QLLE.elemItemActionMoveUp.inactive) {
				qlItemHideMenu();
				linkChangeOrder(QLLE.itemID, 'up', QLLE.updatePanelID, QLLE.categoryID);
			}
		});

	QLLE.elemItemActionMoveDown = $get('qlItemMoveDown');
	hookAnchorClick(QLLE.elemItemActionMoveDown,
		function(sender, eventArgs) {
			if (!QLLE.elemItemActionMoveDown.inactive) {
				qlItemHideMenu();
				linkChangeOrder(QLLE.itemID, 'down', QLLE.updatePanelID, QLLE.categoryID);
			}
		});

	QLLE.elemItemActionCopyLink = $get('qlItemCopyLink');
	hookAnchorClick(QLLE.elemItemActionCopyLink,
		function(sender, eventArgs) {
			linkModifyDelete(QLLE.itemID, 'Link', QLLE.updatePanelID, QLLE.categoryID);
		});

	QLLE.elemItemActionUnpublish = $get('qlItemUnpublish');
	hookAnchorClick(QLLE.elemItemActionUnpublish,
		function(sender, eventArgs) {
			qlItemHideMenu();
			linkModifyDelete(QLLE.itemID, 'Unpublish', QLLE.updatePanelID, QLLE.categoryID);
		});

	QLLE.elemItemActionPublish = $get('qlItemPublish');
	hookAnchorClick(QLLE.elemItemActionPublish,
		function(sender, eventArgs) {
			qlItemHideMenu();
			linkModifyDelete(QLLE.itemID, 'Publish', QLLE.updatePanelID, QLLE.categoryID);
		});

	QLLE.elemItemActionSubmit = $get('qlItemSubmit');
	hookAnchorClick(QLLE.elemItemActionSubmit,
		function(sender, eventArgs) {
			qlItemHideMenu();
			linkModifyDelete(QLLE.itemID, 'Submit', QLLE.updatePanelID, QLLE.categoryID);
		});

	QLLE.elemItemActionCopy = $get('qlItemCopy');
	hookAnchorClick(QLLE.elemItemActionCopy,
		function(sender, eventArgs) {
			qlItemHideMenu();

			if (QLLE.counter > 0)
				openEditWindowQL(QLLE.categoryID, QLLE.itemID, 1, -1, 'copy');
			else
		        openEditWindowQL(QLLE.categoryID, QLLE.itemID, 1, -1, 'search');
		});
	
	QLLE.elemItemActionDelete = $get('qlItemDelete');
	hookAnchorClick(QLLE.elemItemActionDelete,
		function(sender, eventArgs) {
			qlItemHideMenu();
			linkModifyDelete(QLLE.itemID, 'Delete', QLLE.updatePanelID, QLLE.categoryID);
		});

	QLLE.elemItemActionNewAnchor = $get('qlItemNewItemAnchor');
	QLLE.elemItemActionNew = $get('qlItemNewItem');
	hookAnchorClick(QLLE.elemItemActionNew,
		function(sender, eventArgs) {
			if (!QLLE.elemItemActionNew.inactive) {
				qlItemHideMenu();
				openEditWindowQL(QLLE.categoryID, 0, 0, QLLE.order, QLLE.updatePanelID);
			}
		});

	QLLE.elemItemActionReject = $get('qlItemReject');
	hookAnchorClick(QLLE.elemItemActionReject,
		function(sender, eventArgs) {
			qlItemHideMenu();
			linkModifyDelete(QLLE.itemID, 'Reject', QLLE.updatePanelID, QLLE.categoryID);
		});
}

function qlCategoryHideMenu() {
	var categoryID = QLLE.categoryID;
	var controlID = 'LiveEditControl_' + categoryID;
	var liveEditControl = $get(controlID);

	if (!liveEditControl)
		return;

	// Change z-index, for proper display.
	var parentContainer = resolveLiveEditContainer(liveEditControl);
	parentContainer.style.zIndex = 0;

	// Hide any possibly visible tool-tip.
	qlHideTooltip(controlID);

	// Hide KAM unless KAMs are set to always show.
	if (!showLiveEditControls)
		liveEditControl.style.display = 'none';

	// Hide action menu for category.
	QLLE.elemCatMenu.style.display = 'none';

	if (QLLE.elemCatMenu.parentNode) {
		QLLE.elemCatMenu.parentNode.removeChild(QLLE.elemCatMenu);
		QLLE.elemLiveEditBullpen.appendChild(QLLE.elemCatMenu);
	}
}

function qlItemHideMenu() {
	var itemID = QLLE.itemID;
	var controlID = 'LiveEditControl' + itemID;
	var liveEditControl = $get(controlID);

	if (!liveEditControl)
		return;

	// Change z-index, for proper display.
	var parentContainer = resolveLiveEditContainer(liveEditControl);
	parentContainer.style.zIndex = 0;

	// Hide action menu for item.
	QLLE.elemItemMenu.style.display = 'none';
	
	if (QLLE.elemItemMenu.parentNode) {
		QLLE.elemItemMenu.parentNode.removeChild(QLLE.elemItemMenu);
		QLLE.elemLiveEditBullpen.appendChild(QLLE.elemItemMenu);
	}

	// Hide any possibly visible tool-tip.
	qlHideTooltip(controlID);

	// Hide KAM unless KAMs are set to always show.
	if (!showLiveEditControls)
		liveEditControl.style.display = 'none';
}

function qlItemMouseOver(sender, event, itemID) {
	if (blockMenuSpawn)
		return;

	QLLE.itemID = itemID;
	var controlID = 'LiveEditControl' + itemID;
	var liveEditControl = $get(controlID);

	// Make sure previous KAMs are hidden if they need to be.
	if (!showLiveEditControls) {
		if (previousKAMControl)
			previousKAMControl.style.display = 'none';
		previousKAMControl = liveEditControl;
	}

	// Change z-index, for proper display.
	var parentContainer = resolveLiveEditContainer(liveEditControl);
	parentContainer.style.zIndex = 2;

	// Move action category menu to container for category.
	liveEditControl.appendChild(QLLE.elemItemMenu);

	// Show tool-tip (if they are not disabled).
	qlShowTooltip(controlID);

	// Show KAM.
	liveEditControl.style.display = 'block';
}

function qlItemMouseOut(sender, event) {
	// Ignore when mouse leaves child controls within the live edit control.
	event = (window.event ? window.event : event);
	var toElement = (event.toElement ? event.toElement : event.relatedTarget);

	if (!elemInsideOrEq(sender, toElement))
		qlItemHideMenu();
}

function qlCategoryMouseOver(sender, event, categoryID) {
	if (blockMenuSpawn)
		return;

	QLLE.categoryID = categoryID;
	var controlID = 'LiveEditControl_' + categoryID;
	var liveEditControl = $get(controlID);

	// Make sure previous KAMs are hidden if they need to be.
	if (!showLiveEditControls) {
		if (previousKAMControl)
			previousKAMControl.style.display = 'none';
		previousKAMControl = liveEditControl;
	}

	// Move action category menu to container for category.
	liveEditControl.appendChild(QLLE.elemCatMenu);

	// Change z-index, for proper display.
	var parentContainer = resolveLiveEditContainer(liveEditControl);
	parentContainer.style.zIndex = 2;

	// Show tool-tip (if they are not disabled).
	qlShowTooltip(controlID);

	// Show KAM.
	liveEditControl.style.display = 'block';
}

function qlCategoryMouseOut(sender, event) {
	// Ignore when mouse leaves child controls within the live edit control.
	event = (window.event ? window.event : event);
	var toElement = (event.toElement ? event.toElement : event.relatedTarget);

	if (!elemInsideOrEq(sender, toElement))
		qlCategoryHideMenu();
}

// Hides tool-tip text for a category.
function qlHideTooltip(controlID) {
	var liveEditControl = $get(controlID);

	if (QLLE.elemTooltip.parentNode)
		QLLE.elemTooltip.parentNode.removeChild(QLLE.elemTooltip);

	QLLE.elemTooltip.style.display = 'none';
}

// Shows tool-tip text for a category (if enabled).
function qlShowTooltip(controlID) {
	var liveEditControl = $get(controlID);
	liveEditControl.appendChild(QLLE.elemTooltip);

	if (QLLE.elemTooltip) {
		if (showToolTip)
			QLLE.elemTooltip.style.display = 'block';
		else
			QLLE.elemTooltip.style.display = 'none';
	}
}

// Summons action menu for a category.
function qlActionsCategory(categoryID, catElemID, updatePanelID, status, rights) {
	QLLE.updatePanelID = updatePanelID;
	QLLE.itemID = 0;
	QLLE.categoryID = categoryID;
	QLLE.counter = 0;
	QLLE.status = status;
	QLLE.rights = rights;

	liveEditCommonCategory(
		$get(catElemID),
		QLLE.elemTooltip,
		QLLE.elemCatMenu,
		$get('LiveEditControl_' + categoryID),'qlCategoryLiveEditMoreActions');
}

// Summons action menu for an item.
function qlActionsItem(itemID, updatePanelID, categoryID, order, counter, status, rights, lastItem) {
	QLLE.updatePanelID = updatePanelID;
	QLLE.categoryID = categoryID;
	QLLE.itemID = itemID;
	QLLE.counter = counter;
	QLLE.order = order;
	QLLE.status = status;
	QLLE.rights = rights;
	QLLE.lastItem = lastItem;

	// Determine if modify is available.
	if (rights >= PUBLISHER || rights == AUTHOR && status < MIN_PUBLISHED) {
		QLLE.elemItemActionModify.className = 'big modify';
		QLLE.elemItemActionModify.title = '';
		QLLE.elemItemActionModify.inactive = false;
	}
	else {
		QLLE.elemItemActionModify.className = 'big modify inactive';
		QLLE.elemItemActionModify.title = 'You do not have rights to modify this item.'
		QLLE.elemItemActionModify.inactive = true;
	}

	// Determine if move is available and how it should display.
	var MOVE_ACTIVE_UP = '/App_Themes/CP/Images/IconMoveUp.png';
	var MOVE_ACTIVE_DOWN = '/App_Themes/CP/Images/IconMoveDown.png';
	var MOVE_INACTIVE_UP = '/App_Themes/CP/Images/IconMoveUpInactive.png';
	var MOVE_INACTIVE_DOWN = '/App_Themes/CP/Images/IconMoveDownInactive.png';

	var moveDisplay = (rights > AUTHOR ? 'inline' : 'none')
	QLLE.elemItemMoveHeading.style.display = moveDisplay;
	QLLE.elemItemActionMoveUp.style.display = moveDisplay;
	QLLE.elemItemActionMoveDown.style.display = moveDisplay;

	var moveText;
	if (rights > AUTHOR) {
		if (counter < 0) {
			QLLE.elemItemActionMoveUp.className = 'moveUp inactive';
			QLLE.elemItemActionMoveUp.inactive = true;
			QLLE.elemItemActionMoveDown.className = 'moveDown inactive';
			QLLE.elemItemActionMoveDown.inactive = true;

			switch (counter) {
				case -2: // Feature Area
					moveText = 'Can only move items from module page.'
					break;
				default: // Search Screen
					moveText = 'Can\'t move items on the search page.';
					break;
			}

			QLLE.elemItemActionMoveUpIcon.src = MOVE_INACTIVE_UP;
			QLLE.elemItemActionMoveDownIcon.src = MOVE_INACTIVE_DOWN;
			QLLE.elemItemActionMoveUpIcon.title = moveText;
			QLLE.elemItemActionMoveUpIcon.alt = moveText;
			QLLE.elemItemActionMoveDownIcon.title = moveText;
			QLLE.elemItemActionMoveDownIcon.alt = moveText;
		}
		else {
			if (counter == 1) {
				moveText = 'This item is first in the list and can\'t be moved any higher.';
				QLLE.elemItemActionMoveUpIcon.src = MOVE_INACTIVE_UP;
				QLLE.elemItemActionMoveUp.className = 'moveUp inactive';
				QLLE.elemItemActionMoveUp.alt = 'This item is first in the list and can\'t be moved any higher.';
				QLLE.elemItemActionMoveUp.inactive = true;
			}
			else {
				moveText = 'Move Up';
				QLLE.elemItemActionMoveUpIcon.src = MOVE_ACTIVE_UP;
				QLLE.elemItemActionMoveUp.className = 'moveUp';
				QLLE.elemItemActionMoveUp.inactive = false;
			}

			QLLE.elemItemActionMoveUpIcon.title = moveText;
			QLLE.elemItemActionMoveUpIcon.alt = moveText;

			if (lastItem) {
				moveText = 'This item is last in the list and can\'t be moved any lower.';
				QLLE.elemItemActionMoveDownIcon.src = MOVE_INACTIVE_DOWN;
				QLLE.elemItemActionMoveDown.className = 'moveDown inactive';
				QLLE.elemItemActionMoveDown.inactive = true;
			}
			else {
				moveText = 'Move Down';
				QLLE.elemItemActionMoveDownIcon.src = MOVE_ACTIVE_DOWN;
				QLLE.elemItemActionMoveDown.className = 'moveDown';
				QLLE.elemItemActionMoveDown.inactive = false;
			}

			QLLE.elemItemActionMoveDownIcon.title = moveText;
			QLLE.elemItemActionMoveDownIcon.alt = moveText;
		}
	}

	// Determine visiblity of submit/reject/publish/unpublish.
	QLLE.elemItemActionSubmit.style.display = 'none';
	QLLE.elemItemActionReject.style.display = 'none';
	QLLE.elemItemActionPublish.style.display = 'none';
	QLLE.elemItemActionUnpublish.style.display = 'none';

	if (rights > AUTHOR) {
		if (status > MAX_DRAFT)
			QLLE.elemItemActionUnpublish.style.display = '';
		else
			QLLE.elemItemActionPublish.style.display = '';

		if (status == SUBMITTED)
			QLLE.elemItemActionReject.style.display = '';
	}
	else if (status != SUBMITTED && status <= MAX_DRAFT)
		QLLE.elemItemActionSubmit.style.display = '';
	
	// Determine visiblity of delete.
	QLLE.elemItemActionDelete.style.display = 'none';
	
	if (rights > AUTHOR) {
		// Only publisher or higher can delete.
		QLLE.elemItemActionDelete.style.display = '';
	}
	else if (status <= MAX_DRAFT)
		QLLE.elemItemActionDelete.style.display = '';
	
	// Determine visiblity/behavior of new.
	if (counter > 0) {
		if (rights >= AUTHOR) {
			QLLE.elemItemActionNew.style.display = '';
			QLLE.elemItemActionNewAnchor.title = '';
			QLLE.elemItemActionNewAnchor.className = 'addItem';
			QLLE.elemItemActionNew.inactive = false;
		}
		else
			QLLE.elemItemActionNew.style.display = 'none';
	}
	else if (counter > -2) {
		QLLE.elemItemActionNew.style.display = '';
		QLLE.elemItemActionNewAnchor.title = 'You cannot add item on search screen.';
		QLLE.elemItemActionNewAnchor.className = 'addItem inactive';
		QLLE.elemItemActionNew.inactive = true;
	}
	else
		QLLE.elemItemActionNew.style.display = 'none';

	// Apply even/odd classes.
	var listItems = QLLE.elemItemActionCommands.firstChild;
	var lc = 0;

	while (listItems != null) {
		if (listItems.nodeType == 1 && listItems.style.display != 'none')
			listItems.className = (((++lc) % 2) == 0 ? 'even' : '');
		listItems = listItems.nextSibling;
	}

	// Show menu.
	liveEditCommonItem(
		QLLE.elemTooltip,
		QLLE.elemItemMenu,
		$get('LiveEditControl' + itemID), 'qlItemLiveEditMoreActions',false);
}