/*
  Titulo:       dnse_voto.js
        
	Descripcion: 	Generador de un sitema sencillo de votacion
  Creador:      Ivan Roman
  Copyright(c) DNOiSE 2009
*/

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

Uso:
	HTML:
		<div class="dnse_voto" title="items:5,valormax:10,valoractual:8"></div>
		
		Argumentos:
			items:         Numero de items que debe generar para el sistema de votacion
			activo:        Indica si permite votacion
			valormax:      Máximo valor numerico del sistema de votacion
			valoractual:   Valor que ha de mostrar inicialmente entre 0 y valormax  
		
 	JS:
		$('.dnse_voto').dnse_voto();
		
	HTML Generado:
	  <div class="dnse_voto" title="items:5,valormax:10,valoractual:8">
			<div class="dnse_voto_chivato"></div> 
			<div class="dnse_voto_base_gfx"></div> 
			<div class="dnse_voto_actual_gfx"></div>
			<div class="dnse_voto_nuevo_gfx"></div>
		</div>

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

// BACKUP
jQuery.fn.dnse_voto = function() {
	// INICIALIZACION
	var settings = {
		url_post: 					"/ajax_counter.php?c=votacion",             //URL ajax
		id_post: 						"",             //URL ajax
		itemW: 							18,    					//Ancho por defecto. Establecer aqui  
		itemH: 							18,             //Alto por defecto. Establecer aqui
		sistemaW: 		 		  0,       
		sistemaH: 	 			 	0,       
		elm: 				 			 	$(this), 
		activo: 		 			 	true,    
		items: 							1,       
		valormax: 					1,
		valoractual: 	 		 	0,
		incremento: 	 		 	1,
	};
		
	//FUNCIONES
	width2valor = function(w,vmax,wmax){
		return (w*vmax)/wmax;
	};
	
	valor2width = function(v,vmax,wmax){
		return (vmax != 0)?(v*wmax)/vmax:0;
	};
	
	getWidth = function(mousex,incremento,maxwidth){
		r = (Math.ceil(mousex/incremento))*incremento;
	
		if(r>maxwidth){
			r = maxwidth;
		} else if(r<0){
			r = 0;
		}
	
		return r;
	};
	
	setupHTML = function(){
		var elm = settings.elm;
		settings.sistemaW = settings.itemW*settings.items; 
		
		$(elm).append('<div class="dnse_voto_chivato"></div><div class="dnse_voto_base_gfx"></div><div class="dnse_voto_actual_gfx"></div><div class="dnse_voto_nuevo_gfx"></div>');
		
		$(elm).children().each(function(){
			var cls = $(this).attr('class');
			
			switch(cls){
				case 'dnse_voto_nuevo_gfx':
					$(this).css('width',"0px");
					$(this).css('height',settings.itemH+"px");
					$(this).css('background-position',"0px "+ (-settings.itemH) + "px");
					break;
				case 'dnse_voto_actual_gfx':
					
					$(this).css('width',valor2width(settings.valoractual,settings.valormax,settings.sistemaW)+"px");
					$(this).css('height',settings.itemH+"px");
					break;
				case 'dnse_voto_base_gfx':
					$(this).css('width',settings.sistemaW+"px");
					$(this).css('height',settings.itemH+"px");
					break;
			}
		});
		$(elm).css('width',settings.sistemaW+"px");
		$(elm).css('text-indent','-9999px');
	}
		
	parseParams = function(o) {
	  var params = {};
	   if ( !o ) {return params;}
	   var pares = o.split(',');
	   for ( var i = 0; i < pares.length; i++ ) {
	      var K = pares[i].split(':');
	      var key = unescape( K[0] );
	      var val = unescape( K[1] );
	      params[key] = val;
	   }
	   
		 //establece settings
		if(params['activo']!=undefined){ 					settings.activo 			= params['activo']; }
		if(params['valormax']!=undefined){ 				settings.valormax 		= params['valormax']; }
		if(params['valoractual']!=undefined){ 		settings.valoractual 	= params['valoractual']; }
		if(params['items']!=undefined){ 					settings.items 				= params['items']; }
		if(params['incremento']!=undefined){ 			settings.incremento		= params['incremento']; } else { settings.incremento	 = settings.itemW }
		if(params['idpost']!=undefined){ 					settings.id_post 		 	= params['idpost']; }
	
	  return params;
	}
	
	
	// LOGICA y EVENTOS
	var params =  parseParams($(this).attr('title'));
	setupHTML();
	
	var elm = settings.elm;
	var mouseX,mouseY = 0;
	var offsetX = $(this).offset().left;
	var offsetY = $(this).offset().top;
	  
	
		$(this).mousemove(function(e){
			if(settings.activo==true){
		    mouseX = Math.round(e.clientX - offsetX);
		    mouseY = Math.round(e.clientY - offsetY);
	        
				w = getWidth(mouseX,settings.incremento,settings.sistemaW);
				v = width2valor(w,settings.valormax,settings.sistemaW)
	
		 		$(this).children("div[class='dnse_voto_nuevo_gfx']").css("width",getWidth(mouseX,settings.incremento,settings.sistemaW));
				$(this).attr('title','Calificación: ' + v + " de " + settings.valormax);
			}
		}); 
	
		$(settings.elm).mouseover(function(){
			if(settings.activo==true){ 
				$(this).children("div[class='dnse_voto_nuevo_gfx']").css("display","block");
				$(this).children("div[class='dnse_voto_actual_gfx']").css("display","none");
				// _DEBUG({msg:settings,tipo:"info"});
			}
		});
	
		$(settings.elm).mouseout(function(){
			if(settings.activo==true){ 
				$(this).children("div[class='dnse_voto_nuevo_gfx']").css("display","none");
				$(this).children("div[class='dnse_voto_actual_gfx']").css("display","block");
			}
		});
	
		$(settings.elm).mouseup(function(){ 
			if(settings.activo==true){
				settings.activo = false;
				w = getWidth(mouseX,settings.incremento,settings.sistemaW);
				v = width2valor(w,settings.valormax,settings.sistemaW)
			
				$(this).children("div[class='dnse_voto_nuevo_gfx']").css("width",w);
				$(this).children("div[class='dnse_voto_actual_gfx']").css("width",w);
			
				$.get(settings.url_post + "&id=" + settings.id_post + "&p=" + v);
				//alert("POST ID: "+settings.id_post+" VALOR: "+v);
			} else {
				//ya se ha votado o esta inactivo
			}
		});
};
