var subMenus={"blogs": 0, "services": 0, "people": 0};//0 - closed, 1 - opened
var subMenusCount=3;
var subPrefix='menu_';
var subOuterPrefix='menu_';

var rmenuScope='rmenuScope';
var rmenuQueue = Effect.Queues.get(rmenuScope);
var rmenuSwitchDuration=1.00;
var rmenuDuration=1000;
var rmenuSemaphor=new Semaphor();
rmenuSemaphor.timeout=1000;

function rMenuToggle(menuNames, mode){
 if(rmenuSemaphor.blocked() || menuNames.length==0) return false;
 var mode=mode||0;

 var newStatus={"blogs": 0, "services": 0, "people": 0};//0 - no change, 1 - open, 2 - close
 var opening=false;
 var effects=[];
 for(var i in subMenus){
  for(var j=0; j<menuNames.length; j++){
   if(i==menuNames[j]){
    if(subMenus[i]){
     newStatus[i]=2;
    }
    else {
     newStatus[i]=1;
     opening=true;
    }
   }
  }
 }
 if(opening){
  for(var i in newStatus){
   if(newStatus[i]==0 && subMenus[i]) newStatus[i]=2;
  }
 }
 for(var i in newStatus){
  if(newStatus[i]==1){
   if(mode) $(subPrefix+i).show();
   else effects[effects.length]=new Effect.BlindDown(subPrefix+i, { duration: rmenuSwitchDuration, sync: true});
   subMenus[i]=1;
  }
  else if(newStatus[i]==2){
   if(mode) $(subPrefix+i).hide();
   else effects[effects.length]=new Effect.BlindUp(subPrefix+i, { duration: rmenuSwitchDuration, sync: true});
   subMenus[i]=0;
  }
 }
 if(!mode){
  new Effect.Parallel(effects, {queue: {position: 'end', scope: rmenuScope, limit: subMenusCount}, duration: rmenuSwitchDuration});
  rmenuSemaphor.block();
 }
}
