commonspot.data = {};

// constants for xpaths we use
commonspot.data.VALUE_XPATH = '/item';
commonspot.data.STRUCT_XPATH = '/item/data';
commonspot.data.ARRAY_XPATH = '/item/data/item';

// To be used for storing from elements
commonspot.data.formElements = [];
commonspot.data.formStorage = {};

// data processors that are really part of the dataset
commonspot.dataProcessors = {};

// GENERIC

/**
 * rtns html of a link to lview, showing requested pg in requested mode
 * @param subsite (string): subsite url; assumed to end w '/'
 * @param filename (string): name of file
 * @param linkText (string): text to show as a link
 * @param contributeMode (string): mode to show pg in (read/author/edit/approve)
 */
commonspot.dataProcessors.getLviewPageLink = function(subsite, filename, description, linkText, contributeMode, pageID, changesFrom, section )
{ 
	if( section == '') // the section variable decided to show names for 'Changes To My Content' and 'Changes Pending My Approval'
		return '<a onclick="commonspot.index.switchPageMode(' + pageID + ',\'' + contributeMode + '\');" href="#mode=' + contributeMode + '&url=' + subsite + filename + '" title="' + subsite + filename + ' - ' + description + '"  target="_top">' + linkText.unescapeHTML() + '</a>';  	
	else
		return '<a onclick="commonspot.index.switchPageMode(' + pageID + ',\'' + contributeMode + '\');" href="#mode=' + contributeMode + '&url=' + subsite + filename + '" title="' + subsite + filename + ' - ' + description + ' - Changes by ' + changesFrom + '"  target="_top">' + linkText.unescapeHTML() + '</a>';  	
};

/**
 * rtns html of link to visual diff for this pg
 * 
 * NEEDSWORK:
 * 	what's the real link? what args does it take?
 * 	when is this not shown?
 * 	what do we need to pass in here? fix here and in calling code.
 */
commonspot.dataProcessors.getVisualDiffLink = function(subsite, filename, linkText, pageID, mode)
{ 
	var imgHTML = '<span class="ico_visual_diff actionMontageIcon" onclick="commonspot.dialog.server.show(\'csModule=visual_diff/main_ui&fromDashboard=1&versionState=' + mode + '&pageID=' + pageID + '\');">&nbsp;</span>';
	return imgHTML;
};

/**
 * returns html for passed states, icons + text
 * @param section (string): mycs section being shown; corresponds to dashboard cmd, w/o target
 * @param isWIP (int, or string of one, interpreted as a boolean): wip or not
 * @param isApprovalNeeded (int, or string of one, interpreted as a boolean): approval needed or not
 * @param isReferredBack (int, or string of one, interpreted as a boolean): referred back or not
 * 
 * 	NEEDSWORK: right icons? any more?
 */
commonspot.dataProcessors.getActivityWorkflowPageStateHTML = function(section, isWIP, isApprovalNeeded, isReferredBack)
{
	var html = '';
	var iconPrefix = (section == 'getMyChanges') ? 'a' : '';

	if(isWIP==1 || isWIP=='true')
	{
		if( iconPrefix == 'a' )
			html += ' <span class="ico_' + iconPrefix + 'wip" align="top" title="Work in Progress">&nbsp;</span> Work In Progress ';
		else
			html += ' <span class="ico_' + iconPrefix + 'wip" align="top" title="Work in Progress by another person">&nbsp;</span> Work In Progress ';	
	}	
	
	if( isApprovalNeeded==1 || isApprovalNeeded=='true')
		html += ' <span class="ico_' + iconPrefix + 'pa" align="top" title="Pending Approval">&nbsp;</span> Pending Approval ';
	if( isReferredBack==1 || isReferredBack=='true')
		html += ' <span class="ico_' + iconPrefix + 'wip" align="top" title="Work in Progress - Referred Back">&nbsp;</span> Referred Back ';
	return html;
};

/**
 * returns html to display notification type, maybe w a link
 * @param notificationType (int): kind of notification; see code for interpretation
 * @param pageID (int): id of page
 */
commonspot.dataProcessors.getNotificationTypeHTML = function(row)
{ 
	switch(parseInt(row.notificationtype))
	{
		case 1:		// freshness reminder
			// Determine the target from 'pageType' and 'isUploadedDoc' and pass it.
			var objTargetType = getTargetType(row.pagetype,row.isuploadeddoc);
			var params = { pageid: row.id, targetType: objTargetType.targetType, pagetitle: row.title, reminderID: row.notificationobjectid, state: row.objectstatus };
			var url = '/commonspot/dashboard/dialogs/pageview/freshness-reminder-view.html?' + Object.toQueryString(params);			
			return '<span class="icon_link icon_contentfreshness" title="' + row.objecttitle + ' - ' + row.objectdescription + '"><a href="javascript:;" onclick="javascript:commonspot.lightbox.openDialog(\'' + url + '\');">Active Freshness Reminder</a> (' + row.objectstatus + ')</span>'; 
		case 2:		// work request			
			var objTargetType = null;
			if(row.pagetype != "")
			{
				objTargetType = getTargetType(row.pagetype,row.isuploadeddoc);
			}
			var params = { pageid: row.id, workRequestID: row.notificationobjectid, pageTitle: row.title, state: row.objectstatus, pageURL: row.link, pageType: row.pagetype, isUploadedDoc: row.isuploadeddoc };
			if(objTargetType)
			{
				params.targetType = objTargetType.targetType;
				params.titleText = objTargetType.titleText;
			}
			
			var url = '/commonspot/dashboard/dialogs/pageview/work-request-view.html?' + Object.toQueryString(params);
			return '<span class="icon_link icon_workrequests" title="' + row.objecttitle + ' - ' + row.objectdescription + '"><a href="javascript:;" onclick="commonspot.lightbox.openDialog(\'' + url + '\');">Incoming Work Request</a> (' + row.objectstatus + ')</span>';
		case 3:		// subscriptions
			return '<span class="icon_link icon_subscribe"><a href="javascript:;" onclick="javascript:commonspot.lightbox.openDialog(\'/commonspot/dashboard/dialogs/dashboard-subscriptions.html?pageID='+ row.id +'&NotificationsOnly=1\');">Subscription Notification</a></span>';
  		case 4:		// broken links
			return '<span class="icon_link icon_brokenlinks">Broken Link</span>';
	}
	
	return ''; 
};
function getTargetType(pageType,isUploadedDoc)
{
	var objTargetTypes = {};
	switch(parseInt(pageType))
	{
		case commonspot.constants.PAGETYPE_NORMAL:
			if(isUploadedDoc)
			{
				objTargetTypes.targetType = 'UploadedDocument';
				objTargetTypes.titleText = 'uploaded document';
			}
			else
			{
				objTargetTypes.targetType = 'Page';
				objTargetTypes.titleText = 'page';
			}
		break;
		case commonspot.constants.PAGETYPE_PAGE_SET:
			objTargetTypes.targetType = 'PageSet';
			objTargetTypes.titleText = 'page set';
		break;
		case commonspot.constants.PAGETYPE_USER_TEMPLATE:
			objTargetTypes.targetType = 'Template';
			objTargetTypes.titleText = 'template';
		break;
		case commonspot.constants.PAGETYPE_REGISTERED_URL:
			objTargetTypes.targetType = 'registeredurl';
			objTargetTypes.titleText = 'registered url';
		break;
		default:
			alert("Could not find an apropriate target.");
		break;	
	}
	return objTargetTypes;
}

// DATASET-SPECIFIC

commonspot.dataProcessors.Page_getInfo = function(row)
{
	var dateFieldsList = 'datecontentlastmodified,datecreated,datelastmajormod,datelastupdated,publicreleasedate,lockdate';
	commonspot.util.formatCSDateFields(row, dateFieldsList);
	row.pageactivationstatus_display = row.pageactivationstatus == 0 ? 'Active' : 'Inactive';
	row.lockusername_display = row.lockuserid == 0 ? 'None' : row.lockusername;
	row.keywords_display = row.keywords == '' ? '<div class="disabled">(None)</div>' : row.keywords;
	return row;
};

commonspot.dataProcessors.ActivityWorkflow_getMyChanges = function(row)
{  
	commonspot.util.formatCSDateFields(row, 'datecontentlastmodified,changedate,changedateapproval');
	row.linkHTML = commonspot.dataProcessors.getLviewPageLink(row.subsiteurl, row.filename, row.description.unescapeHTML(), row.title, 'author', row.id, '', '');
	row.iconHTML = commonspot.dataProcessors.getActivityWorkflowPageStateHTML('getMyChanges', row.iswip, row.isapprovalneeded, row.isreferredback);
	row.diffLinkHTML = commonspot.dataProcessors.getVisualDiffLink(row.subsiteurl, row.filename, row.title, row.id, 'author');
	 
	return row;
};
commonspot.dataProcessors.ActivityWorkflow_getChangesToMyContent = function(row)
{
	commonspot.util.formatCSDateFields(row, 'datecontentlastmodified,changedate,changedateapproval');
	row.linkHTML = commonspot.dataProcessors.getLviewPageLink(row.subsiteurl, row.filename, row.description.unescapeHTML(), row.title, 'edit', row.id, row.changesfrom, 'getChangesToMyContent');
	row.iconHTML = commonspot.dataProcessors.getActivityWorkflowPageStateHTML('getChangesToMyContent', row.iswip, row.isapprovalneeded, row.isreferredback);
	row.diffLinkHTML = commonspot.dataProcessors.getVisualDiffLink(row.subsiteurl, row.filename, row.title, row.id, 'edit');
	return row;
};
commonspot.dataProcessors.ActivityWorkflow_getPagesRequiringMyApproval = function(row)
{ 
	commonspot.util.formatCSDateFields(row, 'datecontentlastmodified,changedate');
	row.linkHTML = commonspot.dataProcessors.getLviewPageLink(row.subsiteurl, row.filename, row.description.unescapeHTML(), row.title, 'approve', row.id, row.changesfrom, 'getPagesRequiringMyApproval');
	row.iconHTML = commonspot.dataProcessors.getActivityWorkflowPageStateHTML('getPagesRequiringMyApproval', row.iswip, row.isapprovalneeded, row.isreferredback);
	row.diffLinkHTML = commonspot.dataProcessors.getVisualDiffLink(row.subsiteurl, row.filename, row.title, row.id, 'approve');
	return row;
};
commonspot.dataProcessors.ActivityWorkflow_getNotifications = function(row)
{  
	commonspot.util.formatCSDateFields(row, 'notificationdate');
	row.linkHTML = (row.notificationtype == 2 && row.id == 0) ? 'General Work Request' : commonspotLocal.pageList.formatLinkColumn(row, '', 'MyNotificationSection');
	row.iconHTML = commonspot.dataProcessors.getNotificationTypeHTML(row);
	return row;
};

commonspot.dataProcessors.Reminders_getDashboardList = function(row)
{
	row.openRemindersLinkHTML = "commonspot.dialog.client.show('/commonspot/dashboard/dialogs/" + row.dialogname + ".html?requestfrom=dashboard')";
	return row;
};

commonspot.dataProcessors.SavedSearches_getFavoritesList = function(row)
{
	row.runSavedSearchLinkHTML = "runSavedSearch(" + row.id + ",'" + row.type + "')";
	row.editSavedSearchLinkHTML = "commonspot.lightbox.openDialog('/commonspot/dashboard/dialogs/tools/advanced-search.html?mode=edit&formtype=" + row.type + "&savedSearchID=" + row.id + "');";
	return row;
};

commonspot.dataProcessors.Shortcuts_getFavoritesList = function(row)
{
	row.openShortcutsLinkHTML = "commonspot.lightbox.openDialog('" + row.shortcuturl + "');";
	return row;
};

with(commonspot.data)
{
	// STATE OF THE UI ITSELF, NOT SERVER-SIDE DATA
	commonspot.data.uiState = {};
	
	// general
	
	// changes the whole ui to a different mode (my cs, read, author, site admin etc)
	commonspot.data.uiState.dsMode = new commonspot.spry.Dataset({rows: {mode: null, baseMode: null, title: null, currenturl:null, lviewPageTitle:null}});
	
	// doesn't control anything, but it's the reference used by all modes to find appropriate loaders
	commonspot.data.uiState.dsLocation = new commonspot.spry.Dataset({rows: {subsiteid: null, siteid: null, subsiteurl: null, siteurl: null, serveradminurl: null, menucontexttimestamp: null, sitetype: -1, sitename: null, subsitename: null}, xpath: STRUCT_XPATH});

	// turns debug tools on and off; no interface to change this, and doesn't affect anything yet either
	commonspot.data.uiState.dsDebug = new commonspot.spry.Dataset({rows: {debug: false}});
	
	
	// my commonspot
	
	commonspot.data.uiState.activityWorkflowSectionInit = function(sectionID)
	{
		commonspot.data.uiState.mycs.activityWorkflow[sectionID] = new commonspot.spry.Dataset({rows: {expand: true}});
	}
	
	commonspot.data.uiState.mycs = {};
	
	commonspot.data.uiState.mycs.activityWorkflow = {};
	commonspot.data.uiState.activityWorkflowSectionInit('getMyChanges');
	commonspot.data.uiState.activityWorkflowSectionInit('getChangesToMyContent');
	commonspot.data.uiState.activityWorkflowSectionInit('getPagesRequiringMyApproval');
	commonspot.data.uiState.activityWorkflowSectionInit('getNotifications');
	
	
	// lview
	
	commonspot.data.uiState.lview = {};
	
	// controls the pg displayed in lview; changing it loads the page and its data, adjusts the ui
	commonspot.data.uiState.lview.dsCurrentPage = new commonspot.spry.Dataset({rows: {url: null, pageid: 0, title: null, loadtimestamp: null, pageactivationstatus: null, qstring: null, pagetype: 0}, xpath: STRUCT_XPATH});

   commonspot.data.uiState.lview.LeftPane_getList = new commonspot.spry.Dataset({xpath: ARRAY_XPATH});

	// if true, lview tries to stay in the same mode (read/author/edit etc) when navigating to new pages; not implemented yet
	commonspot.data.uiState.lview.dsContributeModeLocked = new commonspot.spry.Dataset({rows: {locked: false}});
	
	// compare mode
	commonspot.data.uiState.lview.dsCompare = new commonspot.spry.Dataset({rows: {on: false, versionTimeStamp1: '', versionTimeStamp2: ''}});
	
	// control of lview furniture
	commonspot.data.uiState.lview.dsShowLeftSide = new commonspot.spry.Dataset({rows: {show: null}});
	commonspot.data.uiState.lview.dsShowBreadcrumbs = new commonspot.spry.Dataset({rows: {show: true}});
	commonspot.data.uiState.lview.dsCurrentPageType = new commonspot.spry.Dataset({rows: {isValidCSPage: true}});
	
   // accordion panels
   commonspot.data.uiState.lview.left = {};
  
   // controls the panels display in the lview for current page
	// Note: isStale is set to 1 to indicate the panel needs a refresh.
   commonspot.data.uiState.lview.left.dsPanels = new commonspot.spry.Dataset({rows: {panelid: 0, panelurl: '', pageid: 0, loadtimestamp: null, isStale: 0, title: null, enabled: 1}, xpath: STRUCT_XPATH});   
	
   // open panel information
   commonspot.data.uiState.lview.left.dsOpenFrame = new commonspot.spry.Dataset({rows: {openPanelIndex: 0, panelHeight: 0, tabCount: 1}});

   commonspot.data.uiState.menus = {};
   // list of menuclasses for this user for this site/subsite
   commonspot.data.Server_GetInfo = new commonspot.spry.Dataset({xpath: STRUCT_XPATH});
   commonspot.data.Site_GetMenuContext = new commonspot.spry.Dataset({xpath: STRUCT_XPATH});
   commonspot.data.SpellCheck_GetSettings = new commonspot.spry.Dataset({xpath: STRUCT_XPATH});
   commonspot.data.Server_getAuthorSuspendState = new commonspot.spry.Dataset({xpath: STRUCT_XPATH});
   commonspot.data.Site_getAuthorSuspendState = new commonspot.spry.Dataset({xpath: STRUCT_XPATH});


   // list of menuclasses for this user for this page
   commonspot.data.uiState.menus.dsPageMenuClasses = new commonspot.spry.Dataset( 
							{ rows: {enabledMenuClasses: null, 
							  visbleMenuClasses: null, 
							  showSubmit: false, 
							  pageid: 0, 
							  loadtimestamp: null, 
							  approvalStatus: null}});
   
	// COMMONSPOT DATA
	
	// current user
	commonspot.data.Users_GetUserInfo = new commonspot.spry.Dataset({rows: {name: '', canAdminSite: 0, canAdminUsersGroups: 0}, xpath: STRUCT_XPATH});	
	commonspot.data.Server_CheckValid = new commonspot.spry.Dataset({xpath: STRUCT_XPATH});	
   
	// dashboard
	commonspot.data.mycs = {};
	
	// activity-workflow
	commonspot.data.mycs.DashboardSection_getList = new commonspot.spry.Dataset({xpath: ARRAY_XPATH});
	commonspot.data.mycs.ActivityWorkflow_getMyChanges = new commonspot.spry.Dataset({xpath: ARRAY_XPATH, dataRowPreprocessor: commonspot.dataProcessors.ActivityWorkflow_getMyChanges});
	commonspot.data.mycs.ActivityWorkflow_getChangesToMyContent = new commonspot.spry.Dataset({xpath: ARRAY_XPATH, dataRowPreprocessor: commonspot.dataProcessors.ActivityWorkflow_getChangesToMyContent});
	commonspot.data.mycs.ActivityWorkflow_getPagesRequiringMyApproval = new commonspot.spry.Dataset({xpath: ARRAY_XPATH, dataRowPreprocessor: commonspot.dataProcessors.ActivityWorkflow_getPagesRequiringMyApproval});
	commonspot.data.mycs.ActivityWorkflow_getNotifications = new commonspot.spry.Dataset({xpath: ARRAY_XPATH, dataRowPreprocessor: commonspot.dataProcessors.ActivityWorkflow_getNotifications});
	
	//	other
	commonspot.data.mycs.Shortcuts_getMaxDashboardItems = new commonspot.spry.Dataset({xpath: STRUCT_XPATH});
	commonspot.data.mycs.Shortcuts_getFavoritesList = new commonspot.spry.Dataset({xpath: ARRAY_XPATH, dataRowPreprocessor: commonspot.dataProcessors.Shortcuts_getFavoritesList});
	commonspot.data.mycs.SavedSearches_getMaxDashboardItems = new commonspot.spry.Dataset({xpath: STRUCT_XPATH});
	commonspot.data.mycs.SavedSearches_getFavoritesList = new commonspot.spry.Dataset({xpath: ARRAY_XPATH, dataRowPreprocessor: commonspot.dataProcessors.SavedSearches_getFavoritesList});
	commonspot.data.mycs.Reminders_getDashboardList = new commonspot.spry.Dataset({xpath: ARRAY_XPATH, dataRowPreprocessor: commonspot.dataProcessors.Reminders_getDashboardList});
	
	
	// page detail
	commonspot.data.page = {};
	commonspot.data.page.Page_getInfo = new commonspot.spry.Dataset({xpath: STRUCT_XPATH, dataRowPreprocessor: commonspot.dataProcessors.Page_getInfo});
	commonspot.data.page.PageSecurity_getUserRights = new commonspot.spry.Dataset({xpath: STRUCT_XPATH});
	commonspot.data.page.Page_getContributors = new commonspot.spry.Dataset({xpath: ARRAY_XPATH});
	commonspot.data.page.Page_getParentTemplates = new commonspot.spry.Dataset({xpath: ARRAY_XPATH});
	commonspot.data.page.Page_getPublishInfo = new commonspot.spry.Dataset({xpath:  STRUCT_XPATH});
	commonspot.data.page.Page_getBrokenLinks = new commonspot.spry.Dataset({xpath: ARRAY_XPATH});
	commonspot.data.page.Page_getReferringObjects = new commonspot.spry.Dataset({xpath: ARRAY_XPATH});
	commonspot.data.page.FreshnessReminders_getList = new commonspot.spry.Dataset({xpath: ARRAY_XPATH});
	commonspot.data.page.WorkRequests_getList = new commonspot.spry.Dataset({xpath: ARRAY_XPATH});
	commonspot.data.page.ActivityWorkflow_GetWIPCounts = new commonspot.spry.Dataset({xpath: STRUCT_XPATH});
	
	// dialogs and other pages (admin...) with datasets that only they reference should use their own namespace that goes away when the page closes
	// that means they should *not* be under commonspot{}, but ideally should identifiably belong to it
	// suggestion: commonspotLocalData

};

/************************* New Coding Standard *************************/

/*
 * Refresh My Favorite Shortcuts Panel.
 */
commonspot.data.issueMyShortcutsGetCommand = function(doAllPanels)
{
	if(commonspot.data.uiState.dsMode.getCurrentRow().baseMode != 'mycs') // not in my commonspot
		return;
	
	var loaderURL = commonspot.clientUI.state.location.getLoaderURL('subsiteurl');
	var collectionOptions = {onCompleteCallback: onCompleteCallback_MyShortcutsGetCommand, doAllPanels: !!doAllPanels}; // doAllPanels: custom option to get other data onComplete
	var cmds = commonspot.ajax.commandEngine.commandCollectionFactory.getInstance(loaderURL, collectionOptions);
	 
	var cmdOptions = {datasetRoot: commonspot.data.mycs, datasetName: 'Shortcuts_getMaxDashboardItems'};
	cmds.add('Shortcuts', 'getMaxDashboardItems', null, cmdOptions);
	
	cmdOptions = {datasetRoot: commonspot.data.mycs, datasetName: 'Shortcuts_getFavoritesList'};
	cmds.add('Shortcuts', 'getFavoritesList', { type: 'All' }, cmdOptions); 		
	
	cmds.send();															 
}

/* 
 * Callback function: My Favorite Shortcuts Panel.
 */
function onCompleteCallback_MyShortcutsGetCommand()
{
	if( this.hasAnyError )
		return; 
		
	$('loadingShortcuts').style.display = 'none';
	var ds = commonspot.data.mycs.Shortcuts_getFavoritesList;
	var maxItem = commonspot.data.mycs.Shortcuts_getMaxDashboardItems.getData();
	commonspot.data.manageMoreLessLink(ds, maxItem, 'shortcuts', 'shortcutsMoreLink');	
	
	// Load My Favorite Saved Searches Panel.
	if(this.options.doAllPanels)
		commonspot.data.issueSavedSearchGetCommand(true);
}

/*
 * Refresh My Favorite Saved Searches Panel.
 */
commonspot.data.issueSavedSearchGetCommand = function(doAllPanels)
{
	if(commonspot.data.uiState.dsMode.getCurrentRow().baseMode != 'mycs') // not in my commonspot
		return;
		
	var loaderURL = commonspot.clientUI.state.location.getLoaderURL('subsiteurl');
	var collectionOptions = {onCompleteCallback: onCompleteCallback_SavedSearchGetCommand, doAllPanels: !!doAllPanels };
	var cmds = commonspot.ajax.commandEngine.commandCollectionFactory.getInstance(loaderURL, collectionOptions);
	
	var cmdOptions = {datasetRoot: commonspot.data.mycs, datasetName: 'SavedSearches_getMaxDashboardItems'};
	cmds.add('SavedSearches', 'getMaxDashboardItems', null, cmdOptions);
	
	cmdOptions = {datasetRoot: commonspot.data.mycs, datasetName: 'SavedSearches_getFavoritesList'}; 
	cmds.add('SavedSearches', 'getFavoritesList', { type: 'All' }, cmdOptions); 	
		
	cmds.send();															 
}

/*
 * Callback function: My Favorite Saved Searches Panel.
 */
function onCompleteCallback_SavedSearchGetCommand()
{
	if( this.hasAnyError )
		return; 
		
	$('loadingSavedSearches').style.display = 'none';
	var ds = commonspot.data.mycs.SavedSearches_getFavoritesList;
	var maxItem = commonspot.data.mycs.SavedSearches_getMaxDashboardItems.getData();
	commonspot.data.manageMoreLessLink(ds, maxItem, 'savedsearches', 'savedSearchMoreLink');
	
	// Load Reminders Panel.
	if(this.options.doAllPanels)
		commonspot.data.issueRemindersGetCommand(); 
} 

/*
 * Refresh Reminders Panel.
 */
commonspot.data.issueRemindersGetCommand = function() // last one in the chain, doesn't take doAllPanels arg
{
	var loaderURL = commonspot.clientUI.state.location.getLoaderURL('subsiteurl');
	var collectionOptions = {onCompleteCallback: onCompleteCallback_RemindersGetCommand };
	var cmds = commonspot.ajax.commandEngine.commandCollectionFactory.getInstance(loaderURL, collectionOptions);
	var cmdOptions = {datasetRoot: commonspot.data.mycs, datasetName: 'Reminders_getDashboardList'};
	
	cmds.add('Reminders', 'getDashboardList', null, cmdOptions); 		
	cmds.send();										 
}

/*
 * Callback function: My Favorite Saved Searches Panel.
 */
function onCompleteCallback_RemindersGetCommand()
{
	if( this.hasAnyError )
		return; 
		
	$('loadingReminders').style.display = 'none';	 
} 
 
 
// Issue command to refresh Page Activity And Notifications panel.
commonspot.data.issuePageActivityAndNotificationsGetCommand = function(LOADER_URL)
{
	var cmdArgs = {userSelector: 'Current', includeHidden: 0};
	var cmdOptions = {datasetRoot: commonspot.data.mycs, datasetName: 'DashboardSection_getList'};
	commonspot.ajax.commandEngine.sendOneCommand(LOADER_URL, 'DashboardSection', 'getList', cmdArgs, cmdOptions);	
}


commonspot.data.getFormVariables = function(name)
{
	if (commonspot.data.formStorage[name] != '')
		return commonspot.data.formStorage[name];
	else
		alert('No form variables are stored');
};

commonspot.data.getVersionState = function()
{
	var versionState = '2';
	
	switch (commonspot.data.uiState.dsMode.getCurrentRow().mode)
	{
		case 'read':
			versionState = '2'; 
			break;
		case 'author':
		case 'edit':
			versionState = '3,2';
			break;
		case 'approve':
			versionState = '5,4,3,2';
			break;			
	}
	
	return versionState;
};
 
function runSavedSearch(ssID, type, callback)
{
	var reportName = (type === "Image") ? "tools/image-gallery-results.html" : "reports/pages-uploads-urls-report.html";
	var modeName = (type === "Image") ? "runImgSavedSearch" : "runPgSavedSearch";
	var callbackParam = "";
	if(callback)
		callbackParam = ((type === "Image") ? "&ImageCallback=" : "&callback=") + callback;
	var dlgUrl = "/commonspot/dashboard/dialogs/" + reportName + "?mode=" + modeName + "&ssID=" + ssID + callbackParam;
	commonspot.lightbox.openDialog(dlgUrl);
} 

commonspot.data.manageMoreLessLink = function(ds, maxItem, containerID, linkContainerID)
{
	var rowCount = ds.getRowCount();
	var moreRowCount = parseInt(rowCount) - parseInt(maxItem);	
	var moreLinkHTML = '';
	
	if( moreRowCount > 0 )
		moreLinkHTML += '<a onclick="commonspot.data.toggleShowMore(\''+ containerID +'\',\''+ linkContainerID +'\', 0 ,'+ moreRowCount +');" href="javascript:;" title="more data is available than can be shown here">'+ moreRowCount +' more</a>' +
		'<div style="font-style: italic; color: #999999">(more data is available)</div>';
	
	commonspotLocal.util.setValue(linkContainerID, moreLinkHTML);	
	 		
	var lessContainer = commonspot.util.dom.getChildrenByClassName(containerID, 'data_less');
	var moreContainer = commonspot.util.dom.getChildrenByClassName(containerID, 'data_more');	
	var rowsToMove = commonspot.util.dom.getChildrenByClassName(containerID, 'item', 'div', true);
	var rowsToMoveCount = Math.min(rowsToMove.length, maxItem);
	commonspot.util.dom.removeAllChildren(lessContainer);
	
	for(i = 0; i < rowsToMoveCount; i++)
	{
		var thisRow = rowsToMove[i];
		moreContainer.removeChild(thisRow);
		lessContainer.appendChild(thisRow);
	} 
}

commonspot.data.toggleShowMore = function(containerID, linkContainerID, state, moreRowCount)
{ 
	var newstate = (state)? 0 : 1;
	var linkText = (state == 0) ? 'show less' : moreRowCount + ' more' + '<div style="font-style: italic; color: #999999">(more data is available than can be shown here)</div>';
	var linkOverText = (state == 0) ? '' : 'more data is available than can be shown here';
	
	var moreLinkHTML = '<a onclick="commonspot.data.toggleShowMore(\''+ containerID +'\', \''+ linkContainerID +'\', '+ newstate +' ,'+ moreRowCount +');" href="javascript:;" title="'+ linkOverText +'" >'+ linkText +'</a>';
	commonspotLocal.util.setValue(linkContainerID, moreLinkHTML);	 
	
	var moreContainer = commonspot.util.dom.getChildrenByClassName(containerID, 'data_more');	
	moreContainer.style.display = (state == 0)? "" : "none";	
}

