﻿(function($){  
	
    $.fn.APS_ScrollV = function(opciones){
				
				var porDefecto = {  
						inicioScroll:2,
						desacelerarScroll:10,
						manoScroll:false,
						botonesScroll:false,
						botonPausa:3,
						botonVelocidad:10,
						botonArriba:".SCR_BOTON_arriba",
						botonAbajo:".SCR_BOTON_abajo"
				};  

				var opc = $.extend(porDefecto, opciones );

        return this.each( function(){

				var detenerScroll=1;
				var pausaScroll=1; 
				var velocidadTemp=detenerScroll;
				var pausaVelocidad=(pausaScroll==0)? velocidadTemp : 0;
				var scrollAlturaActual=0;
				var interval=null;
				var timeout=null;
				var estilo="";
				var estado="";
        	
        		if(opc.manoScroll==true){
        			$(this).css("cursor","pointer");
        		}
        		
        		if(opc.desacelerarScroll==0){
        			opc.desacelerarScroll=1;
        		}
        		
        		var pausa=opc.desacelerarScroll*8;
        		var inicio=opc.inicioScroll*1000;
        		
        		var id_temp=this.className.substr(0);

        		$(this).children().attr("id","APS_"+id_temp)
        		
				var id_scroll=document.getElementById($(this).children().attr("id"));

				$(this).children().css("top",0);
				
				var scrollAltura=$(this).height();
				
				var scrollAlturaActual=$(this).children().height();
				
				function activarTimeout(){
					timeout=setTimeout(activarInterval,inicio);
				}
				
				function eliminarTimeout(){
					clearTimeout(timeout);
					timeout=null;
				}
				
				function activarInterval(){
				    if(timeout!=null) eliminarTimeout();
				    
					if(interval==null){
					     eliminarInterval();            
					     interval=setInterval(activarScroll,pausa);
					}
				}
				
				function eliminarInterval(){
					clearInterval(interval);
					interval=null;
				}
				
				function activarScroll(){
					estado=1;
					if (parseInt(id_scroll.style.top)>(scrollAlturaActual*(-1)+0)){
						id_scroll.style.top=parseInt(id_scroll.style.top)-velocidadTemp+"px";
					}else{
						id_scroll.style.top=parseInt(scrollAltura)+0+"px";
					}
				}
				
				if(opc.botonesScroll==true){
					
					if(opc.botonVelocidad<=0){
						opc.botonVelocidad=1;
					}		
					
					velocidad=opc.botonVelocidad*1;

					$(opc.botonArriba).mouseup(scrollDetener).mousedown(scrollArriba).mouseleave(scrollDetenerFuera);
					$(opc.botonAbajo).mouseup(scrollDetener).mousedown(scrollAbajo).mouseleave(scrollDetenerFuera);

				}

				function scrollDetenerFuera(){
					
					if(timeout!=null) eliminarTimeout();

					if(estado==0){
						estilo= this.className.split("_ON");
						this.className=estilo[0];
						velocidadTemp=detenerScroll;
						eliminarInterval();
						activarInterval();
					}

				}	
				
				function scrollArriba(){
					this.className=this.className+"_ON";
					
					if(timeout!=null) eliminarTimeout();
					
					eliminarInterval();
					velocidadTemp=detenerScroll;

					if(interval==null){
                        eliminarInterval();
                        interval=setInterval(moverArriba,50);
					}
					
				}	
				
				function scrollAbajo(){
					this.className=this.className+"_ON";
					
					if(timeout!=null) eliminarTimeout();
					
					eliminarInterval();
					velocidadTemp=detenerScroll;

					if(interval==null){
                        eliminarInterval();
                        interval=setInterval(moverAbajo,50);
					}
					
				}	
				
				function moverArriba(){
					estado=0;
					if (parseInt(id_scroll.style.top)>(scrollAlturaActual*(-1)+0)){
						id_scroll.style.top=parseInt(id_scroll.style.top)-velocidadTemp-velocidad+"px";
					}else{
						if (parseInt(id_scroll.style.top)<(-scrollAltura)){
							id_scroll.style.top=parseInt(scrollAltura)+0+"px";
						}
					}
				}

				function moverAbajo(){
					estado=0;
					if (parseInt(id_scroll.style.top)<(scrollAlturaActual*(-1)+0)){
						id_scroll.style.top=parseInt(scrollAltura)-1+"px";
					}else{
						if (parseInt(id_scroll.style.top)<(scrollAltura)){
								if(parseInt(id_scroll.style.top)>(scrollAltura-6)){
									id_scroll.style.top=(-scrollAlturaActual+0)+"px";
								}else{
									id_scroll.style.top=parseInt(id_scroll.style.top)+velocidadTemp+velocidad+"px";
								}
						}
					}
				}

				function scrollDetener(){
					estilo= this.className.split("_ON");
					this.className=estilo[0];
				    velocidadTemp=detenerScroll;  
					if(timeout!=null) eliminarTimeout();

					eliminarInterval();
					activarTimeout();
					
				}				

				$(this).bind('mouseover',function(){
					velocidadTemp=pausaVelocidad;
				}).bind('mouseout',function(){
                    velocidadTemp=detenerScroll;
				});

				activarTimeout();
						
        });
    };
    
})(jQuery);
