Ho fatto questo in script per creare un animazione ( espandi - richiudi ), ma quando lo eseguo ottengo "this.obj has not properties" riferito ad "this.obj.style.overflow = 'hidden'". Penso che sia perchè "window.setInterval" esegue la funzione "this.collapse" in un ambito dove "this.obj" non è definito. Vorrei un aiuto per far funzionare lo script così com'è, senza passare parametri in ogni funzione!

codice:
function Toggle ( trigger, obj, speed ) {

	this.intervalId = null ;
	this.trigger = trigger ;
	this.obj = obj ;
	this.speed = speed ;

	this.create = function () {
		window.clearInterval ( this.intervalId ) ;
		if ( !this.speed )
			this.speed = parseInt ( 100 / 30 )  ;
		if ( !this.obj.style.display ) {
			this.trigger.innerHTML = '+' ;
			this.intervalId = window.setInterval ( this.collapse, 1 ) ;
		}
		else {
			this.trigger.innerHTML = '-' ;
			this.intervalId = window.setInterval ( this.expand, 1 ) ;
		}
	}

	this.expand = function () {
		this.obj.style.display = '' ;
		if ( this.getHeight () < 100 ) {
			this.obj.style.height = this.getHeight () + this.speed + 'px' ;
		}
		else {
			this.obj.style.height = 100 + 'px' ;
			window.clearInterval ( this.intervalId ) ;
		}
	}

	this.collapse = function () {
		this.obj.style.overflow = 'hidden' ;
		if ( this.getHeight () > 0 ) {
			if ( this.speed > this.getHeight () )
				this.obj.style.height = 0 + 'px' ;
			else
				this.obj.style.height = this.getHeight () - this.speed + 'px' ;
		}
		else {
			this.obj.style.display = 'none' ;
			window.clearInterval ( this.intervalId ) ;
		}
	}
	
	this.getHeight = function () {
		return this.obj.offsetHeight ;
	}

}