
/* manage the left accordion panels display */
commonspot.lview.left = {};

commonspot.lview.left.HEADING = 'left_panel_heading';
commonspot.lview.left.TITLE_CONTAINER = 'title_container';
commonspot.lview.left.TABS_CONTAINER = 'left_panel_tabs';
commonspot.lview.left.FOOTER = 'left_panel_footer';
commonspot.lview.left.PANES_CONTAINER = 'panes_container';
commonspot.lview.left.openClose = 1;
commonspot.lview.left.panelManager = {};

commonspot.lview.left.panelManager.getInitialData = function(onCompleteCallback)
{
   var loader = commonspot.clientUI.state.location.getLoaderURL('subsiteurl');
   var dsRoot = {datasetRoot: commonspot.data.uiState.lview};
   var cmdCollection = commonspot.ajax.commandEngine.commandCollectionFactory.getInstance(loader, onCompleteCallback);
   cmdCollection.add('LeftPane', 'getList', {userSelector: 'Current'}, dsRoot);
   cmdCollection.send();
};

commonspot.lview.left.panelManager.onShow = function(notificationType)
{
	if (notificationType == 'onDataChanged')
	{
		var left = $('lview_left');
  	 	var leftSideWidth = parseInt(left.offsetWidth);	
		show = (leftSideWidth > 0) ? true : false;
	}
	else
		show = true;
	if (show)
	{
	   var leftFrameContainer = $(commonspot.lview.common.FRAME_CONTAINER);
   	if (!leftFrameContainer)
	      commonspot.lview.left.panelManager.getInitialData(commonspot.lview.left.panelManager.drawPanels);
	}
};

commonspot.lview.left.panelManager.drawPanels = function()
{
	var dom, currentPanel, panelID, panel, panelTab, html, panelIframe, helpHTML, titleContainer, panesContainer, customizePanel, tabHead, tabCount=0, fn, closedTab, openPanelIndex, onclick, counter=0;
	var defIconURL = "/commonspot/dashboard/images/leftpane/default_icon.png";
	var left = $('lview_left');
	if (left)
	{
		commonspot.util.dom.removeAllChildren(left);
		var ds = commonspot.data.uiState.lview.dsCurrentPageType.getCurrentRow();
		if (!ds.isValidCSPage)	
			return;
	}	
	dom = document.createElement('div');
	dom.id = commonspot.lview.left.PANES_CONTAINER;
	dom.className = 'panes_container';
	panesContainer = left.appendChild(dom);
	
	dom = document.createElement('div');
	dom.id = commonspot.lview.left.HEADING;
	dom.className = 'frame_head';
	headingContainer = panesContainer.appendChild(dom);
	dom = document.createElement('h2');
	dom.id = commonspot.lview.left.TITLE_CONTAINER;
	titleContainer = headingContainer.appendChild(dom);
	dom = document.createElement('div');
	dom.id = commonspot.lview.common.FRAME_CONTAINER;
	leftFrameContainer = panesContainer.appendChild(dom);

	dom = document.createElement('div');
	dom.id = commonspot.lview.left.TABS_CONTAINER;
	dom.className = 'tabcontainer';
	tabsContainer = panesContainer.appendChild(dom);

	dom = document.createElement('div');
	dom.id = commonspot.lview.left.FOOTER;
	dom.className = 'footer';
	footer = panesContainer.appendChild(dom);

	customizePanel = footer.appendChild(document.createElement('div'));
	customizePanel.id = 'customizePanel';
	customizePanel.className = 'footer_icon';
	customizePanel.innerHTML = '<img src="/commonspot/dashboard/images/leftpane/customize.png" border="0" title="Customize Panels" alt="Customize Panels" class="iconimg asicon" valign="middle" onclick="commonspot.lightbox.openDialog(\'/commonspot/dashboard/lview/customize-left-pane.html\');">';
		
  var panels = commonspot.data.uiState.lview.LeftPane_getList;
  var panelCount = panels.getRowCount();

	tabHead = tabsContainer.appendChild(document.createElement('div'));
	tabHead.className = 'imagediv';
	tabHead.innerHTML = '<img src="/commonspot/dashboard/images/leftpane/tabcontainer_header.png" class="tabimage" height="7" width="192" border="0" alt="Resize">';
//	draggable = new Draggable($(tabHead), {handle: $(tabHead), starteffect: false, endeffect: false, zindex: 9999999, constraint: 'vertical', scroll: window, snap });
   for (var i=0; i<panelCount; i++)
   {
		currentPanel = panels.getRowByRowNumber(i);
		iconURL = (currentPanel.paneliconurl == '') ? defIconURL : currentPanel.paneliconurl;			
		panelID = (currentPanel.title).replace(' ','').toLowerCase();
		dom = document.createElement('div');
		dom.id = 'div_' + currentPanel.panelid;
		dom.className = 'panelcontainer';
		dom.title = currentPanel.description;
		onclick = function(e){
		   var event = e || window.event;	 
		   if(typeof event.stopPropagation!='undefined')
		      event.stopPropagation();
		   else
		      event.cancelBubble=true;		
			commonspot.lview.left.tabManager.checkPanels(event);
		};
		commonspot.util.event.addEvent(dom, "click", onclick);
		if (currentPanel.enabled == 1) // add as tabs
		{
			tabCount++;
			panelTab = tabsContainer.appendChild(dom);
			panelTab.className = 'inactive';
			panelTab.innerHTML = '<img src="'+ iconURL + '" class="iconimg" valign="middle" border="0" alt=""> <span class="titleClass">' + currentPanel.title + '</span>';
		}
		else if (currentPanel.enabled == 2) // add as icon
		{
			closedTab = footer.insertBefore(dom,customizePanel);
			closedTab.className = 'footer_icon';
			closedTab.innerHTML = '<img src="'+ iconURL + '" border="0" class="iconimg asicon" valign="middle" title="' + currentPanel.title + " - " + dom.title + '" alt="">';
		}
      panelIframe = leftFrameContainer.appendChild(document.createElement('iframe'));
      panelIframe.id = 'panelframe_' + currentPanel.panelid;
		panelIframe.setAttribute('frameborder', '0'); 
      panelIframe.className = 'inactiveframe';
      commonspot.data.uiState.lview.left.dsPanels.update({panelurl: currentPanel.panelurl, panelid: currentPanel.panelid, isStale: 0, title: currentPanel.title, enabled: currentPanel.enabled}, true, i);
      		 
		var lviewOpenPanelIndex = (commonspot.lview.left.readCookie('LviewOpenPanelIndex')) || '';
		var panelIndexInCookie = (lviewOpenPanelIndex != '')? lviewOpenPanelIndex : '0';
				
		if (counter == panelIndexInCookie) 
      {  
         panelIframe.src = currentPanel.panelurl;
        	panelIframe.className = 'activeframe';
			helpHTML = '<img src="icons/help.png" class="leftPaneHelp" id="help_' + currentPanel.panelid + '" onclick="commonspot.lview.left.panelManager.openHelpURL(\'' + currentPanel.panelhelpurl + '\',event);">';
			if (currentPanel.enabled == 1)
			{
				panelTab.className = 'active';
				$(commonspot.lview.left.TITLE_CONTAINER).innerHTML = helpHTML + panelTab.innerHTML;
			}	
			else
			{
				closedTab.className = 'footer_icon selected';
				$(commonspot.lview.left.TITLE_CONTAINER).innerHTML = helpHTML + '<img src="'+ iconURL + '" class="iconimg" valign="middle" border="0" alt=""> <span>' + currentPanel.title + '</span>';
			}
			openPanelIndex = currentPanel.panelid; 
      }  
		counter++; 
		
   }
	commonspot.data.uiState.lview.left.dsOpenFrame.update({openPanelIndex: openPanelIndex, tabCount: tabCount});
   commonspot.lview.common.layoutManager.adjustLayout();
};

//commonspot.data.uiState.lview.dsShowLeftSide.addObserver(commonspot.lview.left.panelManager);
commonspot.data.uiState.lview.dsCurrentPageType.addObserver(commonspot.lview.left.panelManager.onShow);

commonspot.lview.left.panelManager.updatePanel = function(panel, initialize, index)
{
	var leftFrameContainer = $(commonspot.lview.common.FRAME_CONTAINER);
	var curPanel, curID, helpHTML;
	var defIconURL = "/commonspot/dashboard/images/leftpane/default_icon.png";
   var panelFrame = $('panelframe_' + panel.panelid);
	var panels = commonspot.data.uiState.lview.LeftPane_getList.getData();
	for (var i=0; i<panels.length; i++)
	{
		curPanel =  document.getElementById('panelframe_' + panels[i].panelid);
		iconURL = (panels[i].paneliconurl == '') ? defIconURL : panels[i].paneliconurl;
		curID = panels[i].panelid;

		if (curPanel)
		{
			if(panel.panelid == curID)
			{				 
				createCookie('LviewOpenPanelIndex', i, 1);
				
				curPanel.className = 'activeframe';
				helpHTML = '<img src="icons/help.png" class="leftPaneHelp" id="help_' + curID + '" onclick="commonspot.lview.left.panelManager.openHelpURL(\'' + panels[i].panelhelpurl + '\',event);" />';				
				commonspot.data.uiState.lview.left.dsOpenFrame.update({openPanelIndex: curID});
				if (panels[i].enabled == 1)
					$(commonspot.lview.left.TITLE_CONTAINER).innerHTML = helpHTML + document.getElementById('div_' + curID).innerHTML;
				else if (panels[i].enabled == 2)
				{
					$('div_' + curID).className = 'footer_icon selected';
					$(commonspot.lview.left.TITLE_CONTAINER).innerHTML = helpHTML + '<img src="' + iconURL + '" class="iconimg" border="0" valign="middle" alt=""> <span>' + panels[i].title + '</span>';
				}
			}	
			else	
				curPanel.className = 'inactiveframe';
		}
	}
   var pgWin = panelFrame.contentWindow;
   // need initialization means, draw the HTML into the iframe
   if (initialize==1)
      panelFrame.src = panel.panelurl;      
		
   else if (initialize==2 && panelFrame.contentWindow.panelRefresh )
      panelFrame.contentWindow.panelRefresh();
		
   var dt = new Date().getTime();
   commonspot.data.uiState.lview.left.dsPanels.update(
								{
										loadtimestamp: dt, 
										pageid: commonspot.data.uiState.lview.dsCurrentPage.getCurrentRow().pageid, 
										isStale: 0
								}, true, index);
};


commonspot.lview.left.panelManager.openHelpURL = function(url,event)
{
   var event = event || window.event;	 
   if(typeof event.stopPropagation!='undefined')
      event.stopPropagation();
   else
      event.cancelBubble=true;

	commonspot.lview.openPopup(url);    
};

/**
 * Function to refresh panel if open, invalidate if closed.
 * 	Takes panelName to refresh (if open) or invalidate (if collapsed).
 * 	Invalidates all panels if no argument passed.
 */
commonspot.lview.left.panelManager.refreshOrInvalidatePanel = function(panelName) 
{
	var panelIndex;
	var REFRESH_PANEL = 2;	
	var left_framecontainer = $(commonspot.lview.common.FRAME_CONTAINER);
		
	if (left_framecontainer && commonspot.lview.left)
	{
		var curPanelObj, otherPanelObj;
		var dataset = commonspot.data.uiState.lview.left.dsPanels;
		var panelCount = dataset.getRowCount();
		var currentPanelIndex = commonspot.data.uiState.lview.left.dsOpenFrame.getCurrentRow().openPanelIndex;
		if (currentPanelIndex)
			curPanelObj = dataset.findRowsWithColumnValues({panelid: currentPanelIndex}, true);
		else
		{
			alert('Invalid panel! Panel name can be any of these only: Page Tools, Page View, Page Details, Page Cotributors, Page Versions.');	
			return;	
		}	
					
		if (typeof panelName != 'undefined') // If panel specified, handle that panel.
		{
			otherPanelObj = dataset.findRowsWithColumnValues({title: panelName}, true);
			if (otherPanelObj)
				panelIndex = otherPanelObj.panelid;
			else	
			{
				alert('Invalid panel name! Panel name can be any of these only: Page Tools, Page View, Page Details, Page Cotributors, Page Versions.');	
				return;											
			}
									
			// Refresh the panel, if it is open.
			if (currentPanelIndex == panelIndex)
				commonspot.lview.left.panelManager.updatePanel(curPanelObj, REFRESH_PANEL, dataset.getRowNumber(curPanelObj));
			else // If the panel in question is not open, set its dirty bit.
				commonspot.data.uiState.lview.left.dsPanels.update({ isStale: 1 }, true, dataset.getRowNumber(otherPanelObj));
		}
		else // If panel not specified, handle all panels.
		{
			for (var i = 0; i < panelCount; i++)
			{
				commonspot.data.uiState.lview.left.dsPanels.update({ isStale: 1 }, true, i);
			}
		}
	}
};

/**
 * Function to hide / show the lview panel frames.
 */
commonspot.lview.left.panelManager.setLeftPaneState = function(classname)
{
	var panels = commonspot.data.uiState.lview.LeftPane_getList.getData();
	var curFrame;
	for (var i=0; i<panels.length; i++)
	{
		curFrame = $('panelframe_' + panels[i].panelid);
		if (curFrame)
			curFrame.className = classname;
	}
	var container = $(commonspot.lview.left.PANES_CONTAINER);
	if (container)
		container.className = classname;	
};

var newwindow = '';

commonspot.lview.openPopup = function(url) 
{	 

	if (!newwindow.closed && newwindow.location)
	newwindow.location.href = url;
	
	else 
	{
		newwindow=window.open(url,'help','height=400,width=600,left=200,top=150,resizable=yes,scrollbars=yes,toolbar=no,status=yes');
		if (!newwindow.opener) newwindow.opener = self;
	}
	
	if (window.focus) {newwindow.focus()}
	return false;
}


/* manage the left accordion panel selections */
commonspot.lview.left.tabManager = {};

commonspot.lview.left.tabManager.checkPanels = function(e)
{
	var curDiv;
	if(!e)
		var e = window.event;
	if ($(commonspot.lview.common.FRAME_CONTAINER))
	{
		var srcElem = (window.event) ? e.srcElement : e.target;
	
		var newIndex = parseInt(srcElem.id.replace('div_',''));
		if (isNaN(newIndex))
			newIndex = parseInt(srcElem.parentNode.id.replace('div_',''));
	   var initializeState = null;
	   var oldIndex = commonspot.data.uiState.lview.left.dsOpenFrame.getCurrentRow().openPanelIndex;
	   var pageLoadTime = commonspot.lview.currentPage.getLoadTimestamp();
	   var dataSet = commonspot.data.uiState.lview.left.dsPanels;
		var data = dataSet.getData();
		// first reset classname
		if (newIndex != oldIndex)
		{
			for (var i=0; i<data.length; i++)
			{
				curDiv = $('div_' + data[i].panelid);
				if(data[i].enabled == 1)
					curDiv.className = 'inactive';
				else
					curDiv.className = 'footer_icon';
			}
		}
	   setTimeout(function(){
	      commonspot.data.uiState.lview.left.dsOpenFrame.update({openPanelIndex: newIndex});
	      if (newIndex != oldIndex)
	      {
	         // panel loadtimestamp not set means we did not load the html yet
	         var newPanel = dataSet.findRowsWithColumnValues({panelid: newIndex},true);
	         if(newPanel)
	         {
					// set classname so selected tab is highlighted
					if (newPanel.enabled == 1)
						$('div_' + newIndex).className = 'active';
					else
						$('div_' + newIndex).className = 'footer_icon selected';
	            if (!newPanel.loadtimestamp || commonspot.lview.isComingFromNonCSPage == true)
	               initializeState = 1;
	            else if (newPanel.loadtimestamp < pageLoadTime)
	               initializeState = 2;
					else if (newPanel.isStale) // If this dirty bit is set, the panel needs a refresh.
						initializeState = 2;
					else
						initializeState = 3;	 // just hide / unhide the correct frame
	            if (initializeState)
	               commonspot.lview.left.panelManager.updatePanel(newPanel,initializeState,dataSet.getRowNumber(newPanel));
	         }
	      }
	   },50);
   }

};

//commonspot.data.uiState.lview.left.dsOpenFrame.addObserver(commonspot.lview.left.tabManager.checkPanels);

commonspot.lview.left.leftFrameManagerClass = function()
{
	this.dataset = commonspot.data.uiState.lview.dsCurrentPage;
	this.dataset.addObserver(this);
}
commonspot.lview.left.leftFrameManagerClass.prototype.onDataChanged = function(dataset)
{
	commonspot.lview.left.panelManager.refreshOrInvalidatePanel();
}
// create instance
commonspot.lview.left.leftFrameManager = new commonspot.lview.left.leftFrameManagerClass();

commonspot.lview.left.displayManagerClass = function()
{
	this.leftSideElementID = 'lview_left';
	this.leftSideToggleElementID = 'toggle';
	
	this.dataset = commonspot.data.uiState.lview.dsShowLeftSide;
	this.dataset.addObserver(this);
	
};

commonspot.lview.left.displayManagerClass.prototype.onDataChanged = function(dataset)
{
	var show = this.dataset.getCurrentRow().show;
	alert(show);
	if(show)
		Effect.Appear(this.leftSideElementID, {duration: 0.6});
	else
		Effect.Fade(this.leftSideElementID, {duration: 0.4});		
};

commonspot.lview.left.displayManagerClass.prototype.showHide = function(show)
{
   commonspot.lview.common.layoutManager.stretchRight();  
   
   createCookie('CSLVIEWOPENCLOSE', commonspot.lview.left.openClose, 1);
   if(commonspot.lview.left.openClose == 0)
   		commonspot.lview.left.openClose = 1;
   else if(commonspot.lview.left.openClose == 1)
		commonspot.lview.left.openClose = 0;
};

function createCookie(name,value,days)
{
	if (days) { 
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		var expires = "; expires="+date.toGMTString();
		document.cookie = name+"="+value+expires+"; path=/";
	}
};

commonspot.lview.left.readCookie = function(cookiename)
{
   var cookie_start = document.cookie.indexOf(cookiename + "=");
  
   var cookie_value;
   if(cookie_start > 0)
   {
		cookie_value = document.cookie.charAt(cookie_start + cookiename.length +1);
        return cookie_value;
    }
   return '';	
};
// create instance
commonspot.lview.left.displayManager = new commonspot.lview.left.displayManagerClass();

