/*
 * Dateiname       : javascript/Secrautility.js
 * Version         : 1.1
 * Letzte Akt.     : 01.09.2008 (CK)
 * 
 * (c) Copyright SECRA GmbH
 */
var secra;
if(!secra)
{
  secra = {};
}
else if(typeof secra != "object")
{
  throw new Error("secra ist kein Objekt!");
}

if(secra.Secrautility)
{
  throw new Error("secra.Secrautility existiert bereits!");
}

secra.Secrautility = function() {
  // Leerer Konstruktor
};

secra.Secrautility.getElementsByClassName = function(classname, tagname, root) {
  if(!root)
  {
    root = document;
  }
  else if(typeof root == "string")
  {
    root = document.getElementById(root);
  }
  if(!tagname)
  {
    tagname = "*";
  }
  var all = root.getElementsByTagName(tagname);

  if(!classname)
  {
    return all;
  }
  var elements = [];
  for(var i = 0; i < all.length; i++)
  {
    var element = all[i];
    if(secra.Secrautility.isMember(element, classname))
    {
      elements.push(element);
    }
  }

  return elements;
};

secra.Secrautility.isMember = function(element, classname) {
  var classes = element.className;
  if(!classes)
  {
    return false;
  }
  if(classes == classname)
  {
    return true;
  }
  var whitespace = /\s+/;
  if(!whitespace.test(classes))
  {
    return false;
  }
  var c = classes.split(whitespace);
  for(var i = 0; i < c.length; i++)
  {
    if(c[i] == classname)
    {
      return true;
    }
  }
  return false;
};

secra.Secrautility.getElementById = function(aID) { 
  return (document.getElementById) ? document.getElementById(aID) : document.all[aID];
};

secra.Secrautility.displayPropertyNames = function(obj) {
  var names = "";
  for(var name in obj) {
    names += name + "<br>\n";
  }
  return names;
};

secra.Secrautility.displayPropertyNamesWithValues = function(obj) {
  var names = "";
  for(var key in obj) {
    try
    {
      names += key + ":" + obj[key] + "<br>\n";
    }
    catch(e)
    {
      names += key + ": null" + "<br>\n";
    }
  }
  return names;
};

secra.Secrautility.hasProperty = function(prop, obj) {
  for(var name in obj){
    if(name == prop)
    {
      return true;
    }
  }
  return false;
};

secra.Secrautility.typeOf = function(x){
  var t = typeof x;
  if (t != "object")
  {
    return t;
  }
  var c = Object.prototype.toString.apply(x);
  c = c.substring(8, c.length-1);
  return c;
};

secra.Secrautility.getDatumFehler = function(and, anm, anj, abd, abm, abj, required) { 
  var fehlerText = [];
  // Wenn nicht benoetigt, dann keine Pruefung.
  // Bedingung: ALLE Felder muessen leer sein
  if(!required) {
    // Alle Felder sind leer
    if( !(and.match(new RegExp("^[0-9]{1,2}$")) || anm.match(new RegExp("^[0-9]{1,2}$")) || anj.match(new RegExp("^2[0-9]{3}$")) ||
          abd.match(new RegExp("^[0-9]{1,2}$")) || abm.match(new RegExp("^[0-9]{1,2}$")) || abj.match(new RegExp("^2[0-9]{3}$"))) )
    {
      return fehlerText;
    }
  }
  // Fehlerhafte Eingabe
  if(!and.match(new RegExp("^[0-9]{1,2}$")) || !anm.match(new RegExp("^[0-9]{1,2}$")) || !anj.match(new RegExp("^2[0-9]{3}$")) ) {
    fehlerText.push("Anreisedatum");
  }
  if(!abd.match(new RegExp("^[0-9]{1,2}$")) || !abm.match(new RegExp("^[0-9]{1,2}$")) || !abj.match(new RegExp("^2[0-9]{3}$")) ) {
    fehlerText.push("Abreisedatum");
  }
  // Erstmal nur diesen Fehler berichten, weitere Ausgaben machen keinen Sinn
  if(fehlerText.length > 0)
  {
    return fehlerText;
  }
  // Datumsgültigkeit (z.B. 31. September abfangen)
  if( new Date(anj, anm-1, and).getDate() != and )
  {
    fehlerText.push("Anreisedatum ungültig");
  }
  if( new Date(abj, abm-1, abd).getDate() != abd )
  {
    fehlerText.push("Abreisedatum ungültig");
  }
  if(fehlerText.length > 0)
  {
    return fehlerText;
  }
  // Abreisedatum liegt vor dem Anreisedatum
  if( new Date(parseInt(anj,10), parseInt(anm,10)-1, parseInt(and,10)).getTime() >=
      new Date(parseInt(abj,10), parseInt(abm,10)-1, parseInt(abd,10)).getTime() )
  {
    fehlerText.push("Abreise- vor Anreisedatum");
  }
  return fehlerText;
};

secra.Secrautility.createConsole  = function(sichtbar) {
  secra.Secrautility.buttonClass    = "secrasub";
  secra.Secrautility.clearConButton = document.createElement("button");
  secra.Secrautility.clearConButton.setAttribute("name", "clearCon");
  secra.Secrautility.clearConButton.setAttribute("id", "clearCon");
  secra.Secrautility.clearConButton.setAttribute("class", secra.Secrautility.buttonClass);
  secra.Secrautility.clearConButton.innerHTML = "Konsole leeren";
  secra.Secrautility.console = document.createElement("div");
  secra.Secrautility.console.setAttribute("id", "console");
  secra.Secrautility.console.style.overflow         = "scroll";
  secra.Secrautility.console.style.fontFamily       = "monospace";
  secra.Secrautility.console.style.backgroundColor  = "#000000";
  secra.Secrautility.console.style.color            = "#00ff00";
  secra.Secrautility.console.style.maxHeight        = "240px";
  secra.Secrautility.console.style.height           = "240px";
  secra.Secrautility.console.style.minHeight        = "240px";
  secra.Secrautility.console.style.width            = "100%";
  document.body.appendChild(secra.Secrautility.clearConButton);
  secra.Secrautility.clearConButton = document.getElementById(secra.Secrautility.clearConButton.id)
  secra.Secrautility.clearConButton.onclick = function () {
    secra.Secrautility.console.innerHTML = "";
  };
  document.body.appendChild(secra.Secrautility.console);
  if(sichtbar === false) {
    secra.Secrautility.clearConButton.style.display = "none";
    secra.Secrautility.console.style.display = "none";
  }
  return secra.Secrautility.console;
};

/**
  *  Gibt ein Event-Objekt zurueck, unabhaengig vom Browser-Typ (IE oder NN)
  */
secra.Secrautility.getEventObject = function(e){
  if(typeof e == "undefined")
  {
    e = window.event;
  }
  return e;
};

/**
  *  Gibt das Element, in dem das Ereignis aufgetreten ist, zurueck, unabhaengig vom Browser-Typ (IE oder NN)
  */
secra.Secrautility.getSourceObject = function(e){
  e = secra.Secrautility.getEventObject(e);
  if(typeof e.target != "undefined")
  {
    return e.target;
  }
  else
  {
    return e.srcElement;
  }
};

secra.Secrautility.disableDefaultAction = function(e) {
  e = secra.Secrautility.getEventObject(e);
  if("preventDefault" in e)
  {
    e.preventDefault();
  }
  else
  {
    e.returnValue = true;
  }
};
