/*
 * This function contains javascript for the reviews section of the site.  It requires cookies.js
 */

//window.onload = initReviews;

// This function should be called on load to apply the appropriate styles 
// to the list and create links for expanding/collapsing
function initReviews()
{
	var tagArray = document.getElementsByTagName("ul");
	
	for (var i = 0; i < tagArray.length; i++)
	{
		var ulTag = tagArray[i];
		if (ulTag.className.indexOf("collapsible") >= 0)
		{
			processUL(ulTag);
		}	
	}
	
	var elementList = document.getElementsByTagName("DIV");

	for (var i = 0; i < elementList.length; i++)
	{
		var e = elementList[i];
		if (e.className.indexOf("insideRating") >= 0 || e.className.indexOf("reviewDetails") >= 0)
		{
			e.style.display = "none";
		}
	}

	for (var i = 0; i < elementList.length; i++)
	{
		var e = elementList[i];
		if (e.className.indexOf("insideRating") >= 0)
		{
			Effect.BlindRight(e, {duration:1.2});
		}
	}	
	

	var showThumbs = getCookie("showThumbs");
	if (showThumbs == "false")
	{
		var elementList = document.getElementsByTagName("IMG");
		
		for (var i = 0; i < elementList.length; i++)
		{
			var e = elementList[i];
			if (e.className.indexOf("hiddenThumb") >= 0)
			{
				e.style.display = "none";
			}
		}		
	}	
	else
	{
		var thumbLink = document.getElementById("thumbLink");	
		if (thumbLink)
		{
			thumbLink.innerHTML = "Hide Images";
			thumbLink.onclick = hideThumbs;
		}
	}
}

// This function preps a ul and recursively preps all nested elements
function processUL(ULElement)
{
	var liList = getLIList(ULElement);
	
	for (var i = 0; i < liList.length; i++)
	{
		var liElement = liList[i];
		var ulList = getULList(liElement)
		if (ulList.length == 0)
		{
			liElement.className = "leaf";
		}
		else
		{
			liElement.className = "branch";
			
			var liText = liElement.childNodes[0];
			var expandLink = document.createElement('a');
			var expandIcon = document.createElement('a');

			expandLink.href = "javascript:void(0);"
			expandLink.onclick = showLinkClicked;
			expandLink.liElement = liElement;
			expandLink.shown = false;
			expandLink.className = "expandLink";
			
			expandIcon.href = "javascript:void(0);"
			expandIcon.onclick = showLinkClicked;
			expandIcon.liElement = liElement;
			expandIcon.shown = false;			
			expandIcon.className = "expandIcon";

			expandIcon.appendChild(document.createTextNode("+"));
			expandLink.appendChild(liText);
			
			liElement.insertBefore(expandIcon, ulList[0]);
			liElement.insertBefore(expandLink, ulList[0]);

			for (var j = 0; j < ulList.length; j++)
			{
				ulList[j].style.display = "none";
				processUL(ulList[j]);
			}
		}
	}
}

// This function preps a li and recursively preps all nested elements
function getLIList(ULElement)
{
	var retVal = new Array();

	var children = ULElement.childNodes;
	for (var i = 0; i < children.length; i++)
	{	
		var child = children[i];
		if (child.tagName && child.tagName.toUpperCase() == "LI")		
		{
			retVal[retVal.length] = child;
		}
	}
	
	return retVal;
}

// This function returns a list of UL's for a given element
function getULList(LIElement)
{
	var retVal = new Array();

	var children = LIElement.childNodes;
	for (var i = 0; i < children.length; i++)
	{	
		var child = children[i];
		if (child.tagName && child.tagName.toUpperCase() == "UL")		
		{
			retVal[retVal.length] = child;
		}
	}
	
	return retVal;	
}

// This function is called whenever an expand/collapse link is clicked
function showLinkClicked()
{
	var	e = this.liElement;
	if (this.shown)
	{
		hideChildren(e);		
		expandIcon = e.childNodes[0];
		expandLink = e.childNodes[1];
		expandIcon.replaceChild(document.createTextNode("+"), expandIcon.childNodes[0]);
		expandIcon.shown = false;
		expandLink.shown = false;
	}
	else
	{
		showChildren(e);
		expandIcon = e.childNodes[0];
		expandLink = e.childNodes[1];
		expandIcon.replaceChild(document.createTextNode("-"), expandIcon.childNodes[0]);
		expandIcon.shown = true;
		expandLink.shown = true;
	}
}

// This expands the tree using a scriptaculous animation
function showChildren(e)
{
	var ULList = getULList(e);

	for (var i = 0; i < ULList.length; i++)
	{
		Effect.BlindDown(ULList[i], {duration:.5});
	}		
}

// This collapses the tree using a scriptaculous animation
function hideChildren(e)
{
	var ULList = getULList(e);

	for (var i = 0; i < ULList.length; i++)
	{
		Effect.BlindUp(ULList[i], {duration:.5});		
	}		
}

function openDetails(reviewID)
{
	detailDiv = document.getElementById("details" + reviewID);
	if (detailDiv.style.display.toUpperCase() == "NONE")
	{
		Effect.BlindDown(detailDiv);
	}
	else
	{
		Effect.BlindUp(detailDiv);					
	}
}

function hideThumbs()
{
	var elementList = document.getElementsByTagName("IMG");
	var thumbLink = document.getElementById("thumbLink");
	
	for (var i = 0; i < elementList.length; i++)
	{
		var e = elementList[i];
		if (e.className.indexOf("hiddenThumb") >= 0)
		{
			Effect.Squish(e);
		}
	}					
	
	thumbLink.innerHTML = "Show Images";
	thumbLink.onclick = showThumbs;
	setCookie("showThumbs", "false");
}

function showThumbs()
{
	var elementList = document.getElementsByTagName("IMG");
	var thumbLink = document.getElementById("thumbLink");
		
	for (var i = 0; i < elementList.length; i++)
	{
		var e = elementList[i];
		if (e.className.indexOf("hiddenThumb") >= 0)
		{
			Effect.Grow(e, {direction: "top-left"});
		}
	}			
	
	thumbLink.innerHTML = "Hide Images";	
	thumbLink.onclick = hideThumbs;
	setCookie("showThumbs", "true");
}

function expandAllReviews()
{
	var elementList = document.getElementsByTagName("DIV");

	for (var i = 0; i < elementList.length; i++)
	{
		var e = elementList[i];
		if (e.className.indexOf("reviewDetails") >= 0 && e.style.display.toUpperCase() == "NONE")
		{
			Effect.BlindDown(e);
		}
	}	
}

function collapseAllReviews()
{
	var elementList = document.getElementsByTagName("DIV");

	for (var i = 0; i < elementList.length; i++)
	{
		var e = elementList[i];
		if (e.className.indexOf("reviewDetails") >= 0 && e.style.display.toUpperCase() != "NONE")
		{
			Effect.BlindUp(e);
		}
	}	
}