// Flexagon-related code

function flexagon(divName, numOnTop, numOnBottom, topLabels, bottomLabels, topColors, bottomColors,
                  sideLen, Xorigin, Yorigin, startOnTop) {
  var jg = new jsGraphics(divName);
  var Ydelta  = Math.round(0.866025*sideLen);     // sin(60)*sideLen
  var Yhalf   = Math.round(Ydelta/2);
  var Xdelta  = sideLen / 2;                      // cos(60)*sideLen  
  var Xhalf   = Math.round(Xdelta/2);    
  var Xpoints = new Array(3);
  var Ypoints = new Array(3);
  var start;
  var end;
  var letters;
  var Xstart;

  if ( numOnTop >= numOnBottom ) { moreOnTop = true; } else { moreOnTop = false; }

  letters = topLabels;
  if ( startOnTop == true ) { Xstart=0; } else { Xstart=Xdelta; }
  for ( xx = 0; xx < numOnTop; xx++ ) {
if ( numOnTop == 0 ) { alert('here with xx='+xx+", end="+end); }
    // Draw downward pointing triangle with (Xorigin + xx*sideLen,Yorigin) as top left
    // Points go top left, then across right, then down 
    Xpoints[0] = Xorigin + xx*sideLen + Xstart;
    Xpoints[1] = Xpoints[0] + sideLen;
    Xpoints[2] = Xpoints[0] + Xdelta;
    Ypoints[0] = Yorigin;
    Ypoints[1] = Yorigin;
    Ypoints[2] = Yorigin + Ydelta;
    if ( topColors == null ) {
      jg.setColor("black");
      jg.drawPolygon(Xpoints, Ypoints);
    } else {
      jg.setColor(topColors[xx]);
      jg.fillPolygon(Xpoints, Ypoints);
      jg.setColor("black");
      jg.drawPolygon(Xpoints, Ypoints);
    }
    // Draw proper letter/number
    // POSSIBLE: jg.setColor("gray");
    jg.setColor("black");
    jg.setFont("Arial", "12pt", Font.PLAIN);
    jg.drawString(letters.substr(xx,1), Xpoints[2], Yorigin+Yhalf);
  }

  letters = bottomLabels;
  if ( startOnTop == true ) { Xstart=0; } else { Xstart=-Xdelta; }
  for ( xx = 0; xx < numOnBottom; xx++ ) {
    // Draw upward pointing triangle with (Xorigin + Xdelta + xx*sideLen,Yorigin + Ydelta) as bottom left
    // Points go bottom left, up, then down
    Xpoints[0] = Xorigin + Xdelta + xx*sideLen + Xstart;
    Xpoints[1] = Xpoints[0] + Xdelta;
    Xpoints[2] = Xpoints[0] + sideLen;
    Ypoints[0] = Yorigin + Ydelta;
    Ypoints[1] = Yorigin;
    Ypoints[2] = Yorigin + Ydelta;
    if ( bottomColors == null ) {
      jg.setColor("black");
      jg.drawPolygon(Xpoints, Ypoints);
    } else {
      jg.setColor(bottomColors[xx]);
      jg.fillPolygon(Xpoints, Ypoints);
      jg.setColor("black");
      jg.drawPolygon(Xpoints, Ypoints);
    }
    // Draw proper letter/number
    // POSSIBLE: jg.setColor("bray");
    jg.setColor("black");
    jg.setFont("Arial", "12pt", Font.PLAIN);
    jg.drawString(letters.substr(xx,1), Xpoints[1], Yorigin+Yhalf);
  }

  jg.paint();
}