/****
*	JS_UTILITIES_01
*	Version: 1.0
****/

/// ##############################################

/// GENERAL PURPOSE

var vsIEBrowser = false;
if (document.all) {
	vsIEBrowser = true;
}


/// ##############################################

/// CLASSES



/// ##############################################

function csImageCarousel(vsMaxNumberOfImages, vsImagesNamePrefix, vsImagesNamePostfix, vsDoubleDigitNumbering, vsHoldMaxLength, vsRandomShow, vsCarouselSetPostfix) {
	
	var vsTimeout;
	// vsMaxNumberOfImages: numero totale di immagini da mandare in rotazione.
	// vsImagesNamePrefix: es. "img/_20_ambientidilavoro".
	// vsImagesNamePostfix: es. ".jpg".
	// vsDoubleDigitNumbering: se "true" per le immagini si usa la numerazione tipo da "01" a "99" anziché "1" in poi.
	// vsHoldMaxLength: quanto viene trattenuta ferma un'immagine una volta finita la sfumata.
	// vsRandomShow: se la sequenza sarà random o sequenziale.
	// vsCarouselSetPostfix: il postfisso da aggiungere a ID e Name (es. vsImgCarouselTopA).
	var vsImgCarouselTop = "vsImgCarouselTop" + vsCarouselSetPostfix;
	var vsImgCarouselBottom = "vsImgCarouselBottom" + vsCarouselSetPostfix;
	var vsIndex = 0;
	var vsAction = 'change';
	var vsHold = 0;
	var vsTopOrBottom = 'top';
	var vsFadeVelocity = 10;
	var vsOpacity = 100;
	
	var vsImages = new Array();
	if (vsRandomShow) {
		var vsElencoInizialeProgressivo = new Array();
		for (var vsX=0; vsX < vsMaxNumberOfImages; vsX++) {
			vsElencoInizialeProgressivo[vsX] = vsX;
		}
		var vsTotaleElencoInizialeProgressivo = vsElencoInizialeProgressivo.length;
		var vsElencoFinaleRandom = new Array();
		for (var vsY=0; vsY < vsTotaleElencoInizialeProgressivo; vsY++) {
			var vsRandom = Math.floor(Math.random()*vsElencoInizialeProgressivo.length);
			vsElencoFinaleRandom[vsY] = vsElencoInizialeProgressivo[vsRandom] + 1;  // aggiunta di 1 per non avere uno "0"
			vsElencoInizialeProgressivo.splice(vsRandom, 1);
		}
		for (var vsX = 0; vsX < vsMaxNumberOfImages; vsX++) {
			var vsXX = vsElencoFinaleRandom[vsX];
			vsImages[vsX] = new Image();	
			if (vsDoubleDigitNumbering) {
				vsXX = vsXX + 100;
				vsXX = (vsXX.toString()).substr(1);
			}
			vsImages[vsX].src = vsImagesNamePrefix + vsXX + vsImagesNamePostfix;
		}
	} else {
		for (var vsX = 0; vsX < vsMaxNumberOfImages; vsX++) {
			var vsXX = vsX + 1;
			vsImages[vsX] = new Image();	
			if (vsDoubleDigitNumbering) {
				vsXX = vsXX + 100;
				vsXX = (vsXX.toString()).substr(1);
			}
			vsImages[vsX].src = vsImagesNamePrefix + vsXX + vsImagesNamePostfix;
		}
	}
	this.msDoImageCarousel = function() {
		if (vsAction == 'hold') {
			vsHold++;
			if (vsHold > vsHoldMaxLength) {
				vsAction = 'change';
			}
		}
		if (vsAction == 'change') {
			vsIndex++;
			if (vsIndex >= vsImages.length) {
				vsIndex = 0;
			}
			if (vsTopOrBottom == 'top') {
				window.document.getElementById(vsImgCarouselTop).src = vsImages[vsIndex].src;
				vsAction = 'fade';
				vsTopOrBottom = 'bottom';
				vsHold = 0;
			} else if (vsTopOrBottom == 'bottom') {
				window.document.getElementById(vsImgCarouselBottom).src = vsImages[vsIndex].src;
				vsAction = 'fade';
				vsTopOrBottom = 'top';
				vsHold = 0;
			}
		}
		if (vsAction == 'fade') {
			if (vsTopOrBottom == 'top') {
				vsOpacity = vsOpacity - vsFadeVelocity;
				if (vsIEBrowser) {  /// browser IE
					if (window.document.getElementById(vsImgCarouselTop).style.filter == "") {
						window.document.getElementById(vsImgCarouselTop).style.filter = "alpha(opacity:100)";
					}
					window.document.getElementById(vsImgCarouselTop).style.filter = "alpha(opacity:" + vsOpacity + ")";
				} else {  /// browser FF o altro
					if (window.document.getElementById(vsImgCarouselTop).style.opacity == "") {
						window.document.getElementById(vsImgCarouselTop).style.opacity = "1";
					}
					window.document.getElementById(vsImgCarouselTop).style.opacity = vsOpacity / 100;
				}
				if (parseFloat(vsOpacity) < 10) {
					vsHold = 0;
					vsAction = 'hold';
				}
			} else if (vsTopOrBottom == 'bottom') {
				vsOpacity = vsOpacity + vsFadeVelocity;
				if (vsIEBrowser) {  /// browser IE
					if (window.document.getElementById(vsImgCarouselTop).style.filter == "") {
						window.document.getElementById(vsImgCarouselTop).style.filter = "alpha(opacity:0)";
					}
					window.document.getElementById(vsImgCarouselTop).style.filter = "alpha(opacity:" + vsOpacity + ")";
				} else {  /// browser FF o altro
					if (window.document.getElementById(vsImgCarouselTop).style.opacity == "") {
						window.document.getElementById(vsImgCarouselTop).style.opacity = "0";
					}
					window.document.getElementById(vsImgCarouselTop).style.opacity = vsOpacity / 100;
				}
				if (parseFloat(vsOpacity) >= 100) {
					vsHold = 0;
					vsAction = 'hold';
				}
			}
		}
	}	

	this.msCycleImageCarousel = function() {
		var vsThisObj = this;
		window.onload = window.setInterval(function() { vsThisObj.msDoImageCarousel(); }, 100);
	}

}