﻿//nemRotator.js
//2008 Paul Graves paul.graves@nemisys.uk.com
//Nemisys rotating content widget, fades/slides content
      
var nemRotator = new Class({
    initialize: function(el){
        this.rotator = el;
        this.elements = new Array();
        this.counter=0;
        this.elements = this.rotator.getElements("div");

        this.delay = this.rotator.getProperty("delay") ? this.rotator.getProperty("delay") : 12000;
        
        if(this.rotator.hasClass('nemFade')){//fade in/out option specified
            this.elements.each(function(el,index){//hide all elements except the first
                                                    if(index!=0){
                                                        el.set('opacity',0);
                                                        el.setStyle('display','none');
                                                    }else{
                                                        el.setStyle('display','inline');
                                                    } 
                                                    el.set('tween',{property: 'opacity',duration:1000});
                                                 });   
            if(this.elements.length>1){(function(){this.doFade(0);}).delay(this.delay,this);}
        }else if(el.hasClass('nemSlideVertical')){
            this.elements.each(function(el,index){
                el.set('slide',{duration:600});
                if(index!=0){
                    el.slide('hide');
                }
            });
            if(this.elements.length>1){(function(){this.doSlide(0);}).delay(this.delay,this);}
        }else if(el.hasClass('nemSlideHorizontal')){
            this.elements.each(function(el,index){
                el.set('slide',{duration:500,mode:'horizontal'});
                if(index!=0){
                    el.slide('hide');
                    el.setStyle('display','none');
                }
            });
            if(this.elements.length>1){(function(){this.doSlide(0);}).delay(this.delay,this);}
        }
    },
    doFade:function(index){
        var nextIndex=index+1;
        if(nextIndex>=this.elements.length)nextIndex=0;

        this.elements[index].get('tween').start(1, 0).chain((function() { this.elements[index].setStyle('display', 'none'); this.elements[nextIndex].setStyle('display', 'inline'); this.elements[nextIndex].get('tween').start(0, 1); }).bind(this)); 
        (function(){this.doFade(nextIndex);}).delay(this.delay,this);//recursive call to fade next elements
    },
    doSlide:function(index){
        Element.implement(Chain);
        Fx.Slide.implement(Chain);

        var nextIndex=index+1;
        if(nextIndex>=this.elements.length)nextIndex=0;
        
        if(this.rotator.hasClass('nemSlideHorizontal'))//if horizontal then set display form the elements otherwise don't
            this.elements[index].get('slide').start('out').chain((function(){this.elements[index].setStyle('display','none');this.elements[nextIndex].setStyle('display','');this.elements[nextIndex].slide('in');}).bind(this));
        else{
            this.elements[index].get('slide').start('out');
            this.elements[nextIndex].slide('in');
        }
        
        (function(){this.doSlide(nextIndex);}).delay(this.delay,this);//recursive call to fade next elements
    }
});
