import java.applet.Applet;
import netscape.javascript.JSObject;

public class JavascriptFuncParam extends Applet {
    
    public DummyObject dummyObject = new DummyObject("DummyObject1");
    private JSObject window;

    private final String jsFunctionName = "JJSParameterTypeFunc";

    public void init() {
        window = JSObject.getWindow(this);
        String initStr = "JToJSFuncParam applet initialized.";
        System.out.println(initStr);
    }

    //methods for testing calling JavaScript function with different parameters
    public void jjsCallintParam(){
        int i = 1;
        passToJavascript(i);
    }

    public void jjsCalldoubleParam(){
        double d = 1.1;
        passToJavascript(d);
    }   

    public void jjsCallfloatParam(){
        float f = 1.5f;
        passToJavascript(f);
    }   

    public void jjsCalllongParam(){
        long l = 10000;
        passToJavascript(l);
    }   

    public void jjsCallshortParam(){
        short s = 1;
        passToJavascript(s);
    }   

    public void jjsCallbyteParam(){
        byte b = 1;
        passToJavascript(b);
    }   

    public void jjsCallcharParam(){
        char c = 'a';
        passToJavascript(c, "97");
    }   

    public void jjsCallbooleanParam(){
        boolean b = true;
        passToJavascript(b);
    }   

    public void jjsCallIntegerParam(){
        Integer i = new Integer(1);
        passToJavascript(i);
    }   

    public void jjsCallDoubleParam(){
        Double i = new Double(1.5);
        passToJavascript(i);
    }   

    public void jjsCallFloatParam(){
        Float i = new Float(1.5);
        passToJavascript(i);
    }   

    public void jjsCallLongParam(){
        Long i = new Long(10000);
        passToJavascript(i);
    }   

    public void jjsCallShortParam(){
        Short i = new Short((short)1);
        passToJavascript(i);
    }   

    public void jjsCallByteParam(){
        Byte i = new Byte((byte)1);
        passToJavascript(i);
    }   

    public void jjsCallBooleanParam(){
        Boolean i = new Boolean(true);
        passToJavascript(i);
    }   

    public void jjsCallCharacterParam(){
        Character i = new Character('a');//97
        passToJavascript(i, "97");
    }   

    public void jjsCallStringParam(){
        String i = "teststring";
        passToJavascript(i, "\"teststring\"");
    }   

    public void jjsCallDummyObjectParam(){
        DummyObject i = new DummyObject("dummy1");
        passToJavascript(i, "applet.getNewDummyObject(\"dummy1\")");
    }   

    public void jjsCallJSObjectParam(){
        JSObject i = window;
        passToJavascript(i, "window");
    }   

    private void passToJavascript(Object obj, String repr){
        window.call(jsFunctionName, new Object[]{ obj, repr });
    }

    private void passToJavascript(Object obj){
        passToJavascript(obj, obj.toString());
    }

    // auxiliary methods and class:
    public void printOut(String s) {
        System.out.println(s);
    }

    public class DummyObject {
        private String str;
     
        public DummyObject(String s) {
            this.str = s;
        }
     
        public void setStr(String s) {
            this.str = s;
        }
     
        public String toString() {
            return str;
        }
    }

    public DummyObject getNewDummyObject(String s){
        return new DummyObject(s);
    }

}
