// JavaScript Document
/*************************************************
Star Rating System
First Version: 21 November, 2006
Second Version: 17 May, 2007
Author: Ritesh Agrawal (http://php.scripts.psu.edu/rja171/widgets/rating.php)
        email: ragrawal [at] gmail (dot) com
Inspiration: Will Stuckey's star rating system (http://sandbox.wilstuckey.com/jquery-ratings/)
Half-Star Addition: Karl Swedberg
Demonstration: http://examples.learningjquery.com/rating/
Usage: $('#rating').rating('url-to-post.php', {maxvalue:5, curvalue:0});

arguments
url : required -- post changes to 
options
  increment : 1, // value to increment by
	maxvalue: number of stars
	curvalue: number of selected stars
	

************************************************/

function updaterating(data)
{

  var data_array=data.split("|");
  module = data_array[0];
  id = data_array[1];
  value = data_array[2];
  votes = data_array[3];
  msg   = data_array[4];
  if (msg=='ok')  {  }
  else if (msg=='sameuser')  { alert('No puedes votarte a ti mismo!');  }
  else if (msg=='nopoints')  { alert('No te quedan puntos para votar!');  }
                        else { alert('No tienes puntos suficientes para votar. Te quedan '+msg);  }
  //FIX comprobar formato datos y mostrar mensaje de error si no es correcto
  //alert(module +' -> #divrating_'+id+' -> '+value);
  //OK       $('#divrating_'+id).rating('_modulos_/_common3_/mod_rating.php?prefix='+module+'&id='+id, {maxvalue:5,curvalue:value,increment:.5});
  //OKOK       $('#divrating_'+id).rating('_modulos_/_common3_/mod_rating.php?prefix='+module+'&id='+id, {disabled:1,maxvalue:5,curvalue:value,increment:.5,votes:votes});
  $('#divrating_'+id).rating('_includes_/cms_module_rating.php?prefix='+module+'&id='+id, {disabled:1,maxvalue:5,curvalue:value,increment:.5,votes:votes});

}

jQuery.fn.rating = function(url, options) {
	
	if(url == null) return;
	
  var settings = {
    url : url, // post changes to 
    increment : 1, // value to increment by
    maxvalue  : 5,   // max number of stars
    curvalue  : 0    // number of selected stars
  };

  if(options) { jQuery.extend(settings, options); };
  jQuery.extend(settings, {cancel: (settings.maxvalue > 1) ? true : false});
  var container = jQuery(this);
  jQuery.extend(container, {  averageRating: settings.curvalue,   url: settings.url });
  settings.increment = (settings.increment < .75) ? .5 : 1;
    
  var s = 0;
  for(var i= 0; i <= settings.maxvalue ; i++)
  {
    if (i == 0) 
      {
        if(settings.cancel == true)
        { 
          if(settings.disabled == true)
          { 
            var div = '<!--div class="staroff"><span class="staroff"></span></div-->';  
            container.empty().append(div); 
          }
          else
          {
            var div = '<div class="cancel"><a href="#0" title="'+JR_StrCancelRating+'">'+JR_StrCancelRating+'</a></div>';  
            container.empty().append(div); 
          }
        } 
      } 
    else
      {  
      
        if(settings.disabled == true)
        {
            var $div = $('<div class="star"></div>')
          .append('<span href="#'+i+'" title="Rating: '+settings.curvalue+', '+settings.votes+' '+JR_StrVotes+', '+(settings.votes*settings.curvalue)+' '+JR_StrPoints+'">'+i+'</span>')
          .appendTo(container);
           if (settings.increment == .5) { if (s%2) {  $div.addClass('star-left'); } else {  $div.addClass('star-right'); }  }
       }
        else
        {
           var $div = $('<div class="star"></div>')
          .append('<a class="noicon" href="#'+i+'" title="'+JR_StrVote+'  '+i+'/'+settings.maxvalue+', Rating: '+settings.curvalue+', '+settings.votes+' '+JR_StrVotes+', '+(settings.votes*settings.curvalue)+' '+JR_StrPoints+'">'+i+'</a>')
          .appendTo(container);
           if (settings.increment == .5) { if (s%2) {  $div.addClass('star-left'); } else {  $div.addClass('star-right'); }  }
        }

      }
    i=i-1+settings.increment;
    s++;
  }


	var stars = jQuery(container).children('.star');
  var cancel = jQuery(container).children('.cancel');
	//var data_received = -1;

  if(settings.disabled == true)
  {
    //stars.children('span').attr("title","Ya has votao!!");
  }
  else
  {
  stars
    .mouseover(function(){  event.drain();  event.fill(this);  })
    .mouseout(function() {  event.drain();  event.reset();     })
    .focus(function()    {  event.drain();  event.fill(this);  })
    .blur(function()     {  event.drain();  event.reset();     });
  }


//	if(settings.disabled == true)
//  {
    //alert('disabled');
//  }
//  else
//  {

  stars.click(function()
  {
		if(settings.cancel == true)
    {

      settings.curvalue = (stars.index(this) * settings.increment) + settings.increment;
      //jQuery.post(container.url, { "rating": jQuery(this).children('a')[0].href.split('#')[1] } , function(data){alert("Data Loaded: " + data);}   );
      //jQuery.post(container.url, { "rating": jQuery(this).children('a')[0].href.split('#')[1] } , function(data){ data_received = data; alert("Data Loaded: " + data + '-'+data_received); }   );
    if(settings.disabled != true){
      jQuery.post(container.url, { "rating": jQuery(this).children('a')[0].href.split('#')[1] } ,  function(data){  /*alert(data); */updaterating(data); }  );
      jQuery(container).html('<img style="vertical-align:middle" src="_images_/indicator_mini.gif"> <span style="font-size:11px">'+JR_StrThanksForVote+'</span>');
    }
      //settings.curvalue = data_received;
			return false;

		} 
    else if (settings.maxvalue == 1) 
    {
			settings.curvalue = (settings.curvalue == 0) ? 1 : 0;
			$(this).toggleClass('on');
      jQuery.post(container.url, { "rating": jQuery(this).children('a')[0].href.split('#')[1] });
      //jQuery(container).html('<img style="vertical-align:middle" src="_images_/indicator_mini.gif"> <span style="font-size:11px">Gracias por votar!</span>');
			return false;
		}
		return true;
  });


  // cancel button events
	if(cancel){
    cancel
    .mouseover(function(){ event.drain(); jQuery(this).addClass('on');    })
    .mouseout(function() { event.reset(); jQuery(this).removeClass('on'); })
    .focus(function()    { event.drain(); jQuery(this).addClass('on');    })
    .blur(function()     { event.reset(); jQuery(this).removeClass('on'); });
      
    // click events.
    cancel.click(function(){ 
      event.drain();
      settings.curvalue = 0;
//    jQuery.post(container.url, { "rating": jQuery(this).children('a')[0].href.split('#')[1] });
//FIX jQuery.load(container.url, { "rating": jQuery(this).children('a')[0].href.split('#')[1] });
      jQuery.post(container.url, { "rating": jQuery(this).children('a')[0].href.split('#')[1] } ,  function(data){  /*alert(data);*/ updaterating(data); }  );
      jQuery(container).html('<img style="vertical-align:middle" src="_images_/indicator_mini.gif"> <span style="font-size:11px">'+JR_StrThanksForVote+'</span>');
      return false;
    });
  }
  
  //}     
  
	var event = {

    fill: function(el)
      { 
        var index = stars.index(el) + 1; 
        if(settings.disabled == true)
          stars.children('a').css('width', '100%').end().slice(0,index).addClass('hover').end();
        else
          stars.children('a').css('width', '100%').end().slice(0,index).addClass('hover').end();
      }
        , // fill to the current mouse position.
		drain: function() 
      { 
        if(settings.disabled == true)
          stars.filter('.on').removeClass('on').end().filter('.hover').removeClass('hover').end(); 
        else
          stars.filter('.on').removeClass('on').end().filter('.hover').removeClass('hover').end(); 
      }, // drain all the stars.
  	reset: function()
      { 
        if(settings.disabled == true)
          stars.slice(0,settings.curvalue / settings.increment).addClass('on').end(); 
        else
          stars.slice(0,settings.curvalue / settings.increment).addClass('on').end(); 
      }	
 
    };     // Reset the stars to the default index.
  	event.reset();
	


  return(this);	

};