/*
Timer by Algorithm
http://www.codingforums.com/archive/index.php/t-10531.html
*/
    function Timer(){
        this.obj = (arguments.length)?arguments[0]:window;
        return this;
    }
    Timer.prototype.setInterval = function(func, msec){
        var i = Timer.getNew();
        var t = Timer.buildCall(this.obj, i, arguments);
        Timer.set[i].timer = window.setInterval(t,msec);
        return i;
    }
    Timer.prototype.setTimeout = function(func, msec){
        var i = Timer.getNew();
        Timer.buildCall(this.obj, i, arguments);
        Timer.set[i].timer = window.setTimeout("Timer.callOnce("+i+");",msec);
        return i;
    }
    Timer.prototype.clearInterval = function(i){
        if(!Timer.set[i]) return;
        window.clearInterval(Timer.set[i].timer);
        Timer.set[i] = null;
    }
    Timer.prototype.clearTimeout = function(i){
        if(!Timer.set[i]) return;
        window.clearTimeout(Timer.set[i].timer);
        Timer.set[i] = null;
    }
    
    Timer.set = new Array();
    Timer.buildCall = function(obj, i, args){
        var t = "";
        Timer.set[i] = new Array();
        if(obj != window){
            Timer.set[i].obj = obj;
            t = "Timer.set["+i+"].obj.";
        }
        t += args[0]+"(";
        if(args.length > 2){
            Timer.set[i][0] = args[2];
            t += "Timer.set["+i+"][0]";
            for(var j=1; (j+2)<args.length; j++){
                Timer.set[i][j] = args[j+2];
                t += ", Timer.set["+i+"]["+j+"]";
            }
        }
        t += ");";
        Timer.set[i].call = t;
        return t;
    }
    Timer.callOnce = function(i){
        if(!Timer.set[i]) return;
        eval(Timer.set[i].call);
        Timer.set[i] = null;
    }
    Timer.getNew = function(){
        var i = 0;
        while(Timer.set[i]) i++;
        return i;
    }