function RandomImageChanger(){
	
	var container = '';
	var variableImages = new Array();
	var displayedImages = new Array();
	var notDisplayedImages = new Array();
	var imageHolders = new Array();

    this.init = function(){	
    	
    	container = dojo.byId('imageBoxes');
    	
    	if(container) {
				imageHolders = dojo.query('#imageBoxes div > img');
    	}
    
    	//preset Arrays, initiate first pictures 
    	for (var  i  = 0;  i<variableImages.length;  i++)  {
    		if(i < imageHolders.length) {
    			imageHolders[i].src = variableImages[i].image.src;
    			displayedImages.push(variableImages[i]);
    		}
    		else {
    			notDisplayedImages.push(variableImages[i]);
    		}
    	}
    	
    	//console.log(displayedImages);
    	//console.log(notDisplayedImages);
    	

    	window.setTimeout("randomImageChanger.changeRandomImage()", 1000);
    	window.setTimeout("randomImageChanger.changeRandomImage()", 2000);
    	window.setTimeout("randomImageChanger.changeRandomImage()", 3000);

    }
    this.setVariableImages = function(variableImagesArray) {
    	variableImages = variableImagesArray;
    }
    
    this.changeRandomImage= function(variableImagesArray) {
    	// get RandomHolder
    	currentHolder = imageHolders[self.randomNumber(0,imageHolders.length-1)]
    	self.alphaToZero(currentHolder);
    	
    	

    	//console.log(currentHolder);
    	
    }
    
    this.alphaToZero = function(element) {
    	if(element) {
	    	var alphaToZero = dojo.animateProperty({
		            node: element,
		            duration: 2000,
					easing: dojo.fx.easing.quadInOut,
		            properties: {
						opacity: {
		                    end: 0
		                }
		            },
					onEnd: function(){
		            	randomImageChanger.switchImages(element)
		    		}
		        });
				
			alphaToZero.play();
    	}
    }
    
    this.alphaToOne = function(element) {
    	if(element) {
	    	var alphaToOne = dojo.animateProperty({
		            node: element,
		            duration: 2000,
					easing: dojo.fx.easing.quadInOut,
		            properties: {
						opacity: {
		                    end: 1
		                }
		            },
					onEnd: function(){
		            	window.setTimeout("randomImageChanger.changeRandomImage()", 100);
		    		}
		        });
				
	    	alphaToOne.play();
    	}
    }
    
    this.switchImages = function(element) {
    	
    	// find current image
    	var currentDisplayedKey = 0;
    	var currentDisplayed = new Object;
    		
    	for(i=0; i < displayedImages.length; i++) {
    		if(displayedImages[i].image.src == element.src) {
    			currentDisplayed = displayedImages[i];
    			currentDisplayedKey = i;
    		}
    	}
    	
    	// find new image
    	var newDisplayedKey = self.randomNumber(0,notDisplayedImages.length-1);
    	var newDisplayed = notDisplayedImages[newDisplayedKey];
    	
    	// set new src
    	element.src = newDisplayed.image.src;
    	
    	// switch both
    	displayedImages[currentDisplayedKey] = newDisplayed;
    	notDisplayedImages[newDisplayedKey] = currentDisplayed;
    	
    	self.alphaToOne(element);

    }
    
    this.randomNumber = function(min, max) {
    	var rand = min + Math.floor(Math.random()*(max - min + 1));
    	
    	return rand;
    }
    
    
    var self = this;
}

var randomImageChanger = new RandomImageChanger();


dojo.addOnLoad(function(){
	randomImageChanger.init();
});


