function addClassToAllRatingsBelow(option,className)
{
    for (i=1; i<=option['id']; i++) {
        jQuery('#' + option['rating_code'] + '_' + option['rating_id'] + '_' + i).addClass(className);
    }
}

function getRatingOptionDetails(optionEl)
{
    var splitOptionElId = jQuery(optionEl).attr('id').split('_');
    var option = new Array();
    option['rating_code'] = splitOptionElId[0];
    option['rating_id'] = splitOptionElId[1] * 1;
    option['id'] = splitOptionElId[2] * 1;
   
    return option;
}

function getSelectedRatingOptionDetails(ratingId,ratingCode)
{
    selectedOptionId = jQuery("input[name='ratings[" + ratingId + "]']").val();
   
    if (selectedOptionId == '') {
        return null;
    }
   
    return getRatingOptionDetails('#' + ratingCode + '_' + ratingId + '_' + selectedOptionId);
}

jQuery(document).ready(function() {
    jQuery('.ratings-option').hover(
        function(event) {
            var curOption = getRatingOptionDetails(event.target);
            jQuery('.ratings-option-' + curOption['rating_code']).removeClass('selected');
            addClassToAllRatingsBelow(curOption,'hover');
        },
        function(event) {
            jQuery('.ratings-option').removeClass('hover');
           
            // reinstate the selected highlights if an option has already been clicked
            curOption = getRatingOptionDetails(event.target);
            clickedOption = getSelectedRatingOptionDetails(curOption['rating_id'], curOption['rating_code']);
            if (clickedOption != null) {
                addClassToAllRatingsBelow(clickedOption, 'selected');
            }
        }
    );
   
    jQuery('.ratings-option').click(function(event){
        var option = getRatingOptionDetails(event.target);
       
        jQuery('.ratings-option-' + option['rating_code']).removeClass('selected');
        addClassToAllRatingsBelow(option,'selected');
       
        jQuery("input[name='ratings[" + option['rating_id'] + "]']").val(option['id'] + '');
       
        event.target.blur();  // keep a dotted outline from showing around the selected rating in IE
        return false;
    });
});
