function printSubtitle(subtitleElem, subtitle)
{
	gSubtitle = new Array(subtitle.length);
	
	var divElem = $('<div></div>');

	for (var i = 0, l = subtitle.length; i < l; i++)
	{
		gSubtitle[i] = randomString(Math.floor(Math.random()*20 + 1)) + subtitle[i];
		subtitleElem.append(divElem.clone().html(randomString(1)));
	}

	gDecodeInterval = setInterval(function() { decodeAnim(subtitle); }, 20);	
}

var gSubtitle;
var gDecodeInterval;

function decodeAnim(subtitle)
{
	for (var i = 0; i < 2; i++)
	{
		var rndIndex;
		var charElem;

		do
		{
			rndIndex = Math.floor(Math.random() * subtitle.length);

			if (gSubtitle[rndIndex] == "")
			{
				if (gSubtitle.join("") == "")
				{
					clearInterval(gDecodeInterval);
					return;
				}
			}
			else
			{
				break;
			}
		} while (true);

		charElem = $($('#subtitle > div').get(rndIndex));
		
		var rndChar = gSubtitle[rndIndex][0];
		gSubtitle[rndIndex] = gSubtitle[rndIndex].slice(1); 
		
		charElem.html(rndChar);
	}
}

function randomString(len)
{
	var rndString = "";

	for (var n = 0; n < len; n++)
	{
		rndString += String.fromCharCode(65 + Math.floor(Math.random() * 25));
	}

	return rndString;
}
			
// Sort Functions
			
function numeric_ascending(a,b) { return a-b; }
function numeric_descending(a,b) { return b-a; }
function alpha_ascending(a, b) { if (a < b) return -1; if (a > b) return 1; return 0; }
function alpha_descending(a, b) { if (a > b) return -1; if (a < b) return 1; return 0; }

function smartAsc(a,b) {
	if (typeof(a) == "number") return numeric_ascending(a,b);
	return alpha_ascending(a,b);
}

function smartDesc(a,b) {
	if (typeof(a) == "number") return numeric_descending(a,b);
	return alpha_descending(a,b);
}
