//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);
}
//### entferne Leerzeichen am Anfang/Ende
function trim(s)
{ while (s.substring(0,1) == ' ') {s = s.substring(1,s.length);}
  while (s.substring(s.length-1,s.length) == ' ') {s = s.substring(0,s.length-1);}
  return s;
}


//#### 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']);
}

//#######################################################################################################################
//### Cookie-Handling ###
//name = des Cookies; value=Wert expire=Verfallsdatum  0=aktuelle Sitzung  <0=Löschen  >0=Zeit in Sec.  path=Verfügbarkeit (/=ab rootdir)
function setcookie(name,value ,expire,path)
{ if (expire!=0)
  { var a = new Date(); a = new Date(a.getTime() +(expire*1000));
    var expireStr=' expires='+a.toGMTString()+';';
  }
  else {var expireStr='';}
  document.cookie = name+'='+escape(value)+';'+expireStr+' path='+path+';';
}

function gettcookie(name)
{ var a = document.cookie+';';  var res = '';
  while(a != '')
  { var cookiename = a.substring(0,a.search('='));
    var cookiewert = a.substring(a.search('=')+1,a.search(';'));
    if(cookiewert == '') {cookiewert = a.substring(a.search('=')+1,a.length);}
    if(name == trim(cookiename))
    { res = cookiewert;
      return(unescape(res));
    }
    i = a.search(';')+1;
    if(i == 0) {i = a.length}
    a = a.substring(i,a.length);
  }
  return '';
}
