// ==UserScript==
// @name           daveramsey_cms
// @namespace      daveramsey.com
// @include        about:blank
// ==/UserScript==

var adminBaseUrl = 'https://www.daveramsey.com';

function hilightCmsItems()
{
	var allItems = $$('div._cmsTemplateItem_, div._cmsItem_');
	for (var i=0; i < allItems.length; i++) {  
		cmsDiv = allItems[i];
		decorateCmsItem(cmsDiv);
	}
}
function toggle(id)
{
	var e = document.getElementById(id);
	if (e.style.display == 'none')
		e.style.display = 'block';
	else
		e.style.display = 'none';
}
function decorateCmsItem(cmsDiv)
{
	var locale = "en_US";
	try {
		locale = cmsDiv.lang;
	}
	catch(err) {}
	
	if (cmsDiv.className.search(/_cmsMetaDefault_/) != -1 )
	{
		var cms_content_name = cmsDiv.id.substr(13);
		editDiv = document.createElement('div');
		editDiv.id = '_cmsEdit_metadata_'+cms_content_name;
		editDiv.style.backgroundColor = "#FFFF99"; //yellow
		editDiv.style.textAlign = "left";

		editDiv.innerHTML = '<nobreak>WARNING: This page is using default metadata <a ' + 
		' href="javascript:toggle(\'_cmsMetadata_\');">[View]</a> - Create Meta Content for: ' +
		' <a href="'+adminBaseUrl+'/admin/index.cfm?event=cms:dspModContent&content_itemXXcontent_category_id=100332&content_item_metadataXXcontent_template_id=100184&content_item_baseXXcontent_name='+strMetaContentName+'">this page</a> or ' +
		' <a href="'+adminBaseUrl+'/admin/index.cfm?event=cms:dspModContent&content_itemXXcontent_category_id=100332&content_item_metadataXXcontent_template_id=100184&content_item_baseXXcontent_name=meta_module_'+MachII_config_currentModuleName+'">this module ('+MachII_config_currentModuleName+')</a></nobreak>';
		cmsDiv.parentNode.insertBefore(editDiv, cmsDiv);

	}
	else if (cmsDiv.className.search(/_cmsMetaModuleDefault_/) != -1 )
	{
		var cms_content_name = cmsDiv.id.substr(13);
		editDiv = document.createElement('div');
		editDiv.id = '_cmsEdit_metadata_'+cms_content_name;
		editDiv.style.backgroundColor = "#FFFF99";
		editDiv.style.textAlign = "left";
		editDiv.innerHTML = '<nobreak>WARNING: This page is using default <strong>MODULE</strong> metadata: ' + 
			'<a href="javascript:toggle(\'_cmsMetadata_\');">[View]</a> ' +
			'<a href="'+adminBaseUrl+'/admin/index.cfm?event=cms:dspModContent&strMode=Update&intID=meta_module_'+MachII_config_currentModuleName+'">[Edit]</a> ' +
			'<a href="'+adminBaseUrl+'/admin/index.cfm?event=cms:dspModContent&content_itemXXcontent_category_id=100332&content_itemXXcontent_template_id=100184&content_itemXXcontent_name='+strMetaContentName+'">[Create page meta content]</a>';
			'</nobreak>';
			
		cmsDiv.parentNode.insertBefore(editDiv, cmsDiv);
	}
	else if (cmsDiv.className.search(/_cmsMeta_/) != -1 )
	{
		var cms_content_name = cmsDiv.id.substr(13);
		editDiv = document.createElement('div');
		editDiv.id = '_cmsEdit_metadata_'+cms_content_name;
		editDiv.style.backgroundColor = "#CCFF99";
		editDiv.style.textAlign = "left";
		editDiv.innerHTML = '<nobreak>Metadata: ' + 
			'<a href="javascript:toggle(\'_cmsMetadata_\');">[View]</a> ';
		if (cms_content_name != '') {
			editDiv.innerHTML = editDiv.innerHTML +
			'<a href="'+adminBaseUrl+'/admin/index.cfm?event=cms:dspModContent&strMode=Update&intID=' + cms_content_name + '&locale='+locale+'">[Edit]</a></nobreak>';
		}
			
		cmsDiv.parentNode.insertBefore(editDiv, cmsDiv);
	}
	else
	{
		var hilightColor = "#CCFF99"; // green
		var pendingLink = '';
		var cms_content_name = cmsDiv.id.substr(4);
		
		// see if this item has a pending version
		if ((pos = cmsDiv.className.search(/_cmsHasPendingVersion_/)) != -1 )
		{
			var cms_pending_version = cmsDiv.className.substr(pos+22);
			hilightColor = "#FFFF99"; //yellow
			pendingLink = '<a href="javascript:retrieveLatestContent(\''+cms_content_name+'\',\''+cmsDiv.id+'\',\''+locale+'\')">[View Pending]</a>';
		} 
		else if ((pos = cmsDiv.className.search(/_cmsIsPendingVersion_/)) != -1 )
		{
			var cms_pending_version = cmsDiv.className.substr(pos+21);
			hilightColor = "#FF4444"; //red
			pendingLink = '<a href="'+adminBaseUrl+'/admin/index.cfm?event=cms:actIssueVerdict&intVerdict=1&intID='+cms_content_name+'&intVersionID='+cms_pending_version+'&locale='+locale+'" onclick="return confirm(\'Are you sure?\');">[Approve]</a> ' +
			'<a href="javascript:retrieveContent(\''+cms_content_name+'\',\''+cmsDiv.id+'\',\''+locale+'\')">[View Live]</a>';
		}
		
		var restoreColor = cmsDiv.style.backgroundColor;
		var strOnmouseover = 'javascript:document.getElementById(\'cms_' + cms_content_name + '\').style.backgroundColor=\''+ hilightColor + '\';';
		var strOnmouseout =  'javascript:document.getElementById(\'cms_' + cms_content_name + '\').style.backgroundColor=\''+ restoreColor + '\';';

		// Insert an edit link before the span
		editDiv = document.createElement('div');
		editDiv.id = '_cmsEdit_'+cms_content_name;
	
		editDiv.innerHTML = '<nobreak><a target="_blank" title="CMS ID: ' +  cms_content_name + '" ' +
			'onmouseover="' + strOnmouseover + '"' +
			'onmouseout="' + strOnmouseout + '"' +
			'href="'+adminBaseUrl+'/admin/index.cfm?event=cms:dspModContent&strMode=Update&intID=' + cms_content_name + '&locale='+locale+'">[Edit Content]</a>&nbsp;' + 
			pendingLink +
			'</nobreak>';
			
		editDiv.style.backgroundColor = hilightColor;
		//editDiv.style.height = '2em';
		editDiv.style.lineHeight = '2em';
		editDiv.style.paddingLeft = '1em';
		editDiv.style.zIndex = '255';
		editDiv.style.position = 'relative'; // this is so the zIndex is respected.
		cmsDiv.style.outline = "3px dotted " + hilightColor;
		cmsDiv.parentNode.insertBefore(editDiv, cmsDiv);
		
	}

}

// Get the current version of a content item
function retrieveContent(cms_content_name, div_id, locale)
{
	var ts = new Date().getTime();

	if (!(parseInt(cms_content_name) > 0)) {
		var contentIdentityArg = 'strContentName';
	}
	else {
		var contentIdentityArg = 'intContentId';
	}

	  $j.ajax({
		  url: '/index.cfm?event=ajax.getContent&contentName='+cms_content_name+'&locale='+locale+'&ts='+ts+'&showCMS=1',
		  success: function(html){
		  	  editDiv = $j('#_cmsEdit_'+cms_content_name);
			  cmsDiv = $j('#'+div_id);
			  tempDiv = $j('<div id="tempDiv"/>');
			  tempDiv.html(html);
			  newCmsDiv = tempDiv.children(0);
			  newCmsDiv.attr('id','cms_'+cms_content_name);
			  $j(cmsDiv).after($j(newCmsDiv));
			  $j(cmsDiv).remove();
			  // remove the edit bar
			  $j(editDiv).remove();
			  // re-decorate the div
			  if (window.location.href.toLowerCase().indexOf('preview=1') < 1){
				  decorateCmsItem(newCmsDiv[0]);
			  }
			  cmsDiv = $j('#'+div_id);
			  rewriteLinks(cmsDiv[0]);
			  if (typeof postPreviewAction=='function'){
				  postPreviewAction();
			  }
		  }
	  });
}

//get the latest unapproved version of the item
function retrieveLatestContent(cms_content_name, div_id, locale)
{
	var ts = new Date().getTime();
	
	if (!(parseInt(cms_content_name) > 0)) {
		var contentIdentityArg = 'strContentName';
	}
	else {
		var contentIdentityArg = 'intContentId';
		}
	  $j.ajax({
		  url: '/index.cfm?event=ajax.getContent&contentName='+cms_content_name+'&locale='+locale+'&version=latest&ts='+ts+'&showCMS=1',
		  success: function(html){
		  	  editDiv = $j('#_cmsEdit_'+cms_content_name);
			  cmsDiv = $j('#'+div_id);
			  tempDiv = $j('<div id="tempDiv"/>');
			  tempDiv.html(html);
			  newCmsDiv = tempDiv.children(0);
			  newCmsDiv.attr('id','cms_'+cms_content_name);
			  $j(cmsDiv).after($j(newCmsDiv));
			  $j(cmsDiv).remove();
			  // remove the edit bar
			  $j(editDiv).remove();
			  // re-decorate the div
			  if (window.location.href.toLowerCase().indexOf('preview=1') < 1){
				  decorateCmsItem(newCmsDiv[0]);
			  }
			  cmsDiv = $j('#'+div_id);
			  rewriteLinks(cmsDiv[0]);
			  if (typeof postPreviewAction=='function'){
				  postPreviewAction();
			  }
		  }
	  });

}
function rewriteLinks(e)
{
	var allLinks, thisLink;
	
	var appendStr = 'showCMS=1';
	if (window.location.href.toLowerCase().indexOf('preview=1') > 0)
	{
		appendStr = 'showCMS=1&preview=1';
	}
	
	allLinks = e.getElementsByTagName('a');
	for (var i = 0; i < allLinks.length; i++) {
	    thisLink = allLinks[i];
		if ( (thisLink.href.substr(0,4) != 'java') && (thisLink.href.substr(0,4) != 'mailto') )
		{
			if (thisLink.href.match(/\?/i)) {
				// link already contains other parameters
				thisLink.href += '&' + appendStr
			} else {
				// link does not contain any parameters
				thisLink.href += '?' + appendStr;
			}
		}
	}
}

function swapPendingItems()
{
	var allItems = $$('div._cmsTemplateItem_, div._cmsItem_');
	for (var i=0; i < allItems.length; i++) {  
		cmsDiv = allItems[i];
		if ((pos = cmsDiv.className.search(/_cmsHasPendingVersion_/)) != -1 )
		{
			var cms_content_name = cmsDiv.id.substr(4);
			retrieveLatestContent(cms_content_name, cmsDiv.id);
		}
	}
}

// Get the current version of a content item
function clearCache(cms_content_name, div_id){
	var http = false;
	var ts = new Date().getTime();

	if(navigator.appName == "Microsoft Internet Explorer") {
	  http = new ActiveXObject("Microsoft.XMLHTTP");
	} else {
	  http = new XMLHttpRequest();
	} 

	  http.open("GET", '/index.cfm?event=clear-cache&cacheStrategy=content,contentBean&key='+cms_content_name+'&ts='+ts, true);
	  http.onreadystatechange=function() {
		    if(http.readyState == 4) {
				//retrieveContent(cms_content_name, div_id);
				location.reload(true);

		    }
	  }
	  http.send(null);
}


Event.observe(window, 'load', function(){

	if (window.location.href.toLowerCase().indexOf('showcms=1') > 0)
	{
		rewriteLinks(document);
		if (window.location.href.toLowerCase().indexOf('preview=1') > 0)
		{
			swapPendingItems();
			if (typeof postPreviewAction=='function'){
			  postPreviewAction();
			}
			
		}
		else
		{
			hilightCmsItems();
		}
	}
}
);



