
smashion.xui.Rating=Class.create(smashion.common.global.AjaxHandler,{initialize:function(container,id,type,options){this.container=$(container);this.id=id;this.type=type;this.options=Object.extend({editUrl:smashion.server.editRating,viewUrl:smashion.server.viewRating,editable:true,loginTip:false,longSummary:true},options||{});this.initUI();},initUI:function(){this.ui={widget:new Element("div",{"class":"ratingWidget"}),images:new Element("div",{"class":"rateStars"}),count:new Element("div",{"class":"ratingCount"})};this.ui.widget.appendChild(this.ui.images);this.ui.widget.appendChild(this.ui.count);this.container.appendChild(this.ui.widget);var req=new Ajax.Request(this.options.viewUrl,{parameters:{"type":this.type,"id":this.id},method:"post",onSuccess:this.initUICallback.bind(this),onFailure:this.handleAjaxFailure.bind(this),onException:this.handleAjaxException.bind(this)});},initUICallback:function(transport,json){if(!this.validateResponse(json)){return;}
var summary=json.body;this.displayRatings(summary);if(this.options.loginTip){this.ui.images.setAttribute("title","sign in to rate");}
if(!summary.canRate){return;}
var parent=new Element("div");for(var i=0;i<=5;i++){parent.appendChild(this.renderStar(i));}
this.ui.images.appendChild(parent);},displayRatings:function(summary){this.ui.count.update();var sumtext;if(this.options.longSummary){sumtext=summary.numRatingsDisplay;}else{sumtext=summary.myRatingDisplay;}
this.ui.count.appendChild(document.createTextNode(sumtext));this.ui.images.style.backgroundImage="url(/images/rating/rate"+summary.avgRatingDisplay+".png)";},renderStar:function(i){var aLink=new Element("a",{"class":"rateStar"});aLink.appendChild(new Element("span").update(i));if(this.options.editable){Event.observe(aLink,"mouseout",this.onMouseOut.bindAsEventListener(this,i));Event.observe(aLink,"mouseover",this.onMouseOver.bindAsEventListener(this,i));Event.observe(aLink,"click",this.onClick.bindAsEventListener(this,i));}
return aLink;},onMouseOut:function(event,rating){var element=Event.element(event);element.parentNode.className="";},onMouseOver:function(event,rating){var element=Event.element(event);element.parentNode.className="rateHover"+rating;},onClick:function(event,rating){var req=new Ajax.Request(this.options.editUrl,{parameters:{'id':this.id,"rating":rating,"type":this.type},method:'post',onSuccess:this.onClickCallback.bind(this),onFailure:this.handleAjaxFailure.bind(this),onException:this.handleAjaxException.bind(this)});},onClickCallback:function(transport,json){if(!this.validateResponse(json)){return;}
this.displayRatings(json.body);},dispose:function(){}})