var hucke_slider = {
    init: function() {
        if($('hucke-slider-container').readAttribute('rel') == 'fade') {
            hucke_slider_fade.init();
        } else {
            hucke_slider_move.init();
        }
    }
}

var hucke_slider_move = {
    itemsize: 0,
    count: 0,
    last: 0,
    working: false,
    tmp: 0,
    
    init: function() {
        hucke_slider_move.last = $('hucke-slider').childElements();
        
        w = $('hucke-slider-container').style.width;
        hucke_slider_move.itemsize = (w.replace('px', ''));
        
        $('hucke-slider').setStyle({ width: (hucke_slider_move.itemsize * (hucke_slider_move.last.length )) + 'px' });
        
        sliderlist = '';
        first = true;
        for(i = 0;i < hucke_slider_move.last.length;i++) {
            if(first) {
                sliderlist += '<span onclick="hucke_slider_move.go(' + i + ', this);" class="point-active"></span>';
                first = false;
            } else {
                sliderlist += '<span onclick="hucke_slider_move.go(' + i + ', this);" class="point-inactive"></span>';
            }
        }
        $('hucke-slider-container').style.overflow = 'hidden';
        $('hucke-slider-list').update(sliderlist);
    },

    next: function(width) {
        if(hucke_slider_move.working) {
            return false;
        }
        
        hucke_slider_move.working = true;
        
        if(hucke_slider_move.count < $('hucke-slider').childElements().length)
        {
            hucke_slider_move.count += width;
            new Effect.Move('hucke-slider', { x: (hucke_slider_move.itemsize * width * -1), y: 0, duration: 0.5, mode: 'relative', afterFinish: function(){ hucke_slider_move.working = false; }});
        }
        
        hucke_slider_move.updateLink();
    },
    
    prev: function(width) {
        if(hucke_slider_move.working) {
            return false;
        }
        hucke_slider_move.working = true;
        
        if(hucke_slider_move.count > 0) {
            hucke_slider_move.count -= width;
            new Effect.Move('hucke-slider', { x: (hucke_slider_move.itemsize * width), y: 0, duration: 0.5, mode: 'relative', afterFinish: function(){ hucke_slider_move.working = false; }});
        }
        
        hucke_slider_move.updateLink();
    },
    
    go: function(index, link) {
        if(index > hucke_slider_move.count) {
            hucke_slider_move.next(index - hucke_slider_move.count);
        } else {
            hucke_slider_move.prev(hucke_slider_move.count - index);
        }
        
        hucke_slider_move.updateLink();
    },
    
    updateLink: function() {
        hucke_slider_move.tmp = 0;
        $('hucke-slider-list').childElements().each(function(node){
            c = hucke_slider_move.count;
            if(c == hucke_slider_move.last.length) c = 0;
            if(hucke_slider_move.tmp == c) {
                node.addClassName('point-active');
                node.removeClassName('point-inactive');
            } else {
                node.addClassName('point-inactive');
                node.removeClassName('point-active');
            }
            hucke_slider_move.tmp++;
        });
        
        if(hucke_slider_move.count > 0) {
            $('hucke-slider-prev').setStyle({display: 'block'});
        } else {
            $('hucke-slider-prev').setStyle({display: 'none'});
        }
        
        if(hucke_slider_move.count < ($('hucke-slider').childElements().length - 1)) {
            $('hucke-slider-next').setStyle({display: 'block'});
        } else {
            $('hucke-slider-next').setStyle({display: 'none'});
        }
    }
}

var hucke_slider_fade = {
    itemsize: 0,
    count: 0,
    last: 0,
    working: false,
    tmp: 0,
    interval: false,
    intervalTime: 7 * 1000, // 7 sek.
    
    init: function() {
        hucke_slider_fade.last = $('hucke-slider').childElements();
        
        w = $('hucke-slider-container').style.width;
        hucke_slider_fade.itemsize = (w.replace('px', ''));
        
        sliderlist = '';
        first = true;
        i = 0;
        $('hucke-slider').childElements().each(function(node){
            if(first) {
                sliderlist += '<span onclick="hucke_slider_fade.go(' + i + ', this);" class="point-active"></span>';
                first = false;
            } else {
                sliderlist += '<span onclick="hucke_slider_fade.go(' + i + ', this);" class="point-inactive"></span>';
                $(node).fade({duration: 0, from: 1, to: 0});
            }
            i++;
            node.addClassName('fadeRule');
        });
        $('hucke-slider-list').update(sliderlist);
        hucke_slider_fade.interval = setInterval('hucke_slider_fade.intervalWorker()', hucke_slider_fade.intervalTime);
    },
    
    intervalWorker: function() {
        if((hucke_slider_fade.count + 1) >= $('hucke-slider').childElements().length) {
            hucke_slider_fade.go(0, false);
        } else {
            hucke_slider_fade.next(1);
        }
    },

    next: function(width) {
        if(hucke_slider_fade.working) {
            return false;
        }
        
        hucke_slider_fade.working = true;
        
        if(hucke_slider_fade.count < $('hucke-slider').childElements().length)
        {
            c = hucke_slider_fade.count;
            if(c == hucke_slider_fade.last.length) c = 0;
            hucke_slider_fade.tmp = 0;
            $('hucke-slider').childElements().each(function(node){
                
                duration = 0.5;
                if(Prototype.Browser.IE && parseInt(navigator.userAgent.substring(navigator.userAgent.indexOf("MSIE")+5)) == 7) {
                    duration = 0;
                } else if(Prototype.Browser.IE && parseInt(navigator.userAgent.substring(navigator.userAgent.indexOf("MSIE")+5)) == 8) {
                    duration = 0;
                }
                
                if(hucke_slider_fade.tmp == c) {
                    $(node).fade({ duration: duration, from: 1, to: 0, afterFinish: function(){ hucke_slider_fade.working = false; }});
                } else if (hucke_slider_fade.tmp == (c + width)) {
                    $(node).appear({duration: duration});
                }
                hucke_slider_fade.tmp++;
            });
            hucke_slider_fade.count += width;
        }
        
        hucke_slider_fade.updateLink();
    },
    
    prev: function(width) {
        if(hucke_slider_fade.working) {
            return false;
        }
        hucke_slider_fade.working = true;
        
        if(hucke_slider_fade.count > 0) {
            if(hucke_slider_fade.count < $('hucke-slider').childElements().length)
            {
                c = hucke_slider_fade.count;
                if(c == hucke_slider_fade.last.length) c = 0;
                hucke_slider_fade.tmp = 0;
                $('hucke-slider').childElements().each(function(node){
                    
                    duration = 0.5;
                    if(Prototype.Browser.IE && parseInt(navigator.userAgent.substring(navigator.userAgent.indexOf("MSIE")+5)) == 7) {
                        duration = 0;
                    } else if(Prototype.Browser.IE && parseInt(navigator.userAgent.substring(navigator.userAgent.indexOf("MSIE")+5)) == 8) {
                       duration = 0;
                    }
                
                    if(hucke_slider_fade.tmp == c) {
                        $(node).fade({ duration: duration, from: 1, to: 0, afterFinish: function(){ hucke_slider_fade.working = false; }});
                    } else if (hucke_slider_fade.tmp == (c - width)) {
                        $(node).appear({duration: duration});
                    }
                    hucke_slider_fade.tmp++;
                });
                hucke_slider_fade.count -= width;
            }
        }
        
        hucke_slider_fade.updateLink();
    },
    
    go: function(index, link) {
        if(index > hucke_slider_fade.count) {
            hucke_slider_fade.next(index - hucke_slider_fade.count);
        } else if(index < hucke_slider_fade.count) {
            hucke_slider_fade.prev(hucke_slider_fade.count - index);
        }
        
        hucke_slider_fade.updateLink();
    },
    
    updateLink: function() {
        clearInterval(hucke_slider_fade.interval);
        hucke_slider_fade.interval = setInterval('hucke_slider_fade.intervalWorker()', hucke_slider_fade.intervalTime);
        
        hucke_slider_fade.tmp = 0;
        $('hucke-slider-list').childElements().each(function(node){
            c = hucke_slider_fade.count;
            if(c == hucke_slider_fade.last.length) c = 0;
            if(hucke_slider_fade.tmp == c) {
                node.addClassName('point-active');
                node.removeClassName('point-inactive');
            } else {
                node.addClassName('point-inactive');
                node.removeClassName('point-active');
            }
            hucke_slider_fade.tmp++;
        });
    }
}

document.observe('dom:loaded', function () { hucke_slider.init(); });

