/*jslint devel: false, browser: true, undef: true, unparam: true, sloppy: true, vars: true, white: true, nomen: true, plusplus: true, maxerr: 50, indent: 4 */
/*global Event, Store, Tx */

var SSRating = {};

SSRating.findRatingContainer = function(node)
{
    while (node && node.className !== 'ratingContainer') {
        node = node.parentNode;
    }
    return node;
};

SSRating.setRatingLabel = function(label, ratingContainer)
{
    var allSpans = ratingContainer.getElementsByTagName("SPAN");
    allSpans[0].innerHTML = label;
};

SSRating.getRatingLabel = function(ratingContainer)
{
    var allSpans = ratingContainer.getElementsByTagName("SPAN");
    var label = allSpans[0].innerHTML;
    return label.replace(/((\s*\S+)*)\s*/, "$1");
};

SSRating.ratingOut = function(starContainerDiv, event)
{
    var ratingContainer = SSRating.findRatingContainer(starContainerDiv);
    var allStarImages, i, existingLabel, newLabel;

    if (ratingContainer.disabled) {
        return;
    }

    allStarImages = starContainerDiv.getElementsByTagName("IMG");

    for (i = 0; i < allStarImages.length; i++) {
        if (allStarImages[i].original) {
            allStarImages[i].src = allStarImages[i].original;
        }
    }

    existingLabel = SSRating.getRatingLabel(ratingContainer);
    if (existingLabel !== Store.getMessage("ratingGotItLabel")) {
        newLabel = ratingContainer.defaultLabel || Store.getMessage("ratingRateItLabel");
        SSRating.setRatingLabel(newLabel, ratingContainer);
    }
    Event.stop(event);
};

SSRating.ratingStarOver = function(starImage, event)
{
    // (Kevin 7/28/11) allow the regexp to contain periods
    /*jslint regexp: true */

    var ratingContainer = SSRating.findRatingContainer(starImage);
    var allStarImages, ratingLabels, i, newStar, seenThisOne;

    if (ratingContainer.disabled) {
        return;
    }

    allStarImages = ratingContainer.getElementsByTagName("IMG");
    ratingLabels = [Store.getMessage("ratingLabelsLikeIt"), Store.getMessage("ratingLabelsCraveIt"), Store.getMessage("ratingLabelsLoveIt")];

    seenThisOne = false;
    for (i = 0; i < allStarImages.length; i++) {

        if (!allStarImages[i].original) {
            allStarImages[i].original = allStarImages[i].src;
        }

        newStar = seenThisOne ? "/im/gray_heart.gif" : "/im/rollover_heart.gif";
        allStarImages[i].src = allStarImages[i].src.replace(/\/im\/.*\.gif/, newStar);
        if (allStarImages[i] === starImage) {
            seenThisOne = true;
            SSRating.setRatingLabel(ratingLabels[i], ratingContainer);
        }
    }
    Event.stop(event);
};

SSRating.rateLook = function(element, url)
{
    var ratingContainer = SSRating.findRatingContainer(element);
    var allStarImages, i;

    if (ratingContainer.disabled) {
        return false;
    }

    ratingContainer.defaultLabel = SSRating.getRatingLabel(ratingContainer);

    SSRating.setRatingLabel(Store.getMessage("ratingGotItLabel"), ratingContainer);

    allStarImages = ratingContainer.getElementsByTagName("IMG");
    for (i = 0; i < allStarImages.length; i++) {
        allStarImages[i].original = allStarImages[i].src;
    }

    return Tx.fireDirectActionAjax(url);
};


