function hideShowImage(spanID, imgID) {
  spanElement = document.getElementById(spanID);
  imgElement = document.getElementById(imgID);
  if (imgElement.style.display == "none") {
    imgElement.style.display = "";
    spanElement.innerHTML = "Hide image";
    spanElement.className = "imagehide";
  } else {
    imgElement.style.display = "none";
    spanElement.innerHTML = "Show image";
    spanElement.className = "imageshow";
  }
}

function hideShowElement(spanID, elementID) {
  spanElement = document.getElementById(spanID);
  targetElement = document.getElementById(elementID);
  if (targetElement.style.display == "none") {
    spanElement.title = "Collapse section";
    spanElement.className = spanElement.className.replace("sectionexpand", "sectioncollapse");
    // targetElement.style.display = "";
    jQuery(targetElement).slideDown(250);
  } else {
    // targetElement.style.display = "none";
    jQuery(targetElement).slideUp(250);
    spanElement.title = "Expand section";
    spanElement.className = spanElement.className.replace("sectioncollapse", "sectionexpand");
  }
}

function collapseAll()
{
	var pc = document.getElementById("primary-channel");
	if( !pc )
	    pc = document.getElementById("article-div");
	var items = pc.getElementsByTagName("span");
	for( var i = 0; i < items.length; ++i )
	{
		if( items[i].className.indexOf( "sectioncollapse" ) > -1 )
		{
			var ah = items[i].getElementsByTagName("A")[0].href;
			if( ah.substr(0, 11) == "javascript:" )
			{
				ah = ah.substr(11);
				eval(unescape(ah));
			}
		}
	}
}

function expandAll()
{
	var pc = document.getElementById("primary-channel");
	if( !pc )
	    pc = document.getElementById("article-div");
	var items = pc.getElementsByTagName("span");
	for( var i = 0; i < items.length; ++i )
	{
		if( items[i].className.indexOf( "sectionexpand" ) > -1 )
		{
			var ah = items[i].getElementsByTagName("A")[0].href;
			if( ah.substr(0, 11) == "javascript:" )
			{
				ah = ah.substr(11);
				eval(unescape(ah));
			}
		}
	}
}

function getChildElementsByTagName( obj, tag )
{
	// Can't use getElementsByTagName as it searches the entire child tree.
	var result = new Array();
	var fn = obj.firstChild;
	while( fn )
	{
		if( fn.nodeType == 1 )
		{
			if( fn.tagName.toUpperCase() == tag.toUpperCase() )
				result.push(fn);
		}
		fn = fn.nextSibling;
	}
	return result;
}

function collapseAllFeatures( featuresDiv )
{
	var table = getChildElementsByTagName( document.getElementById( featuresDiv ), "table" )[ 1 ];
	var tbody = table.getElementsByTagName( "tbody" )[ 0 ];
	var rows = getChildElementsByTagName( tbody, "tr" );
	for( var i = 0; i < rows.length; ++i )
	{
		var td = rows[ i ].getElementsByTagName( "td" )[ 0 ];
		var span = td.getElementsByTagName( "h2" )[ 0 ];
		span = span.getElementsByTagName( "span" )[ 0 ];
		span = span.getElementsByTagName( "span" )[ 0 ];
		if( span.className == "sectioncollapse" )
		{
			var ah = span.getElementsByTagName("A")[0].href;
			if( ah.substr(0, 11) == "javascript:" )
			{
				ah = ah.substr(11);
				eval(unescape(ah));
			}
		}
		var list = getChildElementsByTagName( td.getElementsByTagName( "div" )[ 0 ].getElementsByTagName( "ul" )[ 0 ], "li" );
		for( var j = 0; j < list.length; ++j )
		{
			var span = list[ j ].getElementsByTagName( "span" )[ 0 ];
			if( span.className == "sectioncollapse" )
			{
				var ah = span.getElementsByTagName("A")[0].href;
				if( ah.substr(0, 11) == "javascript:" )
				{
					ah = ah.substr(11);
					eval(unescape(ah));
				}
			}
		}
	}
}

function expandAllFeatures( featuresDiv )
{
	var table = getChildElementsByTagName( document.getElementById( featuresDiv ), "table" )[ 1 ];
	var tbody = table.getElementsByTagName( "tbody" )[ 0 ];
	var rows = getChildElementsByTagName( tbody, "tr" );
	for( var i = 0; i < rows.length; ++i )
	{
		var td = rows[ i ].getElementsByTagName( "td" )[ 0 ];
		var span = td.getElementsByTagName( "h2" )[ 0 ].getElementsByTagName( "span" )[ 0 ].getElementsByTagName( "span" )[ 0 ];
		if( span.className == "sectionexpand" )
		{
			var ah = span.getElementsByTagName("A")[0].href;
			if( ah.substr(0, 11) == "javascript:" )
			{
				ah = ah.substr(11);
				eval(unescape(ah));
			}
		}
		var list = getChildElementsByTagName( td.getElementsByTagName( "div" )[ 0 ].getElementsByTagName( "ul" )[ 0 ], "li" );
		for( var j = 0; j < list.length; ++j )
		{
			var span = list[ j ].getElementsByTagName( "span" )[ 0 ];
			if( span.className == "sectionexpand" )
			{
				var ah = span.getElementsByTagName("A")[0].href;
				if( ah.substr(0, 11) == "javascript:" )
				{
					ah = ah.substr(11);
					eval(unescape(ah));
				}
			}
		}
	}
}

function showExpandCollapseAll()
{
	var hasNew = false;
	var hasSection = document.getElementById( "docsectionheader1" ) || document.getElementById( "docsectionheader2" ) || document.getElementById( "docsectionheader3" );

	items = document.getElementById( "primary-channel" );
	if (!items)
	    return;
	items = items.getElementsByTagName( "p" );
	for( i = 0; i < items.length; ++i )
	{
		item = items[ i ];
		if( item.className == "new" || item.className == "enhanced" )
		{
			hasNew = true;
			break;
		}
	}

	if( hasSection || hasNew )
	{
		var ie6 = (/MSIE (5|6)/.test(navigator.userAgent));
	
		// If the document contains a section, show the expand/collapse all.
		document.getElementById( "primary-channel" ).style.padding = "0 20px 0 42px";
		document.getElementById( "primary-channel" ).style.position = "relative";
		
		if( hasSection )
		{
			document.getElementById( "expand-all" ).style.display = "inline";
			document.getElementById( "collapse-all" ).style.display = "inline";
			document.getElementById( "expand-collapse-all" ).style.display = "block";

			if( ie6 )
				document.getElementById( "expand-collapse-all" ).style.setExpression( "left", "2 - parentNode.offsetLeft" );

			var i, item, items = document.getElementById( "primary-channel" ).getElementsByTagName( "span" );
			for( i = 0; i < items.length; ++i )
			{
				item = items[ i ];
				if( item.className == "toclink" ||
					( ( item.className == "sectioncollapse" || item.className == "sectionexpand" ) && item.id.substr( 0, 16 ) == "docsectionheader" ) )
				{
					item.className += " sectiongutter";
					
					if( ie6 )
					{
						if( item.className.indexOf( "toclink" ) > -1 )
							item.style.setExpression( "left", "11 - parentNode.offsetLeft" );
						else
							item.style.setExpression( "left", "25 - parentNode.offsetLeft" );
					}
				}
			}
		}

		items = document.getElementById( "primary-channel" ).getElementsByTagName( "p" );
		for( i = 0; i < items.length; ++i )
		{
			item = items[ i ];
			if( item.className == "new" || item.className == "enhanced" )
				item.style.left = "-40px";
		}
	}
}

function getCategoryRowLevel(row)
{
	var i = row.className.indexOf(" level");
	return parseInt( row.className.substr( i + 6 ) ); 
}

function hideShowForumCategory(id)
{
	var row = document.getElementById( id );
	var myLevel = getCategoryRowLevel( row );
	var a = document.getElementById( id + "CatLink" );
	var collapsed = ( a.className != "jive-collapsecategory" );
	while( row = row.nextSibling )
	{
		if( row.tagName == "TR" )
		{
			if( row.className.indexOf( "categoryrow" ) > -1 )
			{
				if( getCategoryRowLevel( row ) <= myLevel )
				{
					break;
				}
				else
				{
					if( collapsed )
					{
						document.getElementById( row.id + "CatLink" ).className = "jive-collapsecategory";
						document.getElementById( row.id + "ForumLink" ).className = "jive-collapseforums";
					}
					else
					{
						document.getElementById( row.id + "CatLink" ).className = "jive-expandcategory";
						document.getElementById( row.id + "ForumLink" ).className = "jive-expandforums";
					}
				}
			}

			if( collapsed )
			{
				//if( row.oldDisplay )
				//	row.style.display = row.oldDisplay;
				//else
					row.style.display = "";
			}
			else
			{
				row.oldDisplay = row.style.display;
				row.style.display = "none";
			}
		}
	}

	if( !collapsed )
	{
		a.className = "jive-expandcategory";
		if( document.getElementById( id + "ForumLink" ) )
			document.getElementById( id + "ForumLink" ).className = "jive-expandforums";		
	}
	else
	{
		a.className = "jive-collapsecategory";
		if( document.getElementById( id + "ForumLink" ) )
			document.getElementById( id + "ForumLink" ).className = "jive-collapseforums";		
	}
}

function hideShowForumCategoryForums(id)
{
	var row = document.getElementById( id );
	var myLevel = getCategoryRowLevel( row );
	var a = document.getElementById( id + "ForumLink" );
	var collapsed = ( a.className != "jive-collapseforums" );
	var hasChildCategories = false;
	var curLevel = myLevel;
	while( row = row.nextSibling )
	{
		if( row.tagName == "TR" )
		{
			var isCatRow = ( row.className.indexOf( "categoryrow" ) > -1 );
			if( isCatRow )
			{
				curLevel = getCategoryRowLevel( row );
				
				if( curLevel > myLevel )
					hasChildCategories = true;
					
				if( curLevel <= myLevel )
					break;
				else if ( curLevel > ( myLevel + 1 ) )
					continue;
					
				if( !collapsed )
				{
					document.getElementById( row.id + "CatLink" ).className = "jive-expandcategory";
					document.getElementById( row.id + "ForumLink" ).className = "jive-expandforums";
				}
			}
			
			if( collapsed && ( isCatRow || curLevel == myLevel ) )
			{
				//if( row.oldDisplay )
				//	row.style.display = row.oldDisplay;
				//else
					row.style.display = "";
			}
			else
			{
				row.oldDisplay = row.style.display;
				row.style.display = "none";
			}
		}
	}
	
	if( !collapsed )
	{
		a.className = "jive-expandforums";
		document.getElementById( id + "CatLink" ).className = "jive-expandcategory";		
	}
	else
	{
		a.className = "jive-collapseforums";
		if( !hasChildCategories )
			document.getElementById( id + "CatLink" ).className = "jive-collapsecategory";
	}
}

function showHeaders( id )
{
	var hdrBlock = document.getElementById( "jive-message-headers-" + id );
	if( hdrBlock.className.indexOf( "message-headers-hidden" ) > -1 )
		hdrBlock.className = hdrBlock.className.replace(" message-headers-hidden", "");
	else
		hdrBlock.className += " message-headers-hidden";
}

var doCreateEditContentHovers = true;
var editContentHighlightType = 1;
var enableContentHovers = false;
var StrContentEditingEnabled = "Content editing is enabled. Click to switch.";
var StrContentEditingDisabled = "Content editing is disabled. Click to switch.";
var i = document.cookie.indexOf( "hovers=" );
if( i > -1 )
{
	enableContentHovers = ( document.cookie.substring( i + 7, i + 11 ) == "true" );
	setHoverModeCookie();
}

function createEditContentHovers()
{
	if( !doCreateEditContentHovers )
		return;

	doCreateEditContentHovers = false;

	var node, hasEditContent = false, aTags = document.getElementsByTagName( "DIV" );
	for( var i = 0; i < aTags.length; ++i )
	{
		node = aTags[ i ];
		if( node.className.indexOf( "edit-content-link" ) > -1 )
		{
			createEditContentHover( node );
			hasEditContent = true;
		}
	}
	
	if( editContentHighlightType == 0 )
	{
		jQuery("body").append( "<div id=\"left-module-dimmer\" class=\"module-highlight module-dimmer\"></div>" );
		jQuery("body").append( "<div id=\"right-module-dimmer\" class=\"module-highlight module-dimmer\"></div>" );
		jQuery("body").append( "<div id=\"top-module-dimmer\" class=\"module-highlight module-dimmer\"></div>" );
		jQuery("body").append( "<div id=\"bottom-module-dimmer\" class=\"module-highlight module-dimmer\"></div>" );
	}
	else if( editContentHighlightType == 1 )
	{
		jQuery("body").append( "<div id=\"left-module-dimmer\" class=\"module-highlight module-left-border\"></div>" );
		jQuery("body").append( "<div id=\"right-module-dimmer\" class=\"module-highlight module-right-border\"></div>" );
		jQuery("body").append( "<div id=\"top-module-dimmer\" class=\"module-highlight module-top-border\"></div>" );
		jQuery("body").append( "<div id=\"bottom-module-dimmer\" class=\"module-highlight module-bottom-border\"></div>" );
	}
	
	if( hasEditContent )
	{
		var CountryLoginBox = document.getElementById( "CountryLoginBox" );
		if( CountryLoginBox )
		{
		    var tr = CountryLoginBox.getElementsByTagName( "TR" )[ 0 ];
		    if( tr )
		    {
			    var td = document.createElement( "TD" );
			    td.className = "separator";
			    td.innerHTML = "|";
			    tr.appendChild( td );
    			
			    td = document.createElement( "TD" );
			    td.innerHTML = "<a id=\"hover-mode-switch\" href=\"#\" onclick=\"switchHoverMode(); return false;\" title=\"" + getContentHoverSwitchHint() + "\">" + getContentHoverSwitchCode() + "</a>";
			    td.style.width = "20px";
			    tr.appendChild( td );
    			
			    if( document.cookie.indexOf( "hovers=" ) < 0 )
			    {			
				    jQuery(window).load( function() {
					    jQuery("#hover-mode-switch").effect("shake", { times: 3, distance: 5, direction: "left" }, 300);
					    jQuery("#hover-mode-switch").effect("shake", { times: 3, distance: 5, direction: "up" }, 300);
				    });
				    setHoverModeCookie();
			    }
		    }
        }
        else if( jQuery("#mininav_bar").length )
        {
		    jQuery("#mininav_bar").prepend("<div id=\"hover-mode-switch-cont\" style=\"float: right;\"></div>");	    
		    jQuery("#hover-mode-switch-cont").html("<a id=\"hover-mode-switch\" href=\"#\" onclick=\"switchHoverMode(); return false;\" title=\"" + getContentHoverSwitchHint() + "\">" + getContentHoverSwitchCode() + "</a>");
			
		    if( document.cookie.indexOf( "hovers=" ) < 0 )
		    {			
			    jQuery(window).load( function() {
				    jQuery("#hover-mode-switch").effect("shake", { times: 3, distance: 5, direction: "left" }, 300);
				    jQuery("#hover-mode-switch").effect("shake", { times: 3, distance: 5, direction: "up" }, 300);
			    });
			    setHoverModeCookie();
		    }
        }
	}
}

function getContentHoverSwitchCode()
{
	return ( enableContentHovers ? "<img src=\"/images/buttons/edit.gif\" border=\"0\">" : "<img src=\"/images/buttons/edit_no.gif\" border=\"0\">" );
}

function getContentHoverSwitchHint()
{
	return ( enableContentHovers ? StrContentEditingEnabled : StrContentEditingDisabled );
}

function setHoverModeCookie()
{
	var date = new Date();
	date.setMonth( date.getMonth() + 3 );

	var domain = window.location.hostname;
	domain = domain.match(/^[a-zA-Z0-9\-\.]+?(\.[a-zA-Z0-9\-]+\.[a-zA-Z]+)$/);
	if( domain != null )
		domain = domain[ 1 ];
	else
		domain = ".codegear.com";
		
	document.cookie = "hovers=" + ( enableContentHovers ? "true" : "false" ) + "; expires=" + date.toUTCString() + "; domain=" + domain + "; path=/";
}

function switchHoverMode()
{
	var hoverModeSwitch = document.getElementById( "hover-mode-switch" );
	
	enableContentHovers = !enableContentHovers;
	hoverModeSwitch.innerHTML = getContentHoverSwitchCode();
	hoverModeSwitch.title = getContentHoverSwitchHint();
	
	setHoverModeCookie();
}

function createEditContentHover( node )
{
	var ie = (/MSIE/.test(navigator.userAgent));
	var bodyNode = document.body;
	var moduleNode = node;
	while( ( moduleNode = moduleNode.parentNode ) && moduleNode != bodyNode )
	{
		if( moduleNode.className.indexOf( "module" ) > -1 )
		{
			addEvent( moduleNode, "mouseover", function() { if( enableContentHovers ) { node.style.display = "block"; showDimmerForModule( moduleNode ); } } );
			addEvent( moduleNode, "mouseout", function() { if( enableContentHovers ) { node.style.display = "none"; hideDimmer(); } } );
			break;
		}
	}
}

function showDimmerForModule( module )
{
	var leftDimmer = document.getElementById( "left-module-dimmer" );
	var rightDimmer = document.getElementById( "right-module-dimmer" );
	var topDimmer = document.getElementById( "top-module-dimmer" );
	var bottomDimmer = document.getElementById( "bottom-module-dimmer" );
	var rect = getScreenRect( module );

	if( editContentHighlightType == 0 )
	{
		leftDimmer.style.left = "0px";
		leftDimmer.style.top = "0px";
		leftDimmer.style.height = document.body.offsetHeight + "px";
		leftDimmer.style.width = rect.left + "px";

		rightDimmer.style.left = rect.right + "px";
		rightDimmer.style.top = "0px";
		rightDimmer.style.height = document.body.offsetHeight + "px";
		rightDimmer.style.width = Math.max( document.body.offsetWidth - rect.right - 2, 0 ) + "px";

		topDimmer.style.left = rect.left + "px";
		topDimmer.style.top = "0px";
		topDimmer.style.height = rect.top + "px";
		topDimmer.style.width = Math.max( rect.right - rect.left ) + "px";

		bottomDimmer.style.left = rect.left + "px";
		bottomDimmer.style.top = rect.bottom + "px";
		bottomDimmer.style.height = Math.max( document.body.offsetHeight - rect.bottom, 0 ) + "px";
		bottomDimmer.style.width = Math.max( rect.right - rect.left, 0 ) + "px";
	}
	else if( editContentHighlightType == 1 )
	{
		leftDimmer.style.left = "0px";
		leftDimmer.style.top = rect.top + "px";
		leftDimmer.style.height = Math.max(rect.bottom - rect.top, 0) + "px";
		leftDimmer.style.width = rect.left + "px";

		rightDimmer.style.left = rect.right + "px";
		rightDimmer.style.top = rect.top + "px";
		rightDimmer.style.height = Math.max(rect.bottom - rect.top, 0) + "px";
		rightDimmer.style.width = Math.max( document.body.offsetWidth - rect.right - 2, 0 ) + "px";

		topDimmer.style.left = rect.left + "px";
		topDimmer.style.top = "0px";
		topDimmer.style.height = rect.top + "px";
		topDimmer.style.width = Math.max( rect.right - rect.left, 0 ) + "px";

		bottomDimmer.style.left = rect.left + "px";
		bottomDimmer.style.top = rect.bottom + "px";
		bottomDimmer.style.height = Math.max( document.body.offsetHeight - rect.bottom, 0 ) + "px";
		bottomDimmer.style.width = Math.max( rect.right - rect.left, 0 ) + "px";
	}
	
	leftDimmer.style.display = "block";
	rightDimmer.style.display = "block";
	topDimmer.style.display = "block";
	bottomDimmer.style.display = "block";
}

function hideDimmer()
{
	var leftDimmer = document.getElementById( "left-module-dimmer" );
	var rightDimmer = document.getElementById( "right-module-dimmer" );
	var topDimmer = document.getElementById( "top-module-dimmer" );
	var bottomDimmer = document.getElementById( "bottom-module-dimmer" );

	leftDimmer.style.display = "none";
	rightDimmer.style.display = "none";
	topDimmer.style.display = "none";
	bottomDimmer.style.display = "none";
}

function correctTOC()
{
    jQuery("#article-toc .toclist li a").each(function(i) {
        if( this.name != "" ) {
            this.innerHTML = "";
            this.className = "tocentry";
        }
    });
}

function showTaggedArticles() {
    var tagPattern = "http://edn.embarcadero.com/tag/";
    if ((document.body.id == "home") && (location.href.toLowerCase().indexOf(tagPattern) >= 0)) {
        // toggle visibility of various modules
        $(".colleft, .pe-home-content-container, .communities-container, .events-div, .blog-feed-container").hide();
        $(".article-list").show();
    }
}

jQuery(window).ready(function() { correctTOC(); createEditContentHovers(); showTaggedArticles(); });