/* 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', '18.jpg', '27.jpg', '42.jpg', '43.jpg', '44-left.jpg', '44-right.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', '100.jpg', '101.jpg', '102.jpg', '103.jpg', '104.jpg', '105.jpg', '106.jpg', '107.jpg', '108.jpg', '109.jpg', '110.jpg', '111.jpg', '112.jpg', '113.jpg', '114.jpg', '115.jpg', '116.jpg', '117.jpg', '118.jpg', '119.jpg', '120.jpg', '121.jpg', '122.jpg', '123.jpg', '125.jpg', '126.jpg', '127.jpg', '128.jpg', '129.jpg', '130.jpg', '131.jpg', '132.jpg', '134.jpg', '135.jpg', '136.jpg', '137.jpg', '139.jpg', '141.jpg', '142.jpg', '143.jpg', '144-top.jpg', '144-bottom.jpg', '145.jpg', '146.jpg', '147.jpg', '148.jpg', '149.jpg', '150.jpg', '151-tail.jpg', '151-top.jpg', '152-left.jpg', '152-right.jpg', '153-left.jpg', '153-right.jpg', '154-tail.jpg', '154-top.jpg', '155-tail.jpg', '155-top.jpg', '0.gif', '0.gif', '0.gif', '0.gif', '0.gif', '0.gif', '0.gif', '0.gif'/**/);









// ����������� �����������

var img_deps = Array(
	Array('151-tail.jpg','151-top.jpg','top'),
	Array('151-top.jpg','151-tail.jpg','bottom'),
	
	
	Array('152-left.jpg','152-right.jpg','right'),
	Array('152-right.jpg','152-left.jpg','left'),
	
	Array('153-left.jpg','153-right.jpg','right'),
	Array('153-right.jpg','153-left.jpg','left'),
	
	Array('154-tail.jpg','154-top.jpg','top'),
	Array('154-top.jpg','154-tail.jpg','bottom'),
	
	Array('155-tail.jpg','155-top.jpg','top'),
	Array('155-top.jpg','155-tail.jpg','bottom'),

Array('44-left.jpg','44-right.jpg','right'),
	Array('44-right.jpg','44-left.jpg','left'),

Array('45-left.jpg','45-right.jpg','right'),
	Array('45-right.jpg','45-left.jpg','left'),

Array('46-left.jpg','46-right.jpg','right'),
	Array('46-right.jpg','46-left.jpg','left'),
	
Array('47-top.jpg','47-bottom.jpg','bottom'),
	Array('47-bottom.jpg','47-top.jpg','top'),
	
	Array('144-top.jpg','144-bottom.jpg','bottom'),
	Array('144-bottom.jpg','144-top.jpg','top')
);
// �������� ������� �� ����� �������� � ������� ������
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='/images/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(\'/images/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();
		setTimeout(chpic,1000);

}

$(document).ready(
	function(){
		$('#layout').css('background','none');
	
		setTimeout(startMosaic, 1000);
	}
);

function move_to(img,i){
	img.pos=i;
	if(i == 2)
	{
		return false;
	}
	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);
}


