function RateControl(varName,containerId,valueId,numberOfItems,imagesPathUrl,useHalfStars,containerStyleClass,containerOverStyleClass,containerReadOnlyStyleClass,titles,isReadOnly,allowMultipleSelections){
this.VariableName=varName
this.ValueHandle=document.getElementById(valueId)
this.ContainerHandle=document.getElementById(containerId)
this.ImagesPathUrl=imagesPathUrl
this.UseHalfStars=useHalfStars
this.Items=new Array(numberOfItems)
this.IsInitialized=false
this.NumberOfItems=numberOfItems
this.ContainerStyleClass=containerStyleClass
this.ContainerOverStyleClass=containerOverStyleClass
this.ContainerReadOnlyStyleClass=containerReadOnlyStyleClass
this.Titles=titles
this.IsReadOnly=isReadOnly
this.AllowMultipleSelections=allowMultipleSelections
this.SetAnimationHandle=null
this.SavingValue=false
this.CachedImages=new Array()
this.MouseOver=function(value){
if(!this.IsInitialized || this.IsReadOnly)
return
this.ContainerHandle.className=this.ContainerOverStyleClass
this.ShowValue(value)}
this.MouseOut=function(){
if(!this.IsInitialized || this.IsReadOnly)
return
this.ContainerHandle.className=this.ContainerStyleClass
this.ShowCurrentValue()}
this.SetValue=function(value){
if(!this.IsInitialized || this.IsReadOnly)
return
this.ShowValue(value)
this.ValueHandle.value=value
if(this.SetAnimationHandle)
window.clearTimeout(this.SetAnimationHandle)
if(!this.AllowMultipleSelections)
this.IsReadOnly=true
this.SavingValue=true
RatingControlAJAX.SaveRating(this.VariableName,value,new Function('result','window.'+this.VariableName+'.ValueSaved(result);'))
this.SetAnimationHandle=window.setTimeout(this.VariableName+".SetAnimation(0);",99)}
this.ValueSaved=function(result){
if(result.error){
alert(result.error)
this.IsSaving=false
window.clearTimeout(this.SetAnimationHandle)
this.IsReadOnly=false
this.Initialize()
return}
this.ValueHandle.value=result.value[0]
this.ContainerHandle.title=result.value[1]
this.IsReadOnly=result.value[3] !='true'
if(result.value[2]){
if(this.IsReadOnly){
this.ContainerHandle.onclick=new Function(result.value[2])
this.ContainerHandle.style.cursor="pointer"}}
this.SavingValue=false}
this.SetAnimation=function(step){
if(step>6 || !this.IsInitialized){
if(!this.AllowMultipleSelections)
this.IsReadOnly=true
this.Initialize()
return}
if(step % 2==0)
this.ContainerHandle.className=this.ContainerStyleClass
else
this.ContainerHandle.className=this.ContainerOverStyleClass
if(!this.SavingValue)
step=step+1
else
step=(step+1)% 2
this.SetAnimationHandle=window.setTimeout(this.VariableName+".SetAnimation("+step+");",199)}
this.ShowValue=function(value){
if(!this.IsInitialized)
return
var i
var j=this.NumberOfItems*2
value=value*2
value=value-1
for(i=0;i<j;i++){
if(i<=value)
this.ContainerHandle.childNodes[i].src=this.GetItemsOnSrc(i)
else
this.ContainerHandle.childNodes[i].src=this.GetItemsOffSrc(i)}}
this.ShowCurrentValue=function(){
if(!this.IsInitialized)
return
this.ShowValue(this.ValueHandle.value)}
this.GetValue=function(){
if(!this.IsInitialized)
return null
return this.ValueHandle.value}
this.GetItemsOnSrc=function(index){
if(index % 2==1)
return this.ImagesPathUrl+'star-right-on.gif'
else
return this.ImagesPathUrl+'star-left-on.gif'}
this.GetItemsOffSrc=function(index){
if(index % 2==1)
return this.ImagesPathUrl+'star-right-off.gif'
else
return this.ImagesPathUrl+'star-left-off.gif'}
this.GetItemTitle=function(index,value){
if(typeof(this.Titles)=="object")
return this.Titles[index].replace("{0}",(value))
else if(this.Titles)
return this.Titles.replace("{0}",(value))
else
return value}
this.CacheImages=function(){
var image
var url
var i
var j=2
for(i=0;i<j;i++){
url=this.GetItemsOnSrc(i)
if(!this.IsImageCached(url)){
image=new Image()
image.src=url
this.CachedImages[this.CachedImages.length]=image}
url=this.GetItemsOffSrc(i)
if(!this.IsImageCached(url)){
image=new Image()
image.src=url
this.CachedImages[this.CachedImages.length]=image}}}
this.IsImageCached=function(url){
var i
for(i=0;i<this.CachedImages.length;i++){
if(this.CachedImages[i].src==url)
return true}
return false}
this.Initialize=function(){
this.CacheImages()
while(this.ContainerHandle.childNodes.length>0)
this.ContainerHandle.removeChild(this.ContainerHandle.childNodes[0])
if(!this.IsReadOnly)
this.ContainerHandle.className=this.ContainerStyleClass
else
this.ContainerHandle.className=this.ContainerReadOnlyStyleClass
var i,e,value
var j=this.NumberOfItems*2
for(i=0;i<j;i++){
e=document.createElement("img")
value=(i+1)/2
if(value<=this.ValueHandle.value)
e.src=this.GetItemsOnSrc(i)
else
e.src=this.GetItemsOffSrc(i)
if(!this.IsReadOnly){
if(!this.UseHalfStars){
value=Math.ceil(value)
e.title=this.GetItemTitle(value,value)}
else
e.title=this.GetItemTitle(i,value)
e.onclick=new Function("window."+this.VariableName+".SetValue("+value+");")
e.onmouseover=new Function("window."+this.VariableName+".MouseOver("+value+");")
e.onmouseout=new Function("window."+this.VariableName+".MouseOut();")}
e.align="absmiddle"
e.border=0
this.ContainerHandle.appendChild(e)}
this.IsInitialized=true}
this.Initialize()}
