/**
 * @version			1.0.8 - 23 oktober 2011
 * 
 * @copyright		1.0.8,	23 oktober 2011,	Rob Ruigrok,			JSLint compatible
 * @copyright		1.0.7, 28 april 2010,		Jan Niemantsversdriet,	Mogelijkheid om achteraf nog de css klasse in te stellen
 * @copyright		1.0.6, 2 februari 2010,		Jan Niemantsversdriet,	Alle variabelen worden nu gedeclareerd
 * @copyright		1.0.5, 18 september 2008,	Jan Niemantsversdriet,	Mogelijkheid om in te stellen of de positie moet worden ingesteld
 * @copyright		1.0.4, 12 september 2008,	Jan Niemantsversdriet,	Parameters voor vSetPosition worden nu naar integer geparsed
 * @copyright		1.0.3, 11 september 2008,	Jan Niemantsversdriet,	Laag kan ook niet blokerend worden gemaakt, relatieve positie
 * @copyright		1.0.2, 9 september 2008,	Jan Niemantsversdriet,	Breedte kan worden ingesteld
 * @copyright		1.0.1, 5 februari 2008,		Jan Niemantsversdriet,	Popup kan eventueel gesloten worden als er naast geklikt wordt
 * @copyright		1.0.1, 5 februari 2008,		Jan Niemantsversdriet,	Mogelijkheid om de popup een positie te geven
 * @copyright		1.0.0, ?,					Jan Niemantsversdriet,	Gemaakt
 * 
 * @copyright		afhankelijkheid:	BB/Screen/layers.js
 * @copyright		afhankelijkheid:	BB/JSDivers/check.js
 * @copyright		afhankelijkheid:	BB/Screen/screen.css
 */

/**
 * @var integer					het aantal schermen wat is geopend sinds de start van dit script
 */
var iScreenCounter = 0;

/**
 * Klasse voor een popup scherm
 * 
 * @param string a_sInnerHTML			de html voor in het venster
 * @param string a_sClassName			de naam van de css klasse voor het scherm
 * @param string a_sId					de id van het scherm
 */
function cScreen(a_sInnerHTML, a_sClassName, a_sId) {
	if (!bIsDefined(a_sId)) a_sId = "screen" + iScreenCounter;
	this._sInnerHTML = a_sInnerHTML;
	this._sClassName = a_sClassName;
	this._sId = a_sId;
	this._bClose = true;
	this._bCloseOnClick = false;
	this._bSetPosition = true;
	iScreenCounter++;
}

/**
 * Stelt de css klasse voor deze popup in
 * 
 * @param string a_sClassName			de css klassenaam
 * @since 1.0.7 - 28 april 2010
 * @author Jan Niemantsverdriet
 */
cScreen.prototype.vSetClass = function(a_sClassName) {
	this._sClassName = a_sClassName;
};

/**
 * Toont de popup op het scherm
 */
cScreen.prototype.vToScreen = function() {
	if (!this.bIsOnScreen()) {
		// startpositie
		var iPosVer = -1000;
		var iPosHor = -1000;
		
		//  initialisatie
		var oLayer = oAddLayer(this._sId + "_layer", this._bCloseOnClick);
		var oScreen = document.createElement('div');
		oScreen.className = this._sClassName;
		oScreen.id = this._sId;

		// werkbalk toevoegen
		if (this._bClose) {
			oBar = document.createElement('div');
			oBar.className = 'screenTopBar';
			oBar.innerHTML = '<a href="javascript:bRemoveLayer(\'' + oLayer.id + '\')">X</a>';
			oScreen.appendChild(oBar);
		}
		
		// inhoud toevoegen
		var oInner = document.createElement('div');
		oInner.className = 'screenInnerDiv';
		oInner.id = this._sId + "_inner";
		oInner.innerHTML = this._sInnerHTML;
		oInner.id = this._sId + '_inner';
		
		// positie bepalen
		if (bIsDefined(this._iPosX)) iPosHor += this._iPosX;
		if (bIsDefined(this._iPosY)) iPosVer += this._iPosY;
		
		// breedte instellen
		if (bIsDefined(this._iWidth)) oScreen.style.width = this._iWidth + "px";
		
		// onderliggende laag eventueel evengroot te maken als het scherm
		if (bIsDefined(this._bBlokking) && !this._bBlokking) {
			oLayer.style.width = 'auto';
			oLayer.style.height = 'auto';
		}
		
		// scherm toevoegen aan de site
		this._oLayer = oLayer;
		this._oScreen = oScreen;
		this._vPosition(iPosHor, iPosVer);
		oScreen.appendChild(oInner);
		oLayer.appendChild(oScreen);
		
		// eventueel scherm over een van zijn assen draaien
		if (bIsDefined(this._bFlipPositionHorizontal) && this._bFlipPositionHorizontal) iPosHor -= oScreen.offsetWidth;
		if (bIsDefined(this._bFlipPositionVertical) && this._bFlipPositionVertical) iPosVer	-= oScreen.offsetHeight;
		
		// scherm zichtbaar plaatsen
		this._vPosition(iPosHor + 1000, iPosVer + 1000);
	}
};

/**
 * Stelt in of het scherm een sluitknop krijgt
 * 
 * @param boolean a_bClose			true = wel sluitknop
 */
cScreen.prototype.vSetClose = function(a_bClose) {
	this._bClose = a_bClose;
};

/**
 * Geeft aan of dit popup scherm op dit moment zichtbaar is
 * 
 * @return boolean				true = zichtbaar
 */
cScreen.prototype.bIsOnScreen = function() {
	var oDiv = document.getElementById(this._sId);
	return (!bIsNull(oDiv));
};

/**
 * Vervangt de html in de popup
 * 
 * @param string a_sInnerHTML			de nieuwe html
 */
cScreen.prototype.vUpdate = function(a_sInnerHTML) {
	oDiv = document.getElementById(this._sId + '_inner');
	if (bIsNull(oDiv)) {
		hErrorFunction(2, 0, "verversen van scherm " + this._sId + " terwijl dit niet zichtbaar is");
		this._sInnerHTML = a_sInnerHTMl;
	} else {
		oDiv.innerHTML = a_sInnerHTML;
	}
};

/**
 * Stelt de positie van de popup in
 * 
 * @param integer a_iLeft			het aantal pixels vanaf de linkerkant
 * @param integer a_iTop			het aantal pixels vanaf de bovenkant
 * @since 1.0.1 - 5 februari 2008
 */
cScreen.prototype.vSetPosition = function(a_iLeft, a_iTop) {
	this._iPosX = parseInt(a_iLeft,10);
	this._iPosY = parseInt(a_iTop,10);
};

/**
 * Stelt in of de popup gesloten moet worden als er naast geklikt wordt
 * 
 * @param boolean a_bMode			true = sluiten als er naast geklikt wordt
 * @since 1.0.1 - 5 februari 2008
 */
cScreen.prototype.vSetCloseOnMis = function(a_bMode) {
	this._bCloseOnClick = a_bMode;
};

/**
 * Sluit deze popup
 * 
 * @since 1.0.1 - 5 februari 2008
 */
cScreen.prototype.vClose = function() {
	bRemoveLayer(this._sId + "_layer");
};

/**
 * Stelt de breedte van de popup in
 * 
 * @param integer a_iWidth				de breedte in pixels
 */
cScreen.prototype.vSetWidth = function(a_iWidth) {
	this._iWidth = a_iWidth;
};

/**
 * Stelt in of het scherm geblokkeerd wordt
 *
 * @param boolean a_bMode			true = scherm blokeerd, false = scherm blokeerd niet
 * @since 1.0.3 - 11 september 2008
 */
cScreen.prototype.vSetBlokking = function(a_bMode) {
	this._bBlokking = a_bMode;
};

/**
 * Stelt een relative positie in
 *
 * @param DOM a_oTarget				het object ten opzichte waarvan dit scherm moet worden geplaatst
 * @param boolean a_bTop			true = ten opzichte van de bovenkant van het element, false = ten opzichte van de onderkant na het element
 * @param boolean a_bLeft			true = ten opzichte van de linkerkant van het element, false = ten opzichte van de rechterkant na het element
 * @param integer a_iHorOffset		het aantal pixels verschuiving in horizontale richting (negatief = naar links)
 * @param integer a_iVerOffset		het aantal pixels verschuiving in vertikale richting (negatief = naar boven)
 * @since 1.0.3 - 11 september 2008
 */
cScreen.prototype.vSetRelativePosition = function (a_oTarget, a_bTop, a_bLeft, a_iHorOffset, a_iVerOffset) {
	var aPosition = aFindScreenPos(a_oTarget);
	var iPosVer = aPosition[0] + a_iHorOffset;
	var iPosHor = aPosition[1] + a_iVerOffset;
	if (!a_bLeft) iPosVer += a_oTarget.offsetWidth;
	if (!a_bTop) iPosHor += a_oTarget.offsetHeight;
	this.vSetPosition(iPosVer, iPosHor);
};

/**
 * Zet het scherm op zijn plek
 * 
 * @param integer a_iLeft			de horizontale positie
 * @param integer a_iTop			de horizontale positie
 * @since 1.0.3 - 11 september 2008
 */
cScreen.prototype._vPosition = function(a_iLeft, a_iTop) {
	if (!this._bSetPosition) return;
	if (bIsDefined(this._bBlokking) && !this._bBlokking) {
		this._oScreen.style.left = "0px";
		this._oScreen.style.top = "0px";
		this._oLayer.style.left = a_iLeft + "px";
		this._oLayer.style.top = a_iTop + "px";
	} else {
		this._oScreen.style.left = a_iLeft + "px";
		this._oScreen.style.top = a_iTop + "px";
	}
};

/**
 * Flipt de positie over de assen
 * 
 * @param boolean bFlipHor			true = opgegeven y-positie is positie van de onderkant
 * @param boolean bFlipVer			true = opgegeven x-positie is positie van de rechterkant
 * @since 1.0.3 - 11 september 2008
 */
cScreen.prototype.vSetFlips = function(a_bFlipHor, a_bFlipVer) {
	  this._bFlipPositionHorizontal = a_bFlipHor;
	  this._bFlipPositionVertical = a_bFlipVer;
};

/**
 * Stelt in of de positie moet worden ingesteld
 *
 * @param boolean a_bSetPosition			true = stel positie in
 */
cScreen.prototype.vSetSetPosition = function(a_bSetPosition) {
	this._bSetPosition = a_bSetPosition;
};


