// Edit in place
// Use: Prototype JS Framework > Version 1.5 (http://prototypejs.org)


// event
Event.observe(document, "keydown", function(evnt) {
	var iKCode = window.event ? window.event.keyCode : evnt.which;
	var btn = $('umi_edtmode');
	if (btn && !btn.disabled && iKCode == '113') { // F2
		if (btn.checked) {
			btn.checked = false;
			editableRegions.getInstance().unhighlight();
		} else {
			btn.checked = true;
			editableRegions.getInstance().highlight();
		}
	}
});


function getPageCSS() {
	var arrResult = new Array();
	var arrLinkEls = document.getElementsByTagName('link');
		for (var iI = 0; iI < arrLinkEls.length; iI++) {
			if (arrLinkEls[iI].rel.toLowerCase() === "stylesheet") {
				arrResult[arrResult.length] = arrLinkEls[iI].href;
			}
		}
	return arrResult;
}


var editableRegions = new Class.create();
editableRegions.instance = null;

editableRegions.getInstance = function () {
	if(!editableRegions.instance) {
		editableRegions.instance = new editableRegions();
	}
	return editableRegions.instance;
};

editableRegions.prototype = {

	regions: new Array(),
	activeRegion : false,
	loading : false,
	currentElementId: false,
	// constructor
	initialize: function() {
		var __self = this;
		this.currentElementId = currentElementId || false;
		this.detect();
		Event.observe(window, "resize", function() {
			__self.repaint();
		});
		
		includeCSS("/js/client/widgets/umiWidget.css");
	},

	highlight : function() {
		var __regs = this.regions;
		this.regions.each(function(region) {
			region.getLayer().highlight();
		});
	},

	unhighlight : function() {
		this.regions.each(function(region) {
			region.getLayer().unhighlight();
		});
	},

	repaint : function() {
		this.regions.each(function(region) {
			region.getLayer().repaint();
		});
	},

	onDetected : function() {
		// include umiWidgets
		if (typeof umiWidgetCreatePage === 'undefined') {
			includeJS("/js/client/widgets/umiWidgetCreatePage.js");
		}
		if (typeof umiWidgetDeletePage === 'undefined') {
			includeJS("/js/client/widgets/umiWidgetDeletePage.js");
		}
		if (typeof umiFileControl === 'undefined') {
			includeJS("/js/client/umiFileControl.js");
		}
	},

	detect: function() {
		var __self = this;
		if (typeof(document.all) == 'object') {
			var oEls = document.all;
		} else {
			var oEls = $$('*');
		}

		var arrEdDivs = new Array();

		var object_id = false;
		var element_id = false;
		for (var i = 0 ; i < oEls.length; i++) {
			var oEl = oEls[i];
			if (typeof(oEl) == 'object') {
				try {
					var prop_name = oEl.getAttribute("umi:field-name");
					var bNeedle = false;
					var object_id = false;
					var element_id = false;

					if (oEl.getAttribute("umi:object-id")) {
						object_id = oEl.getAttribute("umi:object-id");
						element_id = false;
						bNeedle = true;
					} else if (oEl.getAttribute("umi:element-id")) {
						element_id = oEl.getAttribute("umi:element-id");
						object_id = false;
						bNeedle = true;
					}
					var module = oEl.getAttribute("umi:module");
					var method = oEl.getAttribute("umi:method");

					if ((prop_name && (element_id || object_id)) || (module && method) || bNeedle) {
						var iRegId = this.regions.length;
						this.regions[iRegId] = new editableRegion(oEls[i], element_id, object_id, prop_name, module, method);
						this.regions[iRegId].id = iRegId;
					}
				} catch(theErr) {
					// fix for IE. table.getAttribute("umi:element-id") generate error
				}
			}
		}

		if (this.regions.length >0) this.onDetected();
	},


	// destructor
	destroy: function() {
		editableRegions.instance = null;
		Element.remove(this.edit_panel);
	},

	getRegionByElementId: function(id) {
		return this.regions.each(function(region) {
			if (region.element.id == id) {
				return region;
			}
		});
	},

	getRegions: function(entityId, propName, isObject) {
		var result = new Array();
		this.regions.each(function(region) {
			if (region.entityId == entityId && region.propName == propName && region.is_object == isObject) {
				result[result.length] = region;
			}
		});
		return result;
	}
};


var editableRegion = new Class.create();


editableRegion.prototype = {
	id : null,
	entityId : false,
	propName : false,
	module : false,
	method : false,
	edit_panel : null,
	is_object : false,
	handledRegion : false,
	editControl : false,
	changed : false,
	oldData : '',
	layer : false,
	dataType : '',

	// constructor
	initialize: function(element, element_id, object_id, prop_name, module, method) {
		var __self = this;
		this.element = $(element);
		this.entityId = element_id || object_id;
		this.propName = prop_name;
		this.is_object = object_id ? true : false;
		this.module = module;
		this.method = method;
		if (this.element.id.length == 0) this.element.id = Math.random();
		this.oldData = this.element.innerHTML;
	},

	restore: function() {
		this.element.update(this.oldData);
	},

	getLayer : function() {
		var __self = this;
		if (!this.layer) {
			var bAlwaysVis = this.module ? true : false;
			this.layer = new editableRegionLayer(this);
//			this.layer.toolbar.setAlwaysVisible(bAlwaysVis);
			// create buttons
			if (this.entityId && this.propName) {
				this.layer.toolbar.appendButton({
					name : 'edit',
					label : 'Редактировать',
					src : '/images/cms/edplace_edt.png',
					release : function() {
						__self.makeEditable();
					}
				});
			}

			if (this.module && this.method) {
				this.layer.toolbar.appendButton({
					name : 'add',
					label : 'Добавить',
					src : '/images/cms/edplace_add.png',
					release : function() {
						if (typeof(umiWidgetCreatePage) === 'function') {
							var addWidget = new umiWidgetCreatePage({
									'module': __self.module, 
									'method': __self.method, 
									'parent-id': __self.entityId
							});
							addWidget.run();
						} else {
							alert('Не удается добавить страницу. Виджет не подключен.');
						}
					}
				});
			}
			if (!this.is_object) {
				if (this.entityId && editableRegions.getInstance().currentElementId != this.entityId) {
					this.layer.toolbar.appendButton({
						name : 'remove',
						label : 'Удалить',
						src : '/images/cms/edplace_del.png',
						release : function() {
							if (typeof(umiWidgetDeletePage) === 'function') {
								var delWidget = new umiWidgetDeletePage({
									'element-id': __self.entityId
								});
								delWidget.run();
							} else {
								alert('Не удается удалить страницу. Виджет не подключен.');
							}
						}
					});
				}
			}
		}
		return this.layer;
	},


	getData : function() {
		var __self = this;
		var sDataSrc = '/content/get_editable_region/' + this.entityId+"/" + this.propName;
		if (this.is_object) sDataSrc += '?is_object=1';
		editableRegions.getInstance().loading = true;

		new Ajax.Request(sDataSrc, {
			method: 'get',
			onSuccess: function(oResponse) {
				editableRegions.getInstance().loading = false;
				var oXMLResponse = oResponse.responseXML;
				var sResponseTxt = oResponse.responseText;

				if (oXMLResponse) {
					__self.onGetData(oXMLResponse, sResponseTxt);
				} else {
					__self.onParseXMLError(sResponseTxt)
				}
			},

			onException : function(inst, oException) {
				editableRegions.getInstance().loading = false;
				__self.onGetDataError(oException);
			},

			onComplete: function() {
				editableRegions.getInstance().loading = false;
			}
		});

	},

	onGetData : function(oXMLResponse, sResponseTxt) {
		var arrValsNodes = false;
		var sType = 'string';
		try {
			var arrEls = oXMLResponse.getElementsByTagName("property");
			if (typeof(arrEls[0]) !== 'undefined') {
				sType = arrEls[0].getAttribute('type');
				var arrValsNodes = oXMLResponse.getElementsByTagName('value');
			}
		} catch(e) { }

		if (arrValsNodes.length) {
			editableRegions.getInstance().activeRegion = this;
			this.dataType = sType;
			switch (sType) {
/*				case 'text' :
					var sVal = arrValsNodes[0].firstChild ? arrValsNodes[0].firstChild.nodeValue : '';
					this.makeEditableTextFld(sVal);
				break;*/
				case 'wysiwyg' :
					var sVal = arrValsNodes[0].firstChild ? arrValsNodes[0].firstChild.nodeValue : '';
					this.makeEditableWysisygFld(sVal);
				break;
				case 'text' :
				case 'string':
				case 'string':
				case 'int' :
				case 'price':
				case 'float':
				case 'tags':
				case 'date':
					var sVal = arrValsNodes[0].firstChild ? arrValsNodes[0].firstChild.nodeValue : '';
					this.makeEditableTextFld(sVal);
					//this.makeEditableStringFld(sVal);
				break;
				case 'relation' :
					this.makeEditableRelationFld(arrValsNodes);
				break;
				default: 
					alert('Не удается отредактировать регион. Неизвестный тип поля "' + sType + '"');
				break;
			}

		} else {
			if (oXMLResponse.firstChild.nodeName === 'error') {
				alert('Error: ' + oXMLResponse.firstChild.firstChild.nodeValue);
			} else {
				alert('Не удается отредактировать регион. Ошибка разбора данных.');
			}
		}
	},

	applyTextInputComputedStyles : function() {
		var editControl;
		if (this.layer.useMCE) {
			var inst = tinyMCE.getInstanceById(this.layer.activeInput.id);
			if (!inst) return false;
			editControl = $(inst.editorId);
		} else {
			editControl = this.getLayer().getEditControl();
		}
		if (!editControl) return false;

		try {
			if (Prototype.Browser.IE) {
				var arrStyles = this.element.currentStyle;
			} else {
				var arrStyles = document.defaultView.getComputedStyle(this.element, null);
			}

			if (arrStyles['backgroundColor'] == 'transparent' || arrStyles['backgroundColor'] == 'rgba(0, 0, 0, 0)') {
				editControl.style.backgroundColor = 'white';
			} else {
				editControl.style.backgroundColor = arrStyles['backgroundColor'];
			}

			editControl.style.fontFamily = arrStyles['fontFamily'];
			editControl.style.fontStyle = arrStyles['fontStyle'];
			editControl.style.fontSize = arrStyles['fontSize'];
			editControl.style.fontWeight = arrStyles['fontWeight'];
			editControl.style.textDecoration = arrStyles['textDecoration'];
			editControl.style.color = arrStyles['color'];

			editControl.style.paddingLeft = arrStyles['paddingLeft'];
			editControl.style.paddingTop = arrStyles['paddingTop'];
			editControl.style.paddingRight = arrStyles['paddingRight'];
			editControl.style.paddingBottom = arrStyles['paddingBottom'];

			editControl.style.height = arrStyles['height'];

		} catch(theErr) {
			
		}
	},

	makeEditableRelationFld : function(arrValsNodes) {
		if (!this.getLayer().getEditControl()) {
			var editControl = $(document.createElement('select'));
			var oOpt = $(document.createElement('option'));
			oOpt.value = '';
			editControl.appendChild(oOpt);
			for (var iI = 0; iI < arrValsNodes.length; iI++) {
				var oVal = arrValsNodes[iI];
				var sName = oVal.firstChild.nodeValue;
				var oOpt = $(document.createElement('option'));
				oOpt.value = oVal.getAttribute('id');
				if (oVal.getAttribute('selected') == '1'){
					oOpt.setAttribute('selected', 'selected');
					oOpt.selected = true;
				}
				oOpt.innerHTML = sName;
				editControl.appendChild(oOpt);
			}
			this.getLayer().setEditControl(editControl, editControl);
			this.applyTextInputComputedStyles();
			editControl.style.border = '0px';
			editControl.style.minWidth = '100px';
		}

		this.getLayer().makeEditable();
	},

/*
	makeEditableStringFld : function(sVal) {
		this.oldData = sVal;
		this.element.update(sVal);
		this.currentValue = sVal;
		if (!this.getLayer().getEditControl()) {
			var editControl = $(document.createElement('input'));
			editControl.setAttribute('type', 'text');
			editControl.style.border = '0px';
			editControl.style.width = '100%';
			editControl.style.minWidth = '10px';
			this.getLayer().setEditControl(editControl, editControl);
			this.applyTextInputComputedStyles();
		}
		this.getLayer().makeEditable();
	},

*/
	makeEditableTextFld : function(sVal) {
		var __self = this;
		this.oldData = this.element.innerHTML;
		this.element.update(sVal);
		this.currentValue = sVal;
		if (!this.getLayer().getEditControl()) {
			var editControl = $(document.createElement('textarea'));
			if (this.dataType != 'text') {
				editControl.onkeypress = function(evnt) {
					var ret = true;
					var iKCode = window.event ? window.event.keyCode : evnt.which;
					if (iKCode == '13') ret = false;
					return ret;
				}
			}
			editControl.style.overflow = 'hidden';
			editControl.style.border = '0px';
			editControl.style.minWidth = '50px';
			editControl.style.minHeight = '10px';

			this.getLayer().setEditControl(editControl, editControl);
			this.applyTextInputComputedStyles();
		}
		this.getLayer().makeEditable();
	},

	makeEditableWysisygFld : function(sVal) {
		this.oldData = this.element.innerHTML;
		this.element.update(sVal);
		this.currentValue = sVal;
		if (!this.getLayer().getEditControl()) {
			var editControl = $(document.createElement('textarea'));
			editControl.style.overflow = 'hidden';
			editControl.style.border = '0px';
			editControl.style.width = '100%';
			editControl.style.minWidth = '50px';
			editControl.style.minHeight = '10px';
			this.getLayer().setEditControl(editControl, editControl, true);
			this.applyTextInputComputedStyles();
			editControl.style.height = '100%';
		}
		this.getLayer().makeEditable();
	},

	onGetDataError : function(oException) {
		alert("Ошибка доступа к данным:\n" + oException.description);
	},

	onParseXMLError : function(sResponseTxt) {
		alert("Ошибка! Неизвестный ответ сервера.\nВозможно у Вас истекла сессия, либо не достаточно прав.\nПопробуйте обновить страницу.");
	},


	makeEditable: function() {
		var ret = false;
		var __self = this;
		if (!editableRegions.getInstance().activeRegion && !editableRegions.getInstance().loading) {
			this.getData();
			ret = true;
		}
		return ret;
	},

	makeNotEditable: function() {
		var ret = false;
		if (!editableRegions.getInstance().loading) {
			editableRegions.getInstance().activeRegion = null;
			ret = this.getLayer().makeNotEditable();
		}

		return ret;
	},


	setData : function(sContent) {
		var __self = this;

		if (!editableRegions.getInstance().activeRegion && editableRegions.getInstance().loading) return false;

		var sDataSrc = '/content/save_editable_region/' + this.entityId+"/" + this.propName;
		if (this.is_object) sDataSrc += '?is_object=1';

		var sContent = 'data=' + encodeURIComponent(sContent);

		editableRegions.getInstance().loading = true;
		new Ajax.Request(sDataSrc, {
			method: 'post',
			encoding: 'UTF-8',
			postBody: sContent,

			onSuccess: function(oResponse) {
				var oXMLResponse = oResponse.responseXML;
				var sResponseTxt = oResponse.responseText;
			
				editableRegions.getInstance().loading = false;
				if (oXMLResponse) {
					__self.onSetData(oXMLResponse, sResponseTxt);
				} else {
					__self.onParseXMLError(sResponseTxt)
				}
			},

			onException : function(inst, oException) {
				editableRegions.getInstance().loading = false;
				__self.onSetDataError(oException);
			},

			onComplete: function() {
				editableRegions.getInstance().loading = false;
			}
		});
	},


	onSetData : function(oXMLResponse, sResponseTxt) {
		try {
			var arrEls = oXMLResponse.getElementsByTagName("value");
			if (arrEls[0]) {
				var sVal = arrEls[0].firstChild ? arrEls[0].firstChild.nodeValue : '';
			}
		} catch(e) { }

		if (typeof(sVal) != 'undefined') {
			var arrRegions = editableRegions.getInstance().getRegions(this.entityId, this.propName, this.is_object);
			
			var dublicate_prop = "";
			if(this.propName == "h1") {
				dublicate_prop = "name";
			}
			if(this.propName == "name") {
				dublicate_prop = "h1";
			}
			
			if(dublicate_prop) {
				var tmpRegions = editableRegions.getInstance().getRegions(this.entityId, dublicate_prop, this.is_object);
				for(i = 0; i < tmpRegions.length; i++) {
					arrRegions[arrRegions.length] = tmpRegions[i];
				}
			}
			

			if (arrRegions.length == 1) {
				this.element.update(sVal);
				this.oldData = sVal;
				this.currentValue = sVal;
			} else {
				for (var i = 0; i < arrRegions.length; i++) {
					arrRegions[i].element.update(sVal);
					arrRegions[i].oldData = sVal;
					arrRegions[i].currentValue = sVal;
				}
			}
			

		} else {
			if (oXMLResponse.firstChild.nodeName === 'error') {
				alert('Error: ' + oXMLResponse.firstChild.firstChild.nodeValue);
			}
		}
		this.makeNotEditable();
	},

	onSetDataError : function(oException) {
		alert("Ошибка сохранения данных:\n" + oException.description);
	},

	// destructor
	destroy: function() {
		Event.stopObserving(this.element, 'click');
		var oRegs = editableRegions.getInstance();
		oRegs.regions[this.id] = null;
	}
};


var editableRegionLayer = new Class.create();

editableRegionLayer.prototype = {
	element : null,
	editableRegion : null,
	editControl : null,
	activeInput : false,
	editMode : false,
	useMCE : false,
	toolbar : null,
	editModeToolbar : null,
	opacity : 0.2,
	// constructor
	initialize: function(editableRegion) {
		var __self = this;
		this.editableRegion = editableRegion;
		var hlayer = $(document.createElement('div'));
		hlayer.style.position = 'absolute';
		hlayer.style.display = 'none';
		hlayer.style.border = '1px dotted #CCCCCC';
		hlayer.style.backgroundColor = 'transparent';
		hlayer.style.textAlign = 'center';
		hlayer.style.verticalAlign = 'middle';
		hlayer.style.minWidth = '35px';
		hlayer.style.minHeight = '10px';

		var activeLayer = $(document.createElement('div'));
		activeLayer.style.position = 'relative';
		activeLayer.style.width = '100%';
		activeLayer.style.height = '100%';
		activeLayer.style.backgroundColor = '#EEEEEE';
		activeLayer.style.cursor = 'pointer';
		activeLayer.setOpacity(this.opacity);


		this.activeLayer = hlayer.appendChild(activeLayer);
		this.element = document.body.appendChild(hlayer);
		this.element.id = 'layer' + this.editableRegion.element.id;
		this.toolbar = new editableRegionToolbar(this, document.body);


		var mouseOver = function(evnt) {
			if (!__self.editMode) {
				__self.activeLayer.style.backgroundColor = "#F00";
			}
		}

		var mouseOut = function() {
			if (!__self.editMode) {
				__self.activeLayer.style.backgroundColor = '#EEEEEE';
				__self.toolbar.hide();
			}
		}

		var mouseClick = function(evnt) {
			if (!__self.editMode) {
				var arrOffset = Element.cumulativeOffset(__self.element);
				var iMouseX = Event.pointerX(evnt);
				var iMouseY = Event.pointerY(evnt);
				__self.toolbar.show(iMouseX - 5, iMouseY - 44);
			}
		}
		
		var mouseDoubleClick = function(event) {
			__self.editableRegion.makeEditable();
		}

		Event.observe(this.toolbar.element, "mouseover", function() {
			__self.toolbar.show();
		});

		Event.observe(this.toolbar.element, "mouseout", function() {
			__self.toolbar.hide();
		});

		Event.observe(this.element, "mouseout", mouseOut);
		Event.observe(this.element, "mouseover", mouseOver);
		Event.observe(this.element, "click", mouseClick);
		Event.observe(this.element, "dblclick", mouseDoubleClick);



		// editmode toolbar
		this.editModeToolbar = new editableRegionToolbar(this, document.body);

		this.editModeToolbar.appendButton({
			name : "save",
			label : 'Сохранить',
			position: 'left',
			accesskey: 13, // enter
			src : '/images/cms/edplace_save.png',
			release : function() {
				var vVal = false;
				var editableRegion = editableRegions.getInstance().activeRegion;
				var activeInput = editableRegion.getLayer().activeInput;
				switch (activeInput.tagName.toLowerCase()) {
					case 'textarea' :
					case 'input' : 
						vVal = activeInput.value;
					break;
					case 'select' :
						for (var i = 0; i < activeInput.options.length; i++) {
							var oNextOpt = activeInput.options[i];
							if (oNextOpt.selected) {
								vVal = oNextOpt.value;
								break;
							}
						}
					break;
				}

				editableRegion.setData(vVal);
			}
		});

		this.editModeToolbar.appendButton({
			name : "cancel",
			label : 'Отменить',
			position: 'left',
			accesskey: 27, // esc
			src : '/images/cms/edplace_restore.png',
			release : function() {
				var editableRegion = editableRegions.getInstance().activeRegion;
				editableRegion.restore();
				editableRegion.makeNotEditable();
			}
		});

		
		
		
		// access keys register
		Event.observe(this.element, 'keydown', function(evnt) {
			var oTargetEl = Event.element(evnt);
			if (__self.editMode) {
				var iKCode = window.event ? window.event.keyCode : evnt.which;
				var editableRegion = editableRegions.getInstance().activeRegion;

				if (editableRegion.dataType == 'text' && iKCode == 13) return true;

				for (var name in __self.editModeToolbar.buttons) {
					var button = __self.editModeToolbar.buttons[name];
					if (button.accesskey === iKCode) {
						button.release();
						break;
					}
				}
			}
			return true;
		});

	},

	highlight: function() {
		this.repaint();
		this.element.style.display = '';
	},

	setEditControl: function(oControl, oActiveInput, bUseTinyMCE) {
		this.useMCE = typeof(bUseTinyMCE) !== 'undefined' ? bUseTinyMCE : false;
		var __self = this;
		if (this.editControl) {
			this.element.removeChild(this.editControl);
		}
		
		oControl.style.display = 'none';
		this.editControl = this.element.appendChild(oControl);

		this.activeInput = oActiveInput;
		this.activeInput.id = 'ai' + this.editableRegion.element.id;
		// TODO: for all types
		var repaintRegion = function(evnt) {
			if (__self.editMode) {
				var oEl = __self.editableRegion.element;
				var sVal = this.value;
				if (oEl.tagName.toUpperCase() != 'PRE') {
					sVal = sVal.replace(/\r\n|\r|\n/g, "<br/>");
					sVal += '&nbsp;';
				}
				oEl.update(sVal);
				__self.repaint();
			}
		}
		if (!this.useMCE) {
			Event.observe(this.activeInput, "keyup", repaintRegion);
		}
	},

	getEditControl: function() {
		return this.editControl;
	},

	makeEditable: function() {
		var ret = false;
		if (this.editControl) {
			this.editMode = true;
			this.activeLayer.style.display = 'none';
			this.toolbar.hide();
			var arrOffset = Element.cumulativeOffset(this.element);

			this.editModeToolbar.show(arrOffset[0], arrOffset[1] - 44);
			editableRegions.getInstance().unhighlight();
			if (this.activeInput.getAttribute("type") == "text") {
				this.editableRegion.element.style.whiteSpace = 'nowrap';
			}
			if (this.useMCE) {
				this.activeInput.value = this.editableRegion.currentValue;
				tinyMCE.execCommand('mceToggleEditor', false, this.activeInput.id);
				this.editableRegion.applyTextInputComputedStyles();
			} else {
				this.editControl.style.display = '';
				this.activeInput.focus();
				this.activeInput.value = this.editableRegion.currentValue;
			}
			this.repaint();
			this.element.style.borderColor = '#fe9807';
			$('umi_edtmode').disabled = 1;
			ret = true;
		}

		return ret;
	},

	makeNotEditable: function() {
		var ret = false;
		if (this.editControl) {
			this.editMode = false;
			this.editControl.style.display = 'none';
			if (this.useMCE) {
				tinyMCE.execCommand('mceToggleEditor', false, this.activeInput.id);
			}
			this.activeLayer.style.display = '';
			this.activeLayer.style.backgroundColor = '#EEEEEE';
			this.editModeToolbar.hide();
			editableRegions.getInstance().highlight();
			var arrRegions = editableRegions.getInstance().getRegions();
			ret = true;
			this.element.style.borderColor = '#CCCCCC';
			$('umi_edtmode').disabled = 0;
		}
		return ret;
	},

	repaint : function() {
		try {
			var arrOffset = Element.cumulativeOffset(this.editableRegion.element);
			var e = this.element;
			var c = this.editControl;

			e.style.left = arrOffset[0] + 'px';
			e.style.top = arrOffset[1] + 'px';
			e.style.width = this.editableRegion.element.offsetWidth + 'px';
			e.style.height = this.editableRegion.element.offsetHeight + 'px';
			
			if (c) {
				c.style.left = arrOffset[0] + 'px';
				c.style.top = arrOffset[1] + 'px';

				var pl = parseInt(c.style.paddingLeft) || 0;
				var pr = parseInt(c.style.paddingRight) || 0;
				var pt = parseInt(c.style.paddingTop) || 0;
				var pb = parseInt(c.style.paddingBottom) || 0;

				c.style.width = this.editableRegion.element.offsetWidth - (pl + pr) + 'px';
				c.style.height = this.editableRegion.element.offsetHeight - (pt + pb) + 'px';
			}

			if (this.useMCE) {
				var inst = tinyMCE.getInstanceById(this.activeInput.id);
				if (inst) {
					var editorId = inst.editorId;
					var iFraHeight = this.editableRegion.element.offsetHeight;
					$(editorId).style.height = iFraHeight + 'px';
					$(editorId).setAttribute("height", iFraHeight);
				}

			}
		} catch(e) {};
		return true;
	},

	unhighlight: function() {
		var ret = false;
		if (!this.editMode) {
			this.element.style.display = 'none';
			ret = true;
		}
		return ret;
	}
}

var editableRegionToolbar = new Class.create();

editableRegionToolbar.prototype = {
	layer : false,
	buttonsEls : new Array(),
	buttons : new Array(),
	alwaysvis : false,
	visible : false,
	bar : null,
	width : 10,

	initialize: function(layer, container) {
		var __self = this;
		this.layer = layer;
		var oToolBar = $(document.createElement('div'));
		oToolBar.style.position = 'absolute';
		oToolBar.style.background = 'transparent';
		oToolBar.style.height = '44px';
		oToolBar.style.top = '-44px';
		oToolBar.style.display = 'none';
		oToolBar.style.zIndex = 10;

		// left bg
		var lbg = $(document.createElement('div'));
		lbg.style.background = 'transparent url(/images/cms/edplace_bar_left.png) no-repeat 0 0';
		lbg.style.height = '44px';
		lbg.style.paddingLeft = '10px';
		oToolBar.appendChild(lbg);

		// right bg
		var rbg = $(document.createElement('div'));
		rbg.style.background = 'transparent url(/images/cms/edplace_bar_right.png) no-repeat top right';
		rbg.style.height = '44px';
		rbg.style.paddingRight = '10px';
		rbg.style.position = 'relative';
		lbg.appendChild(rbg);

		// bar
		var bar = $(document.createElement('div'));
		bar.style.background = 'transparent url(/images/cms/edplace_bar_bg.png) repeat-x';
		bar.style.height = '44px';
		this.bar = rbg.appendChild(bar);




		this.element = $(container.appendChild(oToolBar));
	},

	appendButton: function(options) {
		var __self = this;
		var options = Object.extend({
			name : Math.rand,
			ico : '',
			label : '',
			release : function() {
				void(0);
			},
			accesskey : false,
			position : 'left'
		}, options);
		var oToolBtn = document.createElement('div');
		oToolBtn.style.width = "27px";
		oToolBtn.style.height = "24px";
		oToolBtn.style.marginTop = '9px';

		oToolBtn.style.cursor = 'pointer';
		oToolBtn.style['styleFloat'] = options.position;
		oToolBtn.style['cssFloat'] = options.position;
		oToolBtn.style.background = 'url(' + options.src + ') repeat-y 0 0';
		oToolBtn.setAttribute('title',options.label);

		Event.observe(oToolBtn, "click", function() {
			__self.hide();
			options.release();
		});
		Event.observe(oToolBtn, "mouseover", function() {
			this.style.backgroundPosition = '0px 24px';
		});
		Event.observe(oToolBtn, "mouseout", function() {
			this.style.backgroundPosition = '0px 0px';
		});


		this.width += 38;
		this.buttons[options.name] = options;
		this.buttonsEls[options.name] = this.bar.appendChild(oToolBtn);
	},

	
	setAlwaysVisible : function(bVal) {
		this.alwaysvis = bVal;
		if (this.alwaysvis) this.show();
	},

	show : function(iX, iY) {
		var iX = (typeof(iX) != 'undefined') ? iX : false;
		var iY = (typeof(iY) != 'undefined') ? iY : false;
		if (iX || iY) {
			if (iX) this.element.style.left = iX + 'px';
			if (iY) this.element.style.top = iY + 'px';
		}

		if (Prototype.Browser.IE) {
			this.element.style.width = this.width + 'px';
		}
		this.element.show();
		this.visible = true;
	},

	hide : function() {
		if (!this.alwaysvis) {
			this.element.hide();
			this.visible = false;
		}
	}
}

