﻿if (typeof Prototype == 'undefined' || !(Prototype.Version.match("1.6") || Prototype.Version.match("1.7")) )
	throw ("GlobalEagle-GUI library requires Prototype library >= 1.6.0");

var CMS = {
	wmFrameDummy: new Element("div"),
	guiOptHeader: function() { return { guiOpt: { wm: GUI.metaWM.getHeaderWM(), wmFrame: CMS.wmFrameDummy}} },
	guiOptFooter: function() { return { guiOpt: { wm: GUI.metaWM.getFooterWM(), wmFrame: CMS.wmFrameDummy}} },
	guiOptStart: function() { return { guiOpt: { wm: GUI.metaWM.getStartWM(), wmFrame: $("wmFrameStart")}} },
	MetaWM: Class.create(GUI.MetaWindowManager, {
		initialize: function($super, container) {
			var wm = {};
			this._wm = wm;
			wm.start = new GUI.WindowManager($(container.start).id);
			wm.header = new GUI.WindowManager($(container.header).id);
			wm.footer = new GUI.WindowManager($(container.footer).id, { zIndex: 200 }); // 13.06.2010 Ossig over content.
			wm.menu = new GUI.WindowManager($(container.menu).id);
			wm.content = new GUI.WindowManager($(container.content).id);
			wm.desktop = new GUI.WindowManager($(container.desktop).id);
			$super(undefined, { wmMenu: wm.menu, wmDesktop: wm.desktop });
		},
		getWM: function(workLevel) {
			var workLevelIndex = workLevel ? workLevel.levelIndex : undefined;
			var wm = workLevelIndex < 0 ? this._wm.menu : this._wm.content;
			return wm;
		},
		getWMList: function() {
			var wm = this._wm;
			return [wm.menu, wm.content, wm.header, wm.footer, wm.start, wm.desktop];
		},
		getHeaderWM: function() {
			return this._wm.header;
		},
		getFooterWM: function() {
			return this._wm.footer;
		},
		getStartWM: function() {
			return this._wm.start;
		}
		/*,
		getWM: function(workLevelObj) {
		return this._wm.menu;
		},
		getByContentWindow: function(contentWindow) {
		var guiWindow = this._wm.menu.getByContentWindow(contentWindow);
		return guiWindow;
		}
		*/
	}),
	doMenuJob: function(urlParamString, frameName) {
		window.initGUI(GUI.options);
		var activeGUI = window.remoteGUI;
		var menuWidth = 250; // 160; // 14.11.2007 Ossig
		var menuFrame = new activeGUI.GEWindow(undefined, "startep.aspx?" + urlParamString, frameName, { embedded: true, left: 0, top: 0, width: menuWidth, height: screen.availHeight, workLevel: { levelIndex: -1} }, false);
		var menuFrameContentWindow = menuFrame.getContentWindow();
		menuFrameContentWindow.frameSetName = menuFrame.name;
		menuFrameContentWindow.frameSetContentWindow = menuFrameContentWindow;
	},
	log: function() {
		GUI.log.apply(this, ["CMS: "].concat($A(arguments)));
	},
	onMenuJob: function() {
		new CountingObserver0("CMS menuJob", function() {
			if (window.closed) return true;
			if (!GUI.metaWM || !Object.isFunction(CMS.menuJob)) return false;
			// 28.05.2010 Ossig Document is ready.
			GUI.options.cmsMode = true;
			CMS.menuJob();
			return true;
		}, 1);
	},
	onJob: function(jobName) {
		new CountingObserver0("CMS " + jobName, function() {
			if (window.closed) return true;
			if (!GUI.metaWM || !Object.isFunction(CMS[jobName])) return false;
			// 28.05.2010 Ossig Document is ready.
			var origFrame = GUI.metaWM.getOrigFrame();
			if (!origFrame) return false;
			CMS[jobName](origFrame);
			return true;
		}, 1);
	},
	checkBrowser: function() {
		var ua = navigator.userAgent;
		var ffToken = "Firefox/";
		var ffIndex = ua.indexOf(ffToken);
		if (ffIndex < 0) return false;
		var ffVersion = ua.substr(ffIndex + ffToken.length, 3); // FireFox/3.6
		var ffVersionNumber = parseFloat(ffVersion);
		if (isNaN(ffVersionNumber)) return false;
		if (ffVersionNumber < 3.6) return false;
		return true; // Firefox 3.6
	},
	onDocumentReady: function(noBrowserQuery) {
		if (!noBrowserQuery && !CMS.checkBrowser()) {
			// window.location = "BrowserNotSupported.htm"; // ?NoBrowserQuery
			// $$(".cms-browsernotsupported").first().show();
			$$(".cms-browsernotsupported").first().removeClassName("ui-helper-hidden");
			return;
		}
		// if (!confirm("Nicht unterstützte Browserverion. Fortfahren mit GlobalEagle?")) return;
		CMS.log("onDocumentReady");
		/*
		var wDesktop = window;
		reposToScreen(wDesktop, { left: 0, top: 0, width: screen.availWidth, height: screen.availHeight });
		*/
		var container = {
			header: $("headerContainer"),
			start: $("startContainer"),
			menu: $("menuContainer"),
			content: $("contentContainer"),
			footer: $("footerContainer"),
			desktop: $("desktopContainer")
		};
		var metaWM = new CMS.MetaWM(container);
		GUI.metaWM = metaWM;
		// CMS.onLoadCompletedPaintingImages.defer();
		// CMS.log("onLoadCompletedPaintingImages");
		CMS.onMenuJob();
		CMS.onJob("headerJob");
		CMS.onJob("footerJob");
		CMS.onJob("startJob");
		// CMS.onUnload.delay(10);
	},
	adjustFrameSize: function(contentWindow, frameElement) {
		// var frameElement = contentWindow.geSystem.activeGUI.getIFrame(contentWindow);
		var frameElementArr = [];
		frameElement = frameElement ? frameElement.up(".content") : undefined;
		frameElementArr.push(frameElement);
		frameElement = frameElement ? frameElement.up(".ui-window") : undefined;
		frameElementArr.push(frameElement);
		var contentElement = frameElement ? frameElement.up(".cms-content") : undefined;
		var startElement = frameElement ? frameElement.up(".cms-start") : undefined;
		var headerElement = frameElement ? frameElement.up(".cms-header") : undefined;
		var footerElement = frameElement ? frameElement.up(".cms-footer") : undefined;
		frameElement = contentElement || startElement || headerElement || footerElement;
		frameElementArr.push(frameElement);
		// frameElement = frameElement ? frameElement.up(".cms-desktopcore") : undefined;
		// frameElementArr.push(frameElement);
		// var desktopCoreElement = frameElement;
		frameElement = getDTFrame().$$(".cms-menuinnerframe").first();
		frameElementArr.push(frameElement);
		// frameElement = frameElement ? frameElement.select(".cms-menu").first() : undefined; // height: 100%;
		// frameElementArr.push(frameElement);
		frameElement = frameElement ? frameElement.select(".ui-window").first() : undefined;
		frameElementArr.push(frameElement);
		frameElement = frameElement ? frameElement.select(".content").first() : undefined;
		frameElementArr.push(frameElement);

		if (contentElement) { // not StartFrame, HeaderFrame, FooterFrame
			// var frameSize = new GUI.FrameSize(frameElementArr, { contentOffsetSize: { width: 16, height: 16 }, contentMinSize: { height: 709} });
			/*
			var gecko = Prototype.Browser.Gecko;
			var iFrameOffset = gecko ? 16 : 0;
			var frameSize = new GUI.FrameSize(frameElementArr, { contentOffsetSize: { height: iFrameOffset}, contentMinSize: { height: 705} }); // Ossig 18.06.2010 Outer height Startpage.
			*/
			var iFrameOffset = 16;
			var frameSize = new GUI.FrameSize(frameElementArr, { contentWindow: contentWindow, contentOffsetSize: { height: iFrameOffset} });
			frameSize.adjustHeight();
			CMS.log("adjustHeight", "content");
		} else { // if (startElement) {
			// if (desktopCoreElement) desktopCoreElement.removeStyle("height");
			// frameElementArr.compact().invoke("removeStyle", "height");
			CMS.log("removeHeight", "desktopCoreElement");
		}
	}
	/*,
	onUnload: function() {
	var origFrame = GUI.metaWM.getOrigFrame();
	origFrame.CloseAll();
	origFrame.StopGlobalEagle([['GESessionID', 'gjp54malrc5ynuifzwxxkf55']]); // 30.05.2010 Ossig Example code.
	}
	*/
};

$j(function() {document.whenReady(CMS.onDocumentReady.curry(window.noBrowserQuery));}); // Event.observe(window, "load", CMS.onLoadCompletedPaintingImages);