// trova l'immagine successiva
function nextImage(o) {
    do o = o.nextSibling;
    while(o && o.tagName != 'IMG');
    return o;
}

// trova la prima immagine
function firstChildImage(o) {
    o = o.firstChild;
    while(o && o.tagName != 'IMG') {
        o = o.nextSibling;
    }
    return o;
}

//setta l'opacità id un elemento ad un valore specifico
function setOpacity(obj, o) {
    obj.style.opacity = (o / 100);
    obj.style.MozOpacity = (o / 100);
    obj.style.KhtmlOpacity = (o / 100);
    obj.style.filter = 'alpha(opacity=' + o + ')';
}

//make image invisible and set next one as current image
function getNextImage(image) {
	
    if (next = nextImage(image)) {
	image.style.display = 'none';
	image.style.zIndex = 0;

	next.style.display = 'block';
	next.style.zIndex = 100;

    } else {
	//if there is not a next image, get the first image again
	next = firstChildImage(image.parentNode);
    }

    return next;
}

//setta i valori di default e fa partire l'immagine
function blendImages(id, speed, pause, caption) {
	if(speed == null) {
        speed = 10;
    }
    if(pause == null) {
        pause = 1500;
    }
	// estrae l'elemento id="blend"
    var blend = document.getElementById(id);
	// estrare la prima immagine del contenitore "blend"
    var image = firstChildImage(blend);
	// va partire l'effetto
	startBlending(image, speed, pause, caption);
}

//make image a block-element and set the caption
function startBlending(image, speed, pause, caption) {
	// setta il display dell'immagine a BLOCK
    image.style.display = 'block';
    if(caption != null) {
		document.getElementById(caption).innerHTML = image.alt;
    }
    continueFadeImage(image, 0, speed, pause, caption);
}

// ASC: copied from http://www.sean.co.uk/a/webdesign/javascriptdelay.shtm
function pausecomp(millis) {
    var date = new Date();
    var curDate = null;

    do { curDate = new Date(); }
    while(curDate-date < millis);
} 

//set an increased opacity and check if the image is done blending
function continueFadeImage(image, opacity, speed, pause, caption) {
	// aumenta l'opacità di 3
    opacity = opacity + 3;
	// se l'opacità dell'immagine è < 100
	if (opacity < 103) {
		setTimeout(function() { fadeImage(image, opacity, speed, pause, caption) }, speed);
    } 
	else {
		return false;
	}
}
function endFadeImage(image, opacity, speed, pause, caption) {
			// altrimenti se l'immagine è visibile in pieno, la setta come background e la rende trasparente
			image.parentNode.style.backgroundImage = "url("+image.src+")";
		
			// ASC: pause 1sec here to prevent MSIE image flash ...
			var paws=pause-1000;
			if (paws < 0 ) {
				paws = 0;
			}
			pausecomp(1000);
			// setta l'opacità a 0
			setOpacity(image,0);
			// prende l'immagine successiva e fa partire l'effetto ancora
			image = getNextImage(image);
			setTimeout(function() { startBlending(image, speed, pause, caption) }, paws);
}

// setta l'opacità ad un nuovo valore e continua il fading 
function fadeImage(image, opacity, speed, pause, caption) {
    setOpacity(image,opacity);
    continueFadeImage(image, opacity, speed, pause, caption);
}

//setta i valori di default e fa partire l'immagine
function nextImages(id, speed, pause, caption) {
	if(speed == null) {
        speed = 30;
    }
    if(pause == null) {
        pause = 1000;
    }
	// estrae l'elemento id="blend"
    var blend = document.getElementById(id);
	// estrare la prima immagine del contenitore "blend"
    var image = firstChildImage(blend);
	// va partire l'effetto
	startNextSblending(image, speed, pause, caption);
}
function startNextSblending(image, speed, pause, caption) {
    image.style.display = 'block';
    if(caption != null) {
		document.getElementById(caption).innerHTML = image.alt;
    }	
	continueNextSfadeImage(image, 103, speed, pause, caption);
}
//set an increased opacity and check if the image is done blending
function continueNextSfadeImage(image, opacity, speed, pause, caption) {
	// aumenta l'opacità di 3
    opacity = opacity - 3;
	// se l'opacità dell'immagine è < 100
	if (opacity > 0) {
		setTimeout(function() { nextSfadeImage(image, opacity, speed, pause, caption) }, 5);
    } 
	else {
			var imgCurrent;
			imgCurrent = document.getElementById("imgCurrent").value;
			if (imgCurrent == 9)
				imgCurrent = 0;
			else
				imgCurrent++;
			image.src = imgArray[imgCurrent];
			document.getElementById("imgCurrent").value = imgCurrent;
			setTimeout(function() { startBlending(image, speed, pause, caption) }, speed);
	}
}
function nextSfadeImage(image, opacity, speed, pause, caption) {
    setOpacity(image,opacity);
    continueNextSfadeImage(image, opacity, speed, pause, caption);
}
// BlendImages per immagine precedente
//setta i valori di default e fa partire l'immagine
function prevImages(id, speed, pause, caption) {
	if(speed == null) {
        speed = 30;
    }
    if(pause == null) {
        pause = 1500;
    }
	// estrae l'elemento id="blend"
    var blend = document.getElementById(id);
	// estrare la prima immagine del contenitore "blend"
    var image = firstChildImage(blend);
	// va partire l'effetto
	startPrevSblending(image, speed, pause, caption);
}
function startPrevSblending(image, speed, pause, caption) {
    image.style.display = 'block';
    if(caption != null) {
		document.getElementById(caption).innerHTML = image.alt;
    }	
	continuePrevSfadeImage(image, 103, speed, pause, caption);
}
//set an increased opacity and check if the image is done blending
function continuePrevSfadeImage(image, opacity, speed, pause, caption) {
	// aumenta l'opacità di 3
    opacity = opacity - 3;
	// se l'opacità dell'immagine è < 100
	if (opacity > 0) {
		setTimeout(function() { prevSfadeImage(image, opacity, speed, pause, caption) }, 5);
    } 
	else {
			var imgCurrent;
			imgCurrent = document.getElementById("imgCurrent").value;
			if (imgCurrent == 0)
				imgCurrent = 9;
			else
				imgCurrent--;
			image.src = imgArray[imgCurrent];
			document.getElementById("imgCurrent").value = imgCurrent;
			setTimeout(function() { startBlending(image, speed, pause, caption) }, speed);
	}
}
function prevSfadeImage(image, opacity, speed, pause, caption) {
    setOpacity(image,opacity);
    continuePrevSfadeImage(image, opacity, speed, pause, caption);
}
