var mp_numbloksY=new Array(mp_numparents); //Y
mp_numbloksY[0]=1;
//koli4estvo knopok (knopki nazivauts9 "mp_button1_2"
var mp_numbuttons=new Array(mp_numparents);
mp_numbuttons[0]=2;
//napravlenie knopok
var mp_butvectorX=new Array(mp_numparents);
mp_butvectorX[0]=new Array(mp_numbuttons[0]);
mp_butvectorX[0][0]=-1.0;
mp_butvectorX[0][1]=1.0;
var mp_butvectorY=new Array(mp_numparents);
mp_butvectorY[0]=new Array(mp_numbuttons[0]);
mp_butvectorY[0][0]=0.0;
mp_butvectorY[0][1]=0.0;


mp_numbloksY[1]=1;
//koli4estvo knopok (knopki nazivauts9 "mp_button1_2"

mp_numbuttons[1]=2;
//napravlenie knopok

mp_butvectorX[1]=new Array(mp_numbuttons[1]);
mp_butvectorX[1][0]=1.0;
mp_butvectorX[1][1]=-1.0;

mp_butvectorY[1]=new Array(mp_numbuttons[1]);
mp_butvectorY[1][0]=0.0;
mp_butvectorY[1][1]=0.0;


//procent centralnoy 4asti bez dvigeni9
var mp_nomove_percent=80;
//uskorenie v pixel9h za takt
var mp_uskorenie=0.5;
//maksimalna9 skorost v piksel9h za takt (vnometelno! skorost kvadrati4no vozrastaet!)
var mp_maxspeed=20.0;

//minimalna9 skorost v piksel9h za takt (ne ostanavlivaems9)
var mp_minspeed_X=-2.0;
var mp_minspeed_Y=0;

//skorost sme6eni9 dl9 knopok
var mp_button_speed=10.0;
//varianty dvigeni9 po 2 os9m: 0 - netu, 1 - cycle, 2 - no cycle
var mp_mooving_typeX=new Array(mp_numparents);
var mp_mooving_typeY=new Array(mp_numparents);

//1
mp_mooving_typeX[0]=1;
mp_mooving_typeY[0]=0;

mp_mooving_typeX[1]=1;
mp_mooving_typeY[1]=0;

//NE TROGAT!!!!!
var i=0;
var p=0;
var xi=0;
var yi=0;
var mp_timer;

var mp_speedx=new Array(mp_numparents);
var mp_speedy=new Array(mp_numparents);
for(i=0;i<mp_numparents;i++)mp_speedx[i]=0.0;
for(i=0;i<mp_numparents;i++)mp_speedy[i]=0.0;

var mp_onbody_num=0; //nomer onbody
var mp_onbody=0; //flag togo 4to mi6a na body

//var mp_onbody=new Array(mp_numparents);
//for(i=0;i<mp_numparents;i++)mp_onbody[i]=0; //flag togo 4to mi6a na body

var mp_rx=new Array(mp_numparents);
for(i=0;i<mp_numparents;i++)mp_rx[i]=0.0; //sme6enie parenta otnositelno absoluta(okna naverno)
var mp_ry=new Array(mp_numparents);
for(i=0;i<mp_numparents;i++)mp_ry[i]=0.0; //sme6enie parenta otnositelno absoluta(okna naverno)

var mp_rx1=new Array(mp_numparents);
for(i=0;i<mp_numparents;i++)mp_rx1[i]=new Array(mp_numbloksN[i]); //sme6enie elementa
var mp_ry1=new Array(mp_numparents);
for(i=0;i<mp_numparents;i++)mp_ry1[i]=new Array(mp_numbloksN[i]); //sme6enie elementa


var mp_wx=new Array(mp_numparents);
for(i=0;i<mp_numparents;i++)mp_wx[i]=0; //width ownera
var mp_wy=new Array(mp_numparents);
for(i=0;i<mp_numparents;i++)mp_wy[i]=0; //width ownera

var mp_wx1=new Array(mp_numparents);
for(i=0;i<mp_numparents;i++)mp_wx1[i]=0; //width elementa (1, oni vse odinakovie)
var mp_wy1=new Array(mp_numparents);
for(i=0;i<mp_numparents;i++)mp_wy1[i]=0; //width elementa (1, oni vse odinakovie)


var mp_w_allx=new Array(mp_numparents);
for(i=0;i<mp_numparents;i++)mp_w_allx[i]=0; //width vsehvmeste
var mp_w_ally=new Array(mp_numparents);
for(i=0;i<mp_numparents;i++)mp_w_ally[i]=0; //width vsehvmeste


var mp_left_z=new Array(mp_numparents);
for(i=0;i<mp_numparents;i++)mp_left_z[i]=0; //koordinata granici levoi zoni skorosti
var mp_right_z=new Array(mp_numparents);
for(i=0;i<mp_numparents;i++)mp_right_z[i]=0; //koordinata granici pravoi zoni skorosti
var mp_top_z=new Array(mp_numparents);
for(i=0;i<mp_numparents;i++)mp_top_z[i]=0; //koordinata granici levoi zoni skorosti
var mp_bottom_z=new Array(mp_numparents);
for(i=0;i<mp_numparents;i++)mp_bottom_z[i]=0; //koordinata granici pravoi zoni skorosti


var mp_obj1=new Array(mp_numparents);   //ukazateli na objekti v 2d
for(i=0;i<mp_numparents;i++)
{
 mp_obj1[i]=new Array(mp_numbloksX[i]);

 for(xi=0;xi<mp_numbloksX[i];xi++)
  mp_obj1[i][xi]= new Array(mp_numbloksY[i]);
}

var mp_obj=new Array(mp_numparents);//ukazateli na parent
//var mp_la=new Array(mp_numparents);//ukazateli na left arrow
//var mp_ra=new Array(mp_numparents);//ukazateli na right arrow

var mp_button=new Array(mp_numparents);
for(i=0;i<mp_numparents;i++)mp_button[i]=new Array(mp_numbuttons[i]); //ukazateli na buttons

var mp_target_speedx=new Array(mp_numparents);
var mp_target_speedy=new Array(mp_numparents);
for(i=0;i<mp_numparents;i++)mp_target_speedx[i]=mp_minspeed_X; //skorost k kotoroy uskor9ems9
for(i=0;i<mp_numparents;i++)mp_target_speedy[i]=mp_minspeed_Y; //skorost k kotoroy uskor9ems9

var mp_leftobj=new Array(mp_numparents);//nomer stolbca left granici
var mp_rightobj=new Array(mp_numparents);//nomer stolbca right granici
var mp_topobj=new Array(mp_numparents);//nomer stroki top granici
var mp_bottomobj=new Array(mp_numparents);//nomer stroki bottom granici


var mp_target_parent_num=0; //object po kotoromu provodits9 vizov

function mp_initialize()
{



 for(p=0;p<mp_numparents;p++)
 {

  //vinimaem objecti
  mp_obj[p]=getObj("mp_parent"+p+"");

//  alert("mp_numbloksY["+p+"]="+mp_numbloksY[p]);
//  alert("mp_numbloksX["+p+"]="+mp_numbloksX[p]);
//  alert("mp_numbloksN["+p+"]="+mp_numbloksN[p]);



  i=0;
  for(yi=0;yi<mp_numbloksY[p];yi++)
  for(xi=0;xi<mp_numbloksX[p];xi++)
  {
   if(i<mp_numbloksN[p])
   {
//    alert("i= "+i+" x= "+xi+" y= "+yi);
    mp_obj1[p][xi][yi]=getObj("mp_child"+p+"_"+i);
//    alert("mp_obj1["+p+"]["+xi+"]["+yi+"].id="+mp_obj1[p][xi][yi].id);

    i++;
   }
   else
   {
//    alert("BREAK: i= "+i+" x= "+xi+" y= "+yi);

    if(yi==0&&xi<mp_numbloksX[p]-1)
      mp_numbloksX[p]=xi+1;

    if(yi<mp_numbloksY[p]-1)
      mp_numbloksY[p]=yi+1;

    break;
   }
  }


//  alert("mp_obj["+p+"].id="+mp_obj[p].id);



  for(i=0;i<mp_numbuttons[p];i++)
  {
   mp_button[p][i]=getObj("mp_button"+p+"_"+i);
  }

  mp_leftobj[p]=0;
  mp_rightobj[p]=mp_numbloksX[p]-1;
  mp_topobj[p]=0;
  mp_bottomobj[p]=mp_numbloksY[p]-1;

  //zadaem im sobiti9
  mp_obj[p].onmousemove = mp_body;
  mp_obj[p].onmouseover = mp_body;
  mp_obj[p].onmouseout = mp_body_stop;

  for(i=0;i<mp_numbuttons[p];i++)
  {
   mp_button[p][i].onmouseover=mp_move_button;
   mp_button[p][i].onmouseout=mp_stop;
  }

  //uznaem 6irinu objectov
  mp_wx[p]=mp_obj[p].clientWidth;
  mp_wy[p]=mp_obj[p].clientHeight;


  //po pervomu elementu
  mp_wx1[p]=mp_obj1[p][0][0].clientWidth;//offsetWidth?
  mp_wy1[p]=mp_obj1[p][0][0].clientHeight;


  //polna9 6irina i visota
  mp_w_allx[p]=mp_wx1[p]*mp_numbloksX[p];
  mp_w_ally[p]=mp_wy1[p]*mp_numbloksY[p];


  //zadaem cord x objectov otnositelno togo 4ego nada
  mp_rx[p]=findPosX(mp_obj[p]); //global x
  mp_ry[p]=findPosY(mp_obj[p]); //global y



  i=0;
  for(yi=0;yi<mp_numbloksY[p];yi++)
  for(xi=0;xi<mp_numbloksX[p];xi++)
  {
    mp_rx1[p][i]=mp_wx1[p]*xi;
    mp_ry1[p][i]=mp_wy1[p]*yi;
    i++;
  }


  mp_left_z[p]=Math.floor(mp_wx[p]/100*(100-mp_nomove_percent)/2);
  mp_right_z[p]=mp_wx[p]-mp_left_z[p];

  mp_top_z[p]=Math.floor(mp_wy[p]/100*(100-mp_nomove_percent)/2);
  mp_bottom_z[p]=mp_wy[p]-mp_top_z[p];


  i=0;
  for(yi=0;yi<mp_numbloksY[p];yi++)
  for(xi=0;xi<mp_numbloksX[p];xi++)
  {
   if(i<mp_numbloksN[p])
   {
    mp_obj1[p][xi][yi].style.left=Math.floor(mp_rx1[p][i]);
    mp_obj1[p][xi][yi].style.top=Math.floor(mp_ry1[p][i]);
    i++;
   }
   else
    break;
  }

  mp_target_parent_num=p;
  mp_set_move(mp_minspeed_X,mp_minspeed_Y);
 }
}

function mp_set_target_parent_num(mp_event)
{
 var tobj;
 var pid;

 tobj=mp_event.srcElement;
 if(!tobj) tobj=mp_event.target;

 pid= new String(tobj.id);

 if(pid.indexOf("mp_parent")!=-1){mp_target_parent_num=parseInt(pid.substr(9,1));return;}

 while(tobj.offsetParent)
 {
  tobj=tobj.offsetParent;
  pid= new String(tobj.id);
  if(pid.indexOf("mp_parent")!=-1){mp_target_parent_num=parseInt(pid.substr(9,1));return;}
 }

 alert('ERROR - no valid parent');
}

function mp_set_timer(sec)
{
// alert("set timer");
 mp_timer=window.setInterval("mp_control()",sec);
}

function mp_unset_timer()
{
// alert("stop timer");
 clearInterval(mp_timer);
 mp_onbody=0;
}


function mp_move_button(mp_event)
{
 var tobj;
 var pid;
 var bnum;

 if(!mp_event) var mp_event = window.event;
 tobj=mp_event.srcElement;
 if(!tobj) tobj=mp_event.target;
 pid= new String(tobj.id);

 mp_target_parent_num=parseInt(pid.substr(9,1));
 bnum=parseInt(pid.substr(11,1));

 mp_set_move(mp_button_speed*mp_butvectorX[mp_target_parent_num][bnum],mp_button_speed*mp_butvectorY[mp_target_parent_num][bnum]);
}


function mp_set_move(speedx,speedy)
{
// alert("tsx="+speedx+" tsy="+speedy);

 mp_target_speedx[mp_target_parent_num]=speedx;
 mp_target_speedy[mp_target_parent_num]=speedy;

 if(!mp_onbody)
 {
  mp_set_timer(20);
  mp_onbody=1;
 }
}
//   mp_target_parent_num


function mp_control()
{

 var delta_speedx=0.0;
 var delta_speedy=0.0;

 var need_timer=0;

 for(p=0;p<mp_numparents;p++)
 if(mp_target_speedx[p]!=0||mp_speedx[p]!=0||mp_target_speedy[p]!=0||mp_speedy[p]!=0)
 {
  need_timer=1;


  delta_speedx=mp_target_speedx[p]-mp_speedx[p];
  delta_speedy=mp_target_speedy[p]-mp_speedy[p];

  if(Math.abs(delta_speedx) <= mp_uskorenie)
   mp_speedx[p]=mp_target_speedx[p];
  else
   if(delta_speedx>0)
    mp_speedx[p]+=mp_uskorenie;
   else
    mp_speedx[p]-=mp_uskorenie;



  if(Math.abs(delta_speedy) <= mp_uskorenie)
   mp_speedy[p]=mp_target_speedy[p];
  else
   if(delta_speedy>0)
    mp_speedy[p]+=mp_uskorenie;
   else
    mp_speedy[p]-=mp_uskorenie;


// alert("sx="+mp_speedx[p]+" sy="+mp_speedy[p]);


  if(mp_mooving_typeX[p]!=0)
  {

   if(mp_mooving_typeY[p]!=0)
   {
    i=0;
    for(yi=0;yi<mp_numbloksY[p];yi++)
    for(xi=0;xi<mp_numbloksX[p];xi++)
    {
      mp_rx1[p][i]+=mp_speedx[p];
      mp_ry1[p][i]+=mp_speedy[p];
      i++;
    }
   }
   else
   {
    i=0;
    for(yi=0;yi<mp_numbloksY[p];yi++)
    for(xi=0;xi<mp_numbloksX[p];xi++)
    {
      mp_rx1[p][i]+=mp_speedx[p];
      i++;
    }
   }
  }
  else if(mp_mooving_typeY[p]!=0)
  {
   i=0;
   for(yi=0;yi<mp_numbloksY[p];yi++)
   for(xi=0;xi<mp_numbloksX[p];xi++)
   {
     mp_ry1[p][i]+=mp_speedy[p];
     i++;
   }
  }









  if(mp_mooving_typeX[p]==1)
  {
   if(mp_speedx[p]>=0)
   {
             //i=x+nx*y ~ x+nx*0
    if(mp_rx1[p][mp_leftobj[p]+0]>=0)
    {
     for(yi=0;yi<mp_numbloksY[p];yi++)
      mp_rx1[p][mp_rightobj[p]+mp_numbloksX[p]*yi]=mp_rx1[p][mp_leftobj[p]+mp_numbloksX[p]*yi]-mp_wx1[p];
     mp_leftobj[p]=mp_rightobj[p];
     mp_rightobj[p]-=1;
     if(mp_rightobj[p]<0)mp_rightobj[p]=mp_numbloksX[p]-1;
    }
   }
   else
   {
    if(mp_rx1[p][mp_leftobj[p]+0]<(-mp_wx1[p]))
    {
     for(yi=0;yi<mp_numbloksY[p];yi++)
      mp_rx1[p][mp_leftobj[p]+mp_numbloksX[p]*yi]=mp_w_allx[p]+mp_rx1[p][mp_leftobj[p]+mp_numbloksX[p]*yi];
     mp_rightobj[p]=mp_leftobj[p];
     mp_leftobj[p]+=1;
     if(mp_leftobj[p]>=mp_numbloksX[p])mp_leftobj[p]=0;
    }
   }
  }

  if(mp_mooving_typeY[p]==1)
  {
   if(mp_speedy[p]>=0)
   {
             //i=x+nx*y ~ 0+nx*y
    if(mp_ry1[p][0+mp_numbloksX[p]*mp_topobj[p]]>=0)
    {
     for(xi=0;xi<mp_numbloksX[p];xi++)
      mp_ry1[p][xi+mp_numbloksX[p]*mp_bottomobj[p]]=mp_ry1[p][xi+mp_numbloksX[p]*mp_topobj[p]]-mp_wy1[p];
     mp_topobj[p]=mp_bottomobj[p];
     mp_bottomobj[p]-=1;
     if(mp_bottomobj[p]<0)mp_bottomobj[p]=mp_numbloksY[p]-1;
    }
   }
   else
   {
    if(mp_ry1[p][0+mp_numbloksX[p]*mp_topobj[p]]<(-mp_wy1[p]))
    {
     for(xi=0;xi<mp_numbloksX[p];xi++)
      mp_ry1[p][xi+mp_numbloksX[p]*mp_topobj[p]]=mp_w_ally[p]+mp_ry1[p][xi+mp_numbloksX[p]*mp_topobj[p]];

//     mp_ry1[p][0+mp_numbloksX[p]*mp_topobj[p]]=mp_w_ally[p]+mp_ry1[p][0+mp_numbloksX[p]*mp_topobj[p]];

     mp_bottomobj[p]=mp_topobj[p];
     mp_topobj[p]+=1;
     if(mp_topobj[p]>=mp_numbloksY[p])mp_topobj[p]=0;
    }
   }
  }


  if(mp_mooving_typeX[p]==2)
  {
   if(mp_speedx[p]>0)
   {
    if(mp_rx1[p][mp_leftobj[p]]>=0) //esli 1 zaehal v plus, to upiraem
    {
     i=0;
     for(yi=0;yi<mp_numbloksY[p];yi++)
     for(xi=0;xi<mp_numbloksX[p];xi++)
     {
       mp_rx1[p][i]=mp_wx1[p]*xi;
       i++;
     }
     mp_speedx[p]=0;
     mp_target_speedx[p]=0;
    }
   }
   else
   {
    if(mp_rx1[p][mp_rightobj[p]]<=mp_wx[p]-mp_wx1[p])
    {
     i=0;
     for(yi=0;yi<mp_numbloksY[p];yi++)
     for(xi=0;xi<mp_numbloksX[p];xi++)
     {
       mp_rx1[p][i]=mp_wx[p]-mp_w_allx[p]+mp_wx1[p]*xi;
       i++;
     }
     mp_speedx[p]=0;
     mp_target_speedx[p]=0;
    }
   }
  }

  if(mp_mooving_typeY[p]==2)
  {
   if(mp_speedy[p]>0)
   {
    if(mp_ry1[p][0+mp_numbloksX[p]*mp_topobj[p]]>=0) //esli 1 zaehal v plus, to upiraem
    {
     i=0;
     for(yi=0;yi<mp_numbloksY[p];yi++)
     for(xi=0;xi<mp_numbloksX[p];xi++)
     {
       mp_ry1[p][i]=mp_wy1[p]*yi;
       i++;
     }
     mp_speedy[p]=0;
     mp_target_speedy[p]=0;
    }
   }
   else
   {
    if(mp_ry1[p][0+mp_numbloksX[p]*mp_bottomobj[p]]<=mp_wy[p]-mp_wy1[p])
    {
     i=0;
     for(yi=0;yi<mp_numbloksY[p];yi++)
     for(xi=0;xi<mp_numbloksX[p];xi++)
     {
       mp_ry1[p][i]=mp_wy[p]-mp_w_ally[p]+mp_wy1[p]*yi;
       i++;
     }
     mp_speedy[p]=0;
     mp_target_speedy[p]=0;
    }
   }
  }


  i=0;
  for(yi=0;yi<mp_numbloksY[p];yi++)
  for(xi=0;xi<mp_numbloksX[p];xi++)
  {
   if(i<mp_numbloksN[p])
   {
    mp_obj1[p][xi][yi].style.left=Math.floor(mp_rx1[p][i]);
    mp_obj1[p][xi][yi].style.top=Math.floor(mp_ry1[p][i]);
    i++;
   }
   else
    break;
  }

 }

 if(need_timer==0)mp_unset_timer();
}


function mp_body(cursor)
{

 //dostaem koord x i privodim ego v x otnositelno ma6ego parenta
 if(!cursor) var cursor = window.event;
 mp_set_target_parent_num(cursor);


 var x=0;
 var y=0;

 if(cursor.pageX)
   x=cursor.pageX;
 else if (cursor.clientX)
   x=cursor.clientX+document.body.scrollLeft;

 x-=mp_rx[mp_target_parent_num];

 if(cursor.pageY)
   y=cursor.pageY;
 else if (cursor.clientY)
   y=cursor.clientY+document.body.scrollTop;

 y-=mp_ry[mp_target_parent_num];





 if(x<=mp_left_z[mp_target_parent_num]&&x>=0)
   mp_target_speedx[mp_target_parent_num]=(mp_left_z[mp_target_parent_num]-x)/mp_left_z[mp_target_parent_num]*mp_maxspeed;
 else if(x>=mp_right_z[mp_target_parent_num]&&x<=mp_wx[mp_target_parent_num])
   mp_target_speedx[mp_target_parent_num]=(mp_right_z[mp_target_parent_num]-x)/mp_left_z[mp_target_parent_num]*mp_maxspeed;
 else
   mp_target_speedx[mp_target_parent_num]=mp_minspeed_X;

 if(y<=mp_top_z[mp_target_parent_num]&&y>=0)
   mp_target_speedy[mp_target_parent_num]=(mp_top_z[mp_target_parent_num]-y)/mp_top_z[mp_target_parent_num]*mp_maxspeed;
 else if(y>=mp_bottom_z[mp_target_parent_num]&&y<=mp_wy[mp_target_parent_num])
   mp_target_speedy[mp_target_parent_num]=(mp_bottom_z[mp_target_parent_num]-y)/mp_top_z[mp_target_parent_num]*mp_maxspeed;
 else
   mp_target_speedy[mp_target_parent_num]=mp_minspeed_Y;


// alert("sx="+mp_target_speedx[mp_target_parent_num]+"sy= "+mp_target_speedy[mp_target_parent_num]);


 mp_set_move(mp_target_speedx[mp_target_parent_num],mp_target_speedy[mp_target_parent_num]);

}

function mp_stop(cursor)
{
 var tobj;
 var pid;

 if(!mp_event) var mp_event = window.event;
 tobj=mp_event.srcElement;
 if(!tobj) tobj=mp_event.target;
 pid= new String(tobj.id);

 mp_target_parent_num=parseInt(pid.substr(9,1));

 mp_set_move(mp_minspeed_X,mp_minspeed_Y);
}


function mp_body_stop(cursor)
{
 if(!cursor) var cursor = window.event;
 mp_set_target_parent_num(cursor);

 mp_set_move(mp_minspeed_X,mp_minspeed_Y);
}



function getObj(name) {
  if (document.getElementById) return document.getElementById(name);
  else if (document.all) return document.all[name];
  else if (document.layers) return document.layers[name];
  else return false;
}


function findPosX(obj) {
  var currleft = 0;
  if (obj.offsetParent)
    while (obj.offsetParent) {
      currleft += obj.offsetLeft
      obj = obj.offsetParent;
    }
  else if (obj.x) currleft += obj.x;
  return currleft;
}


function findPosY(obj) {
  var currleft = 0;
  if (obj.offsetParent)
    while (obj.offsetParent) {
      currleft += obj.offsetTop
      obj = obj.offsetParent;
    }
  else if (obj.y) currleft += obj.y;
  return currleft;
}


//onload
try {
  window.addEventListener("load", mp_initialize, false);
} catch(e) {
  window.onload = mp_initialize;
}

