
// Basis-Funktion (wie $_() in JQuery)
function _(suche)
{
  if(typeof(suche)=="object")return suche;
  if(suche==""){console.log("keine Suche angegeben bei Funktion '_'!");return;}
  if(suche.charAt(0)=='#' && suche.search(" ")==-1)return document.getElementById(suche.slice(1));
  if(suche.charAt(0)=='.' && suche.search(" ")==-1)return Array.from(document.getElementsByClassName(suche.slice(1)));
  if(document.getElementById(suche))return document.getElementById(suche);
  if(document.getElementsByName(suche).length>0)return document.getElementsByName(suche)[0]; // nur eins zurückgeben
  if(document.getElementsByClassName(suche).length>0)return Array.from(document.getElementsByClassName(suche));
  if(document.getElementsByTagName(suche).length>0)return Array.from(document.getElementsByTagName(suche));
  if(document.querySelectorAll(suche).length>0)return Array.from(document.querySelectorAll(suche));

  return console.debug("Ein Objekt mit '"+suche+"' existiert nicht bei Funktion '_'!");
}

// zeigen:
function _z(suche)
{
  r=_(suche);
  if(!r)return;
  if(Array.isArray(r))
  {
    for(i=0;i<r.length;i++)
    {
      wie = "block";
      if (r[i].getAttribute('show'))wie = r[i].getAttribute('show');
      r[i].style.display = wie;
    }
    return;
  }
  wie = "block";
  if (r.getAttribute('show'))wie = r.getAttribute('show');
  r.style.display = wie;
  return;
}
function zeigen(was){return _z(was);}
function zeige(was){return _z(was);}

// verstecken:
function _v(suche)
{
  r=_(suche);
  if(!r)return;
  if(Array.isArray(r))
  {
    for(i=0;i<r.length;i++)
    {
      r[i].style.display = 'none';
    }
    return;
  }
  r.style.display = 'none';
  return;
}
function verstecken(was){return _v(was);}
function verstecke(was){return _v(was);}

// leeren
function _l(suche)
{
  r=_(suche);
  if(!r)return;
  if(Array.isArray(r))
  {
    for(i=0;i<r.length;i++)
    {
      r[i].innerHTML = '';
    }
    return;
  }
  r.innerHTML = '';
  return;
}
function leeren(was){return _l(was);}
function leere(was){return _l(was);}

// remove/delete from DOM
function _r(suche)
{
  r=_(suche);
  if(!r)return;
  if(Array.isArray(r))
  {
    for(i=0;i<r.length;i++)
    {
      r[i].remove();
    }
    return;
  }
  r.remove();
  return;
}
function _d(was){return _r(was);}

// toggle
function _t(suche)
{
  rt=_(suche);
  if(!rt)return;
  if(Array.isArray(rt))
  {
    for(j=0;j<rt.length;j++)
    {
      if (rt[j].style.display == "none") _z(rt[j]);
      else { _v(rt[j]); }
    }
    return;
  }
  if (rt.style.display == "none") _z(suche);
  else { _v(suche); }
  return;
}
function togglen(was){return _t(was);}
function toggle(was){return _t(was);}
function toggel(was){return _t(was);}
function joggel(was){return _t(was);} // ;-) muss sinn


// Visibility: visible:
function _vv(suche)
{
  r=_(suche);
  if(!r)return;
  if(Array.isArray(r))
  {
    for(i=0;i<r.length;i++)
    {
      r[i].style.visibility="visible";
    }
    return;
  }
  r.style.visibility = "visible";
  return;
}
function _visvisible(was){return _vv(was);}
function _vvisible(was){return _vv(was);}


// Visibility: hidden:
function _vh(suche)
{
  r=_(suche);
  if(!r)return;
  if(Array.isArray(r))
  {
    for(i=0;i<r.length;i++)
    {
      r[i].style.visibility="hidden";
    }
    return;
  }
  r.style.visibility = "hidden";
  return;
}
function _vishidden(was){return _vh(was);}
function _vhidden(was){return _vh(was);}

// classList remove
function _clr(suche,class_to_remove) // welche class soll removed werden?
{
  rt=_(suche);
  if(!rt)return;
  if(Array.isArray(rt))
  {
    for(j=0;j<rt.length;j++)
    {
      _(rt[j]).classList.remove(class_to_remove);
    }
    return;
  }
  _(rt).classList.remove(class_to_remove);
  return;
}
function _classremove(suche,class_to_remove){return _clr(suche,class_to_remove);}
function _classlistremove(suche,class_to_remove){return _clr(suche,class_to_remove);}
function _clremove(suche,class_to_remove){return _clr(suche,class_to_remove);}

// classList add
function _cla(suche,class_to_add) // welche class soll geadded werden?
{
  rt=_(suche);
  if(!rt)return;
  if(Array.isArray(rt))
  {
    for(j=0;j<rt.length;j++)
    {
      _(rt[j]).classList.add(class_to_add);
    }
    return;
  }
  _(rt).classList.add(class_to_add);
  return;
}
function _classadd(suche,class_to_add){return _cla(suche,class_to_add);}
function _classlistadd(suche,class_to_add){return _cla(suche,class_to_add);}
function _cladd(suche,class_to_add){return _cla(suche,class_to_add);}


// classList toggle
function _clt(suche,class_to_toggle) // welche class soll getoggelt werden?
{
  rt=_(suche);
  if(!rt)return;
  if(Array.isArray(rt))
  {
    for(j=0;j<rt.length;j++)
    {
      if(_(rt[j]).classList.contains(class_to_toggle))_clr(rt[j],class_to_toggle);
      else{_cla(rt[j],class_to_toggle);}
    }
    return;
  }
  if(_(rt).classList.contains(class_to_toggle))_clr(rt,class_to_toggle);
  else{_cla(rt,class_to_toggle);}
  return;
}
function _classtoggle(suche,class_to_add){return _clt(suche,class_to_add);}
function _classlisttoggle(suche,class_to_add){return _clt(suche,class_to_add);}
function _cltoggle(suche,class_to_add){return _clt(suche,class_to_add);}

// ---------------------------------------------------------------------
// weitere Funktionen:

function dreh_zeit(zeit)
{
    if(zeit)
    {
        teile_zeit=zeit.split(" ");
        teile_zeit2=teile_zeit[0].split("-");
        zeit=teile_zeit2[2]+"."+teile_zeit2[1]+"."+teile_zeit2[0]+" "+teile_zeit[1];
    }
    else{zeit="-";}
    return zeit;
}

function dreh_datum(datum)
{
    if(datum)
    {
        teile=datum.split("-");
        datum=teile[2]+"."+teile[1]+"."+teile[0];
    }
    else{datum="-";}
    return datum;
}

function zeichenzaehler(feld_id,zaehlfeld_id,max_zeichen)
{
  anzahl=_(feld_id).value.length;
  if(anzahl>max_zeichen)
  {
    anzahl=max_zeichen;
    // Kürzen auf Max:
    _(feld_id).value=_(feld_id).value.substring(0,max_zeichen);
    alert("Maximal "+max_zeichen+" Zeichen!");
  }
  _(zaehlfeld_id).innerHTML=anzahl;
}

function zeit_her(unix_timestamp)
{
  var jetzt = Math.round((new Date()).getTime() / 1000);
  diff=jetzt-unix_timestamp;

  //console.log(jetzt,unix_timestamp);

  her=diff;
  einheit="Sek.";
  if(her>=60)
  {
    her=Math.round(her/60);
    einheit="Min.";
    if(her>=60)
    {
      her=Math.round(her/60);
      einheit="Std.";
      if(her>=24)
      {
        her=Math.round(her/24);
        einheit="Tage";
        if(her>=7)
        {
          her=Math.round(her/7);
          einheit="Wo.";
          if(her>=4)
          {
            her=Math.round(her/4);
            einheit="Mon.";
            if(her>=12)
            {
              her=Math.round(her/12);
              einheit="Jahre";
            }
          }
        }
      }
    }
  }
  ret=her+"&nbsp;"+einheit;
  //console.log(ret);
  // Ausnahmen:
  if(her==1 && einheit=="Tage")ret="gestern";
  if(her==2 && einheit=="Tage")ret="vorgestern";
  //if(her==1 && einheit=="Wo.")ret="letzte Woche";
  //if(her==1 && einheit=="Mon.")ret="letzten Monat";
  //if(her==1 && einheit=="Jahre")ret="letztes Jahr";
  //if(her==2 && einheit=="Jahre")ret="vorletztes Jahr";
  //if(her<5 && einheit=="Min.")ret="eben";
  if(her<10 && einheit=="Sek.")ret="jetzt";
  return ret;
}

function to_url(string,maxlength)
{
  string=string.trim();
  string=string.replace(/ä/ig,"ae");
  string=string.replace(/ö/ig,"oe");
  string=string.replace(/ü/ig,"ue");
  string=string.replace(/Ä/ig,"Ae");
  string=string.replace(/Ö/ig,"Oe");
  string=string.replace(/Ü/ig,"Ue");
  string=string.replace(/ß/ig,"ss");
  string=string.replace(/[^a-zA-Z0-9\-]/ig,"_");
  string=string.replace(/_{1,}/ig,"_");
  string=string.replace(/^_/ig,"");
  string=string.replace(/_$/ig,"");
  if(typeof(maxlength)!==undefined)string=string.slice(0,maxlength);
  return string;
}

function nl2br(txt)
{
  return txt.replace(/\n/ig,"\n<br>");
}

function replace_links(txt)
{
//  return txt.replace(/(http[s]{0,1}\:\/\/\S{4,})\s{0,}/ims, '<a href="$1" target="_blank">$1</a> ');
  regex = /(\bhttps?:\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/gim;
  return txt.replace(regex, '<a href="$1" target="_blank">$1</a> ');
}

function replace_fett(txt)
{
  return txt.replace(/_(.+?)_/ig,'<b>$1</b>');
}

function strip_tags(txt)
{
  txt=txt.replace(/(<([^>]+)>)/gi, "");
  txt=txt.replace(/</ig, "&lt;");
  txt=txt.replace(/>/ig, "&gt;");
  return txt;
}

function bereinigen(txt)
{
  txt=txt.replace(/`/ig,"");
  txt=txt.replace(/"/ig,"");
  txt=txt.replace(/'/ig,"");
  return txt;
}

function replace_smilies(txt)
{
  var smilies = {
    "<3": "\u2764\uFE0F",
    "</3": "\uD83D\uDC94",
    ":D": "\uD83D\uDE00",

    ":-D": "\uD83D\uDE00",
    ";D": "\uD83D\uDE00",
    ";-D": "\uD83D\uDE00",

    ":)": "\uD83D\uDE03",
    ":-)": "\uD83D\uDE03",

    ";)": "\uD83D\uDE09",
    ";-)": "\uD83D\uDE09",

    ":(": "\uD83D\uDE12",
    ";(": "\uD83D\uDE12",
    ":-(": "\uD83D\uDE12",
    ";-(": "\uD83D\uDE12",

    ":p": "\uD83D\uDE1B",
    ":-p": "\uD83D\uDE1B",

    ";p": "\uD83D\uDE1C",
    ";-p": "\uD83D\uDE1C",
    ":'(": "\uD83D\uDE22"
  };

  for(var rep in smilies)
  {
    txt = txt.replace(rep, smilies[rep]);
  }
  return txt;
}

function rechne(operator,feld_id,min_menge=0,max_menge=9999)
{
  anzahl=parseInt(_(feld_id).value);
  eval("anzahl=anzahl"+operator+"1;");
  if(anzahl<min_menge)anzahl=min_menge;
  if(anzahl>max_menge)anzahl=max_menge;
  _(feld_id).value=anzahl;
}


function validate_email(email)
{
  if (/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(email))
  {
    return true;
  }
  return false;
}
