function applyEffect(name,src,event,target,effect,duration,px,py,transition,mode)
{
  Event.observe
  (
    window,
    'load',
    function() { _applyEffects(name,src,event,target,effect,duration,px,py,transition,mode)}
  );
}

function _getElementByIdOrName(id)
{
  if (document.getElementById(id))
    return document.getElementById(id);
  else if (document.getElementsByName(id).length>0)
    return document.getElementsByName(id)[0];
  else
    return null;
}

function _applyEffects(name,srcS,event,targetS,effect,duration,px,py,transition,mode)
{
  if (event=="load")
  {
    for (var j=0;j<targetS.length;j++)
      _applyEffect(name,'',event,targetS[j],effect,duration,px,py,transition,mode);
  }
  else
  {
    for (var i=0;i<srcS.length;i++)
      for (var j=0;j<targetS.length;j++)
        _applyEffect(name,srcS[i],event,targetS[j],effect,duration,px,py,transition,mode);
  }
}

function _applyEffect(name,srcS,event,targetS,effect,duration,px,py,transition,mode)
{
  var target=_getElementByIdOrName(targetS);
  if (target==null)
  {
    alert("Erreur JSC : "+name+"\nNom composant cible <"+targetS+">non défini");
    return;
  }
  var options="";
  if (duration!="")
    options+="duration:"+duration;
  var effectStr="";
  if (effect=="Show")
    effectStr="$(target).show();";
  else if (effect=="Hide")
    effectStr="$(target).hide();";
  else
  {
    if (effect=="Move")
    {
      if (options!="")
        options+=",";
      options+="x:"+px+",y:"+py+",mode: '"+mode+"',transition: Effect.Transitions."+transition;
    }
    else if (effect=="Opacity")
    {
      if (options!="")
        options+=",";
      options+="from: "+px+", to: "+py;
    }
    effectStr="new Effect."+effect+"(target,{"+options+"});";
  }
  if (event=="load")
    eval(effectStr);
  else
  {
    var src=_getElementByIdOrName(srcS);
    if (src==null)
    {
      alert("Erreur JSC : "+name+"\nNom composant source <"+srcS+"> non défini");
      return;
    }
    Event.observe
    (
      src,
      event,
      function() { eval(effectStr); }
    );
  }
}
