var gRatingOptions, gRatingButtons, gUserRating; function makeNiceRatingForm(options) { gRatingOptions = options; var form = $('#rateForm'); if (!form) return; //? template changed gRatingButtons = form.find('span'); gUserRating = ""; gRatingButtons.each(function() { if ($(this).hasClass('rateButtonStarFull')) { gUserRating = $(this).data('value'); } }); gRatingButtons.each(function() { $(this).data('initialRateValue', $(this).data('value')); pwgAddEventListener($(this).get(0), "click", updateRating); pwgAddEventListener($(this).get(0), "mouseout", function() {updateRatingStarDisplay( gUserRating );}); pwgAddEventListener($(this).get(0), "mouseover", function(e) { updateRatingStarDisplay(e.target ? $(e.target).data('initialRateValue') : $(e.srcElement).data('initialRateValue')); }); }); updateRatingStarDisplay(gUserRating); } function updateRatingStarDisplay(userRating) { gRatingButtons.each(function() { $(this).addClass(userRating !=="" && userRating >= $(this).data('initialRateValue') ? 'rateButtonStarFull' : 'rateButtonStarEmpty'); $(this).removeClass(userRating !=="" && userRating >= $(this).data('initialRateValue') ? 'rateButtonStarEmpty' : 'rateButtonStarFull'); }); } function updateRating(e) { var elem = e.target || e.srcElement; var rateButton = $(elem); if (rateButton.data('disabled') == true || rateButton.data('initialRateValue') == gUserRating) { return false; //nothing to do } gRatingButtons.each(function() { rateButton.data('disabled', true); }); var y = new PwgWS(gRatingOptions.rootUrl); y.callService( "pwg.images.rate", {image_id: gRatingOptions.image_id, rate: rateButton.data('initialRateValue') } , { method: "POST", onFailure: function(num, text) { alert(num + " " + text); document.location = $('#rateForm').attr('action') + "&rate=" + rateButton.data('initialRateValue'); }, onSuccess: function(result) { gUserRating = rateButton.data('initialRateValue'); gRatingButtons.each(function() { rateButton.data('disabled', false); }); if (gRatingOptions.onSuccess) gRatingOptions.onSuccess(result); if (gRatingOptions.updateRateElement) gRatingOptions.updateRateElement.innerHTML = gRatingOptions.updateRateText; if (gRatingOptions.ratingSummaryElement) { var t = gRatingOptions.ratingSummaryText; var args =[result.score, result.count, result.average], idx = 0, rexp = new RegExp( /%\.?\d*[sdf]/ ); while (idx