var EGDSlide = new Class ({
    options: {
		currentActive: 0,
		actx: 0,
		currentAlt: 0,
        currentImage : 0,
        idx : -1,
		adx : -1,
		clickNo: -1,
        onetime: false,
        timer: null,
        timming: 0,
        width: 800,
        height: 400,
        autoplay: 1,
        interval: 1000,
        duration: 1000,
        effect: 3,
		direction: 1,
        rotateaction: null,
		shownav: 1,
		showalt: 1,
        imglist : null,
		altlist : null,
		navlist : null,
		navact: 1,
		nextbtn:null,
		prevbtn:null
    },
    initialize: function(options) {
        this.setOptions(options);
        x = this.options;
        this.activateSlide();
    },
    activateSlide: function() {
         if (x.imglist.length) {
            //-- Show the first img --
            x.imglist[0].setStyle('display','block');
			if (x.showalt) {
				x.altlist.each (function(el,i) {
					if (i > 0) {
						el.setStyle("display","block");
						el.setStyle("opacity","0");
					} else {
						el.setStyle("display","block");
						el.setStyle("opacity","1");
					}
				});
				x.currentAlt 	= x.altlist[0];
				x.adx			= 0;
			}
			
			if (x.shownav) {
				x.currentActive = x.navlist[0];
				x.actx = 0;
				this.navActive(0);
				//-- Now activate linkable navigator --
				x.navlist.each (function(el,i) {
					if (x.navact == 1) {
						el.addEvent("click",function(ev) {
							var e = new Event(ev);
							e.stop();
							this.navActive(i);
							x.clickNo = x.actx = i;
							switch (x.effect) {
								case 1:
									this.doscroll();
									break;
								case 2: 
									this.dofade();
									break;
								case 3:
								default:
									this.dofadecross();   
							}
						}.bind(this));
					} 
					if (x.navact == 2) {
						el.addEvent("click",function(ev) {
							var e = new Event(ev);
							e.stop();
						});
						el.addEvent("mouseenter",function(ev) {
							this.navActive(i);
							x.clickNo = x.actx = i;
							switch (x.effect) {
								case 1:
									this.doscroll();
									break;
								case 2: 
									this.dofade();
									break;
								case 3:
								default:
									this.dofadecross();   
							}
						}.bind(this));
					} 
				}.bind(this));
			}
            x.currentImage  = x.imglist[0];
            x.idx           = 0;
			x.nextbtn.addEvent('click',function(ev) {
				var e = new Event(ev);
				e.stop();
				if (x.imglist.length == 1) return false;
				x.idx = x.idx + 1;
				if (x.idx >= x.imglist.length) x.idx = 0;
				x.clickNo = x.actx = x.idx;				
				switch (x.effect) {
					case 1:
						this.doscroll();
						break;
					case 2: 
						this.dofade();
						break;
					case 3:
					default:
						this.dofadecross();   
				}
			}.bind(this));
			x.prevbtn.addEvent('click',function(ev) {
				var e = new Event(ev);
				e.stop();
				if (x.imglist.length == 1) return false;
				x.idx = x.idx - 1;
				if (x.idx < 0) x.idx = x.imglist.length - 1;
				x.clickNo = x.actx = x.idx;
				switch (x.effect) {
					case 1:
						this.doscroll();
						break;
					case 2: 
						this.dofade();
						break;
					case 3:
					default:
						this.dofadecross();   
				}
			}.bind(this));
            switch (x.effect) {
                case 1:
                    this.scrollthem();
                    break;
                case 2: 
                    this.fadethem();
                    break;
                case 3:
                default:
                    this.crossfadethem();   
            }
        }
    },
	navActive: function(index) {
		x.currentActive.className = x.currentActive.className.replace(/active/gi,"");
		x.actx = index;
		x.currentActive = x.navlist[index];
		x.currentActive.addClass("active");
	},
    scrollthem: function(clickno) {
        //-- Need to reset the position of image --
		if (x.direction == 1) {
			x.imglist.each(function(el,i) {
				el.setStyle("left",i*x.width+"px");            
			});
		}
		if (x.direction == 2) {
			x.imglist.each(function(el,i) {
				el.setStyle("left",-1*i*x.width+"px");            
				el.setStyle("z-index",999-i);            
			});
		}
		if (x.direction == 3) {
			x.imglist.each(function(el,i) {
				el.setStyle("top",-1*i*x.height+"px"); 
				el.setStyle("z-index",999-i); 				
			});
		}		
		if (x.direction == 4) {
			x.imglist.each(function(el,i) {
				el.setStyle("top",i*x.height+"px");            
			});
		}
        //-- Now, do scroll --
        if (x.autoplay == 1)
            x.timer = this.doscroll.bind(this).periodical(x.interval);
        if (x.autoplay == 2) {
            x.onetime = true;
            x.timer = this.doscroll.bind(this).periodical(x.interval);
        }
        
    },
    doscroll: function(starttime) {
        if (starttime) {
            if (starttime - x.timming < x.duration) return;   
        }
        x.timming = starttime;
		if (x.clickNo != -1) {
			var tmp = -1 * (x.clickNo - 1);
			if (tmp <= -1 * (x.imglist.length - 1)) tmp = 1;
			x.idx = tmp;
		}
        x.imglist.each (function(el,i) {
            var fx = new Fx.Styles(el, {duration:x.duration, wait:false});
            el.setStyle("display","block");
			if (x.direction == 1) {
				fx.start ({
					left: (x.idx + i -1) * x.width + "px"
				});            
			} 
			if (x.direction == 2) {
				fx.start ({
					left: -1 * (x.idx + i -1) * x.width + "px"
				});            
			}
			if (x.direction == 3) {
				fx.start ({
					top: -1 * (x.idx + i -1) * x.height + "px"
				});            
			}
			if (x.direction == 4) {
				fx.start ({
					top: (x.idx + i -1) * x.height + "px"
				});            
			}
        });
		this.navActive(x.idx);
        x.idx = x.idx - 1;
        if (x.idx <= -1 * (x.imglist.length - 1)) {
            if (x.onetime) {
                $clear(x.timer);   
            } else {
                x.idx = 1;
            }            
        }
		if (x.showalt) this.changeText();
		x.clickNo = -1;
    },
    fadethem: function() {
        //-- Init fading --
        x.imglist.each (function(el,i) {
            if (i > 0) {
                el.setStyle("display","block");
                el.setStyle("opacity","0");
            }
        });
        if (x.autoplay == 1)
            x.timer = this.dofade.bind(this).periodical(x.interval);
        if (x.autoplay == 2) {
            x.onetime = true;
            x.timer = this.dofade.bind(this).periodical(x.interval);
        }
        
    },
    dofade: function(starttime) {
        if (starttime) {
            if (starttime - x.timming < 2*x.duration) return;   
        }
        x.timming = starttime;
        var fx = new Fx.Styles(x.currentImage, {duration:x.duration, wait:false});
		if (x.clickNo != -1) {
			var tmp = x.clickNo - 1;
			if (tmp < 0) tmp = x.imglist.length - 1;
			x.idx = tmp;
		}
        var next = x.idx + 1;
        if (next > x.imglist.length - 1) {  
            next = 0;
            if (x.onetime) {                
                $clear(x.timer);
            } 
        }
        var fx1 = new Fx.Styles(x.imglist[next], {duration:x.duration, wait:false});
        fx.start({
            opacity: 0
        });
        setTimeout(function() {
            fx1.start({
                opacity: 1
            });
        },x.duration);
        x.currentImage = x.imglist[next];
        x.idx = next;
		this.navActive(x.idx);
		if (x.showalt) this.changeText();
		x.clickNo = -1;
    },
    crossfadethem: function() {
        //-- Init fading --
        x.imglist.each (function(el,i) {
            if (i > 0) {
                el.setStyle("display","block");
                el.setStyle("opacity","0");
            }
        });
        if (x.autoplay == 1)                    
            x.timer = this.dofadecross.bind(this).periodical(x.interval);
        if (x.autoplay == 2) {
            x.onetime = true;
            x.timer = this.dofadecross.bind(this).periodical(x.interval);
        }
        
    },
    dofadecross: function(starttime) {
        if (starttime) {
            if (starttime - x.timming < x.duration) return;   
        }
        x.timming = starttime;
		if (x.clickNo != -1) {
			var tmp = x.clickNo - 1;
			if (tmp < 0) tmp = x.imglist.length - 1;
			x.idx = tmp;
		}
        var fx = new Fx.Styles(x.currentImage, {duration:x.duration, wait:false});
        var next = x.idx + 1;
        if (next > x.imglist.length - 1) {
            next = 0;                         
            if (x.onetime) {
                $clear(x.timer);
            } 
        }
        var fx1 = new Fx.Styles(x.imglist[next], {duration:x.duration, wait:false});
        fx.stop();
        fx.start({
            opacity: 0
        });
        fx1.stop();
        fx1.start({
            opacity: 1
        });
        x.currentImage = x.imglist[next];
        x.idx = next;
		this.navActive(x.idx);
		if (x.showalt) this.changeText();
		x.clickNo = -1;
    },
	changeText: function() {
		if (x.clickNo != -1) {
			var tmp = x.clickNo - 1;
			if (tmp < 0) tmp = x.imglist.length - 1;
			x.adx = tmp;
		}
		var fx = new Fx.Styles(x.currentAlt, {duration:x.duration, wait:false});
        var next = x.adx + 1;
        if (next > x.altlist.length - 1) {
            next = 0;                         
            if (x.onetime) {
                $clear(x.timer);
            } 
        }
        var fx1 = new Fx.Styles(x.altlist[next], {duration:x.duration, wait:false});
        fx.stop();
        fx.start({
            opacity: 0
        });
        fx1.stop();
        fx1.start({
            opacity: 1
        });
        x.currentAlt = x.altlist[next];
        x.adx = next;
	}
});
EGDSlide.implement(new Options);

