//JS-Framework

//#### Liefert Element by ID zurück ####
function $(id)
{ return document.getElementById(id);}

//#### Liefert Element by NAME zurück ####
function N(name)
{ return document.getElementsByName(name)[0]; //Wir gehen von uniqueName aus
}

//### Prüft, ob eine Variable existiert
function isset(VARNAME)
{ if(typeof VARNAME != "undefined") return true;
  return false;
}

//### ersetzt alle Vorkommen von search
function str_replace(search, replace, subject) {
    return subject.split(search).join(replace);
}

//#### Setze Deckkraft eines objekts  value    Transparent-0..100-Deckend  ####
function setOpacity(obj, value)
{ obj.style.opacity = value/100;
  obj.style.filter = 'alpha(opacity=' + value + ');';
}

//### Bewegung in Sinusschwingung von Startwert zu Endwert in schritte ###
//    Rückgabewert ist Position zwischen StartV und EndV bei schritt
function CosMove(StartV,EndV,schritte,schritt){return parseInt(EndV+(StartV-EndV)*(0.5*(1+Math.cos(3.14159265/parseFloat(schritte)*parseFloat(schritt)))));}


//### Animation ########################################################################################################
// Startwert muss per CSS gesetzt sein
// Neue Animation bricht alte ab und starete mit neuem Zielwert.
//Parameter:
// dauer		Dauer der Animation in ms
// schritte	Anzahl der Zwischenschritte
// typ		0=linear 1=cosMov
// ObjektID	z.B. ID des Divs, als String
// EigenschaftStr z.B. Eigenschaft des Animierten Wertes z.B. "style.height"
// Endwert	Zielwert für
// Einheit	z.B. "px"
// Demo     StartAnimation(1000,50,1,'test',"style.height",50,'px');

var RunningAnimationsArr=new Object();

function StartAnimation(dauer,schritte,typ,ObjektID,EigenschaftStr,Endwert,Einheit)
{
  RunningAnimationsArr[EigenschaftStr+ObjektID]=new Object();

  var Eigenschaften = EigenschaftStr.split(".");
  var Obj=$(ObjektID);
  for (var i = 0; i < Eigenschaften.length-1; ++i)
  { var Obj=Obj[Eigenschaften[i]];}
  var NewEigenschaftStr=Eigenschaften[Eigenschaften.length-1];//Letzt Eigenschaft verwenden
  RunningAnimationsArr[EigenschaftStr+ObjektID]['dauer']=dauer;
  RunningAnimationsArr[EigenschaftStr+ObjektID]['schritte']=schritte;
  RunningAnimationsArr[EigenschaftStr+ObjektID]['typ']=typ;
  RunningAnimationsArr[EigenschaftStr+ObjektID]['Objekt']=Obj;//Letztes Komplexelement
  RunningAnimationsArr[EigenschaftStr+ObjektID]['EigenschaftStr']=NewEigenschaftStr;   //Letzter EigenschaftStr xxx.xxx.XXX
  RunningAnimationsArr[EigenschaftStr+ObjektID]['Endwert']=Endwert;
  RunningAnimationsArr[EigenschaftStr+ObjektID]['Einheit']=Einheit;

  RunningAnimationsArr[EigenschaftStr+ObjektID]['AktuellerSchritt']=0;//Wir starten
  RunningAnimationsArr[EigenschaftStr+ObjektID]['SchrittDauer']=parseInt(dauer/schritte);
  RunningAnimationsArr[EigenschaftStr+ObjektID]['Startwert']=parseInt(RunningAnimationsArr[EigenschaftStr+ObjektID]['Objekt'][NewEigenschaftStr]);

  //RunningAnimationsArr[EigenschaftStr+ObjektID]['Objekt'][NewEigenschaftStr]='500px';
  //Und Animation Starten
  AnimationTimer(EigenschaftStr+ObjektID,0);
}

function StartAnimationOpacity(dauer,schritte,typ,ObjektID,Startwert,Endwert)
{ var AnimationID=ObjektID+'Opacity';
  var Obj=$(ObjektID);
  RunningAnimationsArr[AnimationID]=new Object();

  RunningAnimationsArr[AnimationID]['dauer']=dauer;
  RunningAnimationsArr[AnimationID]['schritte']=schritte;
  RunningAnimationsArr[AnimationID]['typ']=typ;
  RunningAnimationsArr[AnimationID]['Objekt']=Obj;//Letztes Komplexelement
  RunningAnimationsArr[AnimationID]['Endwert']=Endwert;

  RunningAnimationsArr[AnimationID]['AktuellerSchritt']=0;//Wir starten
  RunningAnimationsArr[AnimationID]['SchrittDauer']=parseInt(dauer/schritte);
  RunningAnimationsArr[AnimationID]['Startwert']=Startwert;

  //Und Animation Starten
  //alert(ObjektID);
  AnimationTimerOpacity(AnimationID,0);
}

//### AnimationTimer - Interne Timerfunktion, welche die neuen Werte zuweist
function AnimationTimer(AnimationID,AktuellerSchritt)
{ var Ani=RunningAnimationsArr[AnimationID];
  if (Ani['AktuellerSchritt']!=AktuellerSchritt){return;}//Animation anhalten, da neue gestartet
  if (Ani['AktuellerSchritt']>Ani['schritte']) {return;}//Animation beendet

  switch (Ani['typ'])
    { case 1: var n=CosMove(Ani['Startwert'],Ani['Endwert'],Ani['schritte'],AktuellerSchritt); break;
      default: var n=Startwert+parseInt((Ani['Endwert']-Ani['Startwert'])*AktuellerSchritt/Ani['schritte']);
    }
  Ani['Objekt'][Ani['EigenschaftStr']]=n+Ani['Einheit'];
  Ani['AktuellerSchritt']++;

  window.setTimeout("AnimationTimer('"+AnimationID+"',"+Ani['AktuellerSchritt']+");",Ani['SchrittDauer']);
}
function AnimationTimerOpacity(AnimationID,AktuellerSchritt)
{ var Ani=RunningAnimationsArr[AnimationID];
  if (Ani['AktuellerSchritt']!=AktuellerSchritt){return;}//Animation anhalten, da neue gestartet
  if (Ani['AktuellerSchritt']>Ani['schritte']) {return;}//Animation beendet

  switch (Ani['typ'])
    { case 1: var n=CosMove(Ani['Startwert'],Ani['Endwert'],Ani['schritte'],AktuellerSchritt); break;
      default: var n=Startwert+parseInt((Ani['Endwert']-Ani['Startwert'])*AktuellerSchritt/Ani['schritte']);
    }
  //alert(Ani['Objekt'].style.filter+","+Ani['Objekt'].id)
  setOpacity(Ani['Objekt'],n);
  Ani['AktuellerSchritt']++;
  window.setTimeout("AnimationTimerOpacity('"+AnimationID+"',"+Ani['AktuellerSchritt']+");",Ani['SchrittDauer']);
}

//#######################################################################################################################
