var Cycles = new Array();

function CycleArray(StartIndex, StartImage, SubImage, BasePath, MaxErrorLength, LoadingInterval) {
	this.ImageArray = new Array();
	this.CurrentCycleImage;
	this.StartIndex=StartIndex;
	this.StartImage=StartImage;
	this.SubImage=SubImage;
	this.BasePath=BasePath;
	this.MaxErrorLength=MaxErrorLength;
	this.LoadingInterval=LoadingInterval;
	this.MaxLoadedIndex=0;
	return this;
}

function CycleImage(Index, ImageNum, ca ) {
	Cycles[ca].ImageArray[Index]=this;
	this.Index=Index;
	this.ImageNum=ImageNum;
	this.Path=Cycles[ca].BasePath + '/' + ImageNum + '_' + Cycles[ca].SubImage + '.jpg';
	this.ca=ca;
	this.Img = new Image;
	this.loaded=false;
	this.error=false;
	return this;
}

function DebugImage(OneImage) {
	alert(OneImage.Path + " Index:" + OneImage.Index + " Loaded:" + OneImage.loaded + " Error:" + OneImage.error);
}

function LoadNext(ca) {
	if (ErrorLength(Cycles[ca]) < Cycles[ca].MaxErrorLength) {
		NextCycleImage = new CycleImage(Cycles[ca].CurrentCycleImage.Index+1, Cycles[ca].CurrentCycleImage.ImageNum+1, ca);
		CycleImageLoad(NextCycleImage)
	}
}

function ErrorLoading(OneImage) {
	OneImage.error=true;
//	alert(OneImage.Path + " - Error");
	Cycles[OneImage.ca].CurrentCycleImage = OneImage;
	setTimeout("LoadNext('" + OneImage.ca + "')",Cycles[OneImage.ca].LoadingInterval);
}

function SuccessLoading(OneImage) {
	OneImage.loaded=true;
	Cycles[OneImage.ca].CurrentCycleImage = OneImage;
	Cycles[OneImage.ca].MaxLoadedIndex = OneImage.Index;
	setTimeout("LoadNext('" + OneImage.ca + "')",Cycles[OneImage.ca].LoadingInterval);
}

function CycleImageLoad(OneImage) {
	OneImage.Img.onerror=function()	{	ErrorLoading(OneImage); };
	OneImage.Img.onload=function()	{	SuccessLoading(OneImage); };
	OneImage.Img.src=OneImage.Path;
}

function ErrorLength(ca) {
	var Index=ca.CurrentCycleImage.Index;
	var Length=0;
	while (Index>0) {
		if (!ca.ImageArray[Index].error) return Length;
		Length++;
		Index--;
	}
	return Length;
}

function LoadCompleteCycle(CycleNum, StartIndex, StartImage, SubImage, BasePath, MaxErrorLength, LoadingInterval) {
	Cycles[CycleNum] = new CycleArray(StartIndex, StartImage, SubImage, BasePath, MaxErrorLength, LoadingInterval);
	var	OneCycleImage = new CycleImage(Cycles[CycleNum].StartIndex, Cycles[CycleNum].StartImage, CycleNum);
	CycleImageLoad(OneCycleImage);
}

function MaxLoaded(pair) {
	if (pair) return Math.min(Cycles[1].MaxLoadedIndex, Cycles[2].MaxLoadedIndex);
	return Cycles[1].MaxLoadedIndex;
}

function FindRandomImage(pair) {
	var timeout=0;
	var rand_no = Math.random();
	rand_no = Math.floor(rand_no * MaxLoaded(pair) + 0.5);
	while (!( (pair && Cycles[1].ImageArray[rand_no].loaded && Cycles[1].ImageArray[rand_no].loaded) || (!pair && Cycles[1].ImageArray[rand_no].loaded))) {
		rand_no = Math.random();
		rand_no = Math.floor(rand_no * MaxLoaded(pair) + 0.5);
		timeout++;
		if (timeout>100) return MaxLoaded(pair);			
	}
	return rand_no;
}

function SwapInto(Cycle, PicIndex, DIVID1, DIVID2, PICID1, PICID2, Interval) {
	var div_from = DIVID1;
    var div_to = DIVID2;
	var pic_set = document.getElementById(PICID2);
	if (document.getElementById(div_from).style.opacity == 0) {
		var div_swap = div_from;
		div_from=div_to;
		div_to=div_swap;
		pic_set = document.getElementById(PICID1);
	}
	if (Cycles[Cycle].ImageArray[PicIndex].loaded) {
	    changeOpac(0, div_to, false);
		document.getElementById(div_from).style.zIndex=0;
		document.getElementById(div_to).style.zIndex=1;
		pic_set.src = Cycles[Cycle].ImageArray[PicIndex].Path;
//		opacity(div_from, 100, 0, Interval, false);
		setTimeout("changeOpac(0, '" + div_from + "', false)", Interval);
		opacity(div_to, 0, 100, Interval, false);
	}
	
}

function CycleImages(FirstWait, DIVID1, DIVID2, PICID1, PICID2, bwWait, bwTransOut, colorWait, transOut, ColorIndex) {
	if (FirstWait > 0) {
		setTimeout("CycleImages(0, '" + DIVID1 + "', '" + DIVID2 + "', '" + PICID1 + "', '" + PICID2 + "', '" + bwWait + "', '" + bwTransOut + "', '" + colorWait + "', '" + transOut + "', '" + ColorIndex + "')", FirstWait )
		return;
	}
	var nextImage = ColorIndex;
	if (colorWait > 0) {
		SwapInto(2, ColorIndex, DIVID1, DIVID2, PICID1, PICID2, bwTransOut);
		while (nextImage == ColorIndex) nextImage=FindRandomImage(true);
	}
	else {
		nextImage=FindRandomImage(false);
	}
	var nextBWWait = parseInt(transOut) + parseInt(colorWait);
	var totalWait = parseInt(bwWait) + parseInt(bwTransOut) + nextBWWait;
	setTimeout("SwapInto(1, '" + nextImage + "', '" + DIVID1 + "', '" + DIVID2 + "', '" + PICID1 + "', '" + PICID2 + "', '" + transOut + "')", nextBWWait);
	setTimeout("CycleImages(0, '" + DIVID1 + "', '" + DIVID2 + "', '" + PICID1 + "', '" + PICID2 + "', '" + bwWait + "', '" + bwTransOut + "', '" + colorWait + "', '" + transOut + "', '" + nextImage + "')", totalWait);
}

function LoadAllCycleImages() {
	LoadCompleteCycle(1, 0, 13, 1, "images/product/cycle", 2, 100);
	LoadCompleteCycle(2, 0, 13, 1, "images/product/InLocLarge", 2, 100);
}
