
function slider(element,type,speed) {
  
    this.target = null;
    this.left = null;
    this.right = null;
    this.interval = -1;
    this.cinterval = -1;
    this.width = 0;
    this.contentElement = null;
    this.container = null;
    this.page = 0;
    this.maxPage = 0;
    this.size = 0;
    this.position = 0;
    this.type = type;
    this.speed = speed;
    this.lastdir = null;
    this.items = null;
    this.curItem = 0;
    this.mouseover = false;
    this.refresh=30;
    this.pager = null;
    
    if(element != "") {
          
        element = document.getElementById(element);
        if(element) { 
            this.container = element;
            var found = 0; var size = 0;
            var left = null; var right = null; var pager = null;
            var objs = this.container.getElementsByTagName("table");
            var len = objs.length;
            if(len > 0) {
                if(this.type == 0)
                    size = parseInt(objs[0].offsetWidth);
                else if(this.type== 1)
                    size = parseInt(objs[0].offsetHeight);
                
                this.contentElement = objs[0].parentNode;
                this.items = objs[0].getElementsByTagName("td");
                if(size > 0) { 
                    objs = this.container.getElementsByTagName("div");
                    len = objs.length;
                    if(len > 0) {
                        for(var i = 0; i < len; i++) {
                            if(objs[i].className.indexOf("scrollLeft") != -1) {
                                found++;
                                left = objs[i];
                            } else if(objs[i].className.indexOf("scrollRight") != -1) {
                                found++;
                                right = objs[i];
                            } else if(objs[i].className.indexOf("scrollPager") != -1) {
                                pager = objs[i].getElementsByTagName("span");
                                if(pager && pager.length > 0){
                                    pager = pager[0];
                                }

                            }
                            if(found == 2) {
                                this.size = size;
                                if(this.type == 0)
                                    this.width = this.contentElement.parentNode.offsetWidth;
                                else if(this.type == 1)
                                    this.width = this.contentElement.parentNode.offsetHeight;
                                this.maxPage = Math.ceil(size/this.width);
                                this.page = 1;
                                this.left= left;
                                this.right = right;
                                if(pager != null){
                                    pager.innerHTML = this.page+" / "+this.maxPage;
                                    this.pager=pager;
                                }
                                break;
                            }
                        }
                    }
                }
            }

        }
    }
}


slider.prototype.getCurrentItem = function() {
   var index = this.curItem;
   if(index >= 0 && index <= this.items.length) {
       return this.items[index];
   }
   return null;
}
/*
 *  @ direction: 0 = right; 1 = left;
 */
slider.prototype.nextItem = function() {
    var index = this.curItem;
       index++;
    if(index > this.items.length) {
        index = 0;
    }
    this.curItem = index;
}
slider.prototype.move = function(direction) {
    var left;
    this.lastdir= direction;
    if(this.type == 0)
        left = parseInt(this.contentElement.style.left);
    else if(this.type == 1)
        left = parseInt(this.contentElement.style.top);
    var curPage =1; var newPage = 1;
    if(direction == "left") {
        curPage += Math.ceil(Math.abs(left)/this.width);
        left += this.speed;
        if(left > 0) {
            left = 0;
        }
        newPage += Math.ceil(Math.abs(left)/this.width);
        if(left != 0 && curPage != this.target && newPage == this.target) {
             left = -((this.target-1)*this.width);
        }
    } else if(direction == "right") {
        curPage += Math.floor(Math.abs(left)/this.width);
        left -= this.speed;
        
        newPage += Math.floor(Math.abs(left)/this.width);
        if(newPage == this.target){
             left = -((this.target-1)*this.width);
        }
    }
    if(curPage != this.target) {
         if(this.type == 0)
            this.contentElement.style.left = left+"px";
         else if(this.type == 1)
            this.contentElement.style.top = left+"px";
    } else {
        this.page = this.target;
    }
    if(this.pager!=null){
        var str = this.page+ " / "+this.maxPage;
        if(this.pager.innerHTML != str){
            this.pager.innerHTML = str;
        }
    }
}

function moveSlider(slider,direction,continues) {
    if(slider.target == null) {
        if(direction == "left") {
            if(slider.page > 1)
                slider.target = slider.page-1;
        } else if(direction == "right")
            if(slider.page < slider.maxPage)
              slider.target = slider.page+1;
    }
    if(continues && slider.page == slider.target){
        if(direction == "left") {
            if(slider.page > 1)
                slider.target = slider.page-1;
            else {
                direction="right";
                slider.target=2;
            }
        } else if(direction == "right")
            if(slider.page < slider.maxPage)
              slider.target = slider.page+1;
             else {
                direction="left";
                slider.target=slider.maxPage-1;
            }
    }
    if(slider.target != null && slider.page != slider.target) {
        if((continues && !slider.mouseover) || !continues) slider.move(direction);
        var func = function() {moveSlider(slider,direction,continues);};
        setTimeout(func,slider.refresh);
    } else slider.target = null;
}

function autorotate(slider,continues) {
    if(!slider.mouseover) {
        var dir = slider.lastdir;
        if(dir == null ) dir="right";
        if(slider.maxPage == slider.page) dir = "left";
        if(slider.page == 1) dir = "right";
        moveSlider(slider,dir,continues);
    }
}
function rotateContent(slider,obj) {
    if(!slider.mouseover && obj) {
        slider.nextItem();
        var item = slider.getCurrentItem();
        if(item && item.id) {
            changeContent(obj,item.id.replace("id",""));
        }
    }
}
function changeContent(obj,id) {
    if(obj && id != "" && !isNaN(id)) {
       var post = "&book_id="+id;
       asyncSend("?action=fresh_banner", post, 1, obj, null);
    }
}


function newSlider(obj,type,rotate,rotateCont,contentId,speed) {
    var mySlider = new slider(obj,type,speed);
    var func;
    if(mySlider.left != null && mySlider.right != null) {
        mySlider.left.onclick = function() { moveSlider(mySlider,"left"); };
        mySlider.right.onclick = function() { moveSlider(mySlider,"right") };
    }
    if(rotate > 0) {
        func = function() {autorotate(mySlider,false);}
        mySlider.interval = setInterval(func,rotate);
    } else if(rotate == -1) {
        autorotate(mySlider,true);
    }
    if(rotateCont > 0 && contentId != "") {
        var content = document.getElementById(contentId);
        if(content) {
            func = function() {rotateContent(mySlider,content);}
            mySlider.cinterval =setInterval(func,rotateCont);
        } else {
            rotateCont = 0;
        }
    }
    if(rotateCont > 0 || rotate > 0) {
        mySlider.container.onmouseover = function() {
            mySlider.mouseover = true;
            if(mySlider.interval != -1) {
                clearInterval(mySlider.interval);
                mySlider.interval = -1;
            }
            if(mySlider.cinterval != -1) {
                clearInterval(mySlider.cinterval);
                mySlider.cinterval = -1;
            }
        }
        mySlider.container.onmouseout = function() {
            mySlider.mouseover = false;
            if(mySlider.interval == -1) {
                func = function() {autorotate(mySlider);}
                mySlider.interval = setInterval(func,rotate);
            }
            if(mySlider.cinterval == -1) {
                func = function() {rotateContent(mySlider,content);}
                mySlider.cinterval = setInterval(func,rotateCont);
            }
        }
    } else if(rotate == -1) {
        mySlider.container.onmouseover = function() {
            mySlider.mouseover = true;
        }
        mySlider.container.onmouseout = function() {
            mySlider.mouseover = false;
        }
    }
}

