var hnum=0;
var onum=0;
var moving=0;
var head=new Array;
var angle=new Array;
var dird=new Array;
var diru=new Array;
var spec="nothing";
var spechead=0;
var selected=0;
var bkup=0;
var majorH=30;
var minorH=20;

function header(n, nu)
{
	this.name=n;
	this.numb=nu;
	hnum++;
	onum+=nu;
}

function endtag()
{
	this.numb=0;
}

function clear() {for (i=0; i<(hnum+onum); i++) angle[i]=0;}

function scrollTo(layerName,left,top)
{
	if (type=="NN") eval("document."+layerName+".top="+top);
	if (type=="IE") eval(layerName+".style.posTop="+top);
	if (type=="NN") eval("document."+layerName+".left="+left);
	if (type=="IE") eval(layerName+".style.posLeft="+left);
}

function move(name,number,srcleft,srctop,destleft,desttop)
{
	var lft,tp;

	lft=(destleft-srcleft)*((1-Math.cos(angle[number]*3.141592/90))/2);
	tp=(desttop-srctop)*((1-Math.cos(angle[number]*3.141592/90))/2);
	angle[number]+=6;
	scrollTo(name,srcleft+lft,srctop+tp);
	if (angle[number]<=90) {timer=setTimeout("move(\""+name+"\","+number+","+srcleft+","+srctop+","+destleft+","+desttop+")",50);}
	else {moving--;angle[number]=0;
	if (moving==0)
	{
		if (spec=="mvopts") mvopts(spechead);
		if (spec=="mvheads") {bkup=spechead;spec="nothing";cl(13);}
		if (spec=="cl") {spec="mvopts";cl(spechead);}
	}
}
}

function start()
{
	head[0]=new header("A",1);
	head[1]=new header("B",9);
	head[2]=new header("C",3);
	head[3]=new header("D",1);
	head[13]=new endtag();
	clear();

	for (i=0; i<hnum; i++) {moving++;timer=setTimeout("move(\""+head[i].name+"\","+i+","+(-160)+","+(50+(i*majorH*2))+","+(10)+","+(10+(i*majorH))+")",i*300);}
}



function hit(number)

{

if (moving==0)

{

if (spec=="nothing")

{

bkup=13;

spec="mvopts";

spechead=number;

cl(number);

if (hnum-1-number==0) mvopts(spechead);

}

else if (spec=="select" && selected==number)

{

var opn=head[number].numb/2;

for (i=0; i<head[number].numb; i++) {moving++;timer=setTimeout("move(\""+head[number].name+i+"\","+i+","+(10)+","+(10+majorH+(number*majorH)+(i*minorH))+","+(-160)+","+(10+majorH+(number*majorH)+(majorH*(0.5+i-opn))+(i*minorH))+")",i*300);};

spec="mvheads";

spechead=number;

}

else if (spec=="select" && selected!=number)

{

var opn=head[selected].numb/2;

for (i=0; i<head[selected].numb; i++) {moving++;timer=setTimeout("move(\""+head[selected].name+i+"\","+i+","+(10)+","+(10+majorH+(selected*majorH)+(i*minorH))+","+(-160)+","+(10+majorH+(selected*majorH)+(majorH*(0.5+i-opn))+(i*minorH))+")",i*300);};

spec="cl";

spechead=number;

bkup=selected;

}

}

}



function cl(number)

{

var start=new Array;

var end=new Array;

var up=0,down=0,start,end;

for (i=1; i<hnum; i++) {

start[i]=(10+(i*majorH));

if (i>bkup) {start[i]+=head[bkup].numb*minorH}

end[i]=(10+(i*majorH));

if (i>number) {end[i]+=head[number].numb*minorH}

if (start[i]<end[i]) {dird[down]=i;down++;}

else if (end[i]<start[i]) {diru[up]=i;up++;}

}

for (i=0; i<down; i++)

{

moving++;timer=setTimeout("move(\""+head[dird[i]].name+"\","+dird[i]+","+(10)+","+start[dird[i]]+","+(10)+","+end[dird[i]]+")",(down-i)*300);

}

for (i=0; i<up; i++)

{

moving++;timer=setTimeout("move(\""+head[diru[i]].name+"\","+diru[i]+","+(10)+","+start[diru[i]]+","+(10)+","+end[diru[i]]+")",i*300);

}

}



function mvopts(number)

{

var opn=head[number].numb/2;

for (i=0; i<head[number].numb; i++) {moving++;timer=setTimeout("move(\""+head[number].name+i+"\","+i+","+(-160)+","+(10+majorH+(number*majorH)+(majorH*(0.5+i-opn))+(i*minorH))+","+(10)+","+(10+majorH+(number*majorH)+(i*minorH))+")",i*300);};

spec="select";

selected=number;

}
