/**
 * Dateiname       : javascript/Overlayer.js
 * Erzeugungsdatum : 07.02.2008
 * Autor           : Carsten Kube
 * Version         : 1.0
 * Letzte Akt.     : 10.04.2008 (CK)
 * 
 * (c) Copyright SECRA GmbH
 */

var secra, Geometry, Handler;
if(!secra) {secra = {};}
else if(typeof secra !== "object") {throw new Error("secra ist kein Objekt!");}
if(secra.Overlayer) {throw new Error("secra.Overlayer existiert bereits!");}

secra.Overlayer = function(imagefolder) {
  if(!Geometry) {throw new Error("Geometry.js (V1.0) nicht geladen!");}
  if(!Handler) {throw new Error("Handler.js (V1.0) nicht geladen!");}
  secra.Overlayer.objCounter += 1;
  this.objId = secra.Overlayer.objCounter;
  this.imagefolder = imagefolder;

  this.htmlObjects = document.getElementsByTagName("object");
  this.htmlSelects = document.getElementsByTagName("select");
  this.divlayer = document.createElement("div");
  this.divcont  = document.createElement("div");

  this.init();
};

secra.Overlayer.objCounter = 0;

secra.Overlayer.prototype.addClose = function(func){
  Handler.add(this.divlayer, "click", func);	
}

secra.Overlayer.prototype.init = function() {
  this.divlayer.style.zIndex = "100";
  this.divlayer.style.position = "absolute";
  this.divlayer.style.left = "0px";
  this.divlayer.style.top = "0px";
  var isIE6  = (navigator.appVersion.indexOf("MSIE 6") != -1) ? true : false;
  if(isIE6){
	this.divlayer.style.backgroundImage = "url("+this.imagefolder+"grau.gif)";
  } else {
  	this.divlayer.style.backgroundImage = "url("+this.imagefolder+"transparent.png)";
  }
  this.divlayer.style.visibility = "hidden";

  this.divcont.style.zIndex = "101";
  this.divcont.style.position = "relative";
  this.divcont.style.left = "0px";
  this.divcont.style.top = "0px";
  //this.divcont.style.visibility = "hidden";

  this.zerosize();

  this.divlayer.appendChild(this.divcont);
  document.body.appendChild(this.divlayer);

  var thisobj = this;
  Handler.add(window, "resize", function(){ /* closure */ thisobj.resize();});
};

secra.Overlayer.prototype.show = function() {
  this.hideHTMLElements('htmlObjects');
  this.hideHTMLElements('htmlSelects');
	this.resize();
	this.divlayer.style.visibility = "visible";
};

secra.Overlayer.prototype.hide = function() {
  this.unhideHTMLElements('htmlObjects');
  this.unhideHTMLElements('htmlSelects');
	this.zerosize();
	this.divlayer.style.visibility = "hidden";
};

secra.Overlayer.prototype.resize = function() {
	this.divlayer.style.width = Geometry.getDocumentWidth() + "px";
	this.divlayer.style.height = Geometry.getDocumentHeight() + "px";
  //this.divcont.style.left = -this.getX(this.divcont)+"px";
  //this.divcont.style.top = -this.getY(this.divcont)+"px";
  //alert(this.divcont.style.top+"2"+this.divcont.style.left);
};

secra.Overlayer.prototype.repositionContainer = function() {
	this.divlayer.style.width = Geometry.getDocumentWidth() + "px";
	this.divlayer.style.height = Geometry.getDocumentHeight() + "px";
};

secra.Overlayer.prototype.zerosize = function() {
	this.divlayer.style.width = "0px";
	this.divlayer.style.height = "0px";
  this.divcont.style.height = "0px";
};

secra.Overlayer.prototype.hideHTMLElements = function(prop) { // private
	// alten Status sichern, dann unsichtbar
  for(var i = 0, k = this[prop].length; i < k; i += 1){
    this[prop][i].oldvisibility = this[prop][i].style.visibility;
	  this[prop][i].style.visibility = "hidden";
  }
};

secra.Overlayer.prototype.unhideHTMLElements = function(prop) { // private
	for(var i = 0, k = this[prop].length; i < k; i += 1){
	  this[prop][i].style.visibility = this[prop][i].oldvisibility;
	}
};

secra.Overlayer.prototype.getContainer = function() {
	return this.divcont;
};

secra.Overlayer.prototype.toString = function() {
  return "Object [Overlayer Id: "+this.objId+"]";
};

secra.Overlayer.prototype.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.Overlayer.prototype.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;
};
