// Hier soll eine Sammlung von Funktionen entstehen, die immer mal gebraucht werden,
// aber von Javscript nicht zur Verfügung gestellt werden

// 1. Array-Functions

// Hilfsfunktion zum Überprüfen, ob es ein Element x im array y gibt
// Mann, Mann, daß es sowas nicht gibt is schon Panne
function inArray(x,Arr) 
{
  if(Arr.length)
    {
      for(var i=0; i<Arr.length;i++) {
	if(Arr[i] == x)
	  {
	    return true;
	  }
      }
    }
  else
    {
      // wir suchen in einem assoc. Arrays nach Wert x
      for(properties in Arr)
	{
	  if(Arr[properties] == x) 
	    {
	      return true;
	    }
	}
    }
  return false;
}

// Prüfen ob ein Array-Key existiert
function arrayKeyExists(x, Arr)
{
  if(Arr.length)
    {
      for(var i=0; i<Arr.length;i++) {
	if(i == x)
	  {
	    return true;
	  }
      }
    }
  else
    {
      // wir suchen in einem assoc. Arrays nach Wert x
      for(properties in Arr)
	{
	  if(properties == x)
	    {
	      return true;
	    }
	}
    }
  return false;
}

// Tauscht keys und dazugehörige values
function Arrayflip(Arr)
{
  var newArr = new Array();
  if(Arr.length)
    {
      for(var i=0; i<Arr.length;i++)
	{
	  newArr[Arr[i]] = i;
	}
    }
  else
    {
      // hier werden assoc. Arrays geflippt
      for(properties in Arr)
	{
	  newArr[Arr[properties]] = properties;
	}
    }
  return newArr;
}

// Countet ein Array unabhängig vom Array-Typ
function Count(Arr)
{
  if(!Arr) return 0;
  // mal gucken was es ist
  if(Arr.length)
    {
      // aha, normales Array
      return Arr.length;
    }
  else
    {
      // wir haben wohl ein assoc. Array 
      // -> Javascript macht aus solchen ein Object
      // d.h. Arr besitzt nicht mehr die Eigenschaften/Methoden
      // eines Array sondern die eines Objects
      var counter = 0;
      for(properties in Arr)
	{
	  counter++;
	}
      return counter;
    }
}

// 2. Format-Funktionen

/**
 * Runden von Dezimalzahlen mit best. Genauigkeit
 * @param z - Zahl
 * @param format - Nachkommastellen
 * @param force_format - hiermit werden z.B. .00 erzwungen
 * @return FALSE oder Zahl im gew. Format
 */
function Round(z, format, force_format)
{
  _mult = Math.pow(10, format);
  z = ''+z+'';
  // 1. Komma durch Punkt ersetzen
  if(isNaN(z) && z.indexOf(',') != -1)
    {
      z = z.replace(',','.');
    }
  // 2. ist es eine Zahl
  if (isNaN(z)) 
    {
      z = 0;
    }
  // 3. runden
  z = (Math.round((z*_mult)))/_mult;
  // 4. Nachkommastellen erzwingen
  if(force_format)
    {
      z = z.toFixed(format);
    }
  return z;
}

// 3. String-Funktionen
function trim(str)
{
  return str.replace(/^(\s+)?(\S*)(\s+)?$/, '$2');
}

function ltrim(str)
{
  return str.replace(/^\s*/, '');
}

function rtrim(str)
{
  return str.replace(/\s*$/, '');
}

