var dynamicBlockIdPrefix = "block_";
var lastDisplayedDynamicBlock = null;
var dynamicBlockFadingTimer = null;
var dynamicBlockFadingTimeout = 50;
var dynamicBlockFadingIncrement = 30;

function displayDynamicBlock(index) {

	// hide all
	hideDynamicBlocks(index);
	
	// display requested
	var block = getDynamicBlockByIndex(index);
	if (block != null)
	{
		lastDisplayedDynamicBlock = block;
		
		if (block.style.display == "none")
		{
			var origHeight = Number(block.getAttribute("origHeight"));
			dynamicBlockFadingTimer = setTimeout("beginDynamicBlockFadingIn("+ String(dynamicBlockFadingIncrement) +", "+ String(origHeight) +");", dynamicBlockFadingTimeout);
		}
		else
		{
			block.style.display = "none";
		}
	}
	
	return false;
}

function beginDynamicBlockFadingIn(height, origHeight) {

	height = Number(height);
	origHeight = Number(origHeight);
	
	lastDisplayedDynamicBlock.style.height = String(height) + "px";
	lastDisplayedDynamicBlock.style.display = "block";
	
	if (height >= origHeight) return;
	
	var newHeight = height;
	if ((height + dynamicBlockFadingIncrement) > origHeight) newHeight = origHeight;
	else newHeight = height + dynamicBlockFadingIncrement;
	
	dynamicBlockFadingTimer = setTimeout("beginDynamicBlockFadingIn("+ String(newHeight) +", "+ String(origHeight) +");", dynamicBlockFadingTimeout);
}

function hideDynamicBlocks(exceptBlockIndex) {

	var i = 0, block = null;
	
	for (i = 0; i < 99; i++)
	{
		block = getDynamicBlockByIndex(i);
		if (block != null)
		{
			if (block.getAttribute("origHeight") == null) block.setAttribute("origHeight", String(block.clientHeight));
			
			if (exceptBlockIndex == null || i != exceptBlockIndex)
			{
				block.style.display = "none";
			}
		}
		else break;
	}
}

function getDynamicBlockByIndex(index) {
	return document.getElementById(dynamicBlockIdPrefix + String(index));
}

String.prototype.endsWith = function(str)
{
    var lastIndex = this.lastIndexOf(str);
    return (lastIndex != -1) && (lastIndex + str.length == this.length);
}

/* VALIDATION */
function ValidateRadioButtonList(groupName)
{
	return $("input:checked[name='"+ groupName +"']").length > 0;
}

function ValidateRadioButtonsWithinContainer(selector)
{
	return $(selector).find("input:checked[type='radio']").length > 0;
}

function ValidateCheckBoxList(listID)
{
	return $("input:checked[id^='"+ listID +"_']").length > 0;
}

function ValidateCheckBoxesWithinContainer(selector)
{
	return $(selector).find("input:checked[type='checkbox']").length > 0;
}

function ValidateIntegerValue(boxID, min, max)
{
	var inputValue = $("#" + boxID).val();
	var i = 0;
	
	try
	{
		i = parseInt(inputValue, 10);
		return i >= min && i <= max;
	}
	catch(err)
	{
		return false;
	}
}
