/** * Star Rating - jQuery plugin * * Copyright (c) 2007 Wil Stuckey * Modified by John Resig * * Dual licensed under the MIT and GPL licenses: * http://www.opensource.org/licenses/mit-license.php * http://www.gnu.org/licenses/gpl.html * */ /** * Create a degradeable star rating interface out of a simple form structure. * Returns a modified jQuery object containing the new interface. * * @example jQuery('form.rating').rating(); * @cat plugin * @type jQuery * */ jQuery.fn.rating = function(){ return this.each(function(){ var div = jQuery("
").attr({ title: this.title, className: this.className }).insertAfter( this ); product_id = jQuery("input.wpsc_rating_product_id", this).val(); var selected_rating = jQuery("select option:selected", this).val(); jQuery("select option", this).each(function(){ className = ''; //console.log(jQuery(this).attr('selected')); if(this.value <= selected_rating) { className = 'selected'; } div.append( "
" + this.value + "
" ); }); var averageRating = this.title, url = this.action, averageIndex = 1, averagePercent = 1; // hover events and focus events added var stars = div.find("div.star") .mouseover(drainFill).focus(drainFill) .mouseout(drainReset).blur(drainReset) .click(click); // cancel button events div.find("div.cancel") .mouseover(drainAdd).focus(drainAdd) .mouseout(resetRemove).blur(resetRemove) .click(click); reset(); div.mouseout(function(){ //console.log(this); selected_element = jQuery("div.star a:contains("+selected_rating+")", this).parent("div.star"); //console.log(selected_element); previous_elements = jQuery(selected_element, this).prevAll(); next_elements = jQuery(selected_element, this).nextAll(); jQuery('a',previous_elements).addClass('selected'); jQuery('a',next_elements).removeClass('selected'); }); function drainFill(){ drain(); fill(this); } function drainReset(){ drain(); reset(); } function resetRemove(){ reset(); jQuery(this).removeClass('on'); } function drainAdd(){ drain(); jQuery(this).addClass('on'); } function click(){ //console.log(jQuery(this)); product_id = jQuery('a',this).attr('rel'); rating = jQuery('a',this).html(); form_values = "ajax=true&"; form_values += "wpsc_ajax_action=rate_product&"; form_values += "product_id="+product_id+"&"; form_values += "product_rating="+rating; jQuery.post( 'index.php', form_values, function(returned_data) { eval(returned_data); }); selected_rating = rating; parent_element = jQuery(this).parent(); previous_elements = jQuery(this, this_parent).prevAll(); next_elements = jQuery(this, this_parent).nextAll(); jQuery('a',previous_elements).addClass('selected'); jQuery('a',next_elements).removeClass('selected'); //jQuery('div.star a', parent_element).removeClass('selected'); jQuery('a',this).addClass('selected'); return false; } // fill to the current mouse position. function fill( elem ){ this_parent = jQuery(elem).parent(); previous_elements = jQuery(elem, this_parent).prevAll(); next_elements = jQuery(elem, this_parent).nextAll(); jQuery('a',previous_elements).addClass('selected'); jQuery('a',next_elements).removeClass('selected'); //jQuery('div.star a', parent_element).removeClass('selected'); //jQuery('a',this).addClass('selected'); //stars.find("a").css("width", "100%"); } // drain all the stars. function drain(){ stars.removeClass("on hover"); } // Reset the stars to the default index. function reset(){ //stars.lt(averageIndex).addClass("on"); //var percent = averagePercent ? averagePercent * 10 : 0; //if (percent > 0) // stars.eq(averageIndex).addClass("on").children("a").css("width", percent + "%"); } }).remove(); }; // fix ie6 background flicker problem. if ( jQuery.browser.msie == true ) document.execCommand('BackgroundImageCache', false, true);