/**
 * Dateiname       : javascript/Overlayer.js
 * Erzeugungsdatum : 07.02.2008
 * Autor           : Carsten Kube
 * Version         : 1.1
 * Letzte Akt.     : 10.10.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(!secra.Secrautility) {throw new Error("secra.Secrautility (V1.0) nicht geladen!");}
  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.browserName = navigator.appName;
  this.isIE = this.browserName.indexOf("Microsoft Internet Explorer")==-1 ? false : true;

  this.init();
};

secra.Overlayer.objCounter = 0;

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";
  if(this.isIE){
  	this.divlayer.style.backgroundImage = "url("+this.imagefolder+"grau.gif)";
  } else {
  	this.divlayer.style.backgroundImage = "url("+this.imagefolder+"grau_transparent.png)";
  }
  this.divlayer.style.visibility = "hidden";

  this.divcont.style.zIndex = "101";
  this.divcont.style.position = "absolute";
  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.divlayer.removeChild(this.divcont);
  this.hideHTMLElements('htmlObjects');
  this.hideHTMLElements('htmlSelects');
  this.divlayer.appendChild(this.divcont);
	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.getViewportWidth() + "px";
	if(Geometry.getViewportHeight() > Geometry.getDocumentHeight()){
		this.divlayer.style.height = Geometry.getViewportHeight() + "px";
	} else {
		this.divlayer.style.height = Geometry.getDocumentHeight() + "px";
	}
};

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;
};

secra.Overlayer.prototype.getStyle = function(elem, stylename) {
  if(elem.currentStyle) {
      return elem.currentStyle[stylename];
  } else if(window.getComputedStyle) {
      return window.getComputedStyle(elem, null)[stylename];
  }
  return null;
};

