/* Generic Animation Framework For Extraordinary Results (GAFFER) (c) 2007 */

var animationList = new Array(); 
var elemRemoved = false;
var aniTO = null;
var timeout = 50;
//var gaffer_anipreparespace = null;

function gaffer_aniNext() {

   var len = animationList.length;   
   for(var i = 0; i < len; i++)
      if(animationList[i]!=null) {
         animationList[i].nextStep();
      }
   
   if(elemRemoved) gaffer_cleanupAniList();
   if(animationList.length==0) { clearInterval(aniTO); aniTO=null; }
}

function gaffer_cleanupAniList() {
   var moveBack = 0;
   for(var i = 0; i < animationList.length; i++) 
      if(animationList[i]==null) {
         moveBack++;
      } else {      
         if(moveBack!=0) animationList[i-moveBack]=animationList[i];
      }
   for(var i = 0; i<moveBack; i++) animationList.pop();
   elemRemoved=false;
}

function gaffer_pushAni(ani) {
   animationList.push(ani);
   if(animationList.length==1 && aniTO == null) { aniTO = setInterval("gaffer_aniNext();", timeout); }
}

function gaffer_popAni(ani) {
   for(var i = 0; i < animationList.length; i++) if(animationList[i]==ani) animationList[i]=null;
   elemRemoved=true;
}

function gaffer_aniFromObject(obj) {
   var len = animationList.length;   
   for(var i = 0; i < len; i++)
      if(animationList[i]!=null)
         if(animationList[i].assocObject==obj) 
            return animationList[i];
   return null;
}

function gaffer_isAnimating(obj) {
   return (gaffer_aniFromObject(obj)!=null);
}

function gaffer_genericPrepare(ani) {
   if(!ani.inCombination) {   
      var oldani = gaffer_aniFromObject(ani.assocObject);
      if(oldani!=null) oldani.cancel();
   }
}

function gaffer_genericStart(ani) {
   if(!ani.inCombination) gaffer_pushAni(ani);
}

function gaffer_genericFinish(ani) {
   ani.finished=true;
   if(!ani.inCombination) gaffer_popAni(ani);
   if(ani.onFinish != null) ani.onFinish();
}



function gaffer_init() {
   /*var gap = document.createElement("div");
   gap.style.position="absolute";
   gap.style.left="-2000px";
   gap.style.display="block";
   document.body.appendChild(gaffer_anipreparespace);
   gaffer_aniprepare = gap;*/
}

function gaffer_prepAniCont(object) {
//   if(object.style.position!="absolute" && object.style.position!="fixed") {   
      var gap = document.createElement("div");
      var par = object.parentNode;
      gap.style.position="absolute";
      gap.style.left="-1000px"; gap.style.top="-1000px";
      gap.style.display="block";
      gap.style.visibility="hidden";
      gap.style.width=viewWidth(par)+"px";
      gap.style.height=viewHeight(par)+"px";
      par.insertBefore(gap, object);
      gap.appendChild(object);
//   } else {
//      object.style.visibility="hidden";
//   }
   object.style.display="block";

//      hollidudio;

}

function gaffer_unprepAniCont(object) {
//   if(object.style.position!="absolute" && object.style.position!="fixed") {   
      var gap = object.parentNode;
      var par = gap.parentNode;
      par.insertBefore(object, gap);
      par.removeChild(gap);
//   } else {
//      object.style.visibility="visible";
//  }
}