/*
	Copyright (c) 2004-2006, The Dojo Foundation
	All Rights Reserved.

	Licensed under the Academic Free License version 2.1 or above OR the
	modified BSD license. For more information on Dojo licensing, see:

		http://dojotoolkit.org/community/licensing.shtml
*/

dojo.provide("dojo.widget.Editor2Plugin.AlwaysShowToolbar");
dojo.event.topic.subscribe("dojo.widget.Editor2::onLoad", function (editor) {
	if (editor.toolbarAlwaysVisible) {
		var p = new dojo.widget.Editor2Plugin.AlwaysShowToolbar(editor);
	}
});
dojo.declare("dojo.widget.Editor2Plugin.AlwaysShowToolbar", null, function (editor) {
	this.editor = editor;
	this.editor.registerLoadedPlugin(this);
	this.setup();
}, {_scrollSetUp:false, _fixEnabled:false, _scrollThreshold:false, _handleScroll:true, setup:function () {
	var tdn = this.editor.toolbarWidget;
	if (!tdn.tbBgIframe) {
		tdn.tbBgIframe = new dojo.html.BackgroundIframe(tdn.domNode);
		tdn.tbBgIframe.onResized();
	}
	this.scrollInterval = setInterval(dojo.lang.hitch(this, "globalOnScrollHandler"), 100);
	dojo.event.connect("before", this.editor.toolbarWidget, "destroy", this, "destroy");
}, globalOnScrollHandler:function () {
	var isIE = dojo.render.html.ie;
	if (!this._handleScroll) {
		return;
	}
	var dh = dojo.html;
	var tdn = this.editor.toolbarWidget.domNode;
	var db = dojo.body();
	if (!this._scrollSetUp) {
		this._scrollSetUp = true;
		var editorWidth = dh.getMarginBox(this.editor.domNode).width;
		this._scrollThreshold = dh.abs(tdn, true).y;
		if ((isIE) && (db) && (dh.getStyle(db, "background-image") == "none")) {
			with (db.style) {
				backgroundImage = "url(" + dojo.uri.moduleUri("dojo.widget", "templates/images/blank.gif") + ")";
				backgroundAttachment = "fixed";
			}
		}
	}
	var scrollPos = (window["pageYOffset"]) ? window["pageYOffset"] : (document["documentElement"] || document["body"]).scrollTop;
	if (scrollPos > this._scrollThreshold) {
		if (!this._fixEnabled) {
			var tdnbox = dojo.html.getMarginBox(tdn);
			this.editor.editorObject.style.marginTop = tdnbox.height + "px";
			if (isIE) {
				tdn.style.left = dojo.html.abs(tdn, dojo.html.boxSizing.MARGIN_BOX).x;
				if (tdn.previousSibling) {
					this._IEOriginalPos = ["after", tdn.previousSibling];
				} else {
					if (tdn.nextSibling) {
						this._IEOriginalPos = ["before", tdn.nextSibling];
					} else {
						this._IEOriginalPos = ["", tdn.parentNode];
					}
				}
				dojo.body().appendChild(tdn);
				dojo.html.addClass(tdn, "IEFixedToolbar");
			} else {
				with (tdn.style) {
					position = "fixed";
					top = "0px";
				}
			}
			tdn.style.width = tdnbox.width + "px";
			tdn.style.zIndex = 1000;
			this._fixEnabled = true;
		}
		if (!dojo.render.html.safari) {
			var eHeight = (this.height) ? parseInt(this.editor.height) : this.editor._lastHeight;
			if (scrollPos > (this._scrollThreshold + eHeight)) {
				tdn.style.display = "none";
			} else {
				tdn.style.display = "";
			}
		}
	} else {
		if (this._fixEnabled) {
			(this.editor.object || this.editor.iframe).style.marginTop = null;
			with (tdn.style) {
				position = "";
				top = "";
				zIndex = "";
				display = "";
			}
			if (isIE) {
				tdn.style.left = "";
				dojo.html.removeClass(tdn, "IEFixedToolbar");
				if (this._IEOriginalPos) {
					dojo.html.insertAtPosition(tdn, this._IEOriginalPos[1], this._IEOriginalPos[0]);
					this._IEOriginalPos = null;
				} else {
					dojo.html.insertBefore(tdn, this.editor.object || this.editor.iframe);
				}
			}
			tdn.style.width = "";
			this._fixEnabled = false;
		}
	}
}, destroy:function () {
	this._IEOriginalPos = null;
	this._handleScroll = false;
	clearInterval(this.scrollInterval);
	this.editor.unregisterLoadedPlugin(this);
	if (dojo.render.html.ie) {
		dojo.html.removeClass(this.editor.toolbarWidget.domNode, "IEFixedToolbar");
	}
}});

