var rd;
var oldSub = null;
var oldBtn = null;
var arImg = new Array();
var arBtn = new Array(
'/images/rate/ratings/an.gif',
'/images/rate/ratings/bn.gif',
'/images/rate/ratings/cn.gif',
'/images/rate/ratings/dn.gif',
'/images/rate/ratings/fn.gif');

var arText = new Array(
['<span class=mvcwGrade>A-</span>','<span class=mvcwGrade>A</span>','<span class=mvcwGrade>A+</span>'],
['<span class=mvcwGrade>B-</span>','<span class=mvcwGrade>B</span>', '<span class=mvcwGrade>B+</span>'],
['<span class=mvcwGrade>C-</span>','<span class=mvcwGrade>C</span>', '<span class=mvcwGrade>C+</span>'],
['<span class=mvcwGrade>D-</span>','<span class=mvcwGrade>D</span>', '<span class=mvcwGrade>D+</span>'],
['<span class=mvcwGrade>F</span>']);

var arFullText = new Array(
['<span class=mvcwFullGrade>A-</span><br>Almost perfect','<span class=mvcwFullGrade>A</span><br>Outstanding','<span class=mvcwFullGrade>A+</span><br>Game of the Year'],
['<span class=mvcwFullGrade>B-</span><br>Fair','<span class=mvcwFullGrade>B</span><br>Good', '<span class=mvcwFullGrade>B+</span><br>Memorable'],
['<span class=mvcwFullGrade>C-</span><br>Disappointing','<span class=mvcwFullGrade>C</span><br>Mediocre', '<span class=mvcwFullGrade>C+</span><br>Flawed<br>but worthy'],
['<span class=mvcwFullGrade>D-</span><br>Truly awful','<span class=mvcwFullGrade>D</span><br>Dreadful', '<span class=mvcwFullGrade>D+</span><br>Poor effort'],
['<span class=mvcwFullGrade>F</span><br>All-time<br>worst!']);

function preLoadImg(obj)
{
  for(i=0;i<obj.length;i++)
    {
      arImg[i]=new Image();
      arImg[i].src=obj[i];
      }
}

/*
This array contains the URLs for all the possible
letter grades images.
*/
var arRate = new Array(
'/images/rate/ratings/ap.gif',
'/images/rate/ratings/aph.gif',
'/images/rate/ratings/apc.gif',
'/images/rate/ratings/a.gif',
'/images/rate/ratings/ah.gif',
'/images/rate/ratings/ac.gif',
'/images/rate/ratings/am.gif',
'/images/rate/ratings/amh.gif',
'/images/rate/ratings/amc.gif',
'/images/rate/ratings/bp.gif',
'/images/rate/ratings/bph.gif',
'/images/rate/ratings/bpc.gif',
'/images/rate/ratings/b.gif',
'/images/rate/ratings/bh.gif',
'/images/rate/ratings/bc.gif',
'/images/rate/ratings/bm.gif',
'/images/rate/ratings/bmh.gif',
'/images/rate/ratings/bmc.gif',
'/images/rate/ratings/cp.gif',
'/images/rate/ratings/cph.gif',
'/images/rate/ratings/cpc.gif',
'/images/rate/ratings/c.gif',
'/images/rate/ratings/ch.gif',
'/images/rate/ratings/cc.gif',
'/images/rate/ratings/cm.gif',
'/images/rate/ratings/cmh.gif',
'/images/rate/ratings/cmc.gif',
'/images/rate/ratings/dp.gif',
'/images/rate/ratings/dph.gif',
'/images/rate/ratings/dpc.gif',
'/images/rate/ratings/d.gif',
'/images/rate/ratings/dh.gif',
'/images/rate/ratings/dc.gif',
'/images/rate/ratings/dm.gif',
'/images/rate/ratings/dmh.gif',
'/images/rate/ratings/dmc.gif',
'/images/rate/ratings/fn.gif',
'/images/rate/ratings/fh.gif',
'/images/rate/ratings/fc.gif');

preLoadImg(arRate);

// translations from ratings to text element IDs ...

var ratingToTextID = new Array (0,'base',
				10,'4_0',
				24,'3_0',
				30,'3_1',
				36,'3_2',
				44,'2_0',
				50,'2_1',
				56,'2_2',
				64,'1_0',
				70,'1_1',
				76,'1_2',
				84,'0_0',
				90,'0_1',
				96,'0_2') ;

// ... and vice versa

var textIDToRating = new Array ('base',0,
				'4_0',10,
				'3_0',24,
				'3_1',30,
				'3_2',36,
				'2_0',44,
				'2_1',50,
				'2_2',56,
				'1_0',64,
				'1_1',70,
				'1_2',76,
				'0_0',84,
				'0_1',90,
				'0_2',96) ;

function getTextID (rating)
{
  for (i = 0 ; i < ratingToTextID.length ; i += 2)
    if (rating <= ratingToTextID [i])
      return (ratingToTextID [i + 1]) ;

  return ('2_0') ;
}

function getRating (textID)
{
  // strip off the object name

  s = String (textID) ;
  id = s.slice (s.search (/_\d+_\d+$/) + 1) ;

  for (i = 0 ; i < textIDToRating.length ; i += 2)
    if (id == textIDToRating [i])
      return (textIDToRating [i + 1]) ;

  return (0) ;
}

function resetAll(o)
{
  o.resetText();
  o.resetBaseText();
  o.resetSub();
}

function checkEvent(event,objName)
{
  o = document [objName] ;

  if(document.all)
    {
      e=window.event;
      e.cancelBubble = true;
      if(e.toElement && e.toElement.tagName=='IMG')
 	return false;
      else if(e.toElement && e.toElement.tagName=='DIV')
	return false;
      else
	{
	  o.resetText();
	  o.resetBaseText();
	  o.resetSub();
	}
    }
  else if(document.getElementById)
    {
      if(event.relatedTarget && event.relatedTarget.tagName=='IMG')
      	return false;
      else if(event.relatedTarget && event.relatedTarget.tagName=='DIV')
        return false;
      else
	{
	  o.resetText();
	  o.resetBaseText();
	  o.resetSub();
        }
    }
}

function setDelay(objName,obj)
{
  rd = setTimeout('showSub("'+objName+'",'+obj+');',50);
}

function showSub(objName,id)
{
  o = document [objName] ;
  o.restoreBtn();
  var oBtn = document.getElementById(objName + '_' + id);
  oBtn.style.visibility='hidden';
  var oSub = document.getElementById(objName + '_' + id+'Opt');
  oSub.style.visibility='visible';
  setDisplayState(objName,id);
}

function setDisplayState(objName,id)
{
  oldSub= objName + '_' + id + 'Opt';
  oldBtn= objName + '_' + id;
}

function changeImg(htmlobj,rwObjName,sUrl,event)
{
  o = document [rwObjName] ;
  var subId=getEventTarget(event);
  displayText(o,subId);
  htmlobj.src = sUrl;
}

function displayText(obj,id)
{

  obj.resetText();
  var oText = document.getElementById(id + 'text');
  oText.style.visibility='visible';
  var oBase = document.getElementById(obj.objName + '_base');
  oBase.style.visibility='hidden';
}


function setRating(objName,event)
{
  var targetId;
  targetId = getEventTarget(event);
  o = document [objName] ;

  o.curRating = getRating (targetId) ;

  if(document.all)
    {
      mvcf = document.forms [o.formID] ;
    }
  else if (document.getElementById)
    {
      mvcf = document.getElementById (o.formID) ;
    }

  mvcf [o.varName].value = o.curRating ;

  o.setRtText(targetId) ;
  if (o.autoSubmit) 
    {
    	mvcf.submit () ;
        o.setState() ;
    }
}


function getEventTarget(event)
{
  var targetId;
  if(document.all) targetId = window.event.srcElement.id;
  else if(document.getElementById) targetId = event.currentTarget.id;
  return targetId;
}

function mvcRatingsWidget (objName,dispName,formID,varName,autoSubmit,isOverall,isInfoPage,writeReviewURL)
{
  this.objName = objName ;
  this.dispName = dispName ;
  this.formID = formID ;
  this.varName = varName ;
  this.autoSubmit = autoSubmit ;
  this.isOverall = isOverall ;
  this.isInfoPage = isInfoPage ;
  this.writeReviewURL = writeReviewURL ;
  this.curRating = 0 ;
  document [objName] = this ;

  checkEvText = 'checkEvent(event,"' + this.objName + '");' ;
  setDelayText = 'setDelay("' + this.objName + '"' ;
  setRatingText = 'setRating("' + this.objName + '",event);' ;

  arSub = new Array();

 /* Ratings Sub Categories */
arSub[0]="<div id=" + this.objName + "_0Opt class=mvcwSubItem><img id=" + this.objName + "_0_2 src="+arImg[0].src+" onmouseover=changeImg(this,'" + this.objName + "','"+arImg[1].src+"',event) onmouseout=changeImg(this,'" + this.objName + "','"+arImg[0].src+"',event) onmousedown=changeImg(this,'" + this.objName + "','"+arImg[2].src+"',event); onmouseup=changeImg(this,'" + this.objName + "','"+arImg[1].src+"',event) onclick=" + setRatingText + "><img id=" + this.objName + "_0_1 class=mvcwMPad src="+arImg[3].src+" onmouseover=changeImg(this,'" + this.objName + "','"+arImg[4].src+"',event) onmouseout=changeImg(this,'" + this.objName + "','"+arImg[3].src+"',event) onmousedown=changeImg(this,'" + this.objName + "','"+arImg[5].src+"',event); onmouseup=changeImg(this,'" + this.objName + "','"+arImg[4].src+"',event) onclick=" + setRatingText + "><img id=" + this.objName + "_0_0 src="+arImg[6].src+" onmouseover=changeImg(this,'" + this.objName + "','"+arImg[7].src+"',event) onmouseout=changeImg(this,'" + this.objName + "','"+arImg[6].src+"',event); onmousedown=changeImg(this,'" + this.objName + "','"+arImg[8].src+"',event); onmouseup=changeImg(this,'" + this.objName + "','"+arImg[7].src+"',event) onclick=" + setRatingText + "></div>" ;
arSub[1]="<div id=" + this.objName + "_1Opt class=mvcwSubItem><img id=" + this.objName + "_1_2 src="+arImg[9].src+" onmouseover=changeImg(this,'" + this.objName + "','"+arImg[10].src+"',event) onmouseout=changeImg(this,'" + this.objName + "','"+arImg[9].src+"',event) onmousedown=changeImg(this,'" + this.objName + "','"+arImg[11].src+"',event); onmouseup=changeImg(this,'" + this.objName + "','"+arImg[10].src+"',event) onclick=" + setRatingText + "><img id=" + this.objName + "_1_1 class=mvcwMPad src="+arImg[12].src+" onmouseover=changeImg(this,'" + this.objName + "','"+arImg[13].src+"',event) onmouseout=changeImg(this,'" + this.objName + "','"+arImg[12].src+"',event) onmousedown=changeImg(this,'" + this.objName + "','"+arImg[14].src+"',event); onmouseup=changeImg(this,'" + this.objName + "','"+arImg[13].src+"',event) onclick=" + setRatingText + "><img id=" + this.objName + "_1_0 src="+arImg[15].src+" onmouseover=changeImg(this,'" + this.objName + "','"+arImg[16].src+"',event) onmouseout=changeImg(this,'" + this.objName + "','"+arImg[15].src+"',event) onmousedown=changeImg(this,'" + this.objName + "','"+arImg[17].src+"',event); onmouseup=changeImg(this,'" + this.objName + "','"+arImg[16].src+"',event) onclick=" + setRatingText + "></div>";
arSub[2]="<div id=" + this.objName + "_2Opt class=mvcwSubItem><img id=" + this.objName + "_2_2 src="+arImg[18].src+" onmouseover=changeImg(this,'" + this.objName + "','"+arImg[19].src+"',event) onmouseout=changeImg(this,'" + this.objName + "','"+arImg[18].src+"',event) onmousedown=changeImg(this,'" + this.objName + "','"+arImg[20].src+"',event); onmouseup=changeImg(this,'" + this.objName + "','"+arImg[19].src+"',event) onclick=" + setRatingText + "><img id=" + this.objName + "_2_1 class=mvcwMPad src="+arImg[21].src+" onmouseover=changeImg(this,'" + this.objName + "','"+arImg[22].src+"',event) onmouseout=changeImg(this,'" + this.objName + "','"+arImg[21].src+"',event) onmousedown=changeImg(this,'" + this.objName + "','"+arImg[22].src+"',event); onmouseup=changeImg(this,'" + this.objName + "','"+arImg[21].src+"',event) onclick=" + setRatingText + "><img id=" + this.objName + "_2_0 src="+arImg[24].src+" onmouseover=changeImg(this,'" + this.objName + "','"+arImg[25].src+"',event) onmouseout=changeImg(this,'" + this.objName + "','"+arImg[24].src+"',event) onmousedown=changeImg(this,'" + this.objName + "','"+arImg[26].src+"',event); onmouseup=changeImg(this,'" + this.objName + "','"+arImg[25].src+"',event) onclick=" + setRatingText + "></div>";
arSub[3]="<div id=" + this.objName + "_3Opt class=mvcwSubItem><img id=" + this.objName + "_3_2 src="+arImg[27].src+" onmouseover=changeImg(this,'" + this.objName + "','"+arImg[28].src+"',event) onmouseout=changeImg(this,'" + this.objName + "','"+arImg[27].src+"',event) onmousedown=changeImg(this,'" + this.objName + "','"+arImg[29].src+"',event); onmouseup=changeImg(this,'" + this.objName + "','"+arImg[28].src+"',event) onclick=" + setRatingText + "><img id=" + this.objName + "_3_1 class=mvcwMPad src="+arImg[30].src+" onmouseover=changeImg(this,'" + this.objName + "','"+arImg[31].src+"',event) onmouseout=changeImg(this,'" + this.objName + "','"+arImg[30].src+"',event) onmousedown=changeImg(this,'" + this.objName + "','"+arImg[32].src+"',event); onmouseup=changeImg(this,'" + this.objName + "','"+arImg[31].src+"',event) onclick=" + setRatingText + "><img id=" + this.objName + "_3_0 src="+arImg[33].src+" onmouseover=changeImg(this,'" + this.objName + "','"+arImg[34].src+"',event) onmouseout=changeImg(this,'" + this.objName + "','"+arImg[33].src+"',event) onmousedown=changeImg(this,'" + this.objName + "','"+arImg[35].src+"',event); onmouseup=changeImg(this,'" + this.objName + "','"+arImg[34].src+"',event) onclick=" + setRatingText + "></div>";
arSub[4]="<div id=" + this.objName + "_4Opt class=mvcwSubItem><img id=" + this.objName + "_4_0 src="+arImg[36].src+" onmouseover=changeImg(this,'" + this.objName + "','"+arImg[37].src+"',event) onmouseout=changeImg(this,'" + this.objName + "','"+arImg[36].src+"',event); onmousedown=changeImg(this,'" + this.objName + "','"+arImg[38].src+"',event); onmouseup=changeImg(this,'" + this.objName + "','"+arImg[37].src+"',event) onclick=" + setRatingText + " onclick=" + setRatingText + "></div>";

  var sHtml = '' ;

  if (this.formID != null)
    {
      sHtml = '<input type="hidden" name="' + this.varName + '" value="0">' ;
    }
  
 /* Main Ratings Table */

  if (this.isOverall)
    sHtml+="<table border=0 cellpadding=0 cellspacing=0 width=140 height=86 style=background-image:url('/images/rate/ratings/wrbx.gif'); onmouseout=" + checkEvText + ">";
  else
    sHtml+="<table border=0 cellpadding=0 cellspacing=0 width=140 height=86 style=background-image:url('/images/rate/ratings/wrsbx.gif'); onmouseout=" + checkEvText + ">";

  sHtml+="<tr valign=top><td width=78 height=56 onmouseover=resetAll(" + this.objName + ");><div class=mvcwLabel><b>" + this.dispName + ":</b></div>";
  sHtml+="<div id=" + this.objName + "_rating style=position:relative;width:78px;height:56px>";
  sHtml+="<div class=mvcwRate id=" + this.objName + "_base style=visibility:visible;>";
  if (this.isInfoPage) {
    sHtml += "<span style=color:#095AA6;font-size:11px;><b>Rate this<br>Game!</b></span><br><br>";
    sHtml += "Select grade<br>to the right";
  }
  else {
    sHtml+="<span style=color:#095AA6;font-size:11px;>Select a<br>grade<br>to the right</span>";
  }
  sHtml += "</div>";



 /* Ratings Descriptions */
for(i=0;i<4;i++)
{
  for(j=0;j<3;j++)
    {
	sHtml+="<div id=" + this.objName + "_"+i+"_"+j+"text class=mvcwRate>"+arFullText[i][j]+"</div>";
    }
}

sHtml+="<div id=" + this.objName + "_4_0text class=mvcwRate>"+arFullText[4][0]+"</div>";
sHtml+="<div id=" + this.objName + "_msg class=mvcwLabel style=position:relative;top:46px;color:#095AA6;display:none;></div>";

sHtml+="</div>";

 // only write out a review link if we're called with something
if (this.isInfoPage && this.writeReviewURL != "") {
  sHtml+="<div class=mvcwLabel><a href='" + this.writeReviewURL + "'>write a review</a></div>";
}


sHtml+="</td>";
sHtml+="<td onmouseover=" + checkEvText + ">";
sHtml+="<div id=" + this.objName + "_btnCtnr style=position:relative;top:3px;height:86px;width:62px;>";
sHtml+="<div class=mvcwMainBtn style=position:absolute;top:1px; onmouseout=clearTimeout(rd);><img id=" + this.objName + "_0 onmouseover=" + setDelayText + ",0); src='"+arBtn[0]+"'>"+arSub[0]+"</div>";
sHtml+="<div class=mvcwMainBtn style=position:absolute;top:17px; onmouseout=clearTimeout(rd);><img id=" + this.objName + "_1 onmouseover=" + setDelayText + ",1); src='"+arBtn[1]+"'>"+arSub[1]+"</div>";
sHtml+="<div class=mvcwMainBtn style=position:absolute;top:33px; onmouseout=clearTimeout(rd);><img id=" + this.objName + "_2 onmouseover=" + setDelayText + ",2); src='"+arBtn[2]+"'>"+arSub[2]+"</div>";
sHtml+="<div class=mvcwMainBtn style=position:absolute;top:49px; onmouseout=clearTimeout(rd);><img id=" + this.objName + "_3 onmouseover=" + setDelayText + ",3); src='"+arBtn[3]+"'>"+arSub[3]+"</div>";
sHtml+="<div class=mvcwMainBtn style=position:absolute;top:65px; onmouseout=clearTimeout(rd);><img id=" + this.objName + "_4 onmouseover=" + setDelayText + ",4); src='"+arBtn[4]+"'>"+arSub[4]+"</div>";
sHtml+="</div></td></tr>";
sHtml+="</table>";
document.write(sHtml);

 this.resetText = function()
 {
   for(i=0;i<4;i++)
     {
       for(j=0;j<3;j++)
	 {
	   div = document.getElementById(this.objName + '_' + i +"_"+j+"text") ;
	   div.style.visibility='hidden';
	 }
     }
   div = document.getElementById(this.objName + "_4_0text") ;
   div.style.visibility='hidden';
 }

   this.resetBaseText = function()
   {
     var oBase = document.getElementById(this.objName + '_base');
     oBase.style.visibility='visible';
   }

   this.resetSub = function()
   {
     for(i=0;i<5;i++)
	{
	  oSub = document.getElementById(this.objName + '_' + i + 'Opt');
	  var oMain = document.getElementById(objName + '_' + i);
	  oSub.style.visibility='hidden';
	  oMain.style.visibility='visible';
	}
   }

   this.restoreBtn = function()
   {
     var oSub = document.getElementById(oldSub);
     var oBtn = document.getElementById(oldBtn);
     if(oSub) oSub.style.visibility='hidden';
     if(oBtn) oBtn.style.visibility='visible';
   }

   this.setRtText = function (id)
   {
     var oBase = document.getElementById(this.objName + '_base');
     if (id == (this.objName + '_base'))
       oBase.innerHTML = document.getElementById (id).innerHTML;
     else
       oBase.innerHTML = document.getElementById (id+'text').innerHTML;	 
   }

   this.setState = function()
   {
	var oSave = document.getElementById(this.objName + '_msg');
	oSave.style.display='block';
	oSave.innerHTML = "<b>saving...</b>";
	var thisObj = this;
	setTimeout( function() { thisObj.setFlashState(0) } , 600)
	setTimeout( function() { thisObj.setMsg( "saved" ) } , 2400);
   }

   this.setFlashState = function(num)
   {
	var oSave = document.getElementById(this.objName + '_msg');
	switch(num)
	{
		case 0:
			oSave.innerHTML = "";
			break;
		case 1:
			oSave.innerHTML = "<b>saving...</b>";
			break;
		case 2:
			oSave.innerHTML = "";
			break;
	}
	count=num+1;
	if(count<=2) 
          {
		var thisObj = this;
		setTimeout(function(){ thisObj.setFlashState(count) }, 600);
          }
   }

   this.setMsg = function( msg )
   {
	var oSave = document.getElementById(this.objName + '_msg');
	oSave.innerHTML = "<i style=color:#BBBBBB;>" + msg + "</i>";
	oSave.style.display='block';
   }

   this.setInitialRating = function (initRating)
   {
     this.curRating = initRating ;
     this.setRtText (this.objName + '_' + getTextID (initRating)) ;
     if ( this.curRating >= 10 && this.curRating <= 96 ) 
       {
         // tabled, pending further review
         // this.setMsg( "click to change" );
       }

     if(document.all)
       {
	 mvcf = document.forms [this.formID] ;
       }
     else if (document.getElementById)
       {
	 mvcf = document.getElementById (this.formID) ;
       }

     mvcf [this.varName].value = this.curRating ;
   }
}

