/*
	http://www.switchonthecode.com/tutorials/how-to-build-a-star-ratings-jquery-plugin
*/
jQuery.fn.ratings =  function(stars,  initialRating, typeName, readOnly) {

  //Save  the jQuery object for later use.
  var elements = this;
	var emptyClass = 'jquery-ratings-'+typeName;
	var fullClass = 'jquery-ratings-'+typeName+'-full';
 
  //Go through each object in the selector and create a ratings control.
  return this.each(function() {
 
    //Make sure intialRating is set.
    if ( !initialRating )
      initialRating = 0;
     
    //Save the current element for later use.
    var containerElement = this;
   
    //grab the jQuery object for the current container div
    var container = jQuery(this);
   
    //Create an array of stars so they can be referenced again.
    var starsCollection = Array();
   
    //Save the initial rating.
    containerElement.rating = initialRating;
   
    //Set the container div's overflow to auto.  This ensure it will grow to
    //hold all of its children.
    container.css('overflow', 'auto');
   
    //create each star
    for(var starIdx = 0; starIdx < stars; starIdx++) {
     
      //Create a div to hold the star.
      var starElement = document.createElement('div');
     
      //Get a jQuery object for this star.
      var star = jQuery(starElement);
     
      //Store the rating that represents this star.
      starElement.rating = starIdx + 1;
     
			starElement.title = starElement.rating+'/'+stars;
		 
      //Add the style.
      star.addClass(emptyClass);
     
      //Add the full css class if the star is beneath the initial rating.
      if(starIdx < initialRating) {
        star.addClass(fullClass);
      }
     
      //add the star to the container
      container.append(star);
      starsCollection.push(star);
     
      //hook up the click event
      star.click(function() {
        //set the containers rating
        containerElement.rating = this.rating;
       
        //When clicked, fire the 'ratingchanged' event handler.  
        //Pass the rating through as the data argument.
        elements.triggerHandler("ratingchanged", {rating: this.rating});
      });
     
			if ( !readOnly )
			{
				star.mouseenter(function() {
					//Highlight selected stars.
					for(var index = 0; index < this.rating; index++) {
						starsCollection[index].addClass(fullClass);
					}
					//Unhighlight unselected stars.
					for(var index = this.rating; index < stars; index++) {
						starsCollection[index].removeClass(fullClass);
					}
				});
			 
				container.mouseleave(function() {
					//Highlight selected stars.
					for(var index = 0; index < containerElement.rating; index++) {
						starsCollection[index].addClass(fullClass);
					}
					//Unhighlight unselected stars.
					for(var index = containerElement.rating; index < stars ; index++) {
						starsCollection[index].removeClass(fullClass);
					}
				});
				star.mouseenter(function() {
					//Highlight selected stars.
					for(var index = 0; index < this.rating; index++) {
						starsCollection[index].addClass(fullClass);
					}
					//Unhighlight unselected stars.
					for(var index = this.rating; index < stars; index++) {
						starsCollection[index].removeClass(fullClass);
					}
				});
			 
				container.mouseleave(function() {
					//Highlight selected stars.
					for(var index = 0; index < containerElement.rating; index++) {
						starsCollection[index].addClass(fullClass);
					}
					//Unhighlight unselected stars.
					for(var index = containerElement.rating; index < stars ; index++) {
						starsCollection[index].removeClass(fullClass);
					}
				});
			}
    }
  });
};
