/*
To do Rhodes' enzyme kinetics, single substrate, uncompetitive inhibition, Eadie-Hofstee plot
Modified - 07/2000 DR
*/

import java.awt.*;
import java.applet.Applet;

public class model extends Applet
{
float  Km1, Km2, Km3, Km4, Km5;
float Vmax1, Vmax2, Vmax3, Vmax4, Vmax5;
TextField  textMX1, textMY1, textMX2, textMY2, textSA1, textSA2, textSA3, textSA4, textSA5,  textV11, textV12, textV13, textV14, textV15, textV21, textV22, textV23, textV24, textV25, textV31, textV32, textV33, textV34, textV35,  textV41, textV42, textV43, textV44, textV45, textV51, textV52, textV53, textV54, textV55;
Label      endXAxis1, endXAxis2;
Label      endYAxis1, endYAxis2;
Label      startXAxis1, startXAxis2;
Label      startYAxis1, startYAxis2;
Label      gLabel1, gLabel2;
Label      xLabel1, xLabel2, yLabel1, yLabel2; 
Label     labelV11, labelV12, labelV13, labelV14, labelV15;
Label     labelV21, labelV22, labelV23, labelV24, labelV25;
Label     labelV31, labelV32, labelV33, labelV34, labelV35;
Label     labelV41, labelV42, labelV43, labelV44, labelV45;
Label     labelV51, labelV52, labelV53, labelV54, labelV55;
Label     labelSA1, labelSA2, labelSA3, labelSA4, labelSA5;
Label     labelMX1, labelMX2, labelMY1, labelMY2;
Label     labelSB1, labelSB2, labelSB3, labelSB4, labelSB5;
Button     bDoGraph;
Graph		leftGraph, rightGraph;
static final int GraphSize = 200;


public void init() {

// Arrange the user interface using a gridbag.
GridBagConstraints gbc;
GridBagLayout  gb;
gb = new GridBagLayout();
setLayout(gb); // set the layout for the whole applet

// add the data entry fields
Label labelSA1 = new Label("SA1:");
textSA1 = new TextField("1.000", 4);
Label labelSA2 = new Label("SA2:");
textSA2 = new TextField("0.500", 4);
Label labelSA3 = new Label("SA3:");
textSA3 = new TextField("0.200", 4);
Label labelSA4 = new Label("SA4:");
textSA4 = new TextField("0.100", 4);
Label labelSA5 = new Label("SA5:");
textSA5 = new TextField("0.050", 4);

Label labelV11 = new Label("V11:");
textV11 = new TextField("23.50", 4);
Label labelV12 = new Label("V12:");
textV12 = new TextField("21.50", 4);
Label labelV13 = new Label("V13:");
textV13 = new TextField("16.50", 4);
Label labelV14 = new Label("V14:");
textV14 = new TextField("12.00", 4);
Label labelV15 = new Label("V15:");
textV15 = new TextField("8.00", 4);

Label labelV21 = new Label("V21:");
textV21 = new TextField("17.80", 4);
Label labelV22 = new Label("V22:");
textV22 = new TextField("15.80", 4);
Label labelV23 = new Label("V23:");
textV23 = new TextField("12.00", 4);
Label labelV24 = new Label("V24:");
textV24 = new TextField("8.00", 4);
Label labelV25 = new Label("V25:");
textV25 = new TextField("5.40", 4);

Label labelV31 = new Label("V31:");
textV31 = new TextField("12.00", 4);
Label labelV32 = new Label("V32:");
textV32 = new TextField("10.50", 4);
Label labelV33 = new Label("V33:");
textV33 = new TextField("8.00", 4);
Label labelV34 = new Label("V34:");
textV34 = new TextField("5.50", 4);
Label labelV35 = new Label("V35:");
textV35 = new TextField("3.40", 4);

Label labelV41 = new Label("V41:");
textV41 = new TextField("8.50", 4);
Label labelV42 = new Label("V42:");
textV42 = new TextField("7.00", 4);
Label labelV43 = new Label("V43:");
textV43 = new TextField("5.00", 4);
Label labelV44 = new Label("V44:");
textV44 = new TextField("3.30", 4);
Label labelV45 = new Label("V45:");
textV45 = new TextField("2.10", 4);

Label labelV51 = new Label("V51:");
textV51 = new TextField("6.00", 4);
Label labelV52 = new Label("V52:");
textV52 = new TextField("5.00", 4);
Label labelV53 = new Label("V53:");
textV53 = new TextField("3.50", 4);
Label labelV54 = new Label("V54:");
textV54 = new TextField("2.30", 4);
Label labelV55 = new Label("V55:");
textV55 = new TextField("1.40", 4);

Label labelMX1 = new Label("MX1:");
textMX1 = new TextField("1.200", 4);
Label labelMY1 = new Label("MY1:");
textMY1 = new TextField("30.00", 4);
Label labelMX2 = new Label("MX2:");
textMX2 = new TextField("30.00", 4);
Label labelMY2 = new Label("MY2:");
textMY2 = new TextField("200.0", 4);
Label labelSB1 = new Label("SB1");
Label labelSB2 = new Label("SB2");
Label labelSB3 = new Label("SB3");
Label labelSB4 = new Label("SB4");
Label labelSB5 = new Label("SB5");

Label gLabel1 = new Label("V versus [SA]");
Label xLabel1 = new Label("[SA]");
Label yLabel1 = new Label("V");
Label startXAxis1 = new Label ("0");
Label startYAxis1 = new Label ("0");
endXAxis1 = new Label (textMX1.getText());
endYAxis1 = new Label (textMY1.getText());
leftGraph = new Graph(GraphSize, GraphSize);
leftGraph.graphImage = blankGraph(GraphSize, GraphSize);
bDoGraph = new Button ("Start");
Label gLabel2 = new Label("V/[SA] versus V");
Label xLabel2 = new Label("V");
Label yLabel2 = new Label("V/[SA]");
Label startXAxis2 = new Label ("0");
Label startYAxis2 = new Label ("0");
endXAxis2 = new Label (textMX2.getText());
endYAxis2 = new Label (textMY2.getText());
rightGraph = new Graph(GraphSize, GraphSize);
rightGraph.graphImage = blankGraph(GraphSize, GraphSize);

gbc = new GridBagConstraints();
gbc.gridx = gbc.gridy = 0;
gb.setConstraints(labelSA1,  gbc);
add(labelSA1);
gbc.gridy = 1;
gb.setConstraints(labelSA2,  gbc);
add(labelSA2);
gbc.gridy = 2;
gb.setConstraints(labelSA3,  gbc);
add(labelSA3);
gbc.gridy = 3;
gb.setConstraints(labelSA4,  gbc);
add(labelSA4);
gbc.gridy = 4;
gb.setConstraints(labelSA5,  gbc);
add(labelSA5);

gbc.gridy = 9;
gbc.anchor = GridBagConstraints.NORTHEAST;
gb.setConstraints(endYAxis1,  gbc);
add(endYAxis1);
gbc.gridy = 11;
gbc.anchor = GridBagConstraints.CENTER;
gbc.gridheight = 3;
gb.setConstraints(yLabel1,  gbc);
add(yLabel1);
gbc.gridy = 13;
gbc.gridheight = 1;
gbc.anchor = GridBagConstraints.SOUTHEAST;
gb.setConstraints(startYAxis1,  gbc);
add(startYAxis1);

gbc = new GridBagConstraints();
gbc.gridx = 1;
gbc.gridy = 0;
gb.setConstraints(textSA1,  gbc);
add(textSA1);
gbc.gridy = 1;
gb.setConstraints(textSA2,  gbc);
add(textSA2);
gbc.gridy = 2;
gb.setConstraints(textSA3,  gbc);
add(textSA3);
gbc.gridy = 3;
gb.setConstraints(textSA4,  gbc);
add(textSA4);
gbc.gridy = 4;
gb.setConstraints(textSA5,  gbc);
add(textSA5);

gbc.gridy = 8;
gbc.gridwidth = 5;
gb.setConstraints(gLabel1,  gbc);
add(gLabel1);
gbc.gridy = 9;
gbc.gridheight = 5;
gb.setConstraints(leftGraph,  gbc);
add(leftGraph);
gbc.gridy = 14;
gbc.gridwidth = 1;
gbc.gridheight = 1;
gbc.anchor = GridBagConstraints.NORTHWEST;
gb.setConstraints(startXAxis1,  gbc);
add(startXAxis1);

gbc = new GridBagConstraints();
gbc.gridx = 2;
gbc.gridy = 0;
gb.setConstraints(labelV11,  gbc);
add(labelV11);
gbc.gridy = GridBagConstraints.RELATIVE;
gb.setConstraints(labelV12,  gbc);
add(labelV12);
gbc.gridy = GridBagConstraints.RELATIVE;
gb.setConstraints(labelV13,  gbc);
add(labelV13);
gbc.gridy = GridBagConstraints.RELATIVE;
gb.setConstraints(labelV14,  gbc);
add(labelV14);
gbc.gridy = GridBagConstraints.RELATIVE;
gb.setConstraints(labelV15,  gbc);
add(labelV15);

gbc.gridy = 14;
gbc.gridwidth = 3;
gb.setConstraints(xLabel1,  gbc);
add(xLabel1);

gbc = new GridBagConstraints();
gbc.gridx = 3;
gbc.gridy = 0;
gb.setConstraints(textV11,  gbc);
add(textV11);
gbc.gridy = GridBagConstraints.RELATIVE;
gb.setConstraints(textV12,  gbc);
add(textV12);
gbc.gridy = GridBagConstraints.RELATIVE;
gb.setConstraints(textV13,  gbc);
add(textV13);
gbc.gridy = GridBagConstraints.RELATIVE;
gb.setConstraints(textV14,  gbc);
add(textV14);
gbc.gridy = GridBagConstraints.RELATIVE;
gb.setConstraints(textV15,  gbc);
add(textV15);
gbc.gridy = GridBagConstraints.RELATIVE;
gb.setConstraints(labelSB1,  gbc);
add(labelSB1);

gbc = new GridBagConstraints();
gbc.gridx = 4;
gbc.gridy = 0;
gb.setConstraints(labelV21,  gbc);
add(labelV21);
gbc.gridy = GridBagConstraints.RELATIVE;
gb.setConstraints(labelV22,  gbc);
add(labelV22);
gbc.gridy = GridBagConstraints.RELATIVE;
gb.setConstraints(labelV23,  gbc);
add(labelV23);
gbc.gridy = GridBagConstraints.RELATIVE;
gb.setConstraints(labelV24,  gbc);
add(labelV24);
gbc.gridy = GridBagConstraints.RELATIVE;
gb.setConstraints(labelV25,  gbc);
add(labelV25);

gbc = new GridBagConstraints();
gbc.gridx = 5;
gbc.gridy = 0;
gb.setConstraints(textV21,  gbc);
add(textV21);
gbc.gridy = GridBagConstraints.RELATIVE;
gb.setConstraints(textV22,  gbc);
add(textV22);
gbc.gridy = GridBagConstraints.RELATIVE;
gb.setConstraints(textV23,  gbc);
add(textV23);
gbc.gridy = GridBagConstraints.RELATIVE;
gb.setConstraints(textV24,  gbc);
add(textV24);
gbc.gridy = GridBagConstraints.RELATIVE;
gb.setConstraints(textV25,  gbc);
add(textV25);
gbc.gridy = GridBagConstraints.RELATIVE;
gb.setConstraints(labelSB2,  gbc);
add(labelSB2);
gbc.gridy = 14;
gbc.anchor = GridBagConstraints.NORTHEAST;
gb.setConstraints(endXAxis1,  gbc);
add(endXAxis1);

gbc = new GridBagConstraints();
gbc.gridx = 6;
gbc.gridy = 0;
gb.setConstraints(labelV31,  gbc);
add(labelV31);
gbc.gridy = GridBagConstraints.RELATIVE;
gb.setConstraints(labelV32,  gbc);
add(labelV32);
gbc.gridy = GridBagConstraints.RELATIVE;
gb.setConstraints(labelV33,  gbc);
add(labelV33);
gbc.gridy = GridBagConstraints.RELATIVE;
gb.setConstraints(labelV34,  gbc);
add(labelV34);
gbc.gridy = GridBagConstraints.RELATIVE;
gb.setConstraints(labelV35,  gbc);
add(labelV35);

gbc = new GridBagConstraints();
gbc.gridx = 7;
gbc.gridy = 0;
gb.setConstraints(textV31,  gbc);
add(textV31);
gbc.gridy = GridBagConstraints.RELATIVE;
gb.setConstraints(textV32,  gbc);
add(textV32);
gbc.gridy = GridBagConstraints.RELATIVE;
gb.setConstraints(textV33,  gbc);
add(textV33);
gbc.gridy = GridBagConstraints.RELATIVE;
gb.setConstraints(textV34,  gbc);
add(textV34);
gbc.gridy = GridBagConstraints.RELATIVE;
gb.setConstraints(textV35,  gbc);
add(textV35);
gbc.gridy = GridBagConstraints.RELATIVE;
gb.setConstraints(labelSB3,  gbc);
add(labelSB3);

gbc = new GridBagConstraints();
gbc.gridx = 8;
gbc.gridy = 0;
gb.setConstraints(labelV41,  gbc);
add(labelV41);
gbc.gridy = GridBagConstraints.RELATIVE;
gb.setConstraints(labelV42,  gbc);
add(labelV42);
gbc.gridy = GridBagConstraints.RELATIVE;
gb.setConstraints(labelV43,  gbc);
add(labelV43);
gbc.gridy = GridBagConstraints.RELATIVE;
gb.setConstraints(labelV44,  gbc);
add(labelV44);
gbc.gridy = GridBagConstraints.RELATIVE;
gb.setConstraints(labelV45,  gbc);
add(labelV45);

gbc = new GridBagConstraints();
gbc.gridx = 9;
gbc.gridy = 0;
gb.setConstraints(textV41,  gbc);
add(textV41);
gbc.gridy = GridBagConstraints.RELATIVE;
gb.setConstraints(textV42,  gbc);
add(textV42);
gbc.gridy = GridBagConstraints.RELATIVE;
gb.setConstraints(textV43,  gbc);
add(textV43);
gbc.gridy = GridBagConstraints.RELATIVE;
gb.setConstraints(textV44,  gbc);
add(textV44);
gbc.gridy = GridBagConstraints.RELATIVE;
gb.setConstraints(textV45,  gbc);
add(textV45);
gbc.gridy = GridBagConstraints.RELATIVE;
gb.setConstraints(labelSB4,  gbc);
add(labelSB4);

gbc = new GridBagConstraints();
gbc.gridx = 10;
gbc.gridy = 0;
gb.setConstraints(labelV51,  gbc);
add(labelV51);
gbc.gridy = GridBagConstraints.RELATIVE;
gb.setConstraints(labelV52,  gbc);
add(labelV52);
gbc.gridy = GridBagConstraints.RELATIVE;
gb.setConstraints(labelV53,  gbc);
add(labelV53);
gbc.gridy = GridBagConstraints.RELATIVE;
gb.setConstraints(labelV54,  gbc);
add(labelV54);
gbc.gridy = GridBagConstraints.RELATIVE;
gb.setConstraints(labelV55,  gbc);
add(labelV55);

gbc = new GridBagConstraints();
gbc.gridx = 11;
gbc.gridy = 0;
gb.setConstraints(textV51,  gbc);
add(textV51);
gbc.gridy = GridBagConstraints.RELATIVE;
gb.setConstraints(textV52,  gbc);
add(textV52);
gbc.gridy = GridBagConstraints.RELATIVE;
gb.setConstraints(textV53,  gbc);
add(textV53);
gbc.gridy = GridBagConstraints.RELATIVE;
gb.setConstraints(textV54,  gbc);
add(textV54);
gbc.gridy = GridBagConstraints.RELATIVE;
gb.setConstraints(textV55,  gbc);
add(textV55);
gbc.gridy = GridBagConstraints.RELATIVE;
gb.setConstraints(labelSB5,  gbc);
add(labelSB5);

gbc = new GridBagConstraints();
gbc.gridx = 12;
gbc.gridy = 0;
gb.setConstraints(labelMX1,  gbc);
add(labelMX1);
gbc.gridy = GridBagConstraints.RELATIVE;
gb.setConstraints(labelMY1,  gbc);
add(labelMY1);
gbc.gridy = GridBagConstraints.RELATIVE;
gb.setConstraints(labelMX2,  gbc);
add(labelMX2);
gbc.gridy = GridBagConstraints.RELATIVE;
gb.setConstraints(labelMY2,  gbc);
add(labelMY2);

gbc = new GridBagConstraints();
gbc.gridx = 13;
gbc.gridy = 0;
gb.setConstraints(textMX1,  gbc);
add(textMX1);
gbc.gridy = GridBagConstraints.RELATIVE;
gb.setConstraints(textMY1,  gbc);
add(textMY1);
gbc.gridy = GridBagConstraints.RELATIVE;
gb.setConstraints(textMX2,  gbc);
add(textMX2);
gbc.gridy = GridBagConstraints.RELATIVE;
gb.setConstraints(textMY2,  gbc);
add(textMY2);

gbc = new GridBagConstraints();
gbc.gridx = 7;
gbc.gridy = 9;
gbc.anchor = GridBagConstraints.NORTHEAST;
gb.setConstraints(endYAxis2,  gbc);
add(endYAxis2);
gbc.gridy = 11;
gbc.anchor = GridBagConstraints.CENTER;
gbc.gridheight = 3;
gb.setConstraints(yLabel2,  gbc);
add(yLabel2);
gbc.gridheight = 1;
gbc.gridy = 13;
gbc.anchor = GridBagConstraints.SOUTHEAST;
gb.setConstraints(startYAxis2,  gbc);
add(startYAxis2);


gbc = new GridBagConstraints();
gbc.gridx = 8;
gbc.gridy = 8;
gbc.gridwidth = 5;
gb.setConstraints(gLabel2,  gbc);
add(gLabel2);
gbc.gridy = 9;
gbc.gridheight = 5;
gb.setConstraints(rightGraph,  gbc);
add(rightGraph);
gbc.gridy = 14;
gbc.gridwidth = 1;
gbc.gridheight = 1;
gbc.anchor = GridBagConstraints.NORTHWEST;
gb.setConstraints(startXAxis2,  gbc);
add(startXAxis2);

gbc = new GridBagConstraints();
gbc.gridx = 9;
gbc.gridy = 14;
gbc.gridwidth = 3;
gb.setConstraints(xLabel2,  gbc);
add(xLabel2);

gbc = new GridBagConstraints();
gbc.gridx = 6;
gbc.gridy = 13;
gbc.gridwidth = 1;
gb.setConstraints(bDoGraph,  gbc);
add(bDoGraph);

gbc = new GridBagConstraints();
gbc.gridx = 12;
gbc.gridy = 14;
gbc.anchor = GridBagConstraints.NORTHEAST;
gb.setConstraints(endXAxis2,  gbc);
add(endXAxis2);


}

/*
public void update (Graphics g) { paint(g); }

public void paint (Graphics g) {
g.drawImage (graphImage, 0, 0, this);
}

public void run () {
repaint();
}*/

public boolean action(Event e, Object arg) {
if (e.target == bDoGraph) {
doGraph();
}
else
System.out.println("Unrecognized event");

return super.action(e, arg);
}

public void doGraph () {
bDoGraph.disable();

float SA1 = floatFromTextField(textSA1);
float SA2 = floatFromTextField(textSA2);
float SA3 = floatFromTextField(textSA3);
float SA4 = floatFromTextField(textSA4);
float SA5 = floatFromTextField(textSA5);

float V11 = floatFromTextField(textV11);
float V12 = floatFromTextField(textV12);
float V13 = floatFromTextField(textV13);
float V14 = floatFromTextField(textV14);
float V15 = floatFromTextField(textV15);

float V21 = floatFromTextField(textV21);
float V22 = floatFromTextField(textV22);
float V23 = floatFromTextField(textV23);
float V24 = floatFromTextField(textV24);
float V25 = floatFromTextField(textV25);

float V31 = floatFromTextField(textV31);
float V32 = floatFromTextField(textV32);
float V33 = floatFromTextField(textV33);
float V34 = floatFromTextField(textV34);
float V35 = floatFromTextField(textV35);

float V41 = floatFromTextField(textV41);
float V42 = floatFromTextField(textV42);
float V43 = floatFromTextField(textV43);
float V44 = floatFromTextField(textV44);
float V45 = floatFromTextField(textV45);

float V51 = floatFromTextField(textV51);
float V52 = floatFromTextField(textV52);
float V53 = floatFromTextField(textV53);
float V54 = floatFromTextField(textV54);
float V55 = floatFromTextField(textV55);

float MX1 = floatFromTextField(textMX1);
float MX2 = floatFromTextField(textMX2);
float MY1 = floatFromTextField(textMY1);
float MY2 = floatFromTextField(textMY2);

endXAxis1.setText(textMX1.getText());
endXAxis2.setText(textMX2.getText());
endYAxis1.setText(textMY1.getText());
endYAxis2.setText(textMY2.getText());

leftGraph.graphImage = blankGraph(GraphSize, GraphSize);
rightGraph.graphImage = blankGraph(GraphSize, GraphSize);

float z = 0;
float u = 0;
float w = 0;
float a1 = 0;
float a2 = 0;
float a3 = 0;
float a4 = 0;
float a5 = 0;
float b1 = 0;
float b2 = 0;
float b3 = 0;
float b4 = 0;
float b5 = 0;
float SX1 = 0;
float SX2 = 0;
float SX3 = 0;
float SX4 = 0;
float SX5 = 0;
float SY1 = 0;
float SY2 = 0;
float SY3 = 0;
float SY4 = 0;
float SY5 = 0;
float SXS1 = 0;
float SXS2 = 0;
float SXS3 = 0;
float SXS4 = 0;
float SXS5 = 0;
float SYS1 = 0;
float SYS2 = 0;
float SYS3 = 0;
float SYS4 = 0;
float SYS5 = 0;
float SXYS1 = 0;
float SXYS2 = 0;
float SXYS3 = 0;
float SXYS4 = 0;
float SXYS5 = 0;
float SXX1 = 0;
float SXX2 = 0;
float SXX3 = 0;
float SXX4 = 0;
float SXX5 = 0;
float SXY1 = 0;
float SXY2 = 0;
float SXY3 = 0;
float SXY4 = 0;
float SXY5 = 0;
float SYY1 = 0;
float SYY2 = 0;
float SYY3 = 0;
float SYY4 = 0;
float SYY5 = 0;

SX1 = (V11 + V12 + V13 + V14 + V15);
SX2 = (V21 + V22 + V23 + V24 + V25);
SX3 = (V31 + V32 + V33 + V34 + V35);
SX4 = (V41 + V42 + V43 + V44 + V45);
SX5 = (V51 + V52 + V53 + V54 + V55);
SY1 = ((V11/SA1) + (V12/SA2) + (V13/SA3) + (V14/SA4) + (V15/SA5));
SY2 = ((V21/SA1) + (V22/SA2) + (V23/SA3) + (V24/SA4) + (V25/SA5));
SY3 = ((V31/SA1) + (V32/SA2) + (V33/SA3) + (V34/SA4) + (V35/SA5));
SY4 = ((V41/SA1) + (V42/SA2) + (V43/SA3) + (V44/SA4) + (V45/SA5));
SY5 = ((V51/SA1) + (V52/SA2) + (V53/SA3) + (V54/SA4) + (V55/SA5));
SXS1 = ((V11 * V11) + (V12 * V12) + (V13 * V13) + (V14 * V14) + (V15 * V15));
SXS2 = ((V21 * V21) + (V22 * V22) + (V23 * V23) + (V24 * V24) + (V25 * V25));
SXS3 = ((V31 * V31) + (V32 * V32) + (V33 * V33) + (V34 * V34) + (V35 * V35));
SXS4 = ((V41 * V41) + (V42 * V42) + (V43 * V43) + (V44 * V44) + (V45 * V45));
SXS5 = ((V51 * V51) + (V52 * V52) + (V53 * V53) + (V54 * V54) + (V55 * V55));
SYS1 = (((V11/SA1)*(V11/SA1)) + ((V12/SA2)*(V12/SA2)) + ((V13/SA3)*(V13/SA3)) + ((V14/SA4)*(V14/SA4)) + ((V15/SA5)*(V15/SA5)));
SYS2 = (((V21/SA1)*(V21/SA1)) + ((V22/SA2)*(V22/SA2)) + ((V23/SA3)*(V23/SA3)) + ((V24/SA4)*(V24/SA4)) + ((V25/SA5)*(V25/SA5)));
SYS3 = (((V31/SA1)*(V31/SA1)) + ((V32/SA2)*(V32/SA2)) + ((V33/SA3)*(V33/SA3)) + ((V34/SA4)*(V34/SA4)) + ((V35/SA5)*(V35/SA5)));
SYS4 = (((V41/SA1)*(V41/SA1)) + ((V42/SA2)*(V42/SA2)) + ((V43/SA3)*(V43/SA3)) + ((V44/SA4)*(V44/SA4)) + ((V45/SA5)*(V45/SA5)));
SYS5 = (((V51/SA1)*(V51/SA1)) + ((V52/SA2)*(V52/SA2)) + ((V53/SA3)*(V53/SA3)) + ((V54/SA4)*(V54/SA4)) + ((V55/SA5)*(V55/SA5)));
SXYS1 = ((V11 * (V11/SA1)) + (V12 * (V12/SA2)) + (V13 * (V13/SA3)) + (V14 * (V14/SA4)) + (V15 * (V15/SA5)));
SXYS2 = ((V21 * (V21/SA1)) + (V22 * (V22/SA2)) + (V23 * (V23/SA3)) + (V24 * (V24/SA4)) + (V25 * (V25/SA5)));
SXYS3 = ((V31 * (V31/SA1)) + (V32 * (V32/SA2)) + (V33 * (V33/SA3)) + (V34 * (V34/SA4)) + (V35 * (V35/SA5)));
SXYS4 = ((V41 * (V41/SA1)) + (V42 * (V42/SA2)) + (V43 * (V43/SA3)) + (V44 * (V44/SA4)) + (V45 * (V45/SA5)));
SXYS5 = ((V51 * (V51/SA1)) + (V52 * (V52/SA2)) + (V53 * (V53/SA3)) + (V54 * (V54/SA4)) + (V55 * (V55/SA5)));
SXX1 = (SXS1 - ((SX1 * SX1)/5));
SXX2 = (SXS2 - ((SX2 * SX2)/5));
SXX3 = (SXS3 - ((SX3 * SX3)/5));
SXX4 = (SXS4 - ((SX4 * SX4)/5));
SXX5 = (SXS5 - ((SX5 * SX5)/5));
SXY1 = (SXYS1 - ((SX1 * SY1)/5));
SXY2 = (SXYS2 - ((SX2 * SY2)/5));
SXY3 = (SXYS3 - ((SX3 * SY3)/5));
SXY4 = (SXYS4 - ((SX4 * SY4)/5));
SXY5 = (SXYS5 - ((SX5 * SY5)/5));
SYY1 = (SYS1 - ((SY1 * SY1)/5));
SYY2 = (SYS2 - ((SY2 * SY2)/5));
SYY3 = (SYS3 - ((SY3 * SY3)/5));
SYY4 = (SYS4 - ((SY4 * SY4)/5));
SYY5 = (SYS5 - ((SY5 * SY5)/5));
b1 = (SXY1 / SXX1);
b2 = (SXY2 / SXX2);
b3 = (SXY3 / SXX3);
b4 = (SXY4 / SXX4);
b5 = (SXY5 / SXX5);
a1 = ((SY1 / 5) - (b1 * (SX1/5)));
a2 = ((SY2 / 5) - (b2 * (SX2/5)));
a3 = ((SY3 / 5) - (b3 * (SX3/5)));
a4 = ((SY4 / 5) - (b4 * (SX4/5)));
a5 = ((SY5 / 5) - (b5 * (SX5/5)));
Vmax1 = -(a1/b1);
Vmax2 = -(a2/b2);
Vmax3 = -(a3/b3);
Vmax4 = -(a4/b4);
Vmax5 = -(a5/b5);
Km1 = -(1/b1);
Km2 = -(1/b2);
Km3 = -(1/b3);
Km4 = -(1/b4);
Km5 = -(1/b5);

float t = MX2/500;
for (z=0; z <= MX2; z = z + t) {
u = ((b1 * z) + a1);
rightGraph.graphImage = addPoint(rightGraph.graphImage, (int) ((z / MX2) * GraphSize), GraphSize - ((int) ((u / MY2) * GraphSize)), Color.black, 1, 1);
u = ((b2 * z) + a2);
rightGraph.graphImage = addPoint(rightGraph.graphImage, (int) ((z / MX2) * GraphSize), GraphSize - ((int) ((u / MY2) * GraphSize)), Color.red, 1, 1);
u = ((b3 * z) + a3);
rightGraph.graphImage = addPoint(rightGraph.graphImage, (int) ((z / MX2) * GraphSize), GraphSize - ((int) ((u / MY2) * GraphSize)), Color.blue, 1, 1);
u = ((b4 * z) + a4);
rightGraph.graphImage = addPoint(rightGraph.graphImage, (int) ((z / MX2) * GraphSize), GraphSize - ((int) ((u / MY2) * GraphSize)), Color.green, 1, 1);
u = ((b5 * z) + a5);
rightGraph.graphImage = addPoint(rightGraph.graphImage, (int) ((z / MX2) * GraphSize), GraphSize - ((int) ((u / MY2) * GraphSize)), Color.magenta, 1, 1);
}


float c = MX1/500;
for (z=0; z <= MX1; z = z + c) {
w = ((Vmax1 * z) / (Km1 + z));
leftGraph.graphImage = addPoint(leftGraph.graphImage, (int) ((z / MX1) * GraphSize), GraphSize - ((int) ((w / MY1) * GraphSize)), Color.black, 1, 1);
w = ((Vmax2 * z) / (Km2 + z));
leftGraph.graphImage = addPoint(leftGraph.graphImage, (int) ((z / MX1) * GraphSize), GraphSize - ((int) ((w / MY1) * GraphSize)), Color.red, 1, 1);
w = ((Vmax3 * z) / (Km3 + z));
leftGraph.graphImage = addPoint(leftGraph.graphImage, (int) ((z / MX1) * GraphSize), GraphSize - ((int) ((w / MY1) * GraphSize)), Color.blue, 1, 1);
w = ((Vmax4 * z) / (Km4 + z));
leftGraph.graphImage = addPoint(leftGraph.graphImage, (int) ((z / MX1) * GraphSize), GraphSize - ((int) ((w / MY1) * GraphSize)), Color.green, 1, 1);
w = ((Vmax5 * z) / (Km5 + z));
leftGraph.graphImage = addPoint(leftGraph.graphImage, (int) ((z / MX1) * GraphSize), GraphSize - ((int) ((w / MY1) * GraphSize)), Color.magenta, 1, 1);
}

leftGraph.graphImage = addPoint(leftGraph.graphImage, (int) ((SA1 / MX1) * GraphSize), GraphSize - ((int) ((V11 / MY1) * GraphSize)), Color.black, 3, 3);
leftGraph.graphImage = addPoint(leftGraph.graphImage, (int) ((SA2 / MX1) * GraphSize), GraphSize - ((int) ((V12 / MY1) * GraphSize)), Color.black, 3, 3);
leftGraph.graphImage = addPoint(leftGraph.graphImage, (int) ((SA3 / MX1) * GraphSize), GraphSize - ((int) ((V13 / MY1) * GraphSize)), Color.black, 3, 3);
leftGraph.graphImage = addPoint(leftGraph.graphImage, (int) ((SA4 / MX1) * GraphSize), GraphSize - ((int) ((V14 / MY1) * GraphSize)), Color.black, 3, 3);
leftGraph.graphImage = addPoint(leftGraph.graphImage, (int) ((SA5 / MX1) * GraphSize), GraphSize - ((int) ((V15 / MY1) * GraphSize)), Color.black, 3, 3);

leftGraph.graphImage = addPoint(leftGraph.graphImage, (int) ((SA1 / MX1) * GraphSize), GraphSize - ((int) ((V21 / MY1) * GraphSize)), Color.red, 3, 3);
leftGraph.graphImage = addPoint(leftGraph.graphImage, (int) ((SA2 / MX1) * GraphSize), GraphSize - ((int) ((V22 / MY1) * GraphSize)), Color.red, 3, 3);
leftGraph.graphImage = addPoint(leftGraph.graphImage, (int) ((SA3 / MX1) * GraphSize), GraphSize - ((int) ((V23 / MY1) * GraphSize)), Color.red, 3, 3);
leftGraph.graphImage = addPoint(leftGraph.graphImage, (int) ((SA4 / MX1) * GraphSize), GraphSize - ((int) ((V24 / MY1) * GraphSize)), Color.red, 3, 3);
leftGraph.graphImage = addPoint(leftGraph.graphImage, (int) ((SA5 / MX1) * GraphSize), GraphSize - ((int) ((V25 / MY1) * GraphSize)), Color.red, 3, 3);

leftGraph.graphImage = addPoint(leftGraph.graphImage, (int) ((SA1 / MX1) * GraphSize), GraphSize - ((int) ((V31 / MY1) * GraphSize)), Color.blue, 3, 3);
leftGraph.graphImage = addPoint(leftGraph.graphImage, (int) ((SA2 / MX1) * GraphSize), GraphSize - ((int) ((V32 / MY1) * GraphSize)), Color.blue, 3, 3);
leftGraph.graphImage = addPoint(leftGraph.graphImage, (int) ((SA3 / MX1) * GraphSize), GraphSize - ((int) ((V33 / MY1) * GraphSize)), Color.blue, 3, 3);
leftGraph.graphImage = addPoint(leftGraph.graphImage, (int) ((SA4 / MX1) * GraphSize), GraphSize - ((int) ((V34 / MY1) * GraphSize)), Color.blue, 3, 3);
leftGraph.graphImage = addPoint(leftGraph.graphImage, (int) ((SA5 / MX1) * GraphSize), GraphSize - ((int) ((V35 / MY1) * GraphSize)), Color.blue, 3, 3);

leftGraph.graphImage = addPoint(leftGraph.graphImage, (int) ((SA1 / MX1) * GraphSize), GraphSize - ((int) ((V41 / MY1) * GraphSize)), Color.green, 3, 3);
leftGraph.graphImage = addPoint(leftGraph.graphImage, (int) ((SA2 / MX1) * GraphSize), GraphSize - ((int) ((V42 / MY1) * GraphSize)), Color.green, 3, 3);
leftGraph.graphImage = addPoint(leftGraph.graphImage, (int) ((SA3 / MX1) * GraphSize), GraphSize - ((int) ((V43 / MY1) * GraphSize)), Color.green, 3, 3);
leftGraph.graphImage = addPoint(leftGraph.graphImage, (int) ((SA4 / MX1) * GraphSize), GraphSize - ((int) ((V44 / MY1) * GraphSize)), Color.green, 3, 3);
leftGraph.graphImage = addPoint(leftGraph.graphImage, (int) ((SA5 / MX1) * GraphSize), GraphSize - ((int) ((V45 / MY1) * GraphSize)), Color.green, 3, 3);

leftGraph.graphImage = addPoint(leftGraph.graphImage, (int) ((SA1 / MX1) * GraphSize), GraphSize - ((int) ((V51 / MY1) * GraphSize)), Color.magenta, 3, 3);
leftGraph.graphImage = addPoint(leftGraph.graphImage, (int) ((SA2 / MX1) * GraphSize), GraphSize - ((int) ((V52 / MY1) * GraphSize)), Color.magenta, 3, 3);
leftGraph.graphImage = addPoint(leftGraph.graphImage, (int) ((SA3 / MX1) * GraphSize), GraphSize - ((int) ((V53 / MY1) * GraphSize)), Color.magenta, 3, 3);
leftGraph.graphImage = addPoint(leftGraph.graphImage, (int) ((SA4 / MX1) * GraphSize), GraphSize - ((int) ((V54 / MY1) * GraphSize)), Color.magenta, 3, 3);
leftGraph.graphImage = addPoint(leftGraph.graphImage, (int) ((SA5 / MX1) * GraphSize), GraphSize - ((int) ((V55 / MY1) * GraphSize)), Color.magenta, 3, 3);

rightGraph.graphImage = addPoint(rightGraph.graphImage, (int) ((V11 / MX2) * GraphSize), GraphSize - ((int) (((V11/SA1) / MY2) * GraphSize)), Color.black, 3, 3);
rightGraph.graphImage = addPoint(rightGraph.graphImage, (int) ((V12 / MX2) * GraphSize), GraphSize - ((int) (((V12/SA2) / MY2) * GraphSize)), Color.black, 3, 3);
rightGraph.graphImage = addPoint(rightGraph.graphImage, (int) ((V13 / MX2) * GraphSize), GraphSize - ((int) (((V13/SA3) / MY2) * GraphSize)), Color.black, 3, 3);
rightGraph.graphImage = addPoint(rightGraph.graphImage, (int) ((V14 / MX2) * GraphSize), GraphSize - ((int) (((V14/SA4) / MY2) * GraphSize)), Color.black, 3, 3);
rightGraph.graphImage = addPoint(rightGraph.graphImage, (int) ((V15 / MX2) * GraphSize), GraphSize - ((int) (((V15/SA5) / MY2) * GraphSize)), Color.black, 3, 3);

rightGraph.graphImage = addPoint(rightGraph.graphImage, (int) ((V21 / MX2) * GraphSize), GraphSize - ((int) (((V21/SA1) / MY2) * GraphSize)), Color.red, 3, 3);
rightGraph.graphImage = addPoint(rightGraph.graphImage, (int) ((V22 / MX2) * GraphSize), GraphSize - ((int) (((V22/SA2) / MY2) * GraphSize)), Color.red, 3, 3);
rightGraph.graphImage = addPoint(rightGraph.graphImage, (int) ((V23 / MX2) * GraphSize), GraphSize - ((int) (((V23/SA3) / MY2) * GraphSize)), Color.red, 3, 3);
rightGraph.graphImage = addPoint(rightGraph.graphImage, (int) ((V24 / MX2) * GraphSize), GraphSize - ((int) (((V24/SA4) / MY2) * GraphSize)), Color.red, 3, 3);
rightGraph.graphImage = addPoint(rightGraph.graphImage, (int) ((V25 / MX2) * GraphSize), GraphSize - ((int) (((V25/SA5) / MY2) * GraphSize)), Color.red, 3, 3);

rightGraph.graphImage = addPoint(rightGraph.graphImage, (int) ((V31 / MX2) * GraphSize), GraphSize - ((int) (((V31/SA1) / MY2) * GraphSize)), Color.blue, 3, 3);
rightGraph.graphImage = addPoint(rightGraph.graphImage, (int) ((V32 / MX2) * GraphSize), GraphSize - ((int) (((V32/SA2) / MY2) * GraphSize)), Color.blue, 3, 3);
rightGraph.graphImage = addPoint(rightGraph.graphImage, (int) ((V33 / MX2) * GraphSize), GraphSize - ((int) (((V33/SA3) / MY2) * GraphSize)), Color.blue, 3, 3);
rightGraph.graphImage = addPoint(rightGraph.graphImage, (int) ((V34 / MX2) * GraphSize), GraphSize - ((int) (((V34/SA4) / MY2) * GraphSize)), Color.blue, 3, 3);
rightGraph.graphImage = addPoint(rightGraph.graphImage, (int) ((V35 / MX2) * GraphSize), GraphSize - ((int) (((V35/SA5) / MY2) * GraphSize)), Color.blue, 3, 3);

rightGraph.graphImage = addPoint(rightGraph.graphImage, (int) ((V41 / MX2) * GraphSize), GraphSize - ((int) (((V41/SA1) / MY2) * GraphSize)), Color.green, 3, 3);
rightGraph.graphImage = addPoint(rightGraph.graphImage, (int) ((V42 / MX2) * GraphSize), GraphSize - ((int) (((V42/SA2) / MY2) * GraphSize)), Color.green, 3, 3);
rightGraph.graphImage = addPoint(rightGraph.graphImage, (int) ((V43 / MX2) * GraphSize), GraphSize - ((int) (((V43/SA3) / MY2) * GraphSize)), Color.green, 3, 3);
rightGraph.graphImage = addPoint(rightGraph.graphImage, (int) ((V44 / MX2) * GraphSize), GraphSize - ((int) (((V44/SA4) / MY2) * GraphSize)), Color.green, 3, 3);
rightGraph.graphImage = addPoint(rightGraph.graphImage, (int) ((V45 / MX2) * GraphSize), GraphSize - ((int) (((V45/SA5) / MY2) * GraphSize)), Color.green, 3, 3);

rightGraph.graphImage = addPoint(rightGraph.graphImage, (int) ((V51 / MX2) * GraphSize), GraphSize - ((int) (((V51/SA1) / MY2) * GraphSize)), Color.magenta, 3, 3);
rightGraph.graphImage = addPoint(rightGraph.graphImage, (int) ((V52 / MX2) * GraphSize), GraphSize - ((int) (((V52/SA2) / MY2) * GraphSize)), Color.magenta, 3, 3);
rightGraph.graphImage = addPoint(rightGraph.graphImage, (int) ((V53 / MX2) * GraphSize), GraphSize - ((int) (((V53/SA3) / MY2) * GraphSize)), Color.magenta, 3, 3);
rightGraph.graphImage = addPoint(rightGraph.graphImage, (int) ((V54 / MX2) * GraphSize), GraphSize - ((int) (((V54/SA4) / MY2) * GraphSize)), Color.magenta, 3, 3);
rightGraph.graphImage = addPoint(rightGraph.graphImage, (int) ((V55 / MX2) * GraphSize), GraphSize - ((int) (((V55/SA5) / MY2) * GraphSize)), Color.magenta, 3, 3);

leftGraph.repaint();
rightGraph.repaint();
bDoGraph.enable();
repaint();

}


float floatFromTextField (TextField tf) {
String s;
float value;

s = tf.getText();

try {
value = Float.valueOf(s).floatValue();
} catch (Exception e) {
value = (float) 0.0;
}
return value;
}

Image blankGraph (int width, int height) {
Image tempImage;
Graphics tempGr;

tempImage = createImage(width, height);
tempGr = tempImage.getGraphics();



// draw a box around the graph
tempGr.setColor (Color.white);
tempGr.fillRect (0, 0, width, height);
tempGr.setColor (Color.black);
tempGr.drawRect (0, 0, width - 1, height - 1);
// draw ticks marks around edges
int i;
int hinterval = width / 5;
int vinterval = height / 5;
int TickLength = 2;
for (i = 0; i < 4; i++) {
tempGr.drawLine (hinterval * (i + 1), 0, hinterval * (i + 1), TickLength);
tempGr.drawLine (0, vinterval * (i + 1), TickLength, vinterval * (i + 1));
tempGr.drawLine (width - TickLength - 1, hinterval * (i + 1), height - 1, vinterval * (i + 1));
tempGr.drawLine (hinterval * (i + 1), height - TickLength - 1, hinterval * (i + 1), height);
}

return (tempImage);
}


Image addPoint (Image tempImage, int x, int y, Color pointColor, int size1, int size2) {
Graphics tempGr;

tempGr = tempImage.getGraphics();
tempGr.setColor (pointColor);
tempGr.fillRect (x, y, size1, size2);
tempGr.setColor (Color.black);
tempGr.drawString("Km1 = " + (float)this.Km1, 40,25);
tempGr.drawString("Vmax1 = " + (float)this.Vmax1, 40,35);
tempGr.setColor (Color.red);
tempGr.drawString("Km2 = " + (float)this.Km2, 40,60);
tempGr.drawString("Vmax2 = " + (float)this.Vmax2, 40,70);
tempGr.setColor (Color.blue);
tempGr.drawString("Km3 = " + (float)this.Km3, 40,95);
tempGr.drawString("Vmax3 = " + (float)this.Vmax3, 40,105);
tempGr.setColor (Color.green);
tempGr.drawString("Km4 = " + (float)this.Km4, 40,130);
tempGr.drawString("Vmax4 = " + (float)this.Vmax4, 40,140);
tempGr.setColor (Color.magenta);
tempGr.drawString("Km5 = " + (float)this.Km5, 40,165);
tempGr.drawString("Vmax5 = " + (float)this.Vmax5, 40,175);
return (tempImage);
}

}
class Graph extends Canvas {
public Image graphImage;
public int width;
public int height;
public Dimension preferredSize() {
return new Dimension (width, height);
}

Graph (int width, int height) {
this.width = width;
this.height = height;
resize(preferredSize());
}

public void update (Graphics g) { paint(g); }

public void paint (Graphics g) {
g.drawImage (graphImage, 0, 0, this);

}
}	