﻿var js_rolling = function(this_s)
{ 
    // 시간단위는 ms로 1000이 1초 
    if(this_s.nodeType==1)
    { 
        this.this_s = this_s; 
    }
    else
    { 
        this.this_s = document.getElementById(this_s); 
    } 
    this.is_rolling = false; 
    this.direction = 1; //1:top, 2:right, 3:bottom, 4:left (시계방향) // 1번과 4번만 됨 
    this.children =    null; 
    this.move_gap = 1;    //움직이는 픽셀단위 
    this.time_dealy = 100; //움직이는 타임딜레이 
    this.time_dealy_pause = 1000;//하나의 대상이 새로 시작할 때 멈추는 시간, 0 이면 적용 안함 
    this.time_timer=null; 
    this.time_timer_pause=null;     
    this.set_direction(this.direction); 
    this.init_event(); 
} 
js_rolling.prototype.set_direction = function(direction)
{ 
    this.direction=direction; 
    this.get_element_children(); 
} 
js_rolling.prototype.init_event = function()
{ 
    var this_s=this; 
    this.this_s.onmouseover=function(){ 
        if(!this_s.time_timer_pause){ 
            this_s.pause(); 
        } 
    } 
    this.this_s.onmouseout=function(){ 
        if(!this_s.time_timer_pause){ 
            this_s.resume(); 
        } 
    }     
} 
js_rolling.prototype.get_element_children = function()
{ 
    this.this_s.style.position='relative'; 
    this.this_s.style.overflow='hidden'; 
    var children = this.this_s.childNodes; 
    this.children = children; 
    for(var i=(children.length-1);0<=i;i--)
    { 
        if(children[i].nodeType==1)
        { 
            children[i].style.position='relative'; 
            if(this.direction==1)
            { 
                children[i].style.top='0px'; 
            }
            else if(this.direction==4)
            { 
                children[i].style.left='0px';                 
                this.this_s.style.whiteSpace='nowrap';                                         
            } 
        }
        else
        { 
            this.this_s.removeChild(children[i]); 
        } 
    } 
} 
js_rolling.prototype.act_move_up = function()
{ 
    for(var i = 0,m=this.children.length;i<m;i++)
    { 
        var child = this.children[i]; 
        child.style.top=(parseInt(child.style.top)-this.move_gap)+'px'; 
    } 
    if((this.children[0].offsetHeight+parseInt(this.children[0].style.top))<=0)
    { 
        this.this_s.appendChild(this.children[0]); 
        this.get_element_children(); 
        if(this.time_dealy_pause)
        { 
            var this_s = this; 
            var act = function()
            {
                this_s.resume();this_s.time_timer_pause=null;
            } 
            this.time_timer_pause = setTimeout(act,this.time_dealy_pause); 
            this.pause(); 
        }         
    } 
} 
js_rolling.prototype.act_move_left = function()
{ 
    for(var i = 0,m=this.children.length;i<m;i++)
    { 
        var child = this.children[i]; 
        child.style.left=(parseInt(child.style.left)-this.move_gap)+'px'; 
    } 
    if((this.children[0].offsetWidth+parseInt(this.children[0].style.left))<=0)
    { 
        this.this_s.appendChild(this.this_s.firstChild); 
        this.get_element_children(); 
        if(this.time_dealy_pause)
        { 
            var this_s = this; 
            var act = function()
            {
                this_s.resume();this_s.time_timer_pause=null;
            } 
            this.time_timer_pause = setTimeout(act,this.time_dealy_pause); 
            this.pause(); 
        }                 
    } 
} 
js_rolling.prototype.start = function()
{ //롤링 시작 
    var this_s = this; 
    this.stop(); 
    this.is_rolling = true; 
    var act = function()
    { 
        if(this_s.is_rolling)
        { 
            if(this_s.direction==1)
            {
                this_s.act_move_up();
            } 
            else if(this_s.direction==4)
            {
                this_s.act_move_left();
            } 
        } 
    } 
    this.time_timer = setInterval(act,this.time_dealy); 
} 
js_rolling.prototype.pause = function()
{ //일시 멈춤 
    this.is_rolling = false; 
} 
js_rolling.prototype.resume = function()
{ //일시 멈춤 해제 
    this.is_rolling = true; 
} 
js_rolling.prototype.stop = function()
{ //롤링을 끝냄 
    this.is_rolling = false; 
    if(!this.time_timer)
    { 
        clearInterval(this.time_timer); 
    } 
    this.time_timer = null 
}
