/*
<WebFramework>
	<FilePath>/Scripts/Topic.js</FilePath>
	<Description>This Script file is used to create and navigate Topic Items.</Description>
	<Version Major="5.2" Minor="0" Revision="4" Date="1/3/2007">
		<Revision Date="8/17/2004" Name="Sean Pardue" Major="5" Minor="0" Revision="0">Creation</Revision>
		<Revision Date="8/25/2004" Name="Sean Pardue" Major="5" Minor="0" Revision="1">
			Changed RefreshTopic error catch scenario to show init.asp instead of executed the default action.
		</Revision>
		<Revision Date="9/20/2004" Name="Sean Pardue" Major="5" Minor="0" Revision="2">
			Changed right click functionality to not select and run an item, but to just highlight the item with dashed border.
		</Revision>
		<Revision Date="9/20/2004" Name="Sean Pardue" Major="5" Minor="0" Revision="3">
			Changed RefreshTopic to set moItem = null inside of the last Catch statement
		</Revision>
		<Revision Date="10/28/2004" Name="Sean Pardue" Major="5" Minor="0" Revision="4">
			Removed left and right Topic navigation
			Fixed problem with doClick reseting moLast variable if a tab wasn't clicked
		</Revision>
		<Revision Date="1/11/2005" Major="5.0" Minor="0" Revision="4">Initial Release</Revision>
		<Revision Date="2/4/2005" Major="5.0" Minor="1" Revision="4" Name="Version Utility">
			Fixed Asset Configuration for setting image path
			Fixed resizing on Help dialog
			Fixed links in Reporting Services documentation
		</Revision>
		<Revision Date="2/14/2005" Major="5.0" Minor="2" Revision="4" Name="Version Utility">
			Fixed problem with deleting Assets
			Fixed Problems With Scrolling Actions. Added fraAction.ResizeAction() to doClick()
		</Revision>
		<Revision Date="5/24/2005" Major="5.0" Minor="3" Revision="4" Name="Version Utility">Major and Minor revisions automatically set by utility.</Revision>
		<Revision Date="8/4/2005" Major="5.1" Minor="0" Revision="4" Name="Version Utility">Major and Minor revisions automatically set by utility.</Revision>
		<Revision Date="1/3/2007" Major="5.2" Minor="0" Revision="4" Name="Version Utility">Major and Minor revisions automatically set by utility.</Revision>
	</Version>
</WebFramework>
*/
var DisplayStart = 0;
var DisplayStop = -1;
var dicTopics = new ActiveXObject("Scripting.Dictionary");

var msAsset="";
var msPath="";
var mbGotMasks=false;
var miDepth="";
var mbOther=false;
var msSecMask;
var moLast=null;
var e;

var TabOffset=0;
var NavOffset=0;

function Actual(){
	var TopicID;
	var AssetID;
	var EditTopicID;
}

function Topic(){
	var ID;
	var AssetID;
	var AssetPath;
	var Name;
	var Description;
	var Order;
	var ConfigFlag;
	var ActAsset;
	var Disabled;
	var Selected; //Used for Other Command
	var Default;
	var ActionType;	
	var DepthMask;
	var SecurityMask;
	var dicActions;
}

function Action(){
	var ID;
	var TopicID;	
	var Name;
	var Image;
	var LayoutSize;
	var DepthMask;
	var SecurityMask;
	var AutoRefresh;
	var DisplayOrder;
	var HelpURL;		
}

function NewItem(ID,AssetID,AssetPath,Name,Description,Order,ConfigFlag){
	var oTopic = new Topic();
	
	oTopic.ID=ID.toString();
	oTopic.AssetID=AssetID;
	oTopic.AssetPath=AssetPath;
	oTopic.Name=Name;
	oTopic.Description=Description;
	oTopic.Order=Order;
	oTopic.ConfigFlag=ConfigFlag;	
	oTopic.ActAsset="";
	oTopic.Disabled=false;
	oTopic.Selected=false;	
	oTopic.ActionType = '';
	oTopic.DepthMask=0;
	oTopic.SecurityMask=0;
	oTopic.dicActions=new ActiveXObject("Scripting.Dictionary");
	
	return oTopic;
}

function AddTopic(ID,AssetID,AssetPath,Name,Description,Order,ConfigFlag){		
	if (dicTopics.Exists(ID.toString())){				
		dicTopics(ID.toString()).AssetID=AssetID;
		dicTopics(ID.toString()).AssetPath=AssetPath;
		dicTopics(ID.toString()).Name=Name;
		dicTopics(ID.toString()).Description=Description;				
		dicTopics(ID.toString()).Order = Order;
		dicTopics(ID.toString()).ConfigFlag=ConfigFlag;
	}else{
		var oTopic=NewItem(ID,AssetID,AssetPath,Name,Description,Order,ConfigFlag);	
		dicTopics.Add(oTopic.ID, oTopic);		
	}		
}

function NewActionItem(ID,TopicID,Name,Image,LayoutSize,DepthMask,SecurityMask,AutoRefresh,DisplayOrder,HelpURL){
	var oItem=new Action();
	
	oItem.ID=ID.toString();
	oItem.TopicID=TopicID;
	oItem.Name=Name;
	oItem.Image=Image;
	oItem.LayoutSize=LayoutSize;
	oItem.DepthMask=DepthMask;
	oItem.SecurityMask=SecurityMask;
	oItem.AutoRefresh=AutoRefresh;
	oItem.DisplayOrder=DisplayOrder;
	oItem.HelpURL=HelpURL;
	
	return oItem;	
}

function AddAction(ID,TopicID,Name,Image,LayoutSize,DepthMask,SecurityMask,AutoRefresh,DisplayOrder,HelpURL){
	if (dicTopics.Exists(TopicID.toString())){	
		var oTopic=dicTopics.Item(TopicID.toString());		
		var oItem = NewActionItem(ID,TopicID,Name,Image,LayoutSize,DepthMask,SecurityMask,AutoRefresh,DisplayOrder,HelpURL);

		if (oTopic.dicActions.Exists(ID.toString())){
			oTopic.dicActions(ID.toString()) = oItem;			
		}else{
			oTopic.dicActions.Add(oItem.ID, oItem);		
		}
	}
}

function getOffsets(){
	var oTmp = tblTabs;
	TabOffset = 0;
	NavOffset = 0;
	
	while (oTmp.parentElement != null){
		TabOffset += oTmp.offsetLeft;
		oTmp=oTmp.parentElement;
	}
	
	oTmp = tblNav;
	while (oTmp.parentElement != null){
		NavOffset += oTmp.offsetLeft;
		oTmp=oTmp.parentElement;
	}					
}

function GetDepthMask(TopicID){
	var iMask=0;
	
	if (dicTopics.Exists(TopicID.toString())){
		var oTopic=dicTopics.Item(TopicID.toString());
		var aItems=(new VBArray(oTopic.dicActions.Items())).toArray();					
	
		for (var i=0;i<aItems.length;i++){
			iMask=(iMask | aItems[i].DepthMask);
		}
	}
	
	return iMask;
}

function GetSecurityMask(TopicID){
	var iMask=0;
	if (dicTopics.Exists(TopicID.toString())){
		var oTopic=dicTopics.Item(TopicID.toString());			
		var aItems=(new VBArray(oTopic.dicActions.Items())).toArray();		
			
		for (var i=0;i<aItems.length;i++){
			iMask=(iMask | aItems[i].SecurityMask);
		}	
	}
	
	return iMask;			
}

function SetMasks(){
	var aItems=(new VBArray(dicTopics.Items())).toArray();
	var iTmp=0
	var e;
	
	try{		
		for (var i=0;i<aItems.length;i++){
			iTmp=0			
			aItems[i].DepthMask=GetDepthMask(aItems[i].ID);
			iTmp=0			
			aItems[i].SecurityMask=GetSecurityMask(aItems[i].ID);
		}		
		mbGotMasks=true;		
	}catch(e){}
}

function GetAvailActions(oTopic){
	var aItems=(new VBArray(oTopic.dicActions.Items())).toArray();
	var ret = new Array();
	
	if (aItems.length == 0 && top.mbSiteConfig == true){
		ret[0]='Configuration Sentinel';
	}
	
	for (var i=0;i<aItems.length;i++){		
		if ( (oTopic.AssetID == -1 || oTopic.AssetPath == msPath || 
		msPath.indexOf(oTopic.AssetPath + '\\') > -1 ||
		oTopic.AssetPath.indexOf(msPath + '\\') > -1) && 
		aItems[i].DepthMask & Math.pow(2,miDepth) ){
			if ((aItems[i].SecurityMask & msSecMask) || top.mbSiteConfig){
				//Check to see if in configuration mode				
				if (!oTopic.ConfigFlag || (oTopic.ConfigFlag && (top.mbSiteConfig || top.mbConfig))){
					ret[ret.length] = aItems[i];
				}
			}		
		}		
	}
		
	return ret;
}

function ClearNavigation(){
	DisplayStart=0;
	DisplayStop=-1;
	/*
	imgNext.disabled = true;
	imgPrev.disabled = true;
	imgNext.src = imgNext.getAttribute('DISABLEDIMAGE');
	imgPrev.src = imgPrev.getAttribute('DISABLEDIMAGE');
	imgPrev.style.cursor = 'auto';
	imgNext.style.cursor = 'auto';
	*/
}

function ClearButtons(){
	ClearNavigation();
	
	tblTabs.deleteRow(0);
	tblTabs.insertRow();		
}

function ResizeTopic(){	
	getOffsets();	
	ClearNavigation();
	
	for (var i=0;i<tblTabs.rows[0].cells.length;i++){	
		var oTD = tblTabs.rows[0].cells[i];
		oTD.style.display = 'block';
		if ((TabOffset + oTD.offsetLeft + oTD.offsetWidth) >= (NavOffset - 5)){
			oTD.style.display = 'none';						
			if (DisplayStop == -1){
				DisplayStop = oTD.cellIndex;
				/*
				imgNext.src = imgNext.getAttribute('IMAGE');
				imgNext.disabled = false;
				imgNext.style.cursor = 'hand';
				*/
			}
		}else{	
			oTD.style.display = 'block';			
		}
	}
}

function RefreshTopic(oAssetItem){
	var aItems=(new VBArray(dicTopics.Items())).toArray();
	var e;
	
	msAsset=oAssetItem.ID.toString();
	msPath=oAssetItem.Path;
	miDepth=oAssetItem.Depth;
	
	try{
		msSecMask=top.gSecMask;
	}catch(e){
		msSecMask=1;
	}
	
	if (!mbGotMasks){
		SetMasks();
	}
	ClearButtons();
		
	for (var i=0;i<aItems.length;i++){
		var aActions = GetAvailActions(aItems[i]);
		
		if (aActions.length > 0){
			SetButtonProperties(aItems[i]);		
		}						
	}
	
	//Hide appropriate Topics
	if (DisplayStop > 0){		
		for (var i=DisplayStop;i<tblTabs.rows[0].cells.length;i++){
			tblTabs.rows[0].cells[i].style.display='none';
		}
	}
		
	//Execute Last Selected Tab or The first Tab displayed if there was none selected
	try{
		if (moLast == null){	
			tblTabs.rows[0].cells[0].click();		
		}else{
			var oLast = document.all(moLast.TopicID);
			if (oLast != null){
				oLast.click();
				ScrollIntoView(oLast);			
			}else{
				tblTabs.rows[0].cells[0].click();
			}
		}
	}catch(e){
		fraAction.frmAction.action='init.asp';
		fraAction.frmAction.submit();		
		fraAction.SetAction(null);
		fraAction.moLast = null;
	}
}

function ScrollIntoView(oTopic){
	//var i=oTopic.cellIndex;	
	var i=0;
	
	for (i =0;i<tblTabs.rows[0].cells.length;i++){
		if (tblTabs.rows[0].cells[i].id == oTopic.id){
			break;
		}
	}
	
	var iDir = 1;
	
	if (i < DisplayStart){
		iDir = -1;
	}

	while(oTopic.style.display == 'none'){			
		Navigate(iDir);	
	}	
}

function SetButtonProperties(oItem){
	var aItems=(new VBArray(dicTopics.Items())).toArray();
	var iCellIndex = -1;	
	
	for (var i=0;i<tblTabs.rows[0].cells.length;i++){
		if (dicTopics.Exists(tblTabs.rows[0].cells[i].id.toString())){
			var oTmpItem = dicTopics(tblTabs.rows[0].cells[i].id.toString());
			if (oTmpItem.Order > oItem.Order){
				if (iCellIndex == -1 || (i < iCellIndex)){
					iCellIndex = i;					
				}
			}
		}				
	}	
	
	var oTD = tblTabs.rows[0].insertCell(iCellIndex);
	oTD.className='tab';

	var oTab = document.createElement('IG:tab');
		
	oTD.id = oItem.ID;
	oTab.innerText = oItem.Name;
	oTab.title = oItem.Name;
	if (oItem.ConfigFlag){ //Use Purple for Topic Color
		oTab.Color = '#cc99cc';
		oTab.Color2 = '#ffcccc';
		oTab.SelectedColor = '#ffcccc';
		oTab.SelectedColor2 = '#cc99cc';
	}
	
	oTD.setAttribute("TOPICID", oItem.ID);		
		
	oTD.appendChild(oTab);

	if ((TabOffset + oTD.offsetLeft + oTD.offsetWidth) >= (NavOffset - 5)){
		//oTD.style.display = 'none';
		if (DisplayStop == -1){
			DisplayStop = oTD.cellIndex;
			/*
			imgNext.src = imgNext.getAttribute('IMAGE');
			imgNext.disabled = false;
			imgNext.style.cursor = 'hand';
			*/
		}
	}
		
}

function Navigate(Dir){
	DisplayStart += Dir;
	DisplayStop += Dir;
	
	for (var i=0;i<DisplayStart;i++){
		tblTabs.rows[0].cells[i].style.display='none';
	}
	
	for (var i=DisplayStart;i<DisplayStop;i++){
		tblTabs.rows[0].cells[i].style.display='block';
	}
	
	for (var i=DisplayStop;i<tblTabs.rows[0].cells.length;i++){
		tblTabs.rows[0].cells[i].style.display='none';
	}
	/*
	if (DisplayStart > 0){
		imgPrev.src = imgPrev.getAttribute('IMAGE');
		imgPrev.disabled = false;
		imgPrev.style.cursor = 'hand';	
	}else{
		imgPrev.src = imgPrev.getAttribute('DISABLEDIMAGE');
		imgPrev.disabled = true;
		imgPrev.style.cursor = 'auto';
	}
	
	if (DisplayStop <= tblTabs.rows[0].cells.length - 1){
		imgNext.src = imgNext.getAttribute('IMAGE');
		imgNext.disabled = false;
		imgNext.style.cursor = 'hand';
	}else{
		imgNext.src = imgNext.getAttribute('DISABLEDIMAGE');
		imgNext.disabled = true;
		imgNext.style.cursor = 'auto';
	}
	*/
}

function ClearSelected(){
	var e;
	
	for (var i=0;i<tblTabs.rows[0].cells.length;i++){
		//tblTabs.rows[0].cells[i].className='tab';
		tblTabs.rows[0].cells[i].children[0].Selected = false;
	}	
}

function doClick(){	
	var eSrc=window.event.srcElement;
	undoEditSelect();	
	
	while(eSrc.tagName != 'TD' && eSrc.parentElement != null)
		eSrc = eSrc.parentElement;
	
	if (eSrc.className == 'tab' || eSrc.className == 'selected'){
		moLast = new Actual();
		
		eSrc.setAttribute('ACTASSET', msAsset);
		moLast.AssetID = msAsset;
		moLast.TopicID = eSrc.id;
		
		fraAction.SetAction(null,null);
		ClearSelected();
		//eSrc.className = 'selected';
		eSrc.children[0].Selected = true;		
		
		var iTopicID = eSrc.id;
				
		if (dicTopics.Exists(iTopicID.toString())){
			var oTopic=dicTopics.Item(iTopicID.toString());			
			var aItems=GetAvailActions(oTopic);
						
			if (aItems[0] == 'Configuration Sentinel'){
				fraAction.frmAction.action='init.asp';
				fraAction.frmAction.submit();
			}else{								
				for (var i=0;i<aItems.length;i++){
					fraAction.SetAction(aItems[i]);					
				}				
				fraAction.ResizeAction();
				
				fraAction.ExecuteDefault(oTopic);				
			}
		}
	}		
}

//Context Menu Functions
function returnFalse(){
	return false;
}

function ShowTopicList(){
	var iHeight = 0;	
	var oOld = moPopup.document.all('divMenu')
	if (oOld != null){
		oOld.removeNode(true);
	}		
						
	var oPopBody = moPopup.document.body;
	moPopup.document.createStyleSheet('../CSS/PopupMenu.css');
										
	var oDiv = moPopup.document.createElement('DIV');
	oDiv.id='divMenu';
	oDiv.attachEvent('onclick', menuTopicClick);
	oDiv.attachEvent('onmouseover', doMenuOver);
	oDiv.attachEvent('onmouseout', doMenuOut);	
	
	for (var i=0;i<tblTabs.rows[0].cells.length;i++){	
		var oMenuItem = moPopup.document.createElement('DIV');
		oMenuItem.innerText=tblTabs.rows[0].cells[i].innerText;
		oMenuItem.setAttribute('TOPICID', tblTabs.rows[0].cells[i].id);
		if (tblTabs.rows[0].cells[i].id == moLast.TopicID){
			oMenuItem.style.fontWeight = 'bold';
		}
		oDiv.appendChild(oMenuItem);										
	}				
	
	if (oDiv.children.length > 0){
		iHeight = (18 * oDiv.children.length) - ((oDiv.children.length-1) * 2);
		oPopBody.style.backgroundColor='black';
		oPopBody.id='bdyMenu';				
		oPopBody.appendChild(oDiv);
		oPopBody.attachEvent('onselectstart', returnFalse);
		moPopup.show(event.x + 10, event.y, 160, iHeight, document.body);
	}																
}

function menuTopicClick(){
	var eSrc=moPopup.document.parentWindow.window.event.srcElement;
	var iTopic = -1;
	moPopup.hide();
	
	iTopic = eSrc.getAttribute('TOPICID');
	if (parseInt(iTopic) >= -1){
		var oTD = document.all(iTopic.toString());
		oTD.click();
		ScrollIntoView(oTD);
	}	
}
