// Reguläre Ausdrücke, die oft verwendet werden
var EMAIL = /^[\w\.\-]+@[a-zA-Z_\-\.]+?\.[a-zA-Z]{2,4}$/;
var LOCALHOST = /^[\w\.\-]+@localhost$/;
/*
 * Browser agnostisches Finden von Elementen
 * einer bestimmten id
 */
function getForId(id) {
  if (document.getElementById) {
    return document.getElementById(id);
  } else if (document.all) {
    return document.all(id);
  } else if (document.layers) {
    return document.layers(id);
  }
  return null;
}

function setEnabled(node, enabled) {
  if (typeof(node) == "string") {
    node = getForId(node);   
  }
  if (enabled) {
    node.removeAttribute("disabled");
  } else {
    node.setAttribute("disabled", "disabled");
  }
}

function setVisible(node, visible) {
  if (typeof(node) == "string") {
    node = getForId(node);   
  }
  if (node) {
    node.style.display = visible ? 'block' : 'none'; 
	}
}

/**
 * Schneidet alle Leerzeichen um den String ab
 */ 
function trim(string) {
  if (typeof(string) == "string") {
    return string.replace(/^\s+|\s+$/g, '');
  }
  return string;
}

/**
 * Bequemer für das Anfügen von Knoten
 */
function appendNode(node, nodeName) {
  return node.appendChild(document.createElement(nodeName));
}

/**
 * Bequemer für das Anfügen von Text
 */
function appendText(node, text) {
  return node.appendChild(document.createTextNode(text));
}

/**
 * Hilft bei der Erstellung von Tabpanelen: Sektionen der Form
 * <div id="R">
 * <span class="tab" ref="dahin.html" desc="Dahin"></span>
 * <span class="tab" ref="dorthin.html" desc="Dorthin"></span>
 * ...
 * 
 * werden durch setTab("R", "Beschreibung"); entsprechend aufgewertet.
 */ 
function setTab(nodeName, index) {
  var reiterDiv = getForId(nodeName);
  var c = reiterDiv.firstChild;
  var i = 0;
  while (c) {
    if (c.className == "tab") {
      if (index == i || index == c.getAttribute("desc")) {
        // kein Anchor, setze als selektiert
        appendText(c, c.getAttribute("desc"));
        c.setAttribute("class", "sel"); c.className="sel"; // IE Bug 
      } else {
        var a = appendNode(c, "a");
        appendText(a, c.getAttribute("desc"));
        a.setAttribute("href", c.getAttribute("ref"));
      }
      i++;
    }
    c = c.nextSibling;
  }
}

function parseFloatKomma(x, error) {
  x = x.replace(/,/g, ".");
  if  (x.search(/[^\s0123456789.()+\-*\/%]/) == -1) {
  	try {
  	  return eval(x);
  	} catch(e) {
  	  // nichts zu tun
  	}
  } 
  error.push("Beträge bitte korrekt angeben");
  return x;
}

/**
 * Erzeugt fetten Text
 */
function boldText(element, text, underline) {
  var textNode = document.createTextNode(text);
  if (underline) {
    var ul = document.createElement('span');
    ul.setAttribute("style", "font-weight:bold;");
    ul.appendChild(textNode);
    element.appendChild(ul);
  } else {
    element.appendChild(textNode);
  }
}

/**
 * Rundet auf die zweite Stelle nach 
 * dem Komma und hängt fehlende Nullen an
 */
function round2(x) {
  if (typeof(x) == "number") {
    var k = new String(Math.round(x * 100.0) / 100.0);
    k += (k.indexOf('.') == -1)? '.00' : '00';
    var p = k.indexOf('.');
    return k.substring(0, p) + ',' + k.substring(p+1, p+3);
  }
  return x;
}

/**
 * Zeigt ein Datum menschenlesbar
 */
function renderDate(date) {
  if (!date) return "";
  return date.getFullYear() + " " + MONTH[date.getMonth()] + " "  + date.getDate()
}

