// ==UserScript==
// @name           daveramsey_cms
// @namespace      daveramsey.com
// @include        about:blank
// ==/UserScript==

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 cms_id = cmsDiv.id.substr(4);

	if (cmsDiv.className.search(/_cmsMetaDefault_/) != -1 )
	{
		editDiv = document.createElement('div');
		editDiv.id = '_cmsEdit_'+cms_id;
		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>' +
		' (<a href="https://www.daveramsey.com/admin/index.cfm?event=cms:dspModContent&content_itemXXcontent_category_id=332&content_itemXXcontent_template_id=184&content_itemXXcontent_name='+strMetaContentName+'">Create Meta Content</a>)</nobreak>';
		cmsDiv.parentNode.insertBefore(editDiv, cmsDiv);

	}
	else if (cmsDiv.className.search(/_cmsMeta_/) != -1 )
	{
		editDiv = document.createElement('div');
		editDiv.id = '_cmsEdit_'+cms_id;
		editDiv.style.backgroundColor = "#CCFF99";
		editDiv.style.textAlign = "left";
		editDiv.innerHTML = '<nobreak>Metadata: <a ' + 
			' href="https://www.daveramsey.com/admin/index.cfm?event=cms:dspModContent&strMode=Update&intID=' + cms_id + '">[Edit]</a> ' +
			'<a href="javascript:toggle(\'_cmsMetadata_\');">[View]</a>' +
			'</nobreak>';
			
		cmsDiv.parentNode.insertBefore(editDiv, cmsDiv);
	}
	else
	{
		var hilightColor = "#CCFF99"; // green
		var pendingLink = '';
		
		// 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_id+'\',\''+cmsDiv.id+'\')">[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="https://www.daveramsey.com/admin/index.cfm?event=cms:actIssueVerdict&intVerdict=1&intID='+cms_id+'&intVersionID='+cms_pending_version+'" onclick="return confirm(\'Are you sure?\');">[Approve]</a> ' +
			'<a href="javascript:retrieveContent(\''+cms_id+'\',\''+cmsDiv.id+'\')">[View Live]</a>';
		}
		
		var restoreColor = cmsDiv.style.backgroundColor;
		var strOnmouseover = 'javascript:document.getElementById(\'cms_' + cms_id + '\').style.backgroundColor=\''+ hilightColor + '\';';
		var strOnmouseout =  'javascript:document.getElementById(\'cms_' + cms_id + '\').style.backgroundColor=\''+ restoreColor + '\';';

		// Insert an edit link before the span
		editDiv = document.createElement('div');
		editDiv.id = '_cmsEdit_'+cms_id;
		editDiv.innerHTML = '<nobreak><a target="_blank" title="CMS ID: ' +  cms_id + '" ' +
			'onmouseover="' + strOnmouseover + '"' +
			'onmouseout="' + strOnmouseout + '"' +
			'href="https://www.daveramsey.com/admin/index.cfm?event=cms:dspModContent&strMode=Update&intID=' + cms_id + '">[Edit Content]</a>&nbsp;' + 
			'<a href="/en/clear-item-cache/contentName/' + cms_id + '">[Clear Cache]</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_id, 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=ajax.getContent&intFlushCache=1&intContentId='+cms_id+'&ts='+ts+'&showCMS=1', true);
	  http.onreadystatechange=function() {
		    if(http.readyState == 4) {
		    	editDiv = document.getElementById('_cmsEdit_'+cms_id);
		    	cmsDiv = document.getElementById(div_id);
				tempDiv = document.createElement('div');
				tempDiv.innerHTML = http.responseText;
		    	cmsDiv.parentNode.replaceChild(tempDiv, cmsDiv);
		    	newCmsNode = document.getElementById('cms_'+cms_id);
		    	//  Now remove the extra parent div we've created
		    	newCmsNode.parentNode.parentNode.replaceChild(newCmsNode, newCmsNode.parentNode);
		    	// remove the edit bar
		    	newCmsNode.parentNode.removeChild(editDiv);
		    	// re-decorate the div
		    	decorateCmsItem(newCmsNode);
		    	cmsDiv = document.getElementById(div_id);
		    	rewriteLinks(cmsDiv);
		    }
	  }
	  http.send(null);
}

// get the latest unapproved version of the item
function retrieveLatestContent(cms_id, 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=ajax.getContent&intFlushCache=1&intContentId='+cms_id+'&intShowLatest=1&ts='+ts+'&showCMS=1', true);
	  http.onreadystatechange=function() {
	    if(http.readyState == 4) {
	    	editDiv = document.getElementById('_cmsEdit_'+cms_id);
	    	cmsDiv = document.getElementById(div_id);
			tempDiv = document.createElement('div');
			tempDiv.innerHTML = http.responseText;
	    	cmsDiv.parentNode.replaceChild(tempDiv, cmsDiv);
	    	newCmsNode = document.getElementById('cms_'+cms_id);
	    	//  Now remove the extra parent div we've created
	    	newCmsNode.parentNode.parentNode.replaceChild(newCmsNode, newCmsNode.parentNode);
	    	// remove the edit bar
	    	newCmsNode.parentNode.removeChild(editDiv);
	    	// re-decorate the div
	    	decorateCmsItem(newCmsNode);
	    	cmsDiv = document.getElementById(div_id);
	    	rewriteLinks(cmsDiv);
	    }
	  }
	  http.send(null);
}

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 findShortcut(event)
{
	if (!document.getElementById) return;
	if (window.event) event = window.event;
	if (event.ctrlKey && event.altKey)
	{
		var link = null;
		switch (event.keyCode ? event.keyCode : event.which ? event.which : null)
		{
	  		case 0x63:
	  			// User pressed CTRL+ALT+C
	  			document.location = window.location.href + '/?showCMS=1';
	  		break;
	  		case 0x76:
	  			// User pressed CTRL+ALT+V
	  			document.location = window.location.href + '/?showCMS=1&preview=1';
			break;
		}
	}             
}

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_id = cmsDiv.id.substr(4);
			retrieveLatestContent(cms_id, cmsDiv.id);
		}
	}
}

$j(document).ready(function(){
	if (window.location.href.toLowerCase().indexOf('showcms=1') > 0)
	{
		rewriteLinks(document);
		if (window.location.href.toLowerCase().indexOf('preview=1') > 0)
		{
			swapPendingItems();
		}
		else
		{
			hilightCmsItems();
		}
	}
	else
	{
		if (document.addEventListener)
	    {
	       document.addEventListener("keypress",findShortcut,false);
	    }
	    else if (document.attachEvent)
	    {
	       document.attachEvent("onkeypress", findShortcut);
	    }
	    else
	    {
	       document.onkeypress= findShortcut;
	    }
	}
}
);



