var NUMBER_OF_STARS = 5;

/****************************** Mandadory Functions ********************** */
/**
* Converts all div#ratings to the start scale representation
* The div element MUST contain an string in the following format
*  global_rating_value||num_votes||userid||user_rating||editable
*/
function init_rating(){
  var ratings = jQuery('div');
  for(var i = 0; i < ratings.length; i++){
    if(ratings[i].className != 'rating')
      continue;

    var rating = ratings[i].firstChild.nodeValue;
    var widgetId = ratings[i].getAttribute('id').substr(7);
    ratings[i].removeChild(ratings[i].firstChild);

    var ratingvalues = rating.split("||");
	if(parseInt(ratingvalues[0])<=NUMBER_OF_STARS && parseInt(ratingvalues[0]) >= 0){
	  ratings[i].appendChild(getGlobalHeader());
	  showStarBar(ratings[i],'global_'+widgetId,ratingvalues[0],'rated',false,null);
	  ratings[i].appendChild(getGlobalFooter(ratingvalues[1]));
	}
	if(ratingvalues[2]!=0){
	  if(ratingvalues[3]<=NUMBER_OF_STARS && ratingvalues[3] >= 0){
	    ratings[i].appendChild(document.createElement('br'));
		ratings[i].appendChild(getUserHeader());
	    showStarBar(ratings[i],widgetId,ratingvalues[3],'rating',(ratingvalues[4]>0 || ratingvalues[3]==0),rating);
	  }
	}
  }
}

/**
* Sends the user selection to the server and updates the user_rating
* @param object evt Event's object
*/
function submitRating(evt){
  var tmp = evt.target.getAttribute('id').substr(5);
  var widgetId = tmp.substr(0, tmp.indexOf('_'));
  var starNbr = tmp.substr(tmp.indexOf('_')+1);
  var att = evt.target.getAttribute('rating');
  rate=parseInt(starNbr)+1;
  if(att!=null){
    att = att.split('||');
    if(att[2]!=0){
      $.get(ELGG_WWWROOT+"mod/ratings/rating_action.php",
            { displaymode:'xml',action:"rating::add",ratedby:att[2],rating:rate,rating_ident:widgetId},
            function(data){
              if(data=="OK"){
                setRating(widgetId,starNbr);
              }
            }
      );
    }
  }
}

/****************************** Helper Functions ********************** */

/**
* Creates and shows the star bar representation from the specified rating
* @param object rating div object that contains the star bar
* @param string id Widget id, used by the hover and mouse out functions
* @param number ratingvalue Rating value to be represented
* @param string Image name to be used
* @param boolean editable If the star bar would be editable
* @param string rating_config Rating config properties
*/
function showStarBar(rating,id,ratingvalue,image,editable,rating_config){

   for(var j = 0; j < NUMBER_OF_STARS; j++){
     var star = document.createElement('img');
     if (ratingvalue >= 1){
       star.setAttribute('src', ELGG_WWWROOT+'mod/ratings/images/stars/'+image+'_on.gif');
       star.className = 'on';
       ratingvalue--;
     }
     else if(ratingvalue == 0.5){
       star.setAttribute('src', ELGG_WWWROOT+'mod/ratings/images/stars/'+image+'_half.gif');
       star.className = 'half';
       ratingvalue = 0;
     }
  	 else{
       star.setAttribute('src', ELGG_WWWROOT+'mod/ratings/images/stars/'+image+'_off.gif');
       star.className = 'off';
     }
     star.setAttribute('id', 'star_'+id+'_'+j);

     if(editable){
        star.setAttribute('rating',rating_config);
     	star.onmouseover = new Function("evt", "displayHover("+id+", "+j+");");
     	star.onmouseout = new Function("evt", "displayNormal("+id+", "+j+");");
     }
     rating.appendChild(star);
   }
}

/**
* Updates the images when the mouse is over it 
* @param string ratingId Image's id 
* @param numeric star star number to be updated
*/
function displayHover(ratingId, star){
  for (var i = 0; i <= star; i++){
    document.getElementById('star_'+ratingId+'_'+i).setAttribute('src', ELGG_WWWROOT+'mod/ratings/images/stars/rating_over.gif');
  }
}

/**
* Updates the images when the mouse is out
* @param string ratingID Image's id
* @param number star Star number
*/
function displayNormal(ratingId, star){
  for (var i = 0; i <= star; i++){
    var status = document.getElementById('star_'+ratingId+'_'+i).className;
    document.getElementById('star_'+ratingId+'_'+i).setAttribute('src', ELGG_WWWROOT+'mod/ratings/images/stars/rating_'+status+'.gif');
   } 
 }
 
 /**
 * Set the user rating on-line
 * @param string ratingId Image number
 * @param numner star Rating
 */
 function setRating(ratingId,star){
  for (var i = 0; i < NUMBER_OF_STARS; i++){
	var status = "off";
	if(i<=star){
	  status = "on";
	}
    document.getElementById('star_'+ratingId+'_'+i).className=status;
    document.getElementById('star_'+ratingId+'_'+i).setAttribute('src', ELGG_WWWROOT+'mod/ratings/images/stars/rating_'+status+'.gif');
   } 
 }
 

