/**** SmartStars *****/
var SmartStars=/*286329323030372053204368616C6D657273*/
{
 data:[], logged:0,
   
 init:function(ratingId, felem, rating, starCount, offStar, onStar)
 {
     
  if(document.getElementById) { 
    
   var elem=this.data[ratingId]={};
   
   elem.elemRef=document.getElementById(ratingId);
   
   //elem.formElem=formElem;
   elem.formElem=document.getElementById(felem);
   
   elem.starCount=starCount;
   elem.rating=rating;
   elem.offStar=offStar;
   elem.onStar=onStar;
      
   elem.rating=Math.max(-1,elem.rating);
   if(elem.rating!=-1)
    elem.rating--;
    
   elem.starTable=[];
   if(elem.elemRef) 
     this.build(ratingId);
   else 
    alert(this.elemRef+" is not a valid element ID.");
  }
 },
 
 build:function(id)
 {
  var elem=this.data[id];
  for(var i=0, sp, lnk; i<elem.starCount; i++)
  {
   (lnk=document.createElement('a')).appendChild(sp=document.createElement('img'));
   lnk.href='#'+i;
   lnk.style.textDecoration='none';
   lnk.style.padding='0';   
   sp.idx=i;
   sp.src=elem.offStar;
   sp.style.border='none';
   sp.style.margin='0';
   
   elem.imgBuffer=new Image();
   elem.imgBuffer.src=elem.onStar;
   
   lnk.onmouseover=new Function("SmartStars.lightOn('"+id+"',this.firstChild.idx)");
   lnk.onmouseout=new Function("SmartStars.lightOff('"+id+"',this.firstChild.idx)");
   lnk.onmouseup=function(){if(this.blur)this.blur();}
   lnk.onclick=new Function("SmartStars.set('"+id+"', this.firstChild.idx);return false");
   
   elem.starTable[i]=sp
   elem.elemRef.appendChild(lnk);
   elem.formElem.value=elem.rating+1;
  }
   this.addToHandler(elem.formElem,'onchange', new Function("SmartStars.setFromForm('"+id+"',this.value);"));
   lnk.onmouseout();
 },

 setFromForm:function(id, elemValue)
 {
  var v, dat=this.data[id], len=dat.starTable.length;
   
  if(!isNaN(v=parseInt(elemValue,10)))
  {  
   dat.rating=(elemValue > len ? (len-1) : elemValue < 1 ? 0 : (elemValue-1) );
   this.lightOff(id);
  }  
 },
 
 setFormElem:function(elem, value)
 {
  var h;  
  if(elem)
  {
   h=elem.onchange;
   elem.value=value;
   elem.onchange=h;
  }
 },
  
 lightOn:function(id, elemIdx)
 {
  var dat=this.data[id], table=dat.starTable;
  
  for(var i=0,len=table.length; i<len;  i++)
   table[i].src=(i<=elemIdx?dat.onStar:dat.offStar);   
  
  this.setFormElem(dat.formElem, elemIdx+1);
 },
 
 lightOff:function(id)
 {
  var dat=this.data[id], table=dat.starTable;
  
  for(var i=0,len=table.length; i<len;  i++)
   table[i].src=(i<=dat.rating?dat.onStar:dat.offStar);
   
  this.setFormElem(dat.formElem, dat.rating+1); 
 },
 
 set:function(id, idx)
 {
  this.data[id].formElem.value=(this.data[id].rating=idx)+1;
 },
 
 addToHandler:function(obj, evt, func)
 {
  if(obj[evt])
   {
    obj[evt]=function(f,g)
    {
     return function()
     {
      f.apply(this,arguments);
      return g.apply(this,arguments);
     };
    }(func, obj[evt]);
   }
   else
    obj[evt]=func;
 }
}
