function DynamicImage(src,timing){
	this.src=src;
	this.timing=Math.round(timing/50);
}
var AlphaGallery={
	isIE:true
	,intervalLoadDynamicImages:0
	,intervalAnimDynamicImages:0
	,countAnimDynamicImages:0
	,loadedDynamicImages:{}
	,dynamicImageFadingTime:40

	,absOffset:function(a,b){
		var c=0;
		while(a){
			c+=a[b];
			a=a.offsetParent;
		}
		return c;
	}
	,setOpacity:function(d,o){
		if(AlphaGallery.isIE)d.style.filter="alpha(opacity="+Math.round(o*100)+")";
		else d.style.opacity=o;
	}
	,isImageLoaded:function(img) {
		// During the onload event, IE correctly identifies
		// any images that
		// weren?t downloaded as not complete. Others should too. Gecko-based
		// browsers act like NS4 in that they report this incorrectly.
		if(!img.complete)return false;

		// However, they do have two very useful properties:
		//naturalWidth and
		// naturalHeight. These give the true size of the image. If it failed
		// to load, either of these should be zero.
		if(typeof img.naturalWidth!="undefined"&&img.naturalWidth==0)return false;

		// No other way of checking: assume it?s ok.
		return true;
	}
	,loadDynamicImages:function(){
		if(!isWindowLoaded)return;

		// clear this interval:
		clearInterval(AlphaGallery.intervalLoadDynamicImages);
		AlphaGallery.intervalLoadDynamicImages=null;

		var top=d.getElementById("topImage");
		for(i=0;i<dynamicImages.length;i++){
			/*var j=dynamicImageIndex+i;
			if(j>=dynamicImages.length)j-=dynamicImages.length;
			var src=dynamicImages[j];*/

			var lim=d.createElement("img");
			lim.setAttribute("id","_im"+i);
			//lim.style.zIndex=10;
			//lim.setAttribute("width",160);
			//lim.setAttribute("height",160);
			//lim.style.display="none";
			top.appendChild(lim);
			AlphaGallery.setOpacity(lim,0);
		}
		// start loading first image:
		var di=dynamicImages[dynamicImageIndex];
		var src=di.src;
		lim=d.getElementById("_im"+dynamicImageIndex);
		lim.setAttribute("src",src);
		if(AlphaGallery.isImageLoaded(lim)||AlphaGallery.loadedDynamicImages["im"+dynamicImageIndex]){
			//console.log("Image is already loaded:"+lim);
			AlphaGallery.setImageLoaded(lim,dynamicImageIndex);
		}
		else eventOn(lim,"load",AlphaGallery.onDynamicImageLoad);
	}
	,onDynamicImageLoad:function(e){
		var lim=eventTarget(e);
		var id=lim.getAttribute("id").substring(1);
		var j=id.substring(2);
		AlphaGallery.setImageLoaded(lim,j);
		//alert("Loaded: "+j+": "+lim.src);
	}
	,setImageLoaded:function(lim,j){
		AlphaGallery.loadedDynamicImages["im"+j]=true;

		///lim.style.background="url('/i/1.jpg')";
		//lim.style.backgroundImage="url('"+lim.src+"') no-repeat center center";
		//lim.src="/i/e.gif";
		var f=get("topImage");
		lim.style.left=(f.offsetWidth/2-lim.offsetWidth/2) + "px";
		if(j==dynamicImageIndex){
			if(AlphaGallery.intervalAnimDynamicImages==0){
				AlphaGallery.intervalAnimDynamicImages=setInterval("AlphaGallery.animDynamicImages()",50);
				//AlphaGallery.countAnimDynamicImages++;
				///alert("First loaded: "+j+": "+lim.src);
			}
		}
		AlphaGallery.loadNextDynamicImage(j);
	}
	,loadNextDynamicImage:function(j){
		j++;
		if(j>=dynamicImages.length)j-=dynamicImages.length;
		var di=dynamicImages[j];
		var src=di.src;
		var lim=d.getElementById("_im"+j);
		//opera.postError("loadNextDynamicImage: "+j+"AlphaGallery.isImageLoaded(lim): "+AlphaGallery.isImageLoaded(lim));
		if(lim.src!=""&&(AlphaGallery.isImageLoaded(lim)||AlphaGallery.loadedDynamicImages["im"+j])){
			//opera.postError("All images are loaded!");
			//console.log("All images are loaded!");
			return;
		}
		lim.setAttribute("src",src);
		//opera.postError("Start loading next image: "+src+":"+lim);
		eventOn(lim,"load",AlphaGallery.onDynamicImageLoad);
	}
	,animDynamicImages:function(){
		if(AlphaGallery.countAnimDynamicImages<=AlphaGallery.dynamicImageFadingTime){
			// fading out:
			var a=AlphaGallery.countAnimDynamicImages/AlphaGallery.dynamicImageFadingTime;
			var lim=d.getElementById("_im"+dynamicImageIndex);
			AlphaGallery.setOpacity(lim,a);
			AlphaGallery.countAnimDynamicImages++;
		}
		else if(AlphaGallery.countAnimDynamicImages==AlphaGallery.dynamicImageFadingTime+1){
			var j=dynamicImageIndex-1;
			if(j<0)j=dynamicImages.length-1;
			var lim=d.getElementById("_im"+j);
			lim.style.display="none";
			AlphaGallery.countAnimDynamicImages++;
		}
		else if(AlphaGallery.countAnimDynamicImages<AlphaGallery.dynamicImageFadingTime+dynamicImages[dynamicImageIndex].timing){
			// waiting cycle:
			AlphaGallery.countAnimDynamicImages++;
		}
		else{
			// waiting for next image:
			var j=dynamicImageIndex+1;
			if(j>=dynamicImages.length)j-=dynamicImages.length;
			var lim=d.getElementById("_im"+j);
			if(!AlphaGallery.isImageLoaded(lim))return;
			////opera.postError("Go to next image: "+j);
			//console.log("Go to next image: "+j);
			var prev=d.getElementById("_im"+dynamicImageIndex);
			prev.style.zIndex=10;
			AlphaGallery.setOpacity(lim,0);
			lim.style.display="block";
			lim.style.zIndex=11;
			AlphaGallery.countAnimDynamicImages=0;
			dynamicImageIndex=j;
		}
	}
	,onWResize:function(){
		var f=get("topImage");
		var imgs=f.getElementsByTagName("img");
		for(var i=0;i<imgs.length;i++){
			var lim=imgs[i];
			if(AlphaGallery.isImageLoaded(lim)){
				if(lim.offsetWidth==0){
					lim.style.display="block";
					lim.style.left=(f.offsetWidth/2-lim.offsetWidth/2)+"px";
					lim.style.display="none";
				}
				else lim.style.left=(f.offsetWidth/2-lim.offsetWidth/2)+"px";
			}
		}
	}
	,init:function(){
		BrowserDetect.init();
		AlphaGallery.isIE=BrowserDetect.browser=="Explorer";

		// start loading dynamic images:
		if(d.getElementById("topImage")!=undefined){
			AlphaGallery.intervalLoadDynamicImages=setInterval("AlphaGallery.loadDynamicImages()",50);
		}

		eventOn(self,"resize",AlphaGallery.onWResize);
	}
}

