﻿( function($) {
	
    $.fn.APS_Scroll = function(opciones){

				var porDefecto = {  
						inicioScroll:2,
						desacelerarScroll:2,
						manoScroll:false,
						botonesScroll:false,
						botonPausa:3,
						botonVelocidad:2,
						botonArriba:"SCR_BOTON_arriba",
						botonAbajo:"SCR_BOTON_abajo"
				};  
				
				var opc = $.extend(porDefecto, opciones );
				
				var detenerScroll=1;
				var pausaScroll=1; 
				var velocidadTemp=detenerScroll;
				var pausaVelocidad=(pausaScroll==0)? velocidadTemp : 0;
				var scrollAlturaActual=0;
				var interval="";
				var timeout="";
				var pausaTimeout="";
				var arribaInterval="";
				var abajoInterval="";
				var estilo="";
				
        return this.each( function(){
        	
        		if(opc.manoScroll==true){
        			$(this).css("cursor","pointer");
        		}
        		
        		if(opc.desacelerarScroll==0){
        			opc.desacelerarScroll=1;
        		}
        		
        		pausa=opc.desacelerarScroll*10;
        		inicio=opc.inicioScroll*1000;
        		
        		var id_temp=this.className.substr(0);

        		$(this).children().attr("id","APS_"+id_temp)
        		
						id_scroll=document.getElementById($(this).children().attr("id"));
		
						$(this).children().css("top",0);
						
						scrollAltura=$(this).height();
						
						scrollAlturaActual=$(this).children().height();
						
						function activarTimeout(){
							timeout=setTimeout(activarInterval,inicio);
						}
						
						function eliminarTimeout(){
							clearTimeout(timeout);
						}
						
						function activarInterval(){
							eliminarTimeout()
							interval=setInterval(activarScroll,pausa)
						}
						
						function eliminarInterval(){
							clearInterval(interval);
						}
						
						function activarScroll(){
							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;
							}		
							/*			
							if ($.browser.msie) {
                velocidad=opc.botonVelocidad/2;
			        } else {
                velocidad=opc.botonVelocidad*2;
			        }
			        */
			        velocidad=opc.botonVelocidad*1;
							
        			$("."+opc.botonArriba).mousedown(scrollArriba).mouseup(scrollDetener).mouseout(scrollDetener);
        			$("."+opc.botonAbajo).mousedown(scrollAbajo).mouseup(scrollDetener).mouseout(scrollDetener);

						}
						
						function scrollArriba(){
							eliminarTimeout();
							eliminarInterval();
							eliminarBotonesTimeout();
							arribaInterval=setInterval(moverArriba,1)
							this.className=this.className+"_ON"
						}	
						
						function scrollAbajo(){
							eliminarTimeout();
							eliminarInterval();
							eliminarBotonesTimeout();
							abajoInterval=setInterval(moverAbajo,1)
							this.className=this.className+"_ON"
						}	
						
						function moverArriba(){
							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(){
							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 detenerArriba(){
							clearInterval(arribaInterval);
						}
						
						function detenerAbajo(){
							clearInterval(abajoInterval);
						}
						
						function scrollDetener(){
							eliminarBotonesTimeout();
							pausaBotonesTimeout();
							detenerArriba();
							detenerAbajo();
							estilo= this.className.split("_ON");
							this.className=estilo[0];
						}				
						
						function pausaBotonesTimeout(){
							pausaTimeout=setTimeout(activarInterval,opc.botonPausa*1000);
						}
						
						function eliminarBotonesTimeout(){
							clearTimeout(pausaTimeout);
						}
						
						activarTimeout();
						
						$(this).bind('mouseover',function(){
							velocidadTemp=pausaVelocidad;
						}).bind('mouseout',function(){
							velocidadTemp=detenerScroll;
						});
						
        });
    };
    
})(jQuery);