if(window.jQuery) (function($){
    $.fn.rating = function(options) {
//    	alert('new image');
        var imaho = new Image();
//      place this line AFTER .load() event  
//      imaho.src = options.imageUrl;
//      otherwise this event doesn't always fire. 

        var divs = $(this);
   
	    if(!!options.disabled == true) {
	//      alert(parseInt(options.currentRating));
//	      alert(!!options.disabled);
	      divs.addClass('disabled');
	    }
	    else {
//	      alert('');
	      divs.removeClass('disabled');
	    }
        $(imaho).load(function() {
            var width = this.width;
            var height = this.height;
//      alert(width);
            var currentRating = options.currentRating ? round(options.currentRating) : 0;
            var url = options.imageUrl;
//            alert(options.peopleNumberId + ' is ' + currentRating);
//            alert(currentRating);
            
            var image = this;
            //iterate through divs
            divs.each(function(j, _div){
                var links = $('a', _div);
                links.css('width', width/2 + 'px');
                links.css('height', height/3 + 'px');
            	getStartState(links, currentRating, image);
            	/*
               
                
                //-----------back to start state--------------
                //iterate through links in div
                links.each(function(i, element){
                    if($(element).attr('className').indexOf('left' ) != -1)
                    {
                    	
                    	if(i < currentRating*2) {
                    		$(element).css('background', 'transparent url("' + image.src + '") 0px -' + $(element).height() + 'px no-repeat ');
                    	}
                    	else
                    	{
                    		$(element).css('background', 'transparent url("' + image.src + '") top left no-repeat');
                    	}
                        
                    }
                    else
                    {
                    	if(i < currentRating*2) {
                    		$(element).css('background', 'transparent url("' + image.src + '") -' + $(element).width() + 'px -' + $(element).height() + 'px no-repeat ');
                    	}
                    	else 
                    	{
                    		$(element).css('background', 'transparent url("' + image.src + '") top right no-repeat');
                    	}
                    }
                })
                */
                //-----------//back to start state--------------
                
//        alert(width);
            });
            
            $('a', divs).mouseover(function() {
//            	alert('');
		        var element = $(this);
		        if(element.parent().attr('className').indexOf('disabled') == -1) {
		        	
		          //---------get all previous elements
		      /*    var prevAll = element.prevAll();
		          prevAll.push(element);
		          //change the image position
		          prevAll.each(function(i, prevStar) {
		            if($(prevStar).attr('className').indexOf('left') != -1) {
		              $(prevStar).css('background-position', 0 + 'px -' + 2*$(prevStar).height() + 'px');
		            }
		            else if ($(prevStar).attr('className').indexOf('right') != -1) {
		              $(prevStar).css('background-position', -width/2 + 'px -' + 2*$(prevStar).height() + 'px');
		            }
		          })*/
		          var prevAll = handlePreviousElements(element, 'yellow');
		          //------//get all previous elements---------------
		          
		          //--------get all next elements-------------
	/*	          var nextAll = element.nextAll();
		          //change the image position
		          nextAll.each(function(i, nextStar) {
		            if($(nextStar).attr('className').indexOf('left') != -1) {
		              $(nextStar).css('background-position', '0px 0px');
		            }
		            else if ($(nextStar).attr('className').indexOf('right') != -1) {
		              $(nextStar).css('background-position', -$(nextStar).width() + 'px 0px');
		            }
		          })*/
		          //-------- //get all next elements-------------
		          var nextAll = handleNextElements(element);
		          
		        }
            })
     
            $('a', divs).mouseout(function() {
                var element = $(this);
		        if(element.parent().attr('className').indexOf('disabled') == -1) {
		          
		          //---------------get all next elements-----------
		       /*   var nextAll = element.nextAll();
		          nextAll.push(element);
		          //change the image position
		          nextAll.each(function(i, nextStar) {
		            if($(nextStar).attr('className').indexOf('left') != -1) {
		              $(nextStar).css('background-position', '0px 0px');
		            }
		            else if ($(nextStar).attr('className').indexOf('right') != -1) {
		              $(nextStar).css('background-position', -$(nextStar).width() + 'px 0px');
		            }
		          })*/
		          //---------------//get all next elements-----------
		          var nextAll = handleNextElements(element);
		        }
            })
     
           $('a', divs).parent().mouseleave(function() {
        	   var links = $('a', $(this));
//        	   alert(image.src);
        	   if(links.parent().attr('className').indexOf('disabled') == -1) {
        		   var currentRating = options.currentRating ? round(options.currentRating) : 0;
        		   
        		   getStartState(links, currentRating, image);
        		   //----------------back to start state--------------
	               //iterate through links in div
/*	               links.each(function(i, element){
	                   if($(element).attr('className').indexOf('left' ) != -1)
	                   {
	                   	if(i < currentRating*2) {
	                   		$(element).css('background', 'transparent url("' + image.src + '") 0px -' + $(element).height() + 'px no-repeat ');
	                   	}
	                   	else 
	                   	{
	                   		$(element).css('background', 'transparent url("' + image.src + '") top left no-repeat');
	                   	}
	                   }
	                   else
	                   {
	                   	if(i < currentRating*2) {
	                   		$(element).css('background', 'transparent url("' + image.src + '") -' + $(element).width() + 'px -' + $(element).height() + 'px no-repeat ');
	                   	}
	                   	else 
	                   	{
	                   		$(element).css('background', 'transparent url("' + image.src + '") top right no-repeat');
	                   	}
	                   }
	               })*/
	               //----------------//back to start state--------------
	               
        	   }
            })
     
            $('a', divs).live('click', function() {
		        var element = $(this);
		        var parent = element.parent();
		        var model = parent.attr('id').substring(0, parent.attr('id').indexOf('_'));
		        var id = parent.attr('id').substring(parent.attr('id').indexOf('_') + 1);
		        if(element.parent().attr('className').indexOf('disabled') == -1) {
		          element.parent().attr('className', element.parent().attr('className') + ' disabled');
		          
		          var prevAll = handlePreviousElements(element, 'red');

		          $.ajax({
		            type: "POST",
		            url: options.serverUrl,
		            data: "objectId=" + id + '&vote=' + element.attr('title'),
		            success: function(rate){
		        	  links = $('a', parent);
		        	  var rate = parseFloat(rate);
		        	  getStartState(links, rate, image);//should be getStartState(links, rate)
		        	  increasePeopleNumber();
		            }
		          })
		        }
		
		        return false;
            })
        })
        
        imaho.src = options.imageUrl;
        
        function increasePeopleNumber() {
        	var newNumber = $('#' + options.peopleNumberId).text(parseInt($('#' + options.peopleNumberId).text()) + 1);
        	
        }
        
        function getStartState(links, currentRating, _image) {
//        	alert('test');
//        	alert(_image.src);
            links.each(function(i, element){
                if($(element).attr('className').indexOf('left' ) != -1)
                {
                	if(i < currentRating*2) {
                		$(element).css('background', 'transparent url("' + _image.src + '") 0px -' + $(element).height() + 'px no-repeat ');
                	}
                	else
                	{
                		$(element).css('background', 'transparent url("' + _image.src + '") top left no-repeat');
                	}
                    
                }
                else
                {
                	if(i < currentRating*2) {
                		$(element).css('background', 'transparent url("' + _image.src + '") -' + $(element).width() + 'px -' + $(element).height() + 'px no-repeat ');
                	}
                	else 
                	{
                		$(element).css('background', 'transparent url("' + _image.src + '") top right no-repeat');
                	}
                }
            })
        }
        
        function handlePreviousElements(element, color) {
          var prevAll = element.prevAll();
          prevAll.push(element);
          var k = (color == 'red') ? 1 : 2;
          //change the image position
          prevAll.each(function(i, prevStar) {
            if($(prevStar).attr('className').indexOf('left') != -1) {
              $(prevStar).css('background-position', '0px -' + k*$(prevStar).height() + 'px');
            }
            else if ($(prevStar).attr('className').indexOf('right') != -1) {
              $(prevStar).css('background-position', -$(prevStar).width() + 'px -' + k*$(prevStar).height() + 'px');
            }
          })
          
          return prevAll;
        }
        
        function handleNextElements(element) {
          var nextAll = element.nextAll();
          //change the image position
          nextAll.each(function(i, nextStar) {
            if($(nextStar).attr('className').indexOf('left') != -1) {
              $(nextStar).css('background-position', '0px 0px');
            }
            else if ($(nextStar).attr('className').indexOf('right') != -1) {
              $(nextStar).css('background-position', -$(nextStar).width() + 'px 0px');
            }
          })
          
          return nextAll;
        }
        
        //private function rounding values
        function round(float) {
        	var val = parseFloat(float);
        	var stringVal = val.toString();
//        	alert('stringVal is ' + stringVal);
        	var intString = parseInt(val);//stringVal.substring(0, stringVal.indexOf('.')) ? stringVal.substring(0, stringVal.indexOf('.')) : parseInt(stringVal);
//        	alert('intString is ' + intString);
        	var decimalString = (stringVal.indexOf('.') == -1) ? '0' : stringVal.substring(stringVal.indexOf('.') + 1);
//        	alert('decimalString is ' + decimalString);
        	decimalLength = decimalString.length;
        	
        	var comparable25 = 25*Math.pow(10, (decimalLength - 2));
        	var comparable50 = 50*Math.pow(10, (decimalLength - 2));
        	var comparable75 = 75*Math.pow(10, (decimalLength - 2));
//        	alert('comparable25 is ' + comparable25 + 'comparable50 is ' + comparable50 + 'comparable75 is ' + comparable75 + ', parseFloat(decimalString) ' + parseFloat(decimalString));
        	if(parseFloat(decimalString) < comparable25) {
        		var returnFloat = parseFloat(intString);
//        		alert('gotcha1! returnFloat is ' + returnFloat);
        	}
        	else if((parseFloat(decimalString) >= comparable25) && (parseFloat(decimalString) < comparable75)) {
        		var returnFloat = parseFloat(intString + '.5');
//        		alert('gotcha2! returnFloat is ' + returnFloat);
        	}
        	else if(parseFloat(decimalString) >= comparable75) {
        		var returnFloat = parseInt(intString) + 1;
//        		alert('gotcha3! returnFloat is ' + returnFloat);
        	}
//        	alert('returnFloat for ' + float + 'is ' + returnFloat);
//        	alert(returnFloat);
        	return returnFloat;
        }
    }
})(jQuery);