// $Id: descriptions.js,v 1.5 2010-09-14 14:41:52 craigs Exp $
// $Log: descriptions.js,v $
// Revision 1.5  2010-09-14 14:41:52  craigs
// Added multi-instantiation to initialization script
//
// Revision 1.4  2010-09-14 11:40:19  tami
// TICKET4078 - brand and category revamp
//
// Revision 1.3  2010-08-27 18:14:53  tami
// Rolling back category revamp
//
// Revision 1.1  2010-07-22 19:56:35  craigs
// RT3830 Adding support for expanding and contracting description text
//

// onContent(function () { descriptionSetup(); });
onContent("descriptionSetup()");

function descriptionSetup ()
{
	var divs = document.getElementsByTagName('div');
	for (var x = 0; x < divs.length; x++)
	{
		if (divs[x].className == 'descriptO')
		{
			divs[x].style.position = 'relative';
			// First check to see if this is even needed, i.e. target element height > 'filter' height.
			var aFilters = __findFilterElements(divs[x]);
			var targetHeight = 0;
			if (aFilters.length > 0)
			{
				for (var y = 0; y < aFilters.length; y++)
				{
					if (aFilters[y].offsetTop + aFilters[y].offsetHeight > targetHeight)
						targetHeight = aFilters[y].offsetTop + aFilters[y].offsetHeight;
				}
			}
			else return;
			targetHeight += 65;
			if (divs[x].offsetHeight <= targetHeight) return;

			var shield = document.createElement('div');
			shield.className = 'shield seemore';
			shield.innerHTML = '<div>'+ divs[x].innerHTML +'</div>';
			divs[x].innerHTML = "";
			divs[x].appendChild(shield);

			lessDescription = document.createElement('div');
			lessDescription.className = 'lessDescription';
			lessDescription.title = 'Click to contract.';
			shield.firstChild.appendChild(lessDescription);
			more = document.createElement('div');
			more.className = 'more';
			moreDescription = document.createElement('div');
			moreDescription.className = 'moreDescription';
			moreDescription.title = 'Click to expand.';
			more.appendChild(moreDescription);
			shield.appendChild(more);
			shield.style.height = targetHeight + 'px';

			aFilters = __findFilterElements(divs[x]);
			targetHeight = 0;
			var targetElement = null;
			if (aFilters.length > 0)
			{
				for (var y = 0; y < aFilters.length; y++)
				{
					if (aFilters[y].offsetTop + aFilters[y].offsetHeight > targetHeight)
					{
						targetHeight = aFilters[y].offsetTop + aFilters[y].offsetHeight;
						targetElement = aFilters[y];
					}
				}
			}

			var oExpando = new expando();
			oExpando.init(shield, 'shield', 'seemore', 'seeless', null, moreDescription, 'moreDescription', lessDescription, 'lessDescription', targetElement, more.offsetHeight);
		}
	}
};

var aTargetFilterTagNames = Array('p','div','fieldset','h1','h2','h3','ul','ol','table','pre');

function __findFilterElements (within)
{
	var aResult = [];
	for (var y = 0; y < aTargetFilterTagNames.length; y++)
	{
		var aElements = within.getElementsByTagName(aTargetFilterTagNames[y]);
		for (var z = 0; z < aElements.length; z++)
		{
			if (aElements[z].className.indexOf('filter') != -1) aResult.push(aElements[z]);
		}
	}
	return aResult;
};


function __findBrandingElement (within)
{
	for (var y = 0; y < aTargetFilterTagNames.length; y++)
	{
		var aElements = within.getElementsByTagName(aTargetFilterTagNames[y]);
		for (var z = 0; z < aElements.length; z++)
		{
			if (aElements[z].className.indexOf('branding') != -1) return aElements[z];
		}
	}
	return null;
};

