// Thanks to Blockbuster for parts of this code. :)

var RATINGSWIDGET_IMG_ROOT = '/static/images/ratings/';
var RATINGSWIDGET_SET_PAGE = '/rateMix';

// This is the color that you will rate on.
var RATINGSWIDGET_TYPE_COLOR = 2;
// This is the number of colors that should be selected
var RATINGSWIDGET_TYPE_MAX = 2;

// These are the values associated with the size of the rating widget
var RATINGSWIDGET_HEIGHT = 18;
var RATINGSWIDGET_WIDTH = 90;

// Storing and preloading of ratingwidget images
var RatingWidgetImages;

function RatingWidgetImageName(starColor, n) 
{
    return RATINGSWIDGET_IMG_ROOT + starColor + "_" + n + "stars.gif";
}

function RatingWidgetImage(starColor, numStars) {
	if( !RatingWidgetImages[starColor][numStars] ){
       RatingWidgetImages[starColor][numStars] = new Image(RATINGSWIDGET_WIDTH, RATINGSWIDGET_HEIGHT);
       RatingWidgetImages[starColor][numStars].src = RatingWidgetImageName(starColor, numStars);
	}
    return RatingWidgetImages[starColor][numStars].src;
}

function RatingWidgetPreload() {
    if (! RatingWidgetImages) {
        RatingWidgetImages = new Array();
        for (var j = 1; j <= RATINGSWIDGET_TYPE_MAX; j++) {
            RatingWidgetImages[j] = new Array();
        }

		// load yellow images (5 of them)
		for (var i = 1; i <= 5; i++) {
			RatingWidgetImages[2][i*10] = new Image(RATINGSWIDGET_WIDTH, RATINGSWIDGET_HEIGHT);
			RatingWidgetImages[2][i*10].src = RatingWidgetImageName(2,i*10);
		}

        RatingWidgetEnabled = true;
    }
}

// State Info about all the RatingWidgets on the page
var RatingWidgetCount = 0;
var RatingWidgetItemIds = new Array();
var RatingWidgetTypes = new Array();
var RatingWidgetNumStars = new Array();
var RatingWidgetTimers = new Array();
var RatingWidgetHeading = new Array();
var RatingWidgetLastEntered = -1;
var RatingWidgetEnabled = false;

function RatingWidgetMouseOver(imgNum, whichStar) {
    // Cancel any background request to restore this image.
    if (RatingWidgetTimers[imgNum] != 0) {
        window.clearTimeout(RatingWidgetTimers[imgNum]);
        RatingWidgetTimers[imgNum] = 0;
    }
    RatingWidgetLastEntered = imgNum;
    // Make the RatingWidget show appropriate feedback.
    
    if (whichStar > -1) {
        document.images["RatingWidget"+imgNum].src = RatingWidgetImage(RATINGSWIDGET_TYPE_COLOR, whichStar);
    }
    if (whichStar == -1){
    	document.images["RatingWidget"+imgNum].src = RatingWidgetImage(RATINGSWIDGET_TYPE_COLOR, whichStar);
    }
    
    return false;
}

function RatingWidgetClick(whichStar) {

    var mixId;
    var rateHref;
    var rateWindow;
    var imgNum = RatingWidgetLastEntered;
    
    RatingWidgetEnabled = false;
    mixId = RatingWidgetItemIds[imgNum];
    // Update the saved state of the RatingWidget and the display

	rateHref = "?mixId="+mixId+"&rating="+whichStar;
	RatingWidgetTypes[imgNum] = RATINGSWIDGET_TYPE_COLOR;
	RatingWidgetNumStars[imgNum] = whichStar;
	
	rateHref = RATINGSWIDGET_SET_PAGE + rateHref;

	RatingSubmitImage = new Image(0, 0);
    RatingSubmitImage.src = rateHref;
	delete RatingSubmitImage;
	RatingWidgetEnabled = true;
	
	return void(0);
}

function RatingWidgetRestore(imgNum) {
    document.images["RatingWidget"+imgNum].src = RatingWidgetImage(RatingWidgetTypes[imgNum], RatingWidgetNumStars[imgNum]);
	
    if (RatingWidgetLastEntered == imgNum) {
        RatingWidgetLastEntered = -1;
    }
}

function RatingWidgetMouseOut(whichStar) {
    // Restore the image to the saved state, once a little time has elapsed.
    var imgNum = RatingWidgetLastEntered;
    if (imgNum < 0) {
        return void(0);
    }

    if (! RatingWidgetTimers[imgNum]) {
        RatingWidgetTimers[imgNum] = window.setTimeout("RatingWidgetRestore("+imgNum+")", 100);
    }
}

function RatingWidgetCreate(imgNum, mixId, starColor, numStars) {
    with (document) {
        if (mixId < 0) {
            // If an Item is negative this makes the bar disabled...
            write("<img src='"
                  + RatingWidgetImage(starColor, numStars)
                  + "' width='90' height='18'>");
        } else {
          
                   write("<map name='RatingWidget"
                  + imgNum
                  + "'>"
                  + "<area onClick='javascript:RatingWidgetClick(10);' onMouseOver='RatingWidgetMouseOver("
                  + imgNum
                  + ",10);' onMouseOut='RatingWidgetMouseOut(10);' shape='rect' coords='0,0,18,18' />"
                  
                  + "<area onClick='javascript:RatingWidgetClick(20);' onMouseOver='RatingWidgetMouseOver("
                  + imgNum
                  + ",20);' onMouseOut='RatingWidgetMouseOut(20);' shape='rect' coords='18,0,36,18' />"
                  
                  + "<area  onClick='javascript:RatingWidgetClick(30);' onMouseOver='RatingWidgetMouseOver("
                  + imgNum
                  + ",30);' onMouseOut='RatingWidgetMouseOut(30);' shape='rect' coords='36,0,54,18' />"
                  
                  + "<area  onClick='javascript:RatingWidgetClick(40);' onMouseOver='RatingWidgetMouseOver("
                  + imgNum
                  + ",40);' onMouseOut='RatingWidgetMouseOut(40);' shape='rect' coords='54,0,72,18' />"

                  + "<area  onClick='javascript:RatingWidgetClick(50);' onMouseOver='RatingWidgetMouseOver("
                  + imgNum
                  + ",50);' onMouseOut='RatingWidgetMouseOut(50);' shape='rect' coords='72,0,90,18' />"

                  + "</map><img name='RatingWidget"
                  + imgNum
                  + "' usemap='#RatingWidget"
                  + imgNum
                  + "' src='"
                  + RatingWidgetImage(starColor, numStars)
                  + "' width='90' height='18' />");
                  
        }
    }
}

function RatingWidgetInsert(mixId, numStars) {

    var imgNum = RatingWidgetCount++;
    if (mixId >= 0) {
        // Get orginal values
        RatingWidgetItemIds[imgNum] = mixId;
		RatingWidgetTypes[imgNum] = 1;
        RatingWidgetNumStars[imgNum] = numStars;
        RatingWidgetTimers[imgNum] = 0; 
    }
    
    RatingWidgetCreate(imgNum, mixId, 1, numStars);

}

RatingWidgetPreload();


