if(!ComCore.Controls){ComCore.Controls={}}ComCore.Controls.Ratings=Class.create({initialize:function(A,B){this.control=$(A);this.controlID=A;this.type=this.control.getClassData("type");this.itemID=this.control.getClassData("itemID");this.ownerUserID=parseInt(this.control.getClassData("ownerUserID"),10);this.isLoading(false);this.options={rateSuccessMessageID:"rateSuccess",rateErrorMessageID:"rateError",rateDuplicateMessageID:"rateDuplicate",onRatingSuccessContext:null,onRatingSuccess:null};Object.extend(this.options,B||{});this.control.observe("click",this._onControlClicked.bindAsEventListener(this))},isLoading:function(A){if(undefined===A){return this.loading}this.loading=(A===true?true:false);this.control[this.loading?"addClassName":"removeClassName"]("loading")},_onControlClicked:function(A){A.stop();if(A.element().tagName.toLowerCase()==="a"){if(!this.isLoading()){this.rate(parseInt(A.element().innerHTML,10))}}},rate:function(A){this.isLoading(true);ComCore.LoadingIndicator.show();var C=this;var B=new Ajax.Request("/ajax/ratings",{method:"post",parameters:{action:"rate",type:this.type,itemID:this.itemID,rating:A,uniqueID:this.controlID,ownerUserID:this.ownerUserID,options:Object.toJSON(this.options)},onSuccess:function(E,D){ComCore.AjaxResponse.loginIsRequired(E,D);C._onRated.bind(C,D)()}})},showMessage:function(B){var A=B+"MessageID";if(this.options[A]&&$(this.options[A])){$(this.options[A]).show()}},_onRated:function(B){ComCore.Message.hideAll();if(B.success){var A=this.options.onRatingSuccessContext||this;this.showMessage("rateSuccess");this.control.replace(B.html);this.notify("onRate",B.userID,this.itemID,B.rating);if(this.options.onRatingSuccess&&typeof this.options.onRatingSuccess.method==="function"){this.isLoading(false);this.options.onRatingSuccess.method.bind(A,this.options.onRatingSuccess.uniqueID)()}}else{this.showMessage(B.reason==="DUPLICATE"?"rateDuplicate":"rateError");if(B.reason==="DUPLICATE"){this.control.replace(B.html)}}ComCore.LoadingIndicator.hide();this.isLoading(false)},_eoo:true});ComCore.Events.extend(ComCore.Controls.Ratings);