// Layer, that overlap the dropdown menus (<select>) in MSIE6 browsers

var sLayerHolderID = "ocmslayer_holderid_4682545990253821450946";
var iContentLoadCounter = 0;

function Layer() {
	
	window.Layer = this;
	
	this.holderURL = "/inc/layer.php?url=";
	this.contentURL = "";
	this.holderID = "";
	
	this.sBrowserName = "";
	this.sBrowserVersionMajor = "";
	this.sBrowserVersionMinor = "";
	this.sUserAgent = "";
	this.setBrowserType();
	
	this.holder = null; // az a DIV, amelybe belehelyeződik az iframe
	this.content = null; // az iframe
	
	this.hidingPanel = null;
	this.hiddingIframe = null;
	
	this.layerDimension = "maximum";
	this.layerPosition = "center";
	
	this.isXHTML = this.isDoctypeXhtml();
	this.useDocElement = this.isXHTML && this.sBrowserName=="Firefox" ? true : false;
	
	this.hiddingOpacity = 80;
	
	this.IsContentIframeResized = false;
};

Layer.prototype.show = function(sPosition, iMarginWidth, sContentURL, sBackground, sBackgroundHidingPanel, sHolderID, iHiddingOpacity) {

	this.holderID = sHolderID ? sHolderID : sLayerHolderID;
	if(iHiddingOpacity) this.hiddingOpacity = iHiddingOpacity;
	this.contentURL = sContentURL;
	this.IsContentIframeResized = false;
	/*
		Az sPosition lehetséges értékei:
			
			a)A layer a böngésző pillanatnyi ablakától függően dinamikusan kinyílik a teljes ablakba
				A layer között és a böngésző ablaka között csak annyi hely marad, amennyit az iMarginWidth megad
				
					sPosition = "maximum"
			
			
			b)Az alábbi példákban a kettős pont előtti x,y kettő darab integer, vesszővel elválasztva (pl.: 100,200)
				x = layer szélessége; y = layer magassága (pixelekben)
				A kettős pont utáni szó pedig azt jelöli, hogy a böngésző ablakán belül hová helyeződjön a layer.
				
					sPosition = "x,y:center"
					sPosition = "x,y:topleft"
					sPosition = "x,y:topright"
					sPosition = "x,y:topcenter"
					sPosition = "x,y:centerleft"
					sPosition = "x,y:centerright"
					sPosition = "x,y:bottomleft"
					sPosition = "x,y:bottomright"
					sPosition = "x,y:bottomcenter"
	*/

	var iLeft = 0;
	var iTop = 0;
	var iWidth = 0;
	var iHeight = 0;
	var iMargin = iMarginWidth ? 1*iMarginWidth : 20;
	
	this.hidingPanel = document.createElement("DIV");
	this.hidingPanel.style.position = "absolute";
	this.setIniStyle(this.hidingPanel);
	this.hidingPanel.onclick = function() { Layer.hide(); };
	this.hidingPanel.style.background = sBackgroundHidingPanel ? sBackgroundHidingPanel : "#ffffff";
	document.body.appendChild(this.hidingPanel);
	if(this.sBrowserName=="MSIE" && this.sBrowserVersionMajor<=6) {
		var sTagName = "IFRAME";
		if(this.sBrowserName=="MSIE") {
			sTagName = "<IFRAME frameBorder=0 marginHeight=0 marginWidth=0></IFRAME>";
		}
		this.hiddingIframe = this.hidingPanel.appendChild(document.createElement(sTagName));
		this.setIniStyle(this.hiddingIframe);
		this.hiddingIframe.src = "";
		this.hiddingIframe.style.overflow = "hidden";
		this.hidingPanel.appendChild(this.hiddingIframe);
		//this.hiddingIframe.document.body.style.background = sBackgroundHidingPanel ? sBackgroundHidingPanel : "#ffffff";
		//this.hidingPanel.style.background = "#ffffff";
		this.opacity(this.hidingPanel, this.hiddingOpacity);
		this.opacity(this.hiddingIframe, parseInt(this.hiddingOpacity / 4));
		this.hidingPanel.style.zIndex = 99996;
		this.hiddingIframe.style.zIndex = 99997;
		this.hiddingIframe.src = "/inc/scripts/layer_msie6_assistant.html";
	}
	else {
		this.opacity(this.hidingPanel, this.hiddingOpacity);
		this.hidingPanel.innerHTML = "&nbsp;";
	}
	
	
	this.holder = document.createElement("DIV");
	this.holder.style.position = "absolute";
	this.holder.style.overflow = "hidden";
	this.holder.id = this.holderID;
	this.setIniStyle(this.holder);
	this.holder.style.background = sBackground;
	document.body.appendChild(this.holder);
	
	var sTagName = "IFRAME";
	if(this.sBrowserName=="MSIE") {
		sTagName = "<IFRAME frameBorder=0 marginHeight=0 marginWidth=0></IFRAME>";
	}
	this.content = this.holder.appendChild(document.createElement(sTagName));
	this.setIniStyle(this.content);
	this.content.style.overflow = "hidden";
	
	if(this.sBrowserName=="MSIE" && this.sBrowserVersionMajor<=6) {
		this.holder.style.zIndex = 99998;
		this.content.style.zIndex = 99999;
	}
	
	
	var sStopScroll = this.sBrowserName=="MSIE" ? "no" : "hidden";
	var iActualTop = this.isXHTML ? document.documentElement.scrollTop : document.body.scrollTop;
	if(this.isXHTML) {
		if(this.sBrowserName=="MSIE") {
			document.documentElement.scroll = sStopScroll;
			document.body.scroll = sStopScroll;
			document.documentElement.style.overflow = "hidden";
		}
		else document.documentElement.style.overflow = sStopScroll;
		document.documentElement.scrollTop = iActualTop;
	}
	else {
		if(this.sBrowserName=="MSIE") document.body.scroll = sStopScroll;
		else document.body.style.overflow = sStopScroll;
		document.body.scrollTop = iActualTop;
	}
	
	this.resize(sPosition, iMarginWidth);
	
	window.onresize = function() { Layer.resize(sPosition, iMarginWidth, window.Layer); }

	this.content.src = this.holderURL;
}

Layer.prototype.setBrowserType = function() {
	this.sUserAgent = window.navigator.userAgent;
	if(/Firefox[\/\s](\d+\.\d+)/.test(this.sUserAgent)) this.sBrowserName = "Firefox";
	else if(/MSIE[\/\s](\d+\.\d+);/.test(this.sUserAgent)) this.sBrowserName = "MSIE";
	else if(/Opera[\/\s](\d+\.\d+)/.test(this.sUserAgent)) this.sBrowserName = "Opera";
	else if(/Chrome[\/\s](\d+\.\d+)/.test(this.sUserAgent)) this.sBrowserName = "Chrome";
	else if(/Version\/(\d+\.\d+)\s+Safari/.test(this.sUserAgent)) this.sBrowserName = "Safari";
	a = RegExp.$1.split(/\./);
	if(a && a.length) {
		this.sBrowserVersionMajor = a[0];
		this.sBrowserVersionMinor = a[1];
	}
}

Layer.prototype.resize = function(sPosition, iMarginWidth, oLayer) {

	var iLeft = 0;
	var iTop = 0;
	var iWidth = 0;
	var iHeight = 0;
	var iMargin = iMarginWidth ? 1*iMarginWidth : 20;

	if(!sPosition) {
		alert("Initialization error in Layer object\nFirst parameter of the Layer object must be set");
		return null;
	}
	if(sPosition.search(/\:/)!=-1) {
		var a = sPosition.split(":");
		this.layerDimension = a[0];
		this.layerPosition = a[1].toLowerCase();
	}
	else {
		this.layerDimension = sPosition;
		this.layerPosition = "center";
	}
	
	var iCanvasWidth = document.body.clientWidth;
	var iCanvasHeight = document.body.clientHeight;
	if(this.isXHTML) {
		iCanvasWidth = document.documentElement.clientWidth;
		iCanvasHeight = document.documentElement.clientHeight;
	}
	
	// set dimesions
	if(this.layerDimension.search(/\,/)!=-1) {
		var a = this.layerDimension.split(",");
		iWidth = 1 * a[0];
		iHeight = 1 * a[1];
	}
	else {
		iWidth = iCanvasWidth - 2*iMargin;
  	iHeight = iCanvasHeight - 2*iMargin;
	}
	
	// set positions
	if(this.layerPosition.search(/\,/)!=-1) {
		var a = this.layerPosition.split(",");
		iLeft = 1 * a[0];
		iTop = 1 * a[1];
	}
	else {
		switch(this.layerPosition) {
			case "center":
				iLeft = parseInt((iCanvasWidth - iWidth) / 2);
  			iTop = parseInt((iCanvasHeight - iHeight) / 2);
				break;
			case "topleft":
				iLeft = iMargin;
  			iTop = iMargin;
				break;
			case "topright":
				iLeft = parseInt(iCanvasWidth - iWidth) - iMargin;
  			iTop = iMargin;
				break;
			case "topcenter":
				iLeft = parseInt((iCanvasWidth - iWidth) / 2);
  			iTop = iMargin;
				break;
			case "centerleft":
				iLeft = iMargin;
  			iTop = parseInt((iCanvasHeight - iHeight) / 2);
				break;
			case "centerright":
				iLeft = parseInt(iCanvasWidth - iWidth) - iMargin;
  			iTop = parseInt((iCanvasHeight - iHeight) / 2);
				break;
			case "bottomleft":
				iLeft = iMargin;
  			iTop = parseInt(iCanvasHeight - iHeight) - iMargin;
				break;
			case "bottomright":
				iLeft = parseInt(iCanvasWidth - iWidth) - iMargin;
  			iTop = parseInt(iCanvasHeight - iHeight) - iMargin;
				break;
			case "bottomcenter":
				iLeft = parseInt((iCanvasWidth - iWidth) / 2);
  			iTop = parseInt(iCanvasHeight - iHeight) - iMargin;
				break;
		}
	}
	
	var iMinusHeight = 0;
	if(this.sBrowserName=="Firefox" || this.sBrowserName=="MSIE") {
		iTop += parseInt(this.isXHTML ? document.documentElement.scrollTop : document.body.scrollTop);
		iLeft += parseInt(this.isXHTML ? document.documentElement.scrollLeft : document.body.scrollLeft);
	}
	else {
		iTop += parseInt(document.body.scrollTop);
		iLeft += parseInt(document.body.scrollLeft);
	}
		
	if(!oLayer) oLayer = this;
	
	if(oLayer.header) {
		iHeight -= 1 * parseInt(oLayer.header.style.height);
		oLayer.header.style.width = iWidth;
	}
	if(oLayer.footer) {
		iHeight -= 1 * parseInt(oLayer.footer.style.height);
		oLayer.footer.style.width = iWidth;
	}
	
	oLayer.holder.style.left = parseInt(iLeft) + "px";
	oLayer.holder.style.top = parseInt(iTop) + "px";
	oLayer.holder.style.width = parseInt(iWidth) + "px";
	oLayer.holder.style.height = parseInt(iHeight) + "px";
	if(oLayer.sBrowserName=="Firefox") oLayer.holder.style.minHeight = iHeight;
	oLayer.holder.style.margin = "0px";
	oLayer.holder.style.padding = "0px";
	
	oLayer.content.style.width = iWidth + "px";
	oLayer.content.style.height = iHeight + "px";
	
	oLayer.hidingPanel.style.top = (iTop - 2*iMargin) + "px";
	oLayer.hidingPanel.style.width = iCanvasWidth + "px";
	oLayer.hidingPanel.style.height = (iCanvasHeight + 2*iMargin) + "px";
	
	if(this.sBrowserName=="MSIE" && this.sBrowserVersionMajor<=6 && oLayer.hiddingIframe) {
		oLayer.hiddingIframe.style.width = iCanvasWidth;
		oLayer.hiddingIframe.style.height = (iCanvasHeight + 2*iMargin) + "px";
	}
	
	if(this.useDocElement) { // Firefox "bug"; can't use oLayer; I must find again the holder!
		oLayerHolder = document.getElementById(this.holderID);
		oLayerHolder.style.left = iLeft + "px";
		oLayerHolder.style.top = iTop + "px";
		oLayerHolder.style.width = iWidth + "px";
		oLayerHolder.style.height = iHeight + "px";
		if(oLayer.sBrowserName=="Firefox") oLayerHolder.style.minHeight = iHeight + "px";
	}
	
	this.loadContentUrl();
	
}

Layer.prototype.loadContentUrl = function() {
	var oLayerHolder = document.getElementById(this.holderID);
	if(!oLayerHolder) return;
	var oHolderIframe = null;
	for(var i=0; i<oLayerHolder.childNodes.length; i++) {
		if(oLayerHolder.childNodes[i] && oLayerHolder.childNodes[i].tagName && oLayerHolder.childNodes[i].tagName=="IFRAME") {
			oHolderIframe = oLayerHolder.childNodes[i];
			break;
		}
	}
	if(!oHolderIframe) return;
	var sPublicId = "";
	if(oHolderIframe.contentWindow && oHolderIframe.contentWindow.document) {
		if(this.sBrowserName=="MSIE") {
			if(oHolderIframe.contentWindow.document.all && oHolderIframe.contentWindow.document.all[0]) {
				if(oHolderIframe.contentWindow.document.all[0].nodeType==8) {
					sPublicId = oHolderIframe.contentWindow.document.all[0].nodeValue;
				}
				else {
					sPublicId = "DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01 Transitional//EN'"; // default
				}
			}
		}
		else {
			if(oHolderIframe.contentWindow.document.doctype && oHolderIframe.contentWindow.document.doctype.publicId) {
				sPublicId = oHolderIframe.contentWindow.document.doctype.publicId;
			}
		}
	}
	if(!sPublicId) {
		setTimeout("Layer.loadContentUrl()",100);
		return;
	}
	var isXhtml = false;
	if(sPublicId && sPublicId.search(/[\s]+xhtml[\s]+/i)!=-1) isXhtml = true;

	var oContentIframe = oHolderIframe.contentWindow.document.getElementById("layeriframe");
	if(!oContentIframe) {
		setTimeout("Layer.loadContentUrl()",100);
		return;
	}
	if(this.IsContentIframeResized==false) {
		setTimeout("Layer.loadContentUrl()",100);
		return;
	}
	oContentIframe.src = this.contentURL;
	
}

Layer.prototype.isDoctypeXhtml= function() {
	var re=/\s+(X?HTML)\s+([\d\.]+)\s*([^\/]+)*\//gi;
	if(typeof document.namespaces!="undefined") {
		if(document.all[0].nodeType==8) re.exec(document.all[0].nodeValue);
		else return false;
	}
	else {
		if(document.doctype!=null) re.exec(document.doctype.publicId);
		else return false;
	}
	var s = "" + RegExp.$1;
	if(s=="") {
		if(document.doctype.publicId.search(/[\s]+xhtml[\s]+/i)!=-1) s = "XHTML";
	}
	if(s.toUpperCase()=="XHTML") return true;
	else return false;
}

Layer.prototype.opacity = function(oElement, iOpacity) {
	if(this.sBrowserName=="MSIE") {
		if(this.sBrowserVersionMajor<8) {
			oElement.style.filter = "progid:DXImageTransform.Microsoft.Alpha(opacity=" + iOpacity + ")";
		}
		else {
			oElement.style.msFilter = "alpha(opacity=" + iOpacity + ")";
		}
	}
	else {
		iOpacity /= 100;
		oElement.style.opacity = iOpacity;
	}
}

Layer.prototype.setIniStyle = function(oElement) {
	oElement.style.top = "0px";
	oElement.style.left = "0px";
	oElement.style.margin = "0px";
	oElement.style.padding = "0px";
	oElement.style.border = "0px";
}

Layer.prototype.hide = function() {
	document.body.removeChild(this.hidingPanel);
	document.body.removeChild(this.holder);
	var iActualTop = this.isXHTML ? document.documentElement.scrollTop : document.body.scrollTop;
	if(this.isXHTML) {
		document.documentElement.style.overflow = "";
	}
	else {
		document.body.style.overflow = "";
	}
	if(this.sBrowserName=="MSIE") document.body.scroll = "";
	if(this.sBrowserName=="Firefox") {
		if(this.isXHTML) document.documentElement.scrollTop = iActualTop;
		else document.body.scrollTop = iActualTop;
	}
}

Layer.prototype.getHolderDim = function() {
	if(!this.holder) return new Array(-1,-1);
	return new Array(parseInt(this.holder.offsetWidth), parseInt(this.holder.offsetHeight));
}

var oLayer = new Layer();

//--------------------------------------------------------------------------------------------------

function layerOnResize() {

	var aDim = parent.Layer.getHolderDim();
	if(aDim[0]==-1 && aDim[1]==-1) return;
	
	var oDiv = document.getElementById("layerholder");
	oDiv.parentNode.style.overflow = "hidden";
	var oDivFooter = document.getElementById("layerfooter");
	var w = parseInt(document.body.clientWidth);
	var h = parseInt(document.body.clientHeight);
	
	if(sOcms_BrowserName=="Firefox" && document.doctype.publicId.search(/[\s]+xhtml[\s]+/i)!=-1) {
		w = parseInt(document.documentElement.clientWidth);
		h = parseInt(document.documentElement.clientHeight);
	}
	
	if(sOcms_BrowserName=="MSIE") {
		// do nothing
		h -= parseInt(oDiv.style.paddingRight) + parseInt(oDiv.style.paddingLeft);
		w -= parseInt(oDiv.style.paddingTop) + parseInt(oDiv.style.paddingBottom);
	}
	else {
		w -= parseInt(oDiv.style.borderLeftWidth) + parseInt(oDiv.style.borderRightWidth) + parseInt(oDiv.style.paddingLeft) + parseInt(oDiv.style.paddingRight);
		h -= parseInt(oDiv.style.borderTopWidth) + parseInt(oDiv.style.borderBottomWidth) + parseInt(oDiv.style.paddingTop) + parseInt(oDiv.style.paddingBottom);
		oDiv.style.minHeight = h + "px";
	}
	oDiv.style.width = w + "px";
	oDiv.style.height = h + "px";
	
	var oDivWait = document.getElementById("layerwait");
	if(oDivWait) {
		oDivWait.style.width = w + "px";
		oDivWait.style.height = h + "px";
		SetOpacity(oDivWait, 80);
	}
	
	
	var oIframe = document.getElementById("layeriframe");
	if(sOcms_BrowserName=="MSIE") {
		oDiv.style.width = aDim[0] + "px";
		oDiv.style.height = aDim[1] + "px";
		var xDif = parseInt(oDiv.style.paddingRight) + parseInt(oDiv.style.paddingLeft);
		var yDif = parseInt(oDiv.style.paddingTop) + parseInt(oDiv.style.paddingBottom);
		yDif = parseInt(oDiv.style.borderTopWidth) + parseInt(oDiv.style.borderBottomWidth) + parseInt(oDiv.style.paddingTop) + parseInt(oDiv.style.paddingBottom);
		var x = aDim[0] - xDif - 4;
		var y = aDim[1] - parseInt(oDivFooter.offsetHeight) - yDif;
		oIframe.style.width = x + "px";
		oIframe.style.height = y + "px";
		oIframe.width = x;
		oIframe.height = y;
		
	}
	else {
		oIframe.style.width = parseInt(oDiv.style.width) + "px";
		oIframe.style.height = (parseInt(oDiv.style.height) - parseInt(oDivFooter.offsetHeight))+ "px";
	}

	if(sOcms_BrowserName=="MSIE") {
		oDivFooter.style.width = oIframe.style.width;
	}
	
	parent.Layer.IsContentIframeResized = true;
}

function layerOnLoadContent() {
	iContentLoadCounter++;
	if(iContentLoadCounter % 2 == 0) {
		var oDivWait = document.getElementById("layerwait");
		if(oDivWait) {
			oDivWait.style.display = "none";
			var oDivHolder = document.getElementById("layerholder");
			oDivHolder.style.display = "block";
		}
	}
}

