
    <!--

      var zindex = 0;
      var currDisk=null;
      var tower1=null;
      var tower2=null;
      var tower3=null;
      var tower1X=0;
      var tower1Y=0;
      var tower2X=0;
      var tower2Y=0;
      var tower3X=0;
      var tower3Y=0;
      var towerWidth=0;
      var towerHeight=0;
      var numDisks;
      var disks = new Array();
      var tower1Disks = new Array(-1,-1,-1,-1,-1,-1,-1,-1,-1,-1);
      var numTower1Disks = 0;
      var tower2Disks = new Array(-1,-1,-1,-1,-1,-1,-1,-1,-1,-1);
      var numTower2Disks = 0;
      var tower3Disks = new Array(-1,-1,-1,-1,-1,-1,-1,-1,-1,-1);
      var numTower3Disks = 0;
      var fromTowerNum=0;
      var dragState=0;
      var numMoves=0;
      var numMovesfld;

      var timerStarted=0;
      var timerID=null;
      var timer1;

      Img3= new Image(); 
      Img3.src="disk.png";
      Img4= new Image(); 
      Img4.src="diskp.png";

      function init_events()
      {
        document.onselectstart=new Function ("return false")
        document.oncontextmenu=new Function ("return false")
      }

      function init()
      {
        initTowers()

 	numDisks = document.getElementById("NumOfDisks").value;

        initDisks();

        placeDisks();

        init_events();
      }

      function rfalse() {return false;}
      function mfalse() {return false;}

      function initTowers()
      {
 	tower1 = document.getElementById("vtower1");
        tower1X=getRealLeft(tower1);
        tower1Y=getRealTop(tower1);
        tower1.height = tower1.height-80;
        towerWidth=tower1.offsetWidth;
        towerHeight=tower1.offsetHeight;

 	tower2 = document.getElementById("vtower2");
        tower2X=getRealLeft(tower2);
        tower2Y=getRealTop(tower2);

 	tower3 = document.getElementById("vtower3");
        tower3X=getRealLeft(tower3);
        tower3Y=getRealTop(tower3);
      }

      function initDisks()
      {
        var diskId;
        var i,j;

        for (i=0; i<numDisks; i++)
        {
          j=i+1;
          diskId = 'I'+j;
   	  disks[i] = document.getElementById(diskId);
   	  disks[i].style.width = 48+(i*10);
 	  disks[i].style.height = 14;
 	  disks[i].style.visibility='visible';
        }
      }

      function placeDisks() 
      {
        var j=1;
        var i;

        for (i=numDisks-1; i>=0; i--)
        {
   	  disk=disks[i];
          dWidth=parseInt(disk.style.width);
          dHeight=parseInt(disk.style.height);
          disk.style.left=tower1X-(dWidth/2)+(towerWidth/2)+'px';
          disk.style.top=tower1Y+(towerHeight-(dHeight+5)*j)+'px';
          tower1Disks[numTower1Disks++] = i+1;
          j++;
        }
      }

      window.onresize = function()
      {
        initTowers();
        redrawDisks();
      }

      /*
      function redraw() 
      {
        initTowers();
        redrawDisks();
      }
      */


      function redrawDisks()
      {
        var i;
        for (i=0; i<numTower1Disks; i++)
        {
   	  disk=disks[tower1Disks[i]-1];
          dWidth=parseInt(disk.style.width);
          dHeight=parseInt(disk.style.height);
          disk.style.left=tower1X-(dWidth/2)+(towerWidth/2)+'px';
          disk.style.top=tower1Y+(towerHeight-(dHeight+5)*(i+1))+'px';
        }
        for (i=0; i<numTower2Disks; i++)
        {
   	  disk=disks[tower2Disks[i]-1];
          dWidth=parseInt(disk.style.width);
          dHeight=parseInt(disk.style.height);
          disk.style.left=tower2X-(dWidth/2)+(towerWidth/2)+'px';
          disk.style.top=tower2Y+(towerHeight-(dHeight+5)*(i+1))+'px';
        }
        for (i=0; i<numTower3Disks; i++)
        {
   	  disk=disks[tower3Disks[i]-1];
          dWidth=parseInt(disk.style.width);
          dHeight=parseInt(disk.style.height);
          disk.style.left=tower3X-(dWidth/2)+(towerWidth/2)+'px';
          disk.style.top=tower3Y+(towerHeight-(dHeight+5)*(i+1))+'px';
        }
      }

      function moveDisk(diskNum,towerNum) 
      {
        gameEnded=0;

        disk=disks[diskNum-1];
        dWidth=parseInt(disk.style.width);
        dHeight=parseInt(disk.style.height);

        if (towerNum==1)
        {
          disk.style.left=tower1X-(dWidth/2)+(towerWidth/2)+'px';
          disk.style.top =
               tower1Y+(towerHeight-(dHeight+5)*(numTower1Disks+1))+'px';
          tower1Disks[numTower1Disks++] = diskNum;
        }
        else if (towerNum==2)
        {
          disk.style.left=tower2X-(dWidth/2)+(towerWidth/2)+'px';
          disk.style.top =
               tower2Y+(towerHeight-(dHeight+5)*(numTower2Disks+1))+'px';
          tower2Disks[numTower2Disks++] = diskNum;
        }
        else if (towerNum==3)
        {
          disk.style.left=tower3X-(dWidth/2)+(towerWidth/2)+'px';
          disk.style.top =
               tower3Y+(towerHeight-(dHeight+5)*(numTower3Disks+1))+'px';
          tower3Disks[numTower3Disks++] = diskNum;
        }

        if ( numDisks == numTower3Disks )
        {
          StopTimer();
          str = " Congratulations!! ";
          gameStat=document.getElementById("StatusId");
          gameStat.style.color = '#118811';
          gameStat.value = str;

          secFld=document.getElementById("SecId");
          str = "Seconds             ";
          secFld.value = str;
          gameEnded=1;
        }

        return gameEnded;

      }

      function towerTopNum(towerNum) 
      {
        topNum=100;

        if (towerNum==1)
        {
          if ( numTower1Disks > 0 )
          {
            topNum = tower1Disks[numTower1Disks-1];
          }
        }
        else if (towerNum==2)
        {
          if ( numTower2Disks > 0 )
          {
            topNum = tower2Disks[numTower2Disks-1];
          }
        }
        else if (towerNum==3)
        {
          if ( numTower3Disks > 0 )
          {
            topNum = tower3Disks[numTower3Disks-1];
          }
        }

        return topNum;
      }

      function getRealLeft(obj) 
      {
         xPos = obj.offsetLeft;
         tempEl = obj.offsetParent;

         while (tempEl != null) 
         {
           xPos += tempEl.offsetLeft;
           tempEl = tempEl.offsetParent;
         }

         return xPos;
      }

      function getRealTop(obj) 
      {
         yPos = obj.offsetTop;
         tempEl = obj.offsetParent;

         while (tempEl != null) 
         {
           yPos += tempEl.offsetTop;
           tempEl = tempEl.offsetParent;
         }

         return yPos;
      }

      function isMoveable(disk)
      {
        diskNum = parseInt(disk.id.charAt(1));
        towerNum = findTowerByDiskNum(diskNum);

        if ( towerNum == 1 )
        {
          if ( numTower1Disks > 0 )
          {
            if ( tower1Disks[numTower1Disks-1] == diskNum )
            {
              return true;
            }
            else
            {
              return false;
            }
          }
        }
        else if ( towerNum == 2 )
        {
          if ( numTower2Disks > 0 )
          {
            if ( tower2Disks[numTower2Disks-1] == diskNum )
            {
              return true;
            }
            else
            {
              return false;
            }
          }
        }
        else if ( towerNum == 3 )
        {
          if ( numTower3Disks > 0 )
          {
            if ( tower3Disks[numTower3Disks-1] == diskNum )
            {
              return true;
            }
            else
            {
              return false;
            }
          }
        }
      }

      function findTowerByDiskNum(diskNum)
      {
        for (i=0; i<numTower1Disks; i++)
        {
          if ( tower1Disks[i] == diskNum )
          {
            return 1;
          }
        }
        for (i=0; i<numTower2Disks; i++)
        {
          if ( tower2Disks[i] == diskNum )
          {
            return 2;
          }
        }
        for (i=0; i<numTower3Disks; i++)
        {
          if ( tower3Disks[i] == diskNum )
          {
            return 3;
          }
        }
        return 0;
      }
    
      function initDrag(disk,e)
      {
        if (dragState!=0) return;

        if (!isMoveable(disk))
        {
          return;
        }
        dragState=1;
        if (!e) e=event;
        x=e.clientX;
        y=e.clientY;
        tempx=parseInt(disk.style.left);
        tempy=parseInt(disk.style.top)
        currDisk=disk;
 	diskNum  = parseInt(disk.id.charAt(1));
        fromTowerNum = findTowerByDiskNum(diskNum);
        removeDiskFromTower(diskNum);
        document.onmousemove=dragDisk;

 	timer1 = document.getElementById("TheTime");
 	numMovesfld = document.getElementById("NumMoves");

        if ( timerStarted == 0 )
        {
          StartTimer();
          timerStarted=1;
        }
      }
    
       function StartTimer() 
       {
         tStart   = new Date();
         timerID  = setTimeout("UpdateTimer()", 1000);
       }

       function StopTimer()
       {
         if(timerID) 
         {
           clearTimeout(timerID);
           timerID  = 0;
         }
         tStart = null;
       }

       function UpdateTimer() 
       {
         if(timerID) 
         {
           clearTimeout(timerID);
         }

         if (!tStart)
         {
           tStart   = new Date();
         }
         var   tDate = new Date();
         var   tDiff = tDate.getTime() - tStart.getTime();

         tDate.setTime(tDiff);

         timer1.value = parseInt(tDiff/1000);  
         timerID = setTimeout("UpdateTimer()", 1000);
      }

      function removeDiskFromTower(diskNum)
      {
        for (i=0; i<numTower1Disks; i++)
        {
          if ( tower1Disks[i] == diskNum )
          {
            tower1Disks[i] = -1;
            numTower1Disks--;
            return;
          }
        }
        for (i=0; i<numTower2Disks; i++)
        {
          if ( tower2Disks[i] == diskNum )
          {
            tower2Disks[i] = -1;
            numTower2Disks--;
            return;
          }
        }
        for (i=0; i<numTower3Disks; i++)
        {
          if ( tower3Disks[i] == diskNum )
          {
            tower3Disks[i] = -1;
            numTower3Disks--;
            return;
          }
        }
      }
    
      function dragDisk(e)
      {
        if (!e) e=event;
        zindex++;

        var posX = tempx+e.clientX-x;
        var posY = tempy+e.clientY-y;
        currDisk.style.zIndex=zindex;
        currDisk.style.left=posX+'px';
        currDisk.style.top=posY+'px';        
      }

      function dropDisk(disk)
      {
        if (dragState!=1) return;
        document.onmousemove=StopDrag;
        xPos=getRealLeft(disk);
        yPos=getRealTop(disk);
 	diskNum  = parseInt(disk.id.charAt(1));
        towerNum = checkDrop(disk);
        if (towerNum==0)
        {
          towerNum = fromTowerNum;
        }
        else
        {
          if ( diskNum>towerTopNum(towerNum) )
          {
            towerNum = fromTowerNum;
          }
        }
        if ( towerNum != fromTowerNum )
        {
          numMoves++;
   	  numMovesfld.value = numMoves;
        }
        
        if ( moveDisk(diskNum,towerNum) )
        {
          dragState=10;
        }
        else
        {
          dragState=0;
        }
      }        

      function checkDrop(disk)
      {
        xPos=getRealLeft(disk);
        yPos=getRealTop(disk);
        xEndPos=xPos+parseInt(disk.style.width);
        yEndPos=yPos+parseInt(disk.style.height);
        diskWidth=xEndPos-xPos;
        towerNum=0;
 	diskNum  = parseInt(disk.id.charAt(1));

        if ( 
             ( 
               ( Math.abs(((xPos + xEndPos)/2) - (tower1X + (towerWidth/2))) <
                 diskWidth ) &&
               ( yPos >= tower1Y ) &&
               ( yPos <= (tower1Y + towerHeight) ) 
             ) ||
             ( 
               ( xPos >= tower1X ) &&
               ( xPos <= (tower1X + towerWidth) ) &&
               ( yPos >= tower1Y ) &&
               ( yPos <= (tower1Y + towerHeight) ) 
             ) ||
             ( 
               ( xEndPos >= tower1X ) &&
               ( xEndPos <= (tower1X + towerWidth) ) &&
               ( yEndPos >= tower1Y ) &&
               ( yEndPos <= (tower1Y + towerHeight) ) 
             ) ||
             ( 
               ( tower1X >= xPos ) &&
               ( tower1X <= xEndPos ) &&
               ( tower1Y >= yPos ) &&
               ( tower1Y <= yEndPos ) 
             ) ||
             ( 
               ( (tower1X+towerWidth) >= xPos ) &&
               ( (tower1X+towerWidth) <= xEndPos ) &&
               ( (tower1Y+towerHeight) >= yPos ) &&
               ( (tower1Y+towerHeight) <= yEndPos ) 
             ) ||
             ( 
               ( 
                 ( xPos < tower1X ) &&
                 ( xEndPos > (tower1X + towerWidth) ) 
               ) &&
               ( 
                 (
                   ( yPos >= tower1Y ) &&
                   ( yPos <= (tower1Y + towerHeight) )  
                 ) ||
                 (
                   ( yEndPos >= tower1Y ) &&
                   ( yEndPos <= (tower1Y + towerHeight) )  
                 )
               )
             ) 
           )
        {
          towerNum=1;
        }
        else if ( 
             ( 
               ( Math.abs(((xPos + xEndPos)/2) - (tower2X + (towerWidth/2))) <
                 diskWidth ) &&
               ( yPos >= tower2Y ) &&
               ( yPos <= (tower2Y + towerHeight) ) 
             ) ||
             ( 
               ( xPos >= tower2X ) &&
               ( xPos <= (tower2X + towerWidth) ) &&
               ( yPos >= tower2Y ) &&
               ( yPos <= (tower2Y + towerHeight) ) 
             ) ||
             ( 
               ( xEndPos >= tower2X ) &&
               ( xEndPos <= (tower2X + towerWidth) ) &&
               ( yEndPos >= tower2Y ) &&
               ( yEndPos <= (tower2Y + towerHeight) ) 
             ) ||
             ( 
               ( tower2X >= xPos ) &&
               ( tower2X <= xEndPos ) &&
               ( tower2Y >= yPos ) &&
               ( tower2Y <= yEndPos ) 
             ) ||
             ( 
               ( (tower2X+towerWidth) >= xPos ) &&
               ( (tower2X+towerWidth) <= xEndPos ) &&
               ( (tower2Y+towerHeight) >= yPos ) &&
               ( (tower2Y+towerHeight) <= yEndPos ) 
             ) ||
             ( 
               ( 
                 ( xPos < tower2X ) &&
                 ( xEndPos > (tower2X + towerWidth) ) 
               ) &&
               ( 
                 (
                   ( yPos >= tower2Y ) &&
                   ( yPos <= (tower2Y + towerHeight) )  
                 ) ||
                 (
                   ( yEndPos >= tower2Y ) &&
                   ( yEndPos <= (tower2Y + towerHeight) )  
                 )
               )
             ) 
           )
        {
          towerNum=2;
        }
        else if ( 
             ( 
               ( Math.abs(((xPos + xEndPos)/2) - (tower3X + (towerWidth/2))) <
                 diskWidth ) &&
               ( yPos >= tower3Y ) &&
               ( yPos <= (tower3Y + towerHeight) ) 
             ) ||
             ( 
               ( xPos >= tower3X ) &&
               ( xPos <= (tower3X + towerWidth) ) &&
               ( yPos >= tower3Y ) &&
               ( yPos <= (tower3Y + towerHeight) ) 
             ) ||
             ( 
               ( xEndPos >= tower3X ) &&
               ( xEndPos <= (tower3X + towerWidth) ) &&
               ( yEndPos >= tower3Y ) &&
               ( yEndPos <= (tower3Y + towerHeight) ) 
             ) ||
             ( 
               ( tower3X >= xPos ) &&
               ( tower3X <= xEndPos ) &&
               ( tower3Y >= yPos ) &&
               ( tower3Y <= yEndPos ) 
             ) ||
             ( 
               ( (tower3X+towerWidth) >= xPos ) &&
               ( (tower3X+towerWidth) <= xEndPos ) &&
               ( (tower3Y+towerHeight) >= yPos ) &&
               ( (tower3Y+towerHeight) <= yEndPos ) 
             ) ||
             ( 
               ( 
                 ( xPos < tower3X ) &&
                 ( xEndPos > (tower3X + towerWidth) ) 
               ) &&
               ( 
                 (
                   ( yPos >= tower3Y ) &&
                   ( yPos <= (tower3Y + towerHeight) )  
                 ) ||
                 (
                   ( yEndPos >= tower3Y ) &&
                   ( yEndPos <= (tower3Y + towerHeight) )  
                 )
               )
             ) 
           )
        {
          towerNum=3;
        }

        return towerNum;
      }        

      function StopDrag()
      {
        return false;
      }        

    //-->
 