var size=15;
objActive = new Array(size);
stat=new Array(size);
TimerID=new Array(size);
poz=new Array(size);
RedP=0;
GreenP=141;
BlueP=220;
RedK=229;
GreenK=38;
BlueK=28;
RedB=255;
GreenB=100;
BlueB=100;


for(x=1;x<=size;x++)
{
    stat[x]=0;
    poz[x]=0;
}

function doRainbow(obj,nr)
{
    if(!stat[nr])
    {
	objActive[nr]=obj;
	txt="ChangeColor("+nr+")";
	TimerID[nr]=setInterval(txt,30);
    }
    stat[nr]=1;
}

function stopRainbow(nr)
{
    if(!stat[nr])
    {
	txt="ChangeColor("+nr+")";
	TimerID[nr]=setInterval(txt,30);
    }
    stat[nr]=-1;
}

function ChangeColor(nr)
{
    objActive[nr].style.background=makeColor(nr);
}

function makeColor(nr)
{
 if(stat[nr]==-1)
 {
  poz[nr]-=1;
  if(poz[nr]<0)
  {
   stat[nr]=0;
   clearInterval(TimerID[nr]);
   poz[nr]=0;
  }
 }else
 if(stat[nr]==1)
 {
  poz[nr]+=10;
  if(poz[nr]>200)
  {
   poz[nr]=200;
   stat[nr]=2;
  }
 }else
 {
  poz[nr]-=10;
  if(poz[nr]<100)
  {
   poz[nr]=100;
   stat[nr]=1;
  }
 }
 if(poz[nr]>100)
 {
  elmR=Math.floor(RedK+(poz[nr]-100)*(RedB-RedK)/100).toString(16);
  elmG=Math.floor(GreenK+(poz[nr]-100)*(GreenB-GreenK)/100).toString(16);
  elmB=Math.floor(BlueK+(poz[nr]-100)*(BlueB-BlueK)/100).toString(16);
 }else
 {
  elmR=Math.floor(RedP+poz[nr]*(RedK-RedP)/100).toString(16);
  elmG=Math.floor(GreenP+poz[nr]*(GreenK-GreenP)/100).toString(16);
  elmB=Math.floor(BlueP+poz[nr]*(BlueK-BlueP)/100).toString(16);
 }
 if(elmR.length==1) elmR="0"+elmR;
 if(elmB.length==1) elmB="0"+elmB;
 if(elmG.length==1) elmG="0"+elmG;
 return '#'+elmR+elmG+elmB;
}
