var ratingSrcSav;
var ratingAltSav;

/** Formats a raw rating into a displayable rating */
function format(r) {return (r == null) ? 0 : Math.round(2 + 8 * r) / 2;}

/** Unformats a displayable rating into a raw rating */
function unformat(r) {return (r - 1) / 4;}

function setAlphaImg(img, newSrc)
{
    img.src = newSrc;
    try
    {
        getElement('ieTrans_' + img.id).filters.item('DXImageTransform.Microsoft.AlphaImageLoader').src = newSrc;
    }
    catch (e)
    {
        // non-ie browser
    }
}

/** Invoked on mouseover */
function swapstars(imgId, toStar)
{
//alert('swapstars');
    var img = getElement(imgId);
    ratingSrcSav = img.src;
    ratingAltSav = img.alt;

    var newAlt = (toStar == 1) ? getRatingControlStarText() : (toStar + " "+getRatingControlStarsText());
    if (newAlt == ratingAltSav) toStar = 0;

    setAlphaImg(img, getImageDir() + "my-" + toStar + ".png");
    img.alt = toStar == 1 ? getRatingControlStarText() : (toStar + " "+getRatingControlStarsText());
}

/** Invoked on mouseout */
function restorestars(imgId)
{
//alert('restorestars');
    var img = getElement(imgId);
    setAlphaImg(img, ratingSrcSav);
    img.alt = ratingAltSav;
}

/** Invoked on mouseclick */
function starclick(imgId, star, userId, filmId)
{
    var ratingInput = getElement('input-' + imgId);
    var ratingImg = getElement(imgId);
    var actualRating = ratingInput.value;
    var rateAction = (actualRating == star) ? getActionUnrate() : getActionRate();
    var starDisplay = (actualRating == star) ? 0 : star;

    if (rateAction == getActionUnrate() &&
        getElement('reviewaddlink-' + filmId) != null &&
        getElement('reviewaddlink-' + filmId).style.display == 'none' &&
        (getElement('reviewarea-' + filmId) != null && getElement('reviewarea-' + filmId).style.display == 'none' ||
         trim(getElement('review-' + filmId).value) != ''))
    {
        alert(getRatingControlUnrateText());
        return;
    }

    ratingInput.value = starDisplay;
    setAlphaImg(ratingImg, getImageDir() + "my-" + starDisplay + ".png");
    ratingImg.alt = (starDisplay == 1) ? getRatingControlStarText() : (starDisplay + " "+getRatingControlStarsText());
    ratingSrcSav = ratingImg.src;
    ratingAltSav = ratingImg.alt;

    if (typeof preRateHook != "undefined") preRateHook(filmId, userId, star);

    send(handleRateResponse,
         getParamAction(), rateAction,
         getParamFilmId(), filmId,
         getParamUserId(), userId,
         getParamRating(), unformat(star),
         getParamRateFull(), getRateFull(),
         getParamCorrelate(), getCorrelate(),
         getParamRecommend(), getRecommend(),
         getParamTemplate(), getTemplate(),
         ratingImg.id);
}

/** Invoked on server response */
function handleRateResponse(response, args)
{
    var action = args[1];
    var filmId = args[3];
    var userId = args[5];
    var rating = (action == getActionUnrate()) ? 0 : format(args[7]);
    var globalId = args[16];

    var results = eval(response);

    // sync the (potential) alternate and main rating images
    var idx = globalId.indexOf('-alt');
    var altImgId;
    if (idx > 0) altImgId = globalId.substring(0, idx + 1) + globalId.substring(idx + 4);
    else
    {
        idx = globalId.indexOf('-') + 1;
        altImgId = globalId.substring(0, idx) + 'alt' + globalId.substring(idx);
    }

    var altImg = getElement(altImgId);
    var altImgInput = getElement('input-' + altImgId);
    if (altImg != null && altImgInput != null)
    {
        setAlphaImg(altImg, getImageDir() + "avg-" + rating + '.png');
        altImgInput.value = rating;
    }

    /*
    var filmAvg = 0;

    if (getParamRateFull() && results != null) filmAvg = results[0][0];
    if (!getParamRateFull() && results != null) filmAvg = results;

    for (var i = 0; i < 10; i++)
    {
        var globalImgName = 'global-' + globalId;
        if (i > 0)
        {
            var idx = globalImgName.lastIndexOf('-');
            globalImgName = globalImgName.substring(0, idx) + '-' + i + globalImgName.substr(idx);
        }

        var globalImg = getElement(globalImgName);
        if (globalImg == null) break;

        setAlphaImg(globalImg, getImageDir() + "avg-" + format(filmAvg) + '.'png');
    }
    */

    if (typeof postRateHook != "undefined") postRateHook(filmId, userId, results);
}
