var imageAddict={
	/*rows displayed*/
	rows:4,
	/*columns*/
	cols:6,
	/*matrix of jquery references to images displayed in position*/
	matrix:[],
	/*matrix of what is happening at the current position :: 1-anim, 0-none */
	actionMatrix:[],
	/*array of available images - handles the state of the image :: 0-hidden, 1-visible, 2-animated*/
	imageArray:[],
	iWidth:162,
	iHeight:110,
	test:function(){
		//alert(imageAddict.matrix[0][0]+' '+imageAddict.matrix[0][2]+' '+imageAddict.matrix[1][1]);
		imageAddict.fadeIn(0,2);
	},
	getPos:function(i,j){
		return [j*imageAddict.iWidth,i*imageAddict.iHeight];
	},
	init:function(){
		var i,j,imgLength;
		imgLength=$('#imgAddict img').length;
		for(i=0;i<imgLength;i++){
			imageAddict.imageArray[i]=0;
		}
		for(i=0;i<imageAddict.rows;i++){
			imageAddict.matrix[i]=[];
			imageAddict.actionMatrix[i]=[];
			for(j=0;j<imageAddict.cols;j++){
				imageAddict.matrix[i][j]=null;
				imageAddict.actionMatrix[i][j]=1;
				setTimeout('imageAddict.fadeIn('+i+','+j+');',(i+j)*100);
			}
		}
		
		setTimeout('imageAddict.changeImage()',3000);
		setTimeout('imageAddict.changeImage()',3200);
		setTimeout('imageAddict.changeImage()',3400);
	},
	changeImage:function(){
		//select a position
		var i,j,roundOnce;
		i=Math.floor(Math.random()*imageAddict.rows);
		j=Math.floor(Math.random()*imageAddict.cols);
		roundOnce=0;
		while(imageAddict.actionMatrix[i][j]!=0){
			j++;
			if(j==imageAddict.cols){
				j=0;i++;
				if(i==imageAddict.rows){
					if(!roundOnce){
						i=0;
						roundOnce=1;
					}else{
						//TODO: make a setTimeout to changeImage?
						return false;
					}
				}
			}
		}
		//call a hider method
		setTimeout(imageAddict.getHider(i,j),10);
		setTimeout(imageAddict.getShower(i,j),5);
		setTimeout('imageAddict.changeImage()',4000);
	},
	getRandomImage:function(visible){
		var randIdx=Math.floor(Math.random()*imageAddict.imageArray.length);
		var i=randIdx;
		var visValue=visible?1:0;
		do{
			if(i==17 || i==23){
				i++;
			}
			if(imageAddict.imageArray[i]==visValue){
				/* set a flag that image is used */
				imageAddict.imageArray[i]=2;
				return $('#imgAddict .img:eq('+i+')');
			}
			i++;
			if(i==imageAddict.imageArray.length) i=0;
		}while(randIdx!=i);
		return false;
	},
	showReady:function(i,j,$img){
		var idx=$('#imgAddict .img').index($img);
		imageAddict.imageArray[idx]=1;
		imageAddict.matrix[i][j]=$img;
		//prevent bottom corner
		if((i==2 || i==3) && j==5){
			imageAddict.actionMatrix[i][j]=1;
		}else{
			imageAddict.actionMatrix[i][j]=0;
		}
	},
	/* performs actions when a matrix element is hided */
	hideReady:function(i,j,$img){
		var idx=$('#imgAddict .img').index($img);
		//set the image to hidden
		imageAddict.imageArray[idx]=0;
		//call a shower method for curr pos
		//setTimeout(imageAddict.getShower(i,j),10);
	},
	getHider:function(i,j){
		var methods=[];
		methods[0]='imageAddict.fadeOut('+i+','+j+')';
		//methods[1]='imageAddict.slideUp('+i+','+j+')';
		
		
		imageAddict.actionMatrix[i][j]=1;
		var idx=Math.floor(Math.random()*methods.length);
		return methods[idx];
	},
	getShower:function(i,j){
		var methods=[];
		//methods[0]='imageAddict.fadeIn('+i+','+j+')';
		//methods[1]='imageAddict.slideDown('+i+','+j+')';
		methods[0]='imageAddict.fromLeft('+i+','+j+')';
		var idx=Math.floor(Math.random()*methods.length);
		return methods[idx];
	},
	/*************************************
	 *     FUNCTIONS TO SHOW IMAGES 
	 *************************************/
	fadeIn:function(i,j){
		var pos,$img;
		if((i==2 && j==5) || (i==3 && j==5)){
			$img=$('#imgAddict .img:eq('+(i*6+j)+')');
		}else{
			$img=imageAddict.getRandomImage(false);
		}
		
		pos=imageAddict.getPos(i,j);
		
		$img.css('left',pos[0]);
		$img.css('top',pos[1]);
		$img.fadeIn(500,function(){imageAddict.showReady(i,j,$img);});
		
	},
	slideDown:function(i,j){
		var pos;
		var $img=imageAddict.getRandomImage(false);
		pos=imageAddict.getPos(i,j);
		
		$img.css('left',pos[0]);
		$img.css('top',pos[1]);
		$img.slideDown(500,function(){imageAddict.showReady(i,j,$img);});
	},
	fromLeft:function(i,j){
		var pos,posStart;
		var $img=imageAddict.getRandomImage(false);
		posStart=imageAddict.getPos(i,j-1);
		pos=imageAddict.getPos(i,j);
		
		$img.css('left',posStart[0]);
		$img.css('top',posStart[1]);
		$img.css('zIndex',1);
		$img.show();
		$img.animate({
			left:pos[0],
			top:pos[1]
		},500,function(){$img.css('zIndex',2);imageAddict.showReady(i,j,$img);});
	},
	/*************************************
	 *     FUNCTIONS TO HIDE IMAGES 
	 *************************************/
	fadeOut:function(i,j){
		var $img=imageAddict.matrix[i][j];
		$img.fadeOut(500,function(){imageAddict.hideReady(i, j, $img)});
	},
	slideUp:function(i,j){
		var $img=imageAddict.matrix[i][j];
		$img.slideUp(500,function(){imageAddict.hideReady(i, j, $img)});
	}
};
$(window).load(function () {
   imageAddict.init();
});
