var ratingInitVals = new Array();

var currentRatingVal = -1;

var imageUrls = new Array();
imageUrls[0] = "../img/star_white.jpg";
imageUrls[1] = "../img/star_yellow.jpg";

function initializeRating(id, initVal)
{
	ratingInitVals[id] = initVal;
	
	for (var i = 0; i < imageUrls.length; i++)
	{
		var preloadImg = new Image();
		preloadImg.src = imageUrls[i];
	}
	
	resetRating(id);
}

function setRating(id, newVal)
{
	if (currentRatingVal != -1)
	{ 
		currentRatingVal = newVal;
	}

	var valMask = createBitField(5, new Number(newVal));
	for (var i = 0; i < valMask.length; i++)
	{
		var curImage = document.getElementById(id + '_' + i);
		if (curImage != null)
		{
			curImage.src = imageUrls[valMask.charAt(i)];
		}
	}

	return true;
}

function resetRating(id)
{
	if (typeof(ratingInitVals[id]) != 'undefined')
	{
		var initMask;

		if (currentRatingVal == -1)
		{
			initMask = createBitField(5, new Number(ratingInitVals[id]));
		}
		else
		{
			initMask = createBitField(5, new Number(currentRatingVal));
		}
		
		for (var i = 0; i < initMask.length; i++)
		{
			var curImage = document.getElementById(id + '_' + i);
			if (curImage != null)
			{
				curImage.src = imageUrls[initMask.charAt(i)];
			}
		}
	}
	
	return true;
}

function hideRatingExcept(selectedId, submittedRatingVal)
{
	if (typeof(submittedRatingVal) == 'undefined')
	{
		submittedRatingVal = ratingInitVals[selectedId];
	}

	currentRatingVal = submittedRatingVal;
	
	for (id in ratingInitVals)
	{
		var elem = document.getElementById(id);
		if (elem != null)
		{
			if (id != selectedId)
			{
				elem.style.display = 'none';
			}
		}
	}
}

function showAllRatings(selectedId)
{
	currentRatingVal = -1;
	
	for (id in ratingInitVals)
	{
		var elem = document.getElementById(id);
		if (elem != null)
		{
			if (id != selectedId)
			{
				elem.style.display = 'block';
			}
		}
	}
}

function createBitField(digits, val)
{
	var maxVal = (1 << digits) - 1;
	var filler = (maxVal+1).toString(2).substr(1, digits);
	var field = maxVal >> (digits - val);
	
	return (field.toString(2) + filler).substr(0, digits);
}

function registerInitializeRatings(initFunc)
{
	if (typeof(initFunc) != 'undefined')
	{
		if (window.addEventListener)
		{
			window.addEventListener("load", initFunc, false);
		}
		else if (window.attachEvent)
		{
			window.attachEvent("onload", initFunc);
		}
		else
		{
			window['onload'] = initFunc;
		}
	}
}
