
function imageSlideEffect()
{
    if (!imageSlideEffect.effects) {
        imageSlideEffect.effects = new Array();
        imageSlideEffect.frames = 15;
        imageSlideEffect.delay = 5000;
    }
    this.effectId = imageSlideEffect.effects.length;
    imageSlideEffect.effects[this.effectId] = this;
    this.images = new Array();
    //copy all image ids into an array
    for(var i = 0; i < arguments.length; i++) {
        this.images[i] = arguments[i];
    }
    this.position = 0;
    this.playCount = 0;

    this.playButton  = createFloatingElement("div", "imageSlideshowPlayButton");
    var effectId = this.effectId;
    this.playButton.onclick = function() {
        var effect = imageSlideEffect.effects[effectId];
        if (effect.playing) {
            effect.stop();
        } else {
            effect.start();
        }
    }
    this.reposition();
}

imageSlideEffect.prototype.reposition = function()
{
    var imageId = this.images[this.position];
    if ($(imageId) && this.showPlayButton) {
        var position = findPosition($(imageId));
        setElementPosition(this.playButton, position.x + 5, position.y + 5);
    } else {
        //not visible
        setElementPosition(this.playButton, -1000, -100);
    }
}

imageSlideEffect.prototype.start = function(showPlayButton)
{
    if (showPlayButton) {
        this.showPlayButton = showPlayButton;
    }
    this.playing = true;
    this.playCount++;
    this.playButton.className = "imageSlideshowPauseButton";
    var parent = this;
    var lateStart = function () {
    	parent.slideSideways(parent.playCount);
    }
    setTimeout(lateStart, imageSlideEffect.delay)
}

imageSlideEffect.prototype.stop = function()
{
    for (var i = 0; i < this.images.length; i++) {
        if ($(this.images[i])) {
            $(this.images[i]).style.opacity = 1;
        }
    }
    this.playing = false;
    this.playButton.className = "imageSlideshowPlayButton";
}

imageSlideEffect.prototype.slideSideways = function(playSequence)
{
	if (!this.playing) {
		return;
	}
    this.reposition();
    var imageId = this.images[this.position];
    if ($(imageId)) {
        $(imageId).style.display = "block";
        //select the element in the slider
        if (isDefined("_aponSelectEditor")) {
            _aponSelectEditor.selectByElement($(imageId));
        }
        var effectId = this.effectId;
        var continueToNext = this.images.length > 1 && this.playing && this.playCount == playSequence;
        var frameFunction = function(frame) {
        	var effect = imageSlideEffect.effects[effectId];
        	var image = $(effect.images[effect.position]);
        	var nextIndex = (effect.position < effect.images.length - 1) ? (effect.position + 1) : 0;
        	var nextImage = $(effect.images[nextIndex]);
        	nextImage.style.display = "block";
        	nextImage.style.position = "absolute";
        	if (effect.position % 2 == 0) {
	        	var leftPos = - (frame/imageSlideEffect.frames) * image.offsetWidth;
	        	image.style.left = leftPos + "px";
	        	nextImage.style.left = (leftPos + image.offsetWidth) + "px";
        	} else {
        		var leftPos = (frame/imageSlideEffect.frames) * image.offsetWidth;
	        	image.style.left = leftPos + "px";
	        	nextImage.style.left = (leftPos - image.offsetWidth) + "px";
        	}
            if (frame == imageSlideEffect.frames) {
                if (continueToNext) {
                	effect.position = nextIndex;
                	image.style.display = "none";
                	nextImage.style.position = "relative";
                    setTimeout("imageSlideEffect.effects[" + effectId + "].slideSideways(" + playSequence + ");", imageSlideEffect.delay);
                }
            }
        }
        var animation = new _aponAnimation(0, imageSlideEffect.frames, 30, "linear", frameFunction);
        animation.start();
    }
}

