var badBrowser=false;
var intervals=[];
var input="x=t*w/3;y=h/3*(1+sin(4*t));";
var dt=.05;
var w=1200;
var h=900;
var src="data:image\/gif;base64,R0lGODlhEAARAKEDANsrAItzAP+bO\/\/\/\/yH5BAEKAAMALAAAAAAQABEAAAJDnI8nmwP\/zBIJ2sfQtfmEvwTUFyCiGIafKYBpaKIq2QzTXXpkAJB9vOP5DKggz0KcOHqY5mq0sawGvmivVL00cshaAQA7";
Mario=function(x,y) {
    var el=document.createElement("img");
    el.src=src;
    el.style.height="34px";
    el.style.width="32px";
    el.style.position="fixed";
    el.style.left=x+"px";
    el.style.bottom=y+"px";
    if(badBrowser)
        el.style.background="#f00";
    document.body.appendChild(el);
    this.opacity=1;
    this.x=x;
    this.y=y;
    this.el=el;
};
Mario.prototype.fade=function() {
    var m=this;
    var interval=setInterval(function() {
        if((m.opacity-=.09) <= 0) {
            clearInterval(interval);
            m.setOpacity(0);
            document.body.removeChild(m.el);
        }
        else
            m.setOpacity();
    },50);
};
createOpacityFunction=function() {
    if("opacity" in document.body.style)
        Mario.prototype.setOpacity=function() {
            this.el.style.opacity=this.opacity;
        };
    else if("-moz-opacity" in document.body.style)
        Mario.prototype.setOpacity=function() {
            this.el.style.MozOpacity=this.opacity;
        };
    else if("-khtml-opacity" in document.body.style)
        Mario.prototype.setOpacity=function() {
            this.el.style.KhtmlOpacity=this.opacity;
        };
    else if("filter" in document.body.style)
        Mario.prototype.setOpacity=function() {
            this.el.style.filter="alpha(opacity="+Math.round(this.opacity*100)+")";
        };
};
startFunction=function(prescription) {
    var t=0;
    intervals.push(setInterval(function() {
        var x,y;
        with(Math)
            eval(prescription);
        var mario=new Mario(x,y);
        mario.fade();
        t+=dt;
    },dt*1000));
};
functions.push(function() {
    createOpacityFunction();
    w=parseInt(window.innerWidth,10);
    h=parseInt(window.innerHeight,10);
    document.getElementById("sinc").onclick=function() {
        startFunction("x=w/4*t;y=h/3+h/4*sin(10*t-15)/(10*t-15);");
    };
    document.getElementById("kepler").onclick=function() {
        startFunction("var e=0.6;var a=w\/6;var P=3;var t2=t;while(t2>P)t2-=P;var M=2*PI*t2\/P;var Eps=M;for(var i=0;i<8;i++)Eps=Eps-(Eps-e*sin(Eps)-M)\/(1-e*cos(Eps));var cosE=cos(Eps);var cosFi=(cosE-e)\/(1-e*cosE);var r=a*(1-e*e)\/(1+e*cosFi);var x=r*cosFi;var y=r*sqrt(1-cosFi*cosFi);if(2*t2>P)y*=-1;x+=w\/2;y+=h/3;");
    };
    document.getElementById("synchrotron").onclick=function() {
        startFunction("r=min(w/3,h/3);x=r*(1+sin(pow(t,1.5)));y=r*(1+cos(pow(t,1.5)));");
    };
    document.getElementById("supermario").onclick=function() {
        startFunction("x=w/3*pow(t,2);y=h/3*pow(t,2);");
    };
    document.getElementById("zelf").onclick=function() {
        startFunction(input=prompt("Voer wat in. Het moet javascript-syntax zijn en je moet een waarde in pixels voor x en y opgeven. w en h zijn de breedte en hoogte van je browser in pixels en t is het aantal seconden dat hij bezig is.\nJe kunt wat wiskundefuncties gebruiken: sin, atan, log, pow (machtsverheffen) en zo voorts.\n\nAls je een fout maakt is dat je eigen probleem.",input));
    };
    document.getElementById("haalweg").onclick=function() {
        var i;
        while(i=intervals.shift())
            clearInterval(i);
    };
});

