/*
 * Dateiname       : javascript/Secrautility.js
 * Letzte Akt.     : 18.01.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;
};

/**
  *  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;
  }
};

secra.Secrautility.getX = function(element) {
  var x = 0;
  for(var e = element; e; e = e.offsetParent) {
    x += e.offsetLeft;
  }
  for(e = element.parentNode; e && e != document.body; e = e.parentNode) {
    if(e.scrollLeft) {
      x -= e.scrollLeft;
    }
  }
  return x;
};

secra.Secrautility.getY = function(element) {
  var y = 0;
  for(var e = element; e; e = e.offsetParent) {
    y += e.offsetTop;
  }
  for(e = element.parentNode; e && e != document.body; e = e.parentNode) {
    if(e.scrollTop) {
      y -= e.scrollTop;
    }
  }
  return y;
};

