import java.applet.*;
import java.awt.*;
import java.lang.Math.*;
import java.util.*;
import java.util.Properties;

public class RMONGraph extends Applet {

    Font font, bigfont;
    private Graphics gr;
    String message = "drink Coke!"; 
    private double data[];
    private int numData;
    private int height = 500;
    private int width = 500;
    private double maximum;
    private int offset;
    private int interval;
    
    
    public void init() {
	offset = 50;
	font = new Font("Helevetica", Font.PLAIN, 14);
	bigfont = new Font("Helevetica", Font.BOLD, 18);
	this.setBackground(Color.white);
	String value = this.getParameter("numDataPoints");
	try { numData = Integer.parseInt(value); }
	catch (Exception e) { numData = 0;}
	value = this.getParameter("interval");
	try { interval = Integer.parseInt(value); }
	catch (Exception e) { interval = 0; }
	data = getData(numData);
	maximum = findMax(data, numData);
    }
    
    private  static Properties printprefs = new Properties();
    
    void printAll () {
	Toolkit toolkit = new this.getToolkit();
	PrintJob job = toolkit.getPrintJob();
	
	//	***********************
	//	    Left off here
	//	***********************
    }
    
    private double findMax(double[] data, int numData) {
	double max = 0.0;
	for (int i=0; i<numData; i++) {
	    if (data[i] > max) {
		max = data[i];
	    }
	}
	return max;
    }
    
    private double[] getData(int numData) {
	String dstring = null;
	double data[] = new double[numData];
	int d;
	String value = this.getParameter("Data");
	StringTokenizer st = new StringTokenizer(value, ";");
	int count = 0;
	while ((st.hasMoreTokens()) & (count < numData)) {
	    dstring = st.nextToken();
	    try { d = Integer.parseInt(dstring); }
	    catch (Exception e) { d = 0; }
	    data[count] = d/100.0;
	    count++;
	}
	for (int i=count; i<numData; i++) {
	    data[i] = 0.0;
	}
	return data;
    }

    public void start() {
    }
    
    public void paint(Graphics g) {
	
	drawAxes(g,width, height, offset, maximum);
	double scale = 100/maximum;
	int x1 = offset;
	int y1 = 500-offset;
	for (int i=0; i<numData; i++) {
	    int x0 = offset + 400*i/numData;
	    double d = 4.0*data[i];
	    int y0 = 500 - offset - (int)(scale*d);
	    DrawX(g,x0,y0);
	    g.setColor(Color.green);
	    g.drawLine(x1,y1,x0,y0);
	    x1 = x0;
	    y1 = y0;
	}
    }
    
    private void drawAxes(Graphics g, int width, int height,
			  int offset, double maximum) {
	g.setFont(font);
	g.setColor(Color.black);
	g.drawLine(offset, offset, offset, height-offset);
	g.drawLine(offset, height-offset, width-offset, height-offset);
	g.drawLine(width-offset, height-offset, width-offset, offset);
	g.drawLine(width-offset, offset, offset, offset);
	int hours = (int)(interval*data.length)/3600;
	int minutes = (int)((interval*data.length)/60) - hours*60;
	int seconds = interval*data.length - minutes*60 - hours*3600;
	int maxInt = 1 + (int)maximum;
	
	g.setFont(bigfont);
	g.drawString("interval: "+interval+" seconds",
		     (int)(width/2)-60, height-5);
	g.drawString("Percent Utilization", (int)(width/2)-80,offset-10);
	g.setFont(font);
	g.drawString("t=-"+hours+":"+minutes+":"+seconds,
		     offset, height-offset+20);
	g.drawString("t=0:0:0", width-offset-20, height-offset+20);
	for (int i=0; i<=20; i++) {
	    int tick = height - offset - i*(height - 2*offset)/20;
	    if ((i%2)==0) {
		if ((i*(i-20))!=0) {
		    g.setColor(Color.blue);
		    g.drawLine(offset, tick, width-offset, tick);
		    g.setColor(Color.black);
		}
		g.drawLine(offset-4, tick, offset+4, tick);
		int temp1 = (int)(maximum*i/2);
		double temp2 = temp1/10.0;
		String tickMark = ""+temp2;
		//String tickMark = ""+(double)(((int)(maximum*i/2))/10);
		g.drawString(tickMark, offset-30, tick+6);
	    } else {
		g.drawLine(offset-2, tick, offset+2, tick);
	    }
	}
    }
    
    private void DrawX(Graphics g, int x, int y) {
	g.setColor(Color.red);
	//g.drawLine(x-4, y-4, x+4, y+4);
	//g.drawLine(x-4, y+4, x+4, y-4);
	g.fillOval(x-3,y-3, 6,6);
    }
    
    
    public void update(Graphics g) {
	paint(g);
    }
    
}

