var RATEBAR_IMG_ROOT = '/images/_q/RentalStatusButt/NewRatingStars/';
//var RATEBAR_IMG_ROOT = '/QFLImages/';
//var RATEBAR_SET_PAGE = 'SetRating.aspx?foo=bar'
var RATEBAR_SET_PAGE = '?action=films/vote';
//&vote='+vote+'frame=empty&film_id=' + film_id;

var RATEBAR_RATES_PER_BAR = 5;
//multiplier for rating star filenames ie. rating 1=2-4.gif rating 2=2-8.gif
var RATEBAR_RATE_STAR_MULT = 4;

// Special ratings values, must be < 0
var RATEBAR_NI_VALUE = -1;
var RATEBAR_NOP_VALUE = -2;
var RATEBAR_CLEAR_VALUE = -3;
//
var RATEBAR_TYPE_EMPTY = 0;
var RATEBAR_TYPE_PREDICT = 1;
var RATEBAR_TYPE_RATE = 2;
var RATEBAR_TYPE_STATIC = 3;
var RATEBAR_TYPE_AVG = 4;
var RATEBAR_TYPE_MAX = 4;
//
var RATEBAR_HEIGHT = 15;
var RATEBAR_RATE_WIDTH = 16;
var RATEBAR_GAP_WIDTH = 3;
var RATEBAR_WIDTH = RATEBAR_RATES_PER_BAR*RATEBAR_RATE_WIDTH + (RATEBAR_RATES_PER_BAR-1)*RATEBAR_GAP_WIDTH;

var RATEBAR_ROW_PADDING = 3;


var RATEBAR_NI_MINI_BUTTON_WIDTH = 19;
var RATEBAR_NI_MINI_BUTTON_HEIGHT = 15;
var RATEBAR_NI_BUTTON_HEIGHT = 21;
var RATEBAR_NI_BUTTON_WIDTH = 21;
var RATEBAR_CLEAR_BUTTON_HEIGHT = 16;
var RATEBAR_CLEAR_BUTTON_WIDTH = 92;
var RATEBAR_NOP_BUTTON_HEIGHT = 20;
var RATEBAR_NOP_BUTTON_WIDTH = 18;

//
// Storing and preloading of starbar images
//
var RatebarImages;
function RatebarImageName(starType, n) {
    return RATEBAR_IMG_ROOT + starType + "-" + (0==starType ? 0 : n) + ".gif";
}

function RatebarImage(starType, n) {
    // If already fetched and cached, use it.
    // Otherwise cache it now for future use.
    //var n = Math.min(Math.max(Math.round(numRates * 10), 0), 10*RATEBAR_RATES_PER_BAR);
    if (! RatebarImages[starType][n]) {
        RatebarImages[starType][n] = new Image(RATEBAR_WIDTH, RATEBAR_HEIGHT);
        RatebarImages[starType][n].src = RatebarImageName(starType, n);
    }
    return RatebarImages[starType][n].src;
}

function RatebarNoOpinionImage(selected) {
    return RATEBAR_IMG_ROOT
        + (selected ? "nop_selected.gif" : "nop_low.gif");
}

function IsClearImageAvailable(imgNum) {
    return (RatebarTypes[imgNum] == RATEBAR_TYPE_RATE) || ((RatebarSpecialValues[imgNum] != 0) && (RatebarSpecialValues[imgNum] != RATEBAR_NOP_VALUE));
}
function RatebarClearImage(imgNum, selected) {
    return RATEBAR_IMG_ROOT 
        + (selected ? "clear_selected.gif" : (IsClearImageAvailable(imgNum) ? "clear_low.gif" : "clear_unavailable.gif"));
}
function RatebarNotInterestedImage(selected) {
    return RATEBAR_IMG_ROOT
        + (selected ? "dontshow2.gif" : "dontshow.gif");
}
function RatebarNotInterestedMiniImage(selected) {
    return RATEBAR_IMG_ROOT
        + (selected ? "ni_slim_bar_high.gif" : "ni_slim_bar_low.gif");
}
function RatebarPreload() {
    // Preload the images that are used for tracking mouse movement.
    // Note that this is only called if there is a starbar on the page,
    // so it is safe to include this on every page.
    if (! RatebarImages) {
        RatebarImages = new Array();
        for (var j = 0; j <= RATEBAR_TYPE_MAX; j++) {
            RatebarImages[j] = new Array();
        }
        for (var j = RATEBAR_TYPE_RATE; j <= RATEBAR_TYPE_RATE; j++) {
        //for (j = 0; j <= RATEBAR_TYPE_MAX; j++) {
            for (var i = 1; i <= RATEBAR_RATES_PER_BAR; i++) {
                RatebarImages[j][i] = new Image(RATEBAR_WIDTH, RATEBAR_HEIGHT);
                RatebarImages[j][i].src = RatebarImageName(j, i);
            }
        }
        RatebarEnabled = true;
    }
}
var RatebarTooltip = new Array();
RatebarTooltip[RATEBAR_CLEAR_VALUE] = 'Click to clear your rating';
RatebarTooltip[RATEBAR_NOP_VALUE] = 'I do not want to rate the movie';
RatebarTooltip[RATEBAR_NI_VALUE] = 'Do not show this movie to me again';
RatebarTooltip[1] = 'Click to rate the movie "I was disappointed"';
RatebarTooltip[2] = 'Click to rate the movie "Watchable, but nothing special"';
RatebarTooltip[3] = 'Click to rate the movie "Enjoyed the movie"';
RatebarTooltip[4] = 'Click to rate the movie "Really enjoyed the movie"';
RatebarTooltip[5] = 'Click to rate the movie "Loved the movie"';
//
// Place to store state about all the starbars on the page
//
var RatebarCount = 0;
var RatebarMovieIDs = new Array();
var RatebarItemNos = new Array();
var RatebarTypes = new Array();
var RatebarNumRates = new Array();
var RatebarRefresh = new Array();
var RatebarTimers = new Array();
var RatebarPredictions = new Array();
var RatebarSpecialValues = new Array();
var RatebarLastEntered = -1;
//
// Interaction functions
//
var RatebarEnabled = false;
//
function RatebarMouseOver(imgNum, whichRate) {
    // Cancel any background request to restore this image.
    if (RatebarTimers[imgNum] != 0) {
        window.clearTimeout(RatebarTimers[imgNum]);
        RatebarTimers[imgNum] = 0;
    }
    // If we left an image, restore it right now.
    if (RatebarLastEntered >= 0 && RatebarLastEntered != imgNum) {
        RatebarRestore(RatebarLastEntered);
    }
    // If we're now over one of the special buttons,
    // and we were previously on some othe part of this widget,
    // make sure we restore the stars.
    if (RatebarLastEntered >= 0
            && RatebarLastEntered == imgNum
            && whichRate < 0) {
        RatebarRestore(RatebarLastEntered);
    }
    RatebarLastEntered = imgNum;
    // Make the starbar show appropriate feedback.
    if (whichRate > 0) {
        document.images["starbar"+imgNum].src = RatebarImage(RATEBAR_TYPE_RATE, whichRate);
    } else if (whichRate == RATEBAR_NI_VALUE) {
        document.images["starbar"+imgNum].src = RatebarImage(RATEBAR_TYPE_EMPTY, 0);
    } else if (whichRate == RATEBAR_NOP_VALUE) {
        document.images["starbar"+imgNum].src = RatebarImage(RATEBAR_TYPE_PREDICT, RatebarPredictions[imgNum]);
    } else if (whichRate == RATEBAR_CLEAR_VALUE && IsClearImageAvailable(imgNum)) {
        document.images["starbar"+imgNum].src = RatebarImage(RATEBAR_TYPE_PREDICT, RatebarPredictions[imgNum]);
        document.images["starbar_clear"+imgNum].src = RatebarClearImage(imgNum, true);
    } else {
        //
    }
    if (document.images["starbar_nop"+imgNum]) {
        document.images["starbar_nop"+imgNum].src = RatebarNoOpinionImage((whichRate == RATEBAR_NOP_VALUE));
    }
/*    
    if (document.images["starbar_ni"+imgNum]) {
        document.images["starbar_ni"+imgNum].src = RatebarNotInterestedImage((whichRate == RATEBAR_NI_VALUE));
    }
    
    if (document.images["starbar_ni_mini"+imgNum]) {
        document.images["starbar_ni_mini"+imgNum].src = RatebarNotInterestedMiniImage((whichRate == RATEBAR_NI_VALUE));
    }
*/    // Overwrite the ugly link text in the status region.
    window.status = RatebarTooltip[whichRate];
    return false;
}
function RatebarRestore(imgNum) {
    // Restore the starbar state.
    if (RatebarSpecialValues[imgNum] == RATEBAR_NI_VALUE) {
        RatebarTypes[imgNum] = RATEBAR_TYPE_EMPTY;
    }
    document.images["starbar"+imgNum].src = RatebarImage(RatebarTypes[imgNum], RatebarNumRates[imgNum]);
    if (document.images["starbar_clear"+imgNum]) {
        document.images["starbar_clear"+imgNum].src = RatebarClearImage(imgNum, false);
    }
    if (document.images["starbar_nop"+imgNum]) {
        document.images["starbar_nop"+imgNum].src = RatebarNoOpinionImage((RatebarSpecialValues[imgNum] == RATEBAR_NOP_VALUE));
    }
    /*
    if (document.images["starbar_ni"+imgNum]) {
        document.images["starbar_ni"+imgNum].src = RatebarNotInterestedImage((RatebarSpecialValues[imgNum] == RATEBAR_NI_VALUE));
    }
    if (document.images["starbar_ni_mini"+imgNum]) {
        document.images["starbar_ni_mini"+imgNum].src = RatebarNotInterestedMiniImage((RatebarSpecialValues[imgNum] == RATEBAR_NI_VALUE));
    }
    */
    RatebarTimers[imgNum] = 0;
    if (RatebarLastEntered == imgNum) {
        RatebarLastEntered = -1;
    }
    window.status = "";
}
function RatebarMouseOut(imgNum, whichRate) {
    // Restore the image to the saved state, once a little time has elapsed.
    if (! RatebarTimers[imgNum]) {
        RatebarTimers[imgNum] = window.setTimeout("RatebarRestore("+imgNum+")", 100);
    }
    window.status = "";
}
// whichRate is 0-5, needs to be converted to 0-20 for img href
function RatebarClick(imgNum, whichRate) {
    var MovieID;
    var ItemNo;
    var rateHref;
    var rateWindow;
    if (! RatebarEnabled) {
        return void(0);
    }
    RatebarEnabled = false;
    MovieID = RatebarMovieIDs[imgNum];
    ItemNo = RatebarItemNos[imgNum];
    rateHref = "&film_id="+MovieID+"&ItemNo="+ItemNo;
    
    // Update the saved state of the starbar and the display
    if (whichRate == RATEBAR_NI_VALUE) {
        rateHref += "&value="+"norec";
        RatebarTypes[imgNum] = RATEBAR_TYPE_EMPTY;
        RatebarNumRates[imgNum] = RatebarPredictions[imgNum];
        RatebarSpecialValues[imgNum] = whichRate;
    } else if (whichRate == RATEBAR_NOP_VALUE) {
        rateHref += "&value="+"noseen";
        RatebarTypes[imgNum] = RATEBAR_TYPE_PREDICT;
        RatebarNumRates[imgNum] = RatebarPredictions[imgNum];
        RatebarSpecialValues[imgNum] = whichRate;
    } else if (whichRate == RATEBAR_CLEAR_VALUE) {
        if ((RatebarTypes[imgNum] != RATEBAR_TYPE_RATE)
             && (RatebarSpecialValues[imgNum] == 0)) {
            RatebarEnabled = true;
            return void(0);
        }
        rateHref += "&value="+"clear";
        RatebarTypes[imgNum] = RATEBAR_TYPE_PREDICT;
        RatebarNumRates[imgNum] = RatebarPredictions[imgNum];
        RatebarSpecialValues[imgNum] = 0;
    } else {
        var vote = Math.round(whichRate/4)
        rateHref += "&vote="+vote;
        RatebarTypes[imgNum] = RATEBAR_TYPE_RATE;
        RatebarNumRates[imgNum] = whichRate;
        RatebarSpecialValues[imgNum] = 0;
    }
    rateHref = RATEBAR_SET_PAGE + rateHref;// +"&url=" + escape(window.location.href);
    //alert(rateHref);
    window.setTimeout("RatebarRestore("+imgNum+")", 10);
    // RatebarRestore(imgNum);
    // Display any popups
    /*
    if (doRatingsPopup == "true") {
        showRatingsPop();
        doRatingsPopup = "false";
    }
    */
    // Save the rating.  
    if (RatebarRefresh[imgNum]) {
        // Must refresh this page
        var rateImg = new Image();
        rateImg.src = rateHref;
        //window.location.href = rateHref;
        RatebarEnabled = true;
//        alert(rateHref);
        return void(0);
    }
    // Try to use a 204 No Content response.
    if (1) {
        var rateImg = new Image();
        rateImg.src = rateHref;
//        alert(rateHref);
//        window.location.href = rateHref
//                               + "&ncok=true";
        RatebarEnabled = true;
        return void(0);
    }
    /*
    // Try to use an IFRAME.
    if (window.callback_iframe) {
        window.callback_iframe.location.href = rateHref+"&iframe=t";
        // Return special value to leave this window alone
        RatebarEnabled = true;
        return void(0);
    }
    */
    // If that failed, try using a pop-up window.
    /*
    rateWindow =
        window.open("",
                    "nf_gauge_set",
                    "resizable=no,dependent=yes,width=1,height=1,screenX="
                    +window.screenX+",screenY="+window.screenY
                    +",top="+window.screenX+",left="+window.screenY);
    if (rateWindow && ! rateWindow.closed) {
        //rateWindow.blur();
        rateWindow.location.href = rateHref+"&js=t";
        //self.focus();
        RatebarEnabled = true;
        return void(0);
    }
    // If that failed, run in this window.
    window.location.href = rateHref;
    RatebarEnabled = true;
    return void(0);
    */
}
//
// Ratebar creation
//
function RatebarInsert1(imgNum, MovieID, starType, numRates, refreshWhenChanged) {
    var altText;
    var imgAttrs;
    RatebarPreload();
    if (numRates == 1) {
        altText = numRates+" star";
    } else {
        altText = numRates+" stars";
    }
    imgAttrs = " src='" + RatebarImage(starType, numRates) + "'"
               + " alt='" + altText + "'"
               + " width=" + RATEBAR_WIDTH
               + " height=" + RATEBAR_HEIGHT
               + " border=0";
    // Emit the HTML
    with (document) {
        if (MovieID < 0) {
            // No real MovieID, so just a non-interactive image
            write("<img"+imgAttrs+">");
            
        } else {
            // Only integral input allowed.
            // Associate the gap between stars with the star just to the left of the gap.
            write("<map name='starbar"+imgNum+"'>");
            for (var i = 1; i <= RATEBAR_RATES_PER_BAR; i++) {
                var left = (i-1) * (RATEBAR_RATE_WIDTH + RATEBAR_GAP_WIDTH);
                var right = Math.min(left + RATEBAR_RATE_WIDTH +RATEBAR_GAP_WIDTH - 1, RATEBAR_WIDTH);
                var top = 0;
                var bottom = RATEBAR_HEIGHT - 1;
                write("<area href='javascript:RatebarClick("+imgNum+","+i*4+");' alt='"+RatebarTooltip[i]+"'");
                write(" onMouseOver='RatebarMouseOver("+imgNum+","+i*4+");'");
                write(" onMouseOut='RatebarMouseOut("+imgNum+","+i*4+");'");
                write(" shape='rect' coords='"+left+","+top+","+right+","+bottom+"'>");
            }
            write("</map>");
            
            write("<img"+imgAttrs+" name='starbar"+imgNum+"' usemap='#starbar"+imgNum+"'>");
          
        }
    }
}
//RatebarInsert(1020619,1,3.4,3.4,0,0,1,0,0,0,0);
function RatebarInsert(MovieID, ItemNo, starType,
                       numRates, predictedRating,
                       isNotInterested, isNoOpinion,
                       showNI, showNiMini, showClear, showNoOpinion,
                       refreshWhenChanged) {
  
    var imgNum = RatebarCount++;
    var useTable = showNI || showNiMini || showClear || showNoOpinion;
    if (MovieID >= 0) {
        // Remember the true state of the starbar.
        RatebarMovieIDs[imgNum] = MovieID;
        RatebarItemNos[imgNum] = ItemNo;
        RatebarTypes[imgNum] = starType;
        RatebarNumRates[imgNum] = numRates;
        RatebarRefresh[imgNum] = refreshWhenChanged;
        RatebarTimers[imgNum] = 0;
        if (isNotInterested) {
            RatebarSpecialValues[imgNum] = RATEBAR_NI_VALUE;
        } else if (isNoOpinion) {
            RatebarSpecialValues[imgNum] = RATEBAR_NOP_VALUE;
        } else {
            RatebarSpecialValues[imgNum] = 0;
        }
        RatebarPredictions[imgNum] = predictedRating;
    }
    var totalWidth = RATEBAR_WIDTH;
    if (showNiMini) {
        totalWidth += RATEBAR_NI_MINI_BUTTON_WIDTH;
    }
    with (document) {

        if (useTable) {
            write("<table cellpadding=0 cellspacing=0 cellborder=0 width='" + totalWidth + "'>");
            write("<tr>");
        }
        if (showNiMini) {
            write("<td align=right><nobr>");
            write("<a href='javascript:RatebarClick("+imgNum+","+RATEBAR_NI_VALUE+");'"
                  + " onMouseOver='RatebarMouseOver("+imgNum+","+RATEBAR_NI_VALUE+")'"
                  + " onMouseOut='RatebarMouseOut("+imgNum+","+RATEBAR_NI_VALUE+")'"
                  + ">");
                  /*
            write("<img src='" + RatebarNotInterestedMiniImage(isNotInterested) + "'"
                  + " width=" + RATEBAR_NI_MINI_BUTTON_WIDTH
                  + " height=" + RATEBAR_NI_MINI_BUTTON_HEIGHT
                  + " border=0"
                  + " alt='" + RatebarTooltip[RATEBAR_NI_VALUE] + "'"
                  + " name='starbar_ni_mini" + imgNum + "'"
                  + ">");
                  */
            write("</a>");
            write("</nobr></td>");
        }
       if (showClear) {        
            write("<td height=" + (RATEBAR_CLEAR_BUTTON_HEIGHT+RATEBAR_ROW_PADDING) + " align=center><nobr>");

            write("<a href='javascript:RatebarClick("+imgNum+","+RATEBAR_CLEAR_VALUE+");'"
                  + " onMouseOver='RatebarMouseOver("+imgNum+","+RATEBAR_CLEAR_VALUE+")'"
                  + " onMouseOut='RatebarMouseOut("+imgNum+","+RATEBAR_CLEAR_VALUE+")'"
                  + ">");
            write("<img src='" + RatebarClearImage(imgNum, false) + "'"
                  + " width=" + RATEBAR_CLEAR_BUTTON_WIDTH
                  + " height=" + RATEBAR_CLEAR_BUTTON_HEIGHT
                  + " border=0"
                  + " alt='" + RatebarTooltip[RATEBAR_CLEAR_VALUE] +"'"
                  + " name='starbar_clear"+imgNum+"'"
                  + ">");

            write("</a>");
            write("</nobr></td>");
        }
        if (showNoOpinion) {
            write("<td height=" + (RATEBAR_NOP_BUTTON_HEIGHT+RATEBAR_ROW_PADDING) + " align=center><nobr>");
            write("<a href='javascript:RatebarClick("+imgNum+","+RATEBAR_NOP_VALUE+");'"
                  + " onMouseOver='RatebarMouseOver("+imgNum+","+RATEBAR_NOP_VALUE+")'"
                  + " onMouseOut='RatebarMouseOut("+imgNum+","+RATEBAR_NOP_VALUE+")'"
                  + ">");
            write("<img src='" + RatebarNoOpinionImage(isNoOpinion) + "'"
                  + " width=" + RATEBAR_NOP_BUTTON_WIDTH
                  + " height=" + RATEBAR_NOP_BUTTON_HEIGHT
                  + " border=0"
                  + " alt='" + RatebarTooltip[RATEBAR_NOP_VALUE] + "'"
                  + " name='starbar_nop"+imgNum+"'"
                  + ">");
            write("</a>");
            write("</nobr></td>");
        }
        if (showNI) {
            write("<td height=" + (RATEBAR_NI_BUTTON_HEIGHT+RATEBAR_ROW_PADDING) + " align=center><nobr>");
            write("<a href='javascript:RatebarClick("+imgNum+","+RATEBAR_NI_VALUE+");'"
                  + " onMouseOver='RatebarMouseOver("+imgNum+","+RATEBAR_NI_VALUE+")'"
                  + " onMouseOut='RatebarMouseOut("+imgNum+","+RATEBAR_NI_VALUE+")'"
                  + ">");
                  /*
            write("<img src='" + RatebarNotInterestedImage(isNotInterested) + "'"
                  //+ " width=" + RATEBAR_NI_BUTTON_WIDTH
                  //+ " height=" + RATEBAR_NI_BUTTON_HEIGHT
                  + " border=0"
                  + " alt='" + RatebarTooltip[RATEBAR_NI_VALUE] + "'"
                  + " name='starbar_ni"+imgNum+"'"
                  + ">");
                  */
            write("</a>");
            write("</nobr></td>");
        }
if (useTable) {
write("<td align=left><nobr>");
        }
        RatebarInsert1(imgNum, MovieID, starType, 
(isNotInterested ? RATEBAR_TYPE_EMPTY : numRates), refreshWhenChanged);
        if (useTable) {
            write("</nobr></td>");
        }

        if (useTable) {
            write("</tr></table>");
        }
    }
}
//
function RateBarLikeYou() {
    window.open(RATEBAR_MLY_PAGE, 'MLYPoppage',
        'toolbars=0,scrollbars=0,location=0,statusbars=0,menubars=0,resizable=0,width=435,height=300');
    return false;
}
