Here should be a working script...
//
www.lsleditor.org by Alphons van der Heijden (SL: Alphons Jano)
//Written by Bobbyb30 Swashbuckler [Bobbyb30 Zohari](C) 2009
//Created: October 3, 2008
//Distributable under the Creative Commons Atrribution license
//http://creativecommons.org/licenses/by/3.0/
//NOT OPTIMIZED
integer doorSteps = 4;
integer reversed = FALSE;
rotateDoor(integer Open)
{
rotation rot = llGetRot();
rotation delta;
integer x;
if (reversed) {Open = !Open;};
if (Open)
{
delta = llEuler2Rot(<0, 0, PI/(doorSteps * 2)>

;
}
else
{
delta = llEuler2Rot(<0, 0, -PI/(doorSteps * 2)>

;
}
for (x = 0; x < doorSteps; x++)
{
rot = delta * rot;
llSetRot(rot);
llSleep(0.03125/doorSteps);
}
}
integer statein;//if 1-closed,if 0-open
integer listenhandle;
default
{
state_entry()
{
integer statein = 1;
rotateDoor(statein);//start closed
listenhandle = llListen(910,"",llGetOwner(),"open"

;
}
touch_start(integer total_number)
{
if(statein)//to open
{
statein = 0;
rotateDoor(statein);
llListenRemove(listenhandle);
llListen(910,"",llGetOwner(),"close"

;
}
else//to open
{
statein = 1;
rotateDoor(statein);
llListenRemove(listenhandle);
llListen(910,"",llGetOwner(),"open"

;
}
}
listen(integer ch, string name, key id, string msg)
{
if(msg == "open"

{
statein = 1;
rotateDoor(statein);
llListenRemove(listenhandle);
llListen(910,"",llGetOwner(),"close"

;
}
else//to open
{
statein = 1;
rotateDoor(statein);
llListenRemove(listenhandle);
llListen(910,"",llGetOwner(),"open"

;
}
}
}