/* settings */
// параметри затухания и появления должны совпадать с запрограммированными в fade.swf
var fadeOutTime = 2000; 		// время затухания картинки
var fadeInTime = 2000;			// время появления картинки
var nextAnimationTime = 1000;	// интервал запуска анимаций
// список изображений (0.gif - прозрачное изображение, имитирующее пустую область)
var imgs = Array('2.jpg', '3.jpg', /*'4.jpg',*/ '5.jpg', '6.jpg', '7.jpg', '10.jpg', '11.jpg', /*'12.jpg', */ '13-tail.jpg', '13-top.jpg', '15.jpg', /*'16.jpg', '17.jpg',*/ '18.jpg', /*'19.jpg', '20.jpg', '21.jpg', '22.jpg', '23.jpg', '24.jpg',*/ '25.jpg', /*'26.jpg',*/ '27.jpg', '28.jpg', '29.jpg', /*'30.jpg', '31.jpg',*/ '32.jpg', '33.jpg', /*'34.jpg',*/ '35.jpg', '36.jpg', /*'37.jpg', '38.jpg', '39.jpg', '40-left.jpg', '40-right.jpg',*/ '41-left.jpg', '41-right.jpg', '42-left.jpg', '42-right.jpg', /*'43.jpg', '44.jpg',*/ '45-left.jpg', '45-right.jpg', '46-left.jpg', '46-right.jpg', '47-bottom.jpg', '47-top.jpg', '48.jpg', '49.jpg', '50.jpg', 'mosaic-1.jpg', 'mosaic-2.jpg', 'mosaic-3.jpg', 'mosaic-4-left.jpg', 'mosaic-4-right.jpg', '0.gif', '0.gif', '0.gif', '0.gif', '0.gif', '0.gif', '0.gif', '0.gif'/**/);
// зависимости изображений
var img_deps = Array(
	Array('13-tail.jpg','13-top.jpg','top'),
	Array('13-top.jpg','13-tail.jpg','bottom'),
	Array('40-left.jpg','40-right.jpg','right'),
	Array('40-right.jpg','40-left.jpg','left'),
	Array('41-left.jpg','41-right.jpg','right'),
	Array('41-right.jpg','41-left.jpg','left'),
	Array('42-left.jpg','42-right.jpg','right'),
	Array('42-right.jpg','42-left.jpg','left'),
	Array('45-left.jpg','45-right.jpg','right'),
	Array('45-right.jpg','45-left.jpg','left'),
	Array('mosaic-4-left.jpg','mosaic-4-right.jpg','right'),
	Array('mosaic-4-right.jpg','mosaic-4-left.jpg','left'),
	Array('47-top.jpg','47-bottom.jpg','bottom'),
	Array('47-bottom.jpg','47-top.jpg','top'),
	Array('46-left.jpg','46-right.jpg','right'),
	Array('46-right.jpg','46-left.jpg','left')
);
// Картинки которые не будут попадать в верхнюю полосу
var stoplist_top=Array('13-tail.jpg');
// Картинки которые не будут попадать в нижнюю область
var stoplist_bottom=Array('13-top.jpg');

/* 
	Warning! changing code below may cause heavy damage to brain
*/

var is_ie6=false; // die! die! die! I hate you!!!!!!

































/*
	i warn you! do not even try.
*/























var img_preload=Array();
for(var i=0;i<imgs.length;i++)
{
	img_preload[i] = new Image(249,75);
	img_preload[i].src='/i/mosaic/'+imgs[i];
}
var ids = Array();
var dirs = Array(
	Array('right',1),
	Array('left',-1),
	Array('top',-10),
	Array('left',10)
);

function startMosaic()
{
		if($.browser.msie && parseFloat($.browser.version) < 7)
//			alert('я нинавижу этот браузер.');
			is_ie6=true; // fuck!!!

		var i,j,r;
		for(i=0;i<imgs.length;i++){
			$('#mosaic').append('<div id="i'+i+'" style="width: 249px; height: 75px; position: absolute; top: -75px; left: -250px; background: url(\'/i/mosaic/'+imgs[i]+'\') top left white;"></div>');
			if(is_ie6)
				document.getElementById('i'+i).innerHTML='<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0" width="249" height="75" id="mov'+i+'" align="middle"><param name="allowScriptAccess" value="All" /><param name="movie" value="fade.swf" /><param name="play" value="false" /><param name="loop" value="false" /><param name="menu" value="false" /><param name="quality" value="high" /><param name="bgcolor" value="#ffffff" /><param value="transparent" name="wmode"/><embed src="fade.swf" play="false" wmode="transparent" loop="false" menu="false" quality="high" bgcolor="#ffffff" width="249" height="75" name="mov'+i+'" align="middle" allowScriptAccess="All" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" /></object>';
			ids[i]=$('#i'+i);
			ids[i].i=i;
			ids[i].img=imgs[i];
			ids[i].pos=-1;
			ids[i].bisy=false;
			ids[i].notop=false;
			for(j=0;j<stoplist_top.length;j++)
				if(imgs[i] == stoplist_top[j])
					ids[i].notop=true;
			ids[i].nobottom=false;
			for(j=0;j<stoplist_bottom.length;j++)
				if(imgs[i] == stoplist_bottom[j])
					ids[i].nobottom=true;
			if(is_ie6)
				ids[i].mov=eval('window.document.mov'+i);
		}
		$('#layout').resize(onresize).resize();
		$('#layout').css('background','none');
		setTimeout(chpic,1000);

}

$(document).ready(
	function(){
		setTimeout(startMosaic, 1000)
	}
);

function move_to(img,i){
	img.pos=i;
	img.css({
		left:get_posx(i),
		top:get_posy(i)
	});
}

function get_posx(i){
	return (i%10)*250;
}
function get_posy(i){
	if(i==-1)
		return -75;
	else
		return Math.floor(i/10)*76+139;
}

var lock=Array();
var queue=Array();
function get_randpos(filled){
	if(queue.length){
//		console.log(queue.length,queue);
//		console.log(queue.shift(),queue.length);
		return queue.shift();
	}
	var i=0;
	do{
		i=Math.floor(Math.random()*30);
	}while( i < 2 || i > 22 || ( i%10 > (document.documentElement.clientWidth > 1000?document.documentElement.clientWidth:1001 - 250) / 250 - 1) || filled && lock[i]==true);
	return i;
}

function get_img(pos){
	var i;
	for(i=0;i<imgs.length;i++){
		if(ids[i].pos==pos){
			return ids[i];
		}
	}
	return null;
}

var nextimg=Array();
function get_randimg(pos){
	var r;
	if(nextimg[pos]!=null){
		r=nextimg[pos];
		delete nextimg[pos];
		return r;
	}
	do{
		r=Math.floor(Math.random()*ids.length);
	}while(ids[r].pos != -1 || ids[r].bisy == true || pos < 12 && ids[r].notop || pos > 12 && ids[r].nobottom);
	return r;
}

function onresize(){
	var i,j,hr;
	hr=(document.documentElement.clientWidth > 1000?document.documentElement.clientWidth:1001) / 250 - 1;
	for(i=0;i<imgs.length;i++){
		if(ids[i].pos!=-1){
			if( ids[i].pos % 10 > hr){
				move_to(ids[i],-1)
			}
		}
	}
	for(i=0;i<30;i++)
	{
		if( i < 2 || i > 22 || i%10 > hr)
			continue;
		if(get_img(i)==null){
			j=get_randimg(i);
			ids[j].css('opacity',1);
			move_to(ids[j],i);
		}
	}
}

function nextpic(name,dir){
	var i,next=null;
	for(i=0;i<img_deps.length;i++)
		if(img_deps[i][0] == name && img_deps[i][2] == dir)
			next=img_deps[i][1];
	if(next!=null){
		for(i=0;i<imgs.length;i++)
			if(ids[i].img==next&& ids[i].pos == -1 && ids[i].bisy == false)
				return i;
	}
	return null;
}

function chpic(){
	var i, j, o, p, call, n, ni;
	i=get_randpos(true);
	if(get_img(i)==null){
		$('#layout').resize();
		setTimeout(chpic,nextAnimationTime);
		return;
	}
	lock[i]=true;
	get_img(i).bisy=true;
	p=get_randimg(i);
	ids[p].bisy=true;
//	здесь нужно задать что делать с серией картинок

	for(j=0;j<dirs.length;j++){
		ni = i + dirs[j][1];
		n=nextpic(ids[p].img, dirs[j][0]);
		if(n==null)
			continue;
//		console.log(get_img(i).img,i,n,ni)
//		console.log(get_img(ni),lock[ni],ids[n].bisy)
		if(get_img(ni) && lock[ni]!=true && ids[n].bisy==false){
//			ids[p].css('border','2px dotted blue');
//			ids[n].css('border','2px dotted red');
//			alert('ok');
			queue.push(ni);
			nextimg[ni] = n;
		}
	}
	call = 'restore('+i+','+get_img(i).i+','+p+')';
	if(is_ie6){
		get_img(i).mov.Rewind();
		get_img(i).mov.Play();
	}
	else
		get_img(i).fadeTo(fadeOutTime,0);
	setTimeout(call,fadeOutTime);
	setTimeout(chpic,nextAnimationTime);
}

function restore(pos,i,next){
//	alert('hello');
//	alert(pos+' '+i+' '+next);
//	ids[i].css('border','none');

	ids[i].pos=-1;
	ids[i].bisy=false;
	move_to(ids[next],pos);
	if(is_ie6){
		ids[next].mov.Play();
		ids[next].mov.GotoFrame(31);
		ids[next].mov.Play();
	}else
		ids[next].css('opacity',0).fadeTo(fadeInTime,Math.floor(Math.random()*3) * 0.2 + 0.6);
	var call;
	call='ids['+next+'].bisy=false;lock['+pos+']=false;';
	setTimeout(call,fadeInTime);
	move_to(ids[i],-1);
	
//	ids[next].mov.Play();
//	console.log(pos,i,next)
//	ids[next].css({display:'block', opacity:0}).fadeTo(fadeInTime, Math.floor(Math.random()*3) * 0.2 + 0.6);
}

