﻿function CastleRater(id, imageOnUrl, imageOffUrl, imageHoverUrl, maxValue, value)
{
	if( value == undefined || value == null )
		value = 0;
	
	if( maxValue == undefined || maxValue == null )
		maxValue = 5;
	
	this.ID = id;	
	this.MaxValue = maxValue;	
	this.Value = value;	
	this.ImageOn = imageOnUrl;
	this.ImageOff = imageOffUrl;
	this.ImageHover = imageHoverUrl;
	this.AutoLock = false;
	this.IsEnabled = true;
	this.IsInitialized = false;
	this.Images = new Array(maxValue);
	this.Container = null;
	
	this.ValueControl = null;
	this.ValueControlID = this.ID + "_Value";

	new Image().src = this.ImageOn;
	new Image().src = this.ImageOff;
	new Image().src = this.ImageHover;
}

CastleRater.Items = Array();

CastleRater.Create = function(id, imageOnUrl, imageOffUrl, imageHoverUrl, maxValue, value)
{
	var obj = new CastleRater(id, imageOnUrl, imageOffUrl, imageHoverUrl, maxValue, value);	
	CastleRater.Items[obj.ID] = obj;
	return obj;
}

CastleRater.CreateNETControl = function(id, imageOnUrl, imageOffUrl, imageHoverUrl, maxValue, value)
{
	var rater = CastleRater.Create(id, imageOnUrl, imageOffUrl, imageHoverUrl, maxValue, value);	
	rater.Initialize();	
	return rater;
}

CastleRater.CreateJSControl = function(id, imageOnUrl, imageOffUrl, imageHoverUrl, maxValue, value)
{	
	var rater = CastleRater.Create(id, imageOnUrl, imageOffUrl, imageHoverUrl, maxValue, value);
	rater.Render();
	return rater;
}

CastleRater.InitializeRater = function(rater)
{
	for(i = 1; i <= rater.MaxValue; i++)
	{
		var imgID = rater.ID + "_img" + i;
		var img = document.getElementById(imgID);
		rater.Images[i] = img;
	}
	
	rater.Container = document.getElementById(rater.ID);
	
	var myItems = document.getElementsByName(rater.ValueControlID);
	rater.ValueControl = myItems[0];
	rater.ValueControl.value = rater.Value;
	
	rater.IsInitialized = true;
}

CastleRater.Refresh = function(source, raterID)
{
	var rater = CastleRater.Items[raterID];
	var value = rater.Value;
	
	for(var i = 1; i <= rater.MaxValue; i++)
	{
		if( value >= i )
			rater.Images[i].src = rater.ImageOn;
		else
			rater.Images[i].src = rater.ImageOff;
	}
}

CastleRater.Hover = function(source, raterID)
{
	var rater = CastleRater.Items[raterID];
	if( !rater.IsEnabled ) return;
	
	var value = source.getAttribute("value");
	
	for(var i = 1; i <= rater.MaxValue; i++)
	{
		if( value >= i )
			rater.Images[i].src = rater.ImageHover;
		else
			rater.Images[i].src = rater.ImageOff;
	}
}

CastleRater.Click = function(source, raterID)
{
	var rater = CastleRater.Items[raterID];
	if( !rater.IsEnabled ) 
		return;
	
	rater.Value = source.getAttribute("value");	
	rater.ValueControl.value = rater.Value;
	CastleRater.Refresh(source, raterID);
	
	if( rater.AutoLock )
		rater.Enable(false);
}

CastleRater.prototype.Initialize = function()
{
	CastleRater.InitializeRater(this);
}

CastleRater.prototype.Enable = function(enable)
{
	this.Container.disabled = !enable;
	this.IsEnabled = enable;
}

CastleRater.prototype.Visible = function(visible)
{
	if( visible )
		this.Container.style.visibility = "Visible";
	else
		this.Container.style.visibility = "Hidden";
}

CastleRater.prototype.Render = function()
{
	document.write("<input id=" + this.ValueControlID + " type=hidden>");
	document.write("<span id=\"" + this.ID + "\">");
	
	for(var i = 1; i <= this.MaxValue; i++)
	{
		if( this.Value >= i )
			imageName = this.ImageOn;
		else
			imageName = this.ImageOff;	

		var index = document.images.length;
		
		var onclick = " onclick=\"CastleRater.Click(this, '" + this.ID + "');\" ";
		var onmouseover = " onmouseover=\"CastleRater.Hover(this, '" + this.ID + "');\" ";
		var onmouseout = " onmouseout=\"CastleRater.Refresh(this, '" + this.ID + "');\" ";
		var imgID = this.ID + "_img" + i;
		document.write("<img id=\"" + imgID + "\" " + onclick + onmouseover + onmouseout + ">");
		
		this.Images[i] = document.images[index];
		
		this.Images[i].src = imageName;
		this.Images[i].setAttribute("imageSrc", imageName);
		this.Images[i].setAttribute("imageHover", this.ImageHover);
		this.Images[i].setAttribute("value", i);
		this.Images[i].border = 0;
	}
	
	document.write("</span>");
	
	if( this.IsInitialized == false )
		this.Initialize();
}
