//jquery.ratingPXL.js
//author: 			Bjoern Sellnau @ PIXELTEX
//project:			jQuery Plugin 'RatingPXL'
//description:	this is the main js class for the 'Rating-Functionality'
//added:				13-11-2009
//        modified:			27-11-2009
//version				0.3
//=====================================================

(function($){

	$.fn.ratingPXL = function(options)
	{
		// build main options before element iteration
		var opts = $.extend({}, $.fn.ratingPXL.defaults, options);
		
		//$('.leaflet').data('leaflet_options', options);

		return this.each(function() 
		{
   		//  this is where all of the core plug in code belongs
			var $ratingBox = $(this);
   		var $ratingStars = $('.'+opts.cssClass);

			//window.console.log($ratingBox)
			//window.console.log($ratingStars)

			$ratingStars.each(function(idx)
			{
			  var ind = Number(idx);
			  ind++;
			
			  $ratingDiv = $('<div class="'+opts.ratingSymbol+'" rel="'+ind+'">&nbsp;</div>');
			  var checkedRadioId = $('.'+opts.cssClass+'[checked]').val();
			  $('#'+opts.name).attr('rel',checkedRadioId);
			
			  if($(this).attr('checked') || $(this).val() <= checkedRadioId)
			  {
			      $ratingDiv.addClass(opts.cssClassOn);
			  } else {
			      $ratingDiv.removeClass(opts.cssClassOn);
			  }
			
			
			  $ratingDiv.insertBefore($(this));
			  $(this).css('display','none').next().css('display','none');
			})

			$('.'+opts.ratingSymbol).hover(function()
			{
			        var checkedId = $(this).attr('rel');
			     $('.'+opts.ratingSymbol).each(function()
			    {
			//console.log(checkedId)
			        if($(this).attr('rel') <= checkedId)
			        {
			            $(this).addClass(opts.cssClassHover);
			 $(this).removeClass(opts.cssClassOn);
			        } else {
			             $(this).removeClass(opts.cssClassHover);
			 $(this).removeClass(opts.cssClassOn);
			        }
			    })    
			},
			function()
			{
			//    window.console.log($(this).attr('rel')+'out');    
			
			
			     jQuery('.'+opts.ratingSymbol).each(function()
			    {
			        var checkedId = $('#'+opts.name).attr('rel');
			        if($(this).attr('rel') <= checkedId)
			        {
			            $(this).addClass(opts.cssClassOn);
			             $(this).removeClass(opts.cssClassHover);
			        } else {
			             $(this).removeClass(opts.cssClassOn);
			             $(this).removeClass(opts.cssClassHover);
			        }
			    })
			}).click(function()
			{
			     $('#'+opts.name).attr('rel',$(this).attr('rel'));
			     $('.'+opts.cssClass+'[value='+$(this).attr('rel')+']').attr('checked','checked');
			
			     $('.'+opts.ratingSymbol).each(function()
			    {
			        var checkedId = $('#'+opts.name).attr('rel');
			        if($(this).attr('rel') <= checkedId)
			        {
			            $(this).addClass(opts.cssClassOn);
			             $(this).removeClass(opts.cssClassHover);
			        } else {
			             $(this).removeClass(opts.cssClassOn);
			             $(this).removeClass(opts.cssClassHover);
			        }
			    })
			    if(opts.ajax)
			    {
				    sendRequest(opts,$(this).attr('rel'));
			    }
			})

  	});
	};

  // default options - these are used of none others are specified
  $.fn.ratingPXL.defaults = {
    name: 'pagerating',
    ajax: true,
		url: '',
		cssClass:'rating',
		siteId:100,
		datatype:'page',
		ajaxHandler:'',
		ratingSymbol:'ratingstar',
		userip:'',
		cssClassOn:'ratingon',
		cssClassHover:'ratinghover',
		elementId:0,
		datatype:null,
		loadMessage:'Wertung wird gespeichert'
  };
  
  // sends the ajax request.
  function sendRequest(opts,rating)
  {

/*
		$('#'+opts.name).fadeOut(1000,function()
		{
			//$('#'+opts.name).html('<img src="ajax_loader.gif" /> '+opts.loadMessage).fadeIn('slow');		
		});
*/		
		$('#'+opts.name).html('<img src="/html/rating/ajax_loader.gif" /> '+opts.loadMessage).fadeIn('slow');		

		var url = opts.url;
		var RANDOM = new Date().getTime()/1000;
		$.get( url, {id:opts.elementId, random:RANDOM, rating:rating ,userip:opts.userip, datatype:opts.datatype,siteid:opts.siteId},
		function(data)
		{
			$.fn.ratingPXL._createCookie(opts.name+'_'+opts.datatype+opts.elementId+'_cookie','rated');
			$('#'+opts.name).html(data);		
		})
  };

	//utils	
	$.fn.ratingPXL._createCookie=function(name,value,days) {
		if (days) {
			var date = new Date();
			date.setTime(date.getTime()+(days*24*60*60*1000));
			var expires = "; expires="+date.toGMTString();
		}
		else var expires = "";
		document.cookie = name+"="+value+expires+"; path=/";
	}
	
	$.fn.ratingPXL._readCookie=function(name) {
		var nameEQ = name + "=";
		var ca = document.cookie.split(';');
		for(var i=0;i < ca.length;i++) {
			var c = ca[i];
			while (c.charAt(0)==' ') c = c.substring(1,c.length);
			if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
		}
		return null;
	}
	
	$.fn.ratingPXL._eraseCookie=function(name) {
		$.fn.ratingPXL._createCookie(name,"",-1);
	}	




  //  invoke the function we just created passing it
	//  the jQuery object
})(jQuery);
