layout


              function layoutLevel(level,time) {
                  if(level==currentLevel) {
                          if (bgType == 3) {
                                  bgBox.stopTime = Browser.getTime();
                                  }
                          return;
                          }
                  currentLevel = level;
  
                  var nodes = getNodesForLevel(level);
                  var block = new MFNode();
  
                  var nesting = 0;
                  var i = 0;
                  var j = 0;
                  var n = 0;
                  var x = 0.0;
                  var y = -1.0; // need proper initialize !
                  var first = 0;
                  for(i=0;i<nodes.length;i++) {
                      if(nodes[i].elementType == 'NESTING' ) {
                          nesting = nesting + nodes[i].nesting;
                          if(first==n) {
                              x = nesting;
                          }
                      } else if(nodes[i].linebreak) {
                          if(first!=n && block[first].justify[0]!='BEGIN') {
                              var delta = width - x;
                              if(block[first].justify[0]=='MIDDLE') {
                                  delta = delta / 2;
                              }
                              if(delta > 0) {
                                  for(j=first;j<n;j++) {
                                      if (!block[j].absolute) {
                                      block[j].position[0] += delta;    
  				    }
                                  }
                              }
                          }
                          //x = 0;
                          x = nesting;
                          y = y - nodes[i].height;
                          first = n;
                      } else {
                          if(x > width) {
                              x = 0;
                              y = y - block[n-1].height;
                              first = n;
                          }
                          //}
                          if (!nodes[i].absolute) {
                             nodes[i].position[0] = x; 
                             nodes[i].position[1] = y; 
                             }
                          block[n] = nodes[i];
                          n = n + 1;
                          if(block[n-1].elementType == 'TEXTELEMENT') {
                              if((x + block[n-1].width) > width) {
                                  block[n-1] = copyTextElement(block[n-1]);
                              }
                              while((x + block[n-1].width) > width) {
                                  var tail = splitLine(block[n-1],width-x);
                                  x = x + block[n-1].width;
                                  if(first!=n && block[first].justify[0]!='BEGIN') {
                                      var delta = width - x;
                                      if(block[first].justify[0]=='MIDDLE') {
                                          delta = delta / 2;
                                      }
                                      if(delta > 0) {
                                          for(j=first;j<n;j++) {
                                              block[j].position[0] += delta;    
                                          }
                                      }
                                  }
  
                                  //x = 0;
                                  x = nesting;
                                  y = y - tail.height;
                                  tail.position[0] = x; 
                                  tail.position[1] = y; 
                                  block[n] = tail;
                                  first = n;
                                  n = n + 1;
                              }
                          }
                          x = x + block[n-1].width;
                      }
                  } //?
  
                  if(first!=n && block[first].justify[0]!='BEGIN') {
                      var delta = width - x;
                      if(block[first].justify[0]=='MIDDLE') {
                          delta = delta / 2;
                      }
                      if(delta > 0) {
                          for(j=first;j<n;j++) {
                              block[j].position[0] += delta;    
                          }
                      }
                  }
  
                  groupNode.children = block;
              }
  
  
              function getNodesForLevel(level) {
                  var block = new MFNode();
                  var i = 0;
                  var n = 0;
                  for(i=0;i= level) ) {
                          if(elements[i].elementType == 'BLOCKELEMENT' ) {
                              elements[i].showLevel = level;
                              block[n]              = elements[i];
                          } else {
                              block[n] = elements[i];
                          }
                          n = n + 1;
                      }
                  }
                  return block;
              }