var MOORating = new Class({
	initialize: function(starElms, starVals, params){
		this.params = params || {};
		this.starElems = starElms || $(starElms) || null ;
		this.starVals = starVals || $(starVals) || null ;
		this.width = params.width || 84;
		this.starNum = params.starNum || 5;
		this.inpercent = params.inpercent || false;
		this.isFractional = params.isFractional || false;
		this.onUpdate = params.onUpdate || null;
		this.valueOnly = params.valueOnly || null;
		
		this.bindTo = this.bindTo.bind(this, [this.starElems, this.starVals]);
		this.bindTo();
	},
	bindTo:function(elm, val){
			var obj = this;
			elm.revert =true;
			elm.submited = false;
			if(!this.valueOnly){
				elm.addEvents({
				'mouseenter': function(){},
				'mousemove': function(event){
					if(!elm.submited){
								 var w = event.client.x - elm.getPosition().x;
									//status=event.client.x; //For test purpose only
									elm.getChildren()[0].setStyles({'width': w});
									var x = (w/obj.width) * obj.starNum;
									if(obj.inpercent){
										var v = Math.round(w/84*100);
										if(v <101) val.innerHTML= Math.round(w/84*100)+'%';
									}else{
										if(obj.isFractional){
											if(x<=5 || x >=0) val.innerHTML= obj.formatNumber(x,2);
										}
										else{
											val.innerHTML= Math.round(x);
											w = Math.round(x)*84/5;
											elm.getChildren()[0].setStyles({'width': w});
										}
									}
							
					}
				},
				'click': function(){
						obj.updateRating(elm.id,val.innerHTML);
						elm.getChildren()[0].title = parseFloat(elm.innerHTML);
						elm.revert = false;
						elm.submited = true;
				},
				'mouseleave': function(){
						//status ="left"; //For test purpose only
						//alert(el.submited);
						if(elm.revert && !elm.submited){
							var v = parseInt(elm.getChildren()[0].title);
							if(obj.inpercent){
								var w = (parseInt(elm.getChildren()[0].title)/100) * obj.width;
								val.innerHTML = v +'%';
							}else{
								var w = parseInt(elm.getChildren()[0].title) * (obj.width/obj.starNum);
								val.innerHTML = v;
							}
							elm.getChildren()[0].setStyles({'width': w});
						}
						//el.revert = true;
				}
			});
			}
	},
	formatNumber:function (myNum, numOfDec) { 
		var decimal = 1;
		for(i=1; i<=numOfDec;i++)
			decimal = decimal *10
		var myFormattedNum = (Math.round(myNum * decimal)/decimal).toFixed(numOfDec)
		return myFormattedNum;
	},
	updateRating: function (id, rating) {
		if(this.onUpdate){
			this.onUpdate(id, rating);
		}
	} 
});
