/* imageLoader.java
 * Copyright (C) 1996 by William Giel
 *
 * E-mail: rvdi@usa.nai.net
 * WWW: http://www.nai.net/~rvdi/home.htm
 *
 ***************************************************************************
 * Abstract
 * --------
 * Creates a separate, image loading thread.
 ***************************************************************************
 * Permission to use, copy, modify, and distribute this software and its
 * documentation without fee for NON-COMMERCIAL purposes is hereby granted.
 *
 * THE AUTHOR MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY
 * OF THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
 * TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
 * PARTICULAR PURPOSE, OR NON-INFRINGEMENT. THE AUTHOR SHALL NOT BE LIABLE
 * FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
 * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
 ***************************************************************************/
import java.applet.Applet;
import java.awt.Image;
import java.awt.MediaTracker;
import java.awt.TextArea;
import java.net.MalformedURLException;
import java.net.URL;

public class imageLoader extends Thread
{

    static final String BAD_URL = "\r\nError: Malformed Image URL.";

    static final String IMAGE_ERROR = "\r\nError: Image(s) not loaded.";

    static final String IMAGE_LOADED = "Done.";

    static final String IMAGE_LOADING = "\r\nLoading images...";

    Image image[];

    String szImage[];

    int nImages;

    boolean loaded;

    Applet app;

    TextArea s;

    imageLoader(Applet a, String szName[], int numImages, TextArea scroller)
    {

        image = new Image[numImages];
        szImage = new String[numImages];

        for (int i = 0; i < numImages; i++)
        {
            szImage[i] = szName[i];
            image[i] = null;
        }
        nImages = numImages;
        app = a;
        s = scroller;

    }

    public void run()
    {

        URL imageURL;
        if (null != s)
            s.appendText(IMAGE_LOADING);
        loaded = false;
        MediaTracker tracker = new MediaTracker(app);
        for (int i = 0; i < nImages; i++)
        {
            if (null != szImage[i])
            {
                try
                {
                    imageURL = new URL(app.getCodeBase(), szImage[i]);
                }
                catch (MalformedURLException e)
                {
                    imageURL = null;
                    if (null != s)
                        s.appendText(BAD_URL);
                    System.out.println(BAD_URL);
                    continue;
                }
            }
            else
                imageURL = null;

            if (null != imageURL)
            {
                image[i] = app.getImage(imageURL);
                if (null != image[i])
                    tracker.addImage(image[i], i);
            }
            else
                image[i] = null;

            if (null != image[i])
                try
                {
                    tracker.waitForID(i);
                }
                catch (InterruptedException e)
                {
                    image[i] = null;
                    if (null != s)
                        s.appendText(IMAGE_ERROR);
                    System.out.println(IMAGE_ERROR);

                }

        }
        loaded = true;
        if (null != s)
            s.appendText(IMAGE_LOADED);
    }

    Image[] retrieveImages()
    {
        if (loaded)
            return image;
        else
            return null;
    }
}


