Your IP : 3.139.86.170
;(function(window) {
if (BX.WindowManager) return;
/* windows manager */
BX.WindowManager = {
_stack: [],
_runtime_resize: {},
_delta: 2,
_delta_start: 1000,
currently_loaded: null,
settings_category: 'BX.WindowManager.9.5',
register: function (w)
{
this.currently_loaded = null;
var div = w.Get();
div.style.zIndex = w.zIndex = this.GetZIndex();
w.WM_REG_INDEX = this._stack.length;
this._stack.push(w);
if (this._stack.length < 2)
{
BX.bind(document, 'keyup', BX.proxy(this.__checkKeyPress, this));
}
},
unregister: function (w)
{
if (null == w.WM_REG_INDEX)
return null;
var _current;
if (this._stack.length > 0)
{
while ((_current = this.__pop_stack()) != w)
{
if (!_current)
{
_current = null;
break;
}
}
if (this._stack.length <= 0)
{
this.enableKeyCheck();
}
return _current;
}
else
{
return null;
}
},
__pop_stack: function(clean)
{
if (this._stack.length > 0)
{
var _current = this._stack.pop();
_current.WM_REG_INDEX = null;
BX.onCustomEvent(_current, 'onWindowUnRegister', [clean === true]);
return _current;
}
else
return null;
},
clean: function()
{
while (this.__pop_stack(true)){}
this._stack = null;
this.disableKeyCheck();
},
Get: function()
{
if (this.currently_loaded)
return this.currently_loaded;
else if (this._stack.length > 0)
return this._stack[this._stack.length-1];
else
return null;
},
setStartZIndex: function(value)
{
this._delta_start = value;
},
restoreStartZIndex: function()
{
this._delta_start = 1000;
},
GetZIndex: function()
{
var _current;
return (null != (_current = this._stack[this._stack.length-1])
? parseInt(_current.Get().style.zIndex) + this._delta
: this._delta_start
);
},
__get_check_url: function(url)
{
var pos = url.indexOf('?');
return pos == -1 ? url : url.substring(0, pos);
},
saveWindowSize: function(url, params)
{
var check_url = this.__get_check_url(url);
if (BX.userOptions)
{
BX.userOptions.save(this.settings_category, 'size_' + check_url, 'width', params.width);
BX.userOptions.save(this.settings_category, 'size_' + check_url, 'height', params.height);
}
this._runtime_resize[check_url] = params;
},
saveWindowOptions: function(wnd_id, opts)
{
if (BX.userOptions)
{
for (var i in opts)
{
if(opts.hasOwnProperty(i))
{
BX.userOptions.save(this.settings_category, 'options_' + wnd_id, i, opts[i]);
}
}
}
},
getRuntimeWindowSize: function(url)
{
return this._runtime_resize[this.__get_check_url(url)];
},
disableKeyCheck: function()
{
BX.unbind(document, 'keyup', BX.proxy(this.__checkKeyPress, this));
},
enableKeyCheck: function()
{
BX.bind(document, 'keyup', BX.proxy(this.__checkKeyPress, this));
},
__checkKeyPress: function(e)
{
if (null == e)
e = window.event;
if (e.keyCode == 27)
{
var wnd = BX.WindowManager.Get();
if (wnd && !wnd.unclosable) wnd.Close();
}
}
};
BX.garbage(BX.WindowManager.clean, BX.WindowManager);
/* base button class */
BX.CWindowButton = function(params)
{
if (params.btn)
{
this.btn = params.btn;
this.parentWindow = params.parentWindow;
if (/save|apply/i.test(this.btn.name))
{
BX.bind(this.btn, 'click', BX.delegate(this.disableUntilError, this));
}
}
else
{
this.title = params.title; // html value attr
this.hint = params.hint; // html title attr
this.id = params.id; // html name and id attrs
this.name = params.name; // html name or value attrs when id and title 're absent
this.className = params.className; // className for button input
this.action = params.action;
this.onclick = params.onclick;
// you can override button creation method
if (params.Button && BX.type.isFunction(params.Button))
this.Button = params.Button;
this.btn = null;
}
};
BX.CWindowButton.prototype.disable = function()
{
if (this.btn)
this.parentWindow.showWait(this.btn);
};
BX.CWindowButton.prototype.enable = function(){
if (this.btn)
this.parentWindow.closeWait(this.btn);
};
BX.CWindowButton.prototype.emulate = function()
{
if (this.btn && this.btn.disabled)
return;
var act =
this.action
? BX.delegate(this.action, this)
: (
this.onclick
? this.onclick
: (
this.btn
? this.btn.getAttribute('onclick')
: ''
)
);
if (act)
{
setTimeout(act, 50);
if (this.btn && /save|apply/i.test(this.btn.name) && !this.action)
{
this.disableUntilError();
}
}
};
BX.CWindowButton.prototype.Button = function(parentWindow)
{
this.parentWindow = parentWindow;
var btn = {
props: {
'type': 'button',
'name': this.id ? this.id : this.name,
'value': this.title ? this.title : this.name,
'id': this.id
}
};
if (this.hint)
btn.props.title = this.hint;
if (!!this.className)
btn.props.className = this.className;
if (this.action)
{
btn.events = {
'click': BX.delegate(this.action, this)
};
}
else if (this.onclick)
{
if (BX.browser.IsIE())
{
btn.events = {
'click': BX.delegate(function() {eval(this.onclick)}, this)
};
}
else
{
btn.attrs = {
'onclick': this.onclick
};
}
}
this.btn = BX.create('INPUT', btn);
return this.btn;
};
BX.CWindowButton.prototype.disableUntilError = function() {
this.disable();
if (!this.__window_error_handler_set)
{
BX.addCustomEvent(this.parentWindow, 'onWindowError', BX.delegate(this.enable, this));
this.__window_error_handler_set = true;
}
};
/* base window class */
BX.CWindow = function(div, type)
{
this.DIV = div || document.createElement('DIV');
this.SETTINGS = {
resizable: false,
min_height: 0,
min_width: 0,
top: 0,
left: 0,
draggable: false,
drag_restrict: true,
resize_restrict: true
};
this.ELEMENTS = {
draggable: [],
resizer: [],
close: []
};
this.type = type == 'float' ? 'float' : 'dialog';
BX.adjust(this.DIV, {
props: {
className: 'bx-core-window'
},
style: {
'zIndex': 0,
'position': 'absolute',
'display': 'none',
'top': this.SETTINGS.top + 'px',
'left': this.SETTINGS.left + 'px',
'height': '100px',
'width': '100px'
}
});
this.isOpen = false;
BX.addCustomEvent(this, 'onWindowRegister', BX.delegate(this.onRegister, this));
BX.addCustomEvent(this, 'onWindowUnRegister', BX.delegate(this.onUnRegister, this));
this.MOUSEOVER = null;
BX.bind(this.DIV, 'mouseover', BX.delegate(this.__set_msover, this));
BX.bind(this.DIV, 'mouseout', BX.delegate(this.__unset_msover, this));
BX.ready(BX.delegate(function() {
document.body.appendChild(this.DIV);
}, this));
};
BX.CWindow.prototype.Get = function () {return this.DIV};
BX.CWindow.prototype.visible = function() {return this.isOpen;};
BX.CWindow.prototype.Show = function(bNotRegister)
{
this.DIV.style.display = 'block';
if (!bNotRegister)
{
BX.WindowManager.register(this);
BX.onCustomEvent(this, 'onWindowRegister');
}
};
BX.CWindow.prototype.Hide = function()
{
BX.WindowManager.unregister(this);
this.DIV.style.display = 'none';
};
BX.CWindow.prototype.onRegister = function()
{
this.isOpen = true;
};
BX.CWindow.prototype.onUnRegister = function(clean)
{
this.isOpen = false;
if (clean || (this.PARAMS && this.PARAMS.content_url))
{
if (clean) {BX.onCustomEvent(this, 'onWindowClose', [this, true]);}
if (this.DIV.parentNode)
this.DIV.parentNode.removeChild(this.DIV);
}
else
{
this.DIV.style.display = 'none';
}
};
BX.CWindow.prototype.CloseDialog = // compatibility
BX.CWindow.prototype.Close = function(bImmediately)
{
BX.onCustomEvent(this, 'onBeforeWindowClose', [this]);
if (bImmediately !== true)
{
if (this.denyClose)
return false;
}
BX.onCustomEvent(this, 'onWindowClose', [this]);
//this crashes vis editor in ie via onWindowResizeExt event handler
//if (this.bExpanded) this.__expand();
// alternative version:
if (this.bExpanded)
{
var pDocElement = BX.GetDocElement();
BX.unbind(window, 'resize', BX.proxy(this.__expand_onresize, this));
pDocElement.style.overflow = this.__expand_settings.overflow;
}
BX.WindowManager.unregister(this);
return true;
};
BX.CWindow.prototype.SetResize = function(elem)
{
elem.style.cursor = 'se-resize';
BX.bind(elem, 'mousedown', BX.proxy(this.__startResize, this));
this.ELEMENTS.resizer.push(elem);
this.SETTINGS.resizable = true;
};
BX.CWindow.prototype.SetExpand = function(elem, event_name)
{
event_name = event_name || 'click';
BX.bind(elem, event_name, BX.proxy(this.__expand, this));
};
BX.CWindow.prototype.__expand_onresize = function()
{
var windowSize = BX.GetWindowInnerSize();
this.DIV.style.width = windowSize.innerWidth + "px";
this.DIV.style.height = windowSize.innerHeight + "px";
BX.onCustomEvent(this, 'onWindowResize');
};
BX.CWindow.prototype.__expand = function()
{
var pDocElement = BX.GetDocElement();
if (!this.bExpanded)
{
var wndScroll = BX.GetWindowScrollPos(),
wndSize = BX.GetWindowInnerSize();
this.__expand_settings = {
resizable: this.SETTINGS.resizable,
draggable: this.SETTINGS.draggable,
width: this.DIV.style.width,
height: this.DIV.style.height,
left: this.DIV.style.left,
top: this.DIV.style.top,
scrollTop: wndScroll.scrollTop,
scrollLeft: wndScroll.scrollLeft,
overflow: BX.style(pDocElement, 'overflow')
};
this.SETTINGS.resizable = false;
this.SETTINGS.draggable = false;
window.scrollTo(0,0);
pDocElement.style.overflow = 'hidden';
this.DIV.style.top = '0px';
this.DIV.style.left = '0px';
this.DIV.style.width = wndSize.innerWidth + 'px';
this.DIV.style.height = wndSize.innerHeight + 'px';
this.bExpanded = true;
BX.onCustomEvent(this, 'onWindowExpand');
BX.onCustomEvent(this, 'onWindowResize');
BX.bind(window, 'resize', BX.proxy(this.__expand_onresize, this));
}
else
{
BX.unbind(window, 'resize', BX.proxy(this.__expand_onresize, this));
this.SETTINGS.resizable = this.__expand_settings.resizable;
this.SETTINGS.draggable = this.__expand_settings.draggable;
pDocElement.style.overflow = this.__expand_settings.overflow;
this.DIV.style.top = this.__expand_settings.top;
this.DIV.style.left = this.__expand_settings.left;
this.DIV.style.width = this.__expand_settings.width;
this.DIV.style.height = this.__expand_settings.height;
window.scrollTo(this.__expand_settings.scrollLeft, this.__expand_settings.scrollTop);
this.bExpanded = false;
BX.onCustomEvent(this, 'onWindowNarrow');
BX.onCustomEvent(this, 'onWindowResize');
}
};
BX.CWindow.prototype.Resize = function(x, y)
{
var new_width = Math.max(x - this.pos.left + this.dx, this.SETTINGS.min_width);
var new_height = Math.max(y - this.pos.top + this.dy, this.SETTINGS.min_height);
if (this.SETTINGS.resize_restrict)
{
var scrollSize = BX.GetWindowScrollSize();
if (this.pos.left + new_width > scrollSize.scrollWidth - this.dw)
new_width = scrollSize.scrollWidth - this.pos.left - this.dw;
}
this.DIV.style.width = new_width + 'px';
this.DIV.style.height = new_height + 'px';
BX.onCustomEvent(this, 'onWindowResize');
};
BX.CWindow.prototype.__startResize = function(e)
{
if (!this.SETTINGS.resizable)
return false;
if(!e) e = window.event;
this.wndSize = BX.GetWindowScrollPos();
this.wndSize.innerWidth = BX.GetWindowInnerSize().innerWidth;
this.pos = BX.pos(this.DIV);
this.x = e.clientX + this.wndSize.scrollLeft;
this.y = e.clientY + this.wndSize.scrollTop;
this.dx = this.pos.left + this.pos.width - this.x;
this.dy = this.pos.top + this.pos.height - this.y;
this.dw = this.pos.width - parseInt(this.DIV.style.width);
BX.bind(document, "mousemove", BX.proxy(this.__moveResize, this));
BX.bind(document, "mouseup", BX.proxy(this.__stopResize, this));
if(document.body.setCapture)
document.body.setCapture();
document.onmousedown = BX.False;
var b = document.body;
b.ondrag = b.onselectstart = BX.False;
b.style.MozUserSelect = this.DIV.style.MozUserSelect = 'none';
b.style.cursor = 'se-resize';
BX.onCustomEvent(this, 'onWindowResizeStart');
return true;
};
BX.CWindow.prototype.__moveResize = function(e)
{
if(!e) e = window.event;
var windowScroll = BX.GetWindowScrollPos();
var x = e.clientX + windowScroll.scrollLeft;
var y = e.clientY + windowScroll.scrollTop;
if(this.x == x && this.y == y)
return;
this.Resize(x, y);
this.x = x;
this.y = y;
};
BX.CWindow.prototype.__stopResize = function()
{
if(document.body.releaseCapture)
document.body.releaseCapture();
BX.unbind(document, "mousemove", BX.proxy(this.__moveResize, this));
BX.unbind(document, "mouseup", BX.proxy(this.__stopResize, this));
document.onmousedown = null;
var b = document.body;
b.ondrag = b.onselectstart = null;
b.style.MozUserSelect = this.DIV.style.MozUserSelect = '';
b.style.cursor = '';
BX.onCustomEvent(this, 'onWindowResizeFinished')
};
BX.CWindow.prototype.SetClose = function(elem)
{
BX.bind(elem, 'click', BX.proxy(this.Close, this));
this.ELEMENTS.close.push(elem);
};
BX.CWindow.prototype.SetDraggable = function(elem)
{
BX.bind(elem, 'mousedown', BX.proxy(this.__startDrag, this));
elem.style.cursor = 'move';
this.ELEMENTS.draggable.push(elem);
this.SETTINGS.draggable = true;
};
BX.CWindow.prototype.Move = function(x, y)
{
var dxShadow = 1; // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
var left = parseInt(this.DIV.style.left)+x;
var top = parseInt(this.DIV.style.top)+y;
if (this.SETTINGS.drag_restrict)
{
//Left side
if (left < 0)
left = 0;
//Right side
var scrollSize = BX.GetWindowScrollSize();
var floatWidth = this.DIV.offsetWidth;
var floatHeight = this.DIV.offsetHeight;
if (left > (scrollSize.scrollWidth - floatWidth - dxShadow))
left = scrollSize.scrollWidth - floatWidth - dxShadow;
var scrollHeight = Math.max(
document.body.scrollHeight, document.documentElement.scrollHeight,
document.body.offsetHeight, document.documentElement.offsetHeight,
document.body.clientHeight, document.documentElement.clientHeight,
scrollSize.scrollHeight
);
if (top > (scrollHeight - floatHeight - dxShadow))
top = scrollHeight - floatHeight - dxShadow;
//Top side
if (top < 0)
top = 0;
}
this.DIV.style.left = left+'px';
this.DIV.style.top = top+'px';
//this.AdjustShadow(div);
};
BX.CWindow.prototype.__startDrag = function(e)
{
if (!this.SETTINGS.draggable)
return false;
if(!e) e = window.event;
this.x = e.clientX + document.body.scrollLeft;
this.y = e.clientY + document.body.scrollTop;
this.__bWasDragged = false;
BX.bind(document, "mousemove", BX.proxy(this.__moveDrag, this));
BX.bind(document, "mouseup", BX.proxy(this.__stopDrag, this));
if(document.body.setCapture)
document.body.setCapture();
document.onmousedown = BX.False;
var b = document.body;
b.ondrag = b.onselectstart = BX.False;
b.style.MozUserSelect = this.DIV.style.MozUserSelect = 'none';
b.style.cursor = 'move';
return BX.PreventDefault(e);
};
BX.CWindow.prototype.__moveDrag = function(e)
{
if(!e) e = window.event;
var x = e.clientX + document.body.scrollLeft;
var y = e.clientY + document.body.scrollTop;
if(this.x == x && this.y == y)
return;
this.Move((x - this.x), (y - this.y));
this.x = x;
this.y = y;
if (!this.__bWasDragged)
{
BX.onCustomEvent(this, 'onWindowDragStart');
this.__bWasDragged = true;
BX.bind(BX.proxy_context, "click", BX.PreventDefault);
}
BX.onCustomEvent(this, 'onWindowDrag');
};
BX.CWindow.prototype.__stopDrag = function(e)
{
if(document.body.releaseCapture)
document.body.releaseCapture();
BX.unbind(document, "mousemove", BX.proxy(this.__moveDrag, this));
BX.unbind(document, "mouseup", BX.proxy(this.__stopDrag, this));
document.onmousedown = null;
var b = document.body;
b.ondrag = b.onselectstart = null;
b.style.MozUserSelect = this.DIV.style.MozUserSelect = '';
b.style.cursor = '';
if (this.__bWasDragged)
{
BX.onCustomEvent(this, 'onWindowDragFinished');
var _proxy_context = BX.proxy_context;
setTimeout(function(){BX.unbind(_proxy_context, "click", BX.PreventDefault)}, 100);
this.__bWasDragged = false;
}
return BX.PreventDefault(e);
};
BX.CWindow.prototype.DenyClose = function()
{
this.denyClose = true;
};
BX.CWindow.prototype.AllowClose = function()
{
this.denyClose = false;
};
BX.CWindow.prototype.ShowError = function(str)
{
BX.onCustomEvent(this, 'onWindowError', [str]);
if (this._wait)
BX.closeWait(this._wait);
window.alert(str);
};
BX.CWindow.prototype.__set_msover = function() {this.MOUSEOVER = true;};
BX.CWindow.prototype.__unset_msover = function() {this.MOUSEOVER = false;};
/* dialog window class extends window class */
BX.CWindowDialog = function() {
var a = arguments;
a[1] = 'dialog';
BX.CWindowDialog.superclass.constructor.apply(this, a);
this.DIV.style.top = '10px';
this.OVERLAY = null;
};
BX.extend(BX.CWindowDialog, BX.CWindow);
BX.CWindowDialog.prototype.__resizeOverlay = function()
{
var windowSize = BX.GetWindowScrollSize();
this.OVERLAY.style.width = windowSize.scrollWidth + "px";
};
BX.CWindowDialog.prototype.CreateOverlay = function(zIndex)
{
if (null == this.OVERLAY)
{
var windowSize = BX.GetWindowScrollSize();
// scrollHeight in BX.GetWindowScrollSize may be incorrect
var scrollHeight = Math.max(
document.body.scrollHeight, document.documentElement.scrollHeight,
document.body.offsetHeight, document.documentElement.offsetHeight,
document.body.clientHeight, document.documentElement.clientHeight,
windowSize.scrollHeight
);
this.OVERLAY = document.body.appendChild(BX.create("DIV", {
style: {
position: 'absolute',
top: '0px',
left: '0px',
zIndex: zIndex || (parseInt(this.DIV.style.zIndex)-2),
width: windowSize.scrollWidth + "px",
height: scrollHeight + "px"
}
}));
}
return this.OVERLAY;
};
BX.CWindowDialog.prototype.Show = function()
{
BX.CWindowDialog.superclass.Show.apply(this, arguments);
this.CreateOverlay();
this.OVERLAY.style.display = 'block';
this.OVERLAY.style.zIndex = parseInt(this.DIV.style.zIndex)-2;
BX.unbind(window, 'resize', BX.proxy(this.__resizeOverlay, this));
BX.bind(window, 'resize', BX.proxy(this.__resizeOverlay, this));
};
BX.CWindowDialog.prototype.onUnRegister = function(clean)
{
BX.CWindowDialog.superclass.onUnRegister.apply(this, arguments);
if (this.clean)
{
if (this.OVERLAY.parentNode)
this.OVERLAY.parentNode.removeChild(this.OVERLAY);
}
else
{
this.OVERLAY.style.display = 'none';
}
BX.unbind(window, 'resize', BX.proxy(this.__resizeOverlay, this));
};
/* standard bitrix dialog extends BX.CWindowDialog */
/*
arParams = {
(
title: 'dialog title',
head: 'head block html',
content: 'dialog content',
icon: 'head icon classname or filename',
resize_id: 'some id to save resize information'// useless if resizable = false
)
or
(
content_url: url to content load
loaded content scripts can use BX.WindowManager.Get() to get access to the current window object
)
height: window_height_in_pixels,
width: window_width_in_pixels,
draggable: true|false,
resizable: true|false,
min_height: min_window_height_in_pixels, // useless if resizable = false
min_width: min_window_width_in_pixels, // useless if resizable = false
buttons: [
'html_code',
BX.CDialog.btnSave, BX.CDialog.btnCancel, BX.CDialog.btnClose
]
}
*/
BX.CDialog = function(arParams)
{
BX.CDialog.superclass.constructor.apply(this);
this._sender = 'core_window_cdialog';
this.PARAMS = arParams || {};
for (var i in this.defaultParams)
{
if (typeof this.PARAMS[i] == 'undefined')
this.PARAMS[i] = this.defaultParams[i];
}
this.PARAMS.width = (!isNaN(parseInt(this.PARAMS.width)))
? this.PARAMS.width
: this.defaultParams['width'];
this.PARAMS.height = (!isNaN(parseInt(this.PARAMS.height)))
? this.PARAMS.height
: this.defaultParams['height'];
if (this.PARAMS.resize_id || this.PARAMS.content_url)
{
var arSize = BX.WindowManager.getRuntimeWindowSize(this.PARAMS.resize_id || this.PARAMS.content_url);
if (arSize)
{
this.PARAMS.width = arSize.width;
this.PARAMS.height = arSize.height;
}
}
BX.addClass(this.DIV, 'bx-core-adm-dialog');
this.DIV.id = 'bx-admin-prefix';
this.PARTS = {};
this.DIV.style.height = null;
this.DIV.style.width = null;
this.PARTS.TITLEBAR = this.DIV.appendChild(BX.create('DIV', {props: {
className: 'bx-core-adm-dialog-head'
}
}));
this.PARTS.TITLE_CONTAINER = this.PARTS.TITLEBAR.appendChild(BX.create('SPAN', {
props: {className: 'bx-core-adm-dialog-head-inner'},
text: this.PARAMS.title
}));
this.PARTS.TITLEBAR_ICONS = this.PARTS.TITLEBAR.appendChild(BX.create('DIV', {
props: {
className: 'bx-core-adm-dialog-head-icons'
},
children: (this.PARAMS.resizable ? [
BX.create('SPAN', {props: {className: 'bx-core-adm-icon-expand', title: BX.message('JS_CORE_WINDOW_EXPAND')}}),
BX.create('SPAN', {props: {className: 'bx-core-adm-icon-close', title: BX.message('JS_CORE_WINDOW_CLOSE')}})
] : [
BX.create('SPAN', {props: {className: 'bx-core-adm-icon-close', title: BX.message('JS_CORE_WINDOW_CLOSE')}})
])
}));
this.PARTS.CONTENT = this.DIV.appendChild(BX.create('DIV', {
props: {className: 'bx-core-adm-dialog-content-wrap adm-workarea'}
}));
this.PARTS.CONTENT_DATA = this.PARTS.CONTENT.appendChild(BX.create('DIV', {
props: {className: 'bx-core-adm-dialog-content'},
style: {
height: this.PARAMS.height + 'px',
width: this.PARAMS.width + 'px'
}
}));
this.PARTS.HEAD = this.PARTS.CONTENT_DATA.appendChild(BX.create('DIV', {
props: {
className: 'bx-core-adm-dialog-head-block' + (this.PARAMS.icon ? ' ' + this.PARAMS.icon : '')
}
}));
this.SetHead(this.PARAMS.head);
this.SetContent(this.PARAMS.content);
this.SetTitle(this.PARAMS.title);
this.SetClose(this.PARTS.TITLEBAR_ICONS.lastChild);
if (this.PARAMS.resizable)
{
this.SetExpand(this.PARTS.TITLEBAR_ICONS.firstChild);
this.SetExpand(this.PARTS.TITLEBAR, 'dblclick');
BX.addCustomEvent(this, 'onWindowExpand', BX.proxy(this.__onexpand, this));
BX.addCustomEvent(this, 'onWindowNarrow', BX.proxy(this.__onexpand, this));
}
this.PARTS.FOOT = this.PARTS.BUTTONS_CONTAINER = this.PARTS.CONTENT.appendChild(BX.create('DIV', {
props: {
className: 'bx-core-adm-dialog-buttons'
},
//events: {
// 'click': BX.delegateEvent({property:{type: /button|submit/}}, BX.delegate(function() {this.showWait(BX.proxy_context)}, this))
//},
children: this.ShowButtons()
}
));
if (this.PARAMS.draggable)
this.SetDraggable(this.PARTS.TITLEBAR);
if (this.PARAMS.resizable)
{
this.PARTS.RESIZER = this.DIV.appendChild(BX.create('DIV', {
props: {className: 'bx-core-resizer'}
}));
this.SetResize(this.PARTS.RESIZER);
this.SETTINGS.min_width = this.PARAMS.min_width;
this.SETTINGS.min_height = this.PARAMS.min_height;
}
this.auth_callback = BX.delegate(function(){
this.PARAMS.content = '';
this.hideNotify();
this.Show();
}, this)
};
BX.extend(BX.CDialog, BX.CWindowDialog);
BX.CDialog.prototype.defaultParams = {
width: 700,
height: 400,
min_width: 500,
min_height: 300,
resizable: true,
draggable: true,
title: '',
icon: ''
};
BX.CDialog.prototype.showWait = function(el)
{
if (BX.type.isElementNode(el) && (el.type == 'button' || el.type == 'submit'))
{
BX.defer(function(){el.disabled = true})();
var bSave = (BX.hasClass(el, 'adm-btn-save') || BX.hasClass(el, 'adm-btn-save')),
pos = BX.pos(el, true);
el.bxwaiter = this.PARTS.FOOT.appendChild(BX.create('DIV', {
props: {className: 'adm-btn-load-img' + (bSave ? '-green' : '')},
style: {
top: parseInt((pos.bottom + pos.top)/2 - 10) + 'px',
left: parseInt((pos.right + pos.left)/2 - 10) + 'px'
}
}));
BX.addClass(el, 'adm-btn-load');
this.lastWaitElement = el;
return el.bxwaiter;
}
return null;
};
BX.CDialog.prototype.closeWait = function(el)
{
el = el || this.lastWaitElement;
if (BX.type.isElementNode(el))
{
if (el.bxwaiter)
{
if(el.bxwaiter.parentNode)
{
el.bxwaiter.parentNode.removeChild(el.bxwaiter);
}
el.bxwaiter = null;
}
el.disabled = false;
BX.removeClass(el, 'adm-btn-load');
if (this.lastWaitElement == el)
this.lastWaitElement = null;
}
};
BX.CDialog.prototype.Authorize = function(arAuthResult)
{
this.bSkipReplaceContent = true;
this.ShowError(BX.message('JSADM_AUTH_REQ'));
BX.onCustomEvent(this, 'onWindowError', []);
BX.closeWait();
(new BX.CAuthDialog({
content_url: this.PARAMS.content_url,
auth_result: arAuthResult,
callback: BX.delegate(function(){
if (this.auth_callback)
this.auth_callback()
}, this)
})).Show();
};
BX.CDialog.prototype.ShowError = function(str)
{
BX.onCustomEvent(this, 'onWindowError', [str]);
this.closeWait();
if (this._wait)
BX.closeWait(this._wait);
this.Notify(str, true);
};
BX.CDialog.prototype.__expandGetSize = function()
{
var pDocElement = BX.GetDocElement();
pDocElement.style.overflow = 'hidden';
var wndSize = BX.GetWindowInnerSize();
pDocElement.scrollTop = 0;
this.DIV.style.top = '-' + this.dxShadow + 'px';
this.DIV.style.left = '-' + this.dxShadow + 'px';
return {
width: (wndSize.innerWidth - parseInt(BX.style(this.PARTS.CONTENT, 'padding-right')) - parseInt(BX.style(this.PARTS.CONTENT, 'padding-left'))) + this.dxShadow,
height: (wndSize.innerHeight - this.PARTS.TITLEBAR.offsetHeight - this.PARTS.FOOT.offsetHeight - parseInt(BX.style(this.PARTS.CONTENT, 'padding-top')) - parseInt(BX.style(this.PARTS.CONTENT, 'padding-bottom'))) + this.dxShadow
};
};
BX.CDialog.prototype.__expand = function()
{
var pDocElement = BX.GetDocElement();
this.dxShadow = 2;
if (!this.bExpanded)
{
var wndScroll = BX.GetWindowScrollPos();
this.__expand_settings = {
resizable: this.SETTINGS.resizable,
draggable: this.SETTINGS.draggable,
width: this.PARTS.CONTENT_DATA.style.width,
height: this.PARTS.CONTENT_DATA.style.height,
left: this.DIV.style.left,
top: this.DIV.style.top,
scrollTop: wndScroll.scrollTop,
scrollLeft: wndScroll.scrollLeft,
overflow: BX.style(pDocElement, 'overflow')
};
this.SETTINGS.resizable = false;
this.SETTINGS.draggable = false;
var pos = this.__expandGetSize();
this.PARTS.CONTENT_DATA.style.width = pos.width + 'px';
this.PARTS.CONTENT_DATA.style.height = pos.height + 'px';
window.scrollTo(0,0);
pDocElement.style.overflow = 'hidden';
this.bExpanded = true;
BX.onCustomEvent(this, 'onWindowExpand');
BX.onCustomEvent(this, 'onWindowResize');
BX.onCustomEvent(this, 'onWindowResizeExt', [{'width': pos.width, 'height': pos.height}]);
BX.bind(window, 'resize', BX.proxy(this.__expand_onresize, this));
}
else
{
BX.unbind(window, 'resize', BX.proxy(this.__expand_onresize, this));
this.SETTINGS.resizable = this.__expand_settings.resizable;
this.SETTINGS.draggable = this.__expand_settings.draggable;
pDocElement.style.overflow = this.__expand_settings.overflow;
this.DIV.style.top = this.__expand_settings.top;
this.DIV.style.left = this.__expand_settings.left;
this.PARTS.CONTENT_DATA.style.width = this.__expand_settings.width;
this.PARTS.CONTENT_DATA.style.height = this.__expand_settings.height;
window.scrollTo(this.__expand_settings.scrollLeft, this.__expand_settings.scrollTop);
this.bExpanded = false;
BX.onCustomEvent(this, 'onWindowNarrow');
BX.onCustomEvent(this, 'onWindowResize');
BX.onCustomEvent(this, 'onWindowResizeExt', [{'width': parseInt(this.__expand_settings.width), 'height': parseInt(this.__expand_settings.height)}]);
}
};
BX.CDialog.prototype.__expand_onresize = function()
{
var pos = this.__expandGetSize();
this.PARTS.CONTENT_DATA.style.width = pos.width + 'px';
this.PARTS.CONTENT_DATA.style.height = pos.height + 'px';
BX.onCustomEvent(this, 'onWindowResize');
BX.onCustomEvent(this, 'onWindowResizeExt', [pos]);
};
BX.CDialog.prototype.__onexpand = function()
{
var ob = this.PARTS.TITLEBAR_ICONS.firstChild;
ob.className = BX.toggle(ob.className, ['bx-core-adm-icon-expand', 'bx-core-adm-icon-narrow']);
ob.title = BX.toggle(ob.title, [BX.message('JS_CORE_WINDOW_EXPAND'), BX.message('JS_CORE_WINDOW_NARROW')]);
if (this.PARTS.RESIZER)
{
this.PARTS.RESIZER.style.display = this.bExpanded ? 'none' : 'block';
}
};
BX.CDialog.prototype.__startResize = function(e)
{
if (!this.SETTINGS.resizable)
return false;
if(!e) e = window.event;
this.wndSize = BX.GetWindowScrollPos();
this.wndSize.innerWidth = BX.GetWindowInnerSize().innerWidth;
this.pos = BX.pos(this.PARTS.CONTENT_DATA);
this.x = e.clientX + this.wndSize.scrollLeft;
this.y = e.clientY + this.wndSize.scrollTop;
this.dx = this.pos.left + this.pos.width - this.x;
this.dy = this.pos.top + this.pos.height - this.y;
// TODO: suspicious
this.dw = this.pos.width - parseInt(this.PARTS.CONTENT_DATA.style.width) + parseInt(BX.style(this.PARTS.CONTENT, 'padding-right'));
BX.bind(document, "mousemove", BX.proxy(this.__moveResize, this));
BX.bind(document, "mouseup", BX.proxy(this.__stopResize, this));
if(document.body.setCapture)
document.body.setCapture();
document.onmousedown = BX.False;
var b = document.body;
b.ondrag = b.onselectstart = BX.False;
b.style.MozUserSelect = this.DIV.style.MozUserSelect = 'none';
b.style.cursor = 'se-resize';
BX.onCustomEvent(this, 'onWindowResizeStart');
return true;
};
BX.CDialog.prototype.Resize = function(x, y)
{
var new_width = Math.max(x - this.pos.left + this.dx, this.SETTINGS.min_width);
var new_height = Math.max(y - this.pos.top + this.dy, this.SETTINGS.min_height);
if (this.SETTINGS.resize_restrict)
{
var scrollSize = BX.GetWindowScrollSize();
if (this.pos.left + new_width > scrollSize.scrollWidth - this.dw)
new_width = scrollSize.scrollWidth - this.pos.left - this.dw;
}
this.PARTS.CONTENT_DATA.style.width = new_width + 'px';
this.PARTS.CONTENT_DATA.style.height = new_height + 'px';
BX.onCustomEvent(this, 'onWindowResize');
BX.onCustomEvent(this, 'onWindowResizeExt', [{'height': new_height, 'width': new_width}]);
};
BX.CDialog.prototype.SetSize = function(obSize)
{
this.PARTS.CONTENT_DATA.style.width = obSize.width + 'px';
this.PARTS.CONTENT_DATA.style.height = obSize.height + 'px';
BX.onCustomEvent(this, 'onWindowResize');
BX.onCustomEvent(this, 'onWindowResizeExt', [obSize]);
};
BX.CDialog.prototype.GetParameters = function(form_name)
{
var form = this.GetForm();
if(!form)
return "";
var i, s = "";
var n = form.elements.length;
var delim = '';
for(i=0; i<n; i++)
{
if (s != '') delim = '&';
var el = form.elements[i];
if (el.disabled)
continue;
switch(el.type.toLowerCase())
{
case 'text':
case 'textarea':
case 'password':
case 'hidden':
if (null == form_name && el.name.substr(el.name.length-4) == '_alt' && form.elements[el.name.substr(0, el.name.length-4)])
break;
s += delim + el.name + '=' + BX.util.urlencode(el.value);
break;
case 'radio':
if(el.checked)
s += delim + el.name + '=' + BX.util.urlencode(el.value);
break;
case 'checkbox':
s += delim + el.name + '=' + BX.util.urlencode(el.checked ? 'Y':'N');
break;
case 'select-one':
var val = "";
if (null == form_name && form.elements[el.name + '_alt'] && el.selectedIndex == 0)
val = form.elements[el.name+'_alt'].value;
else
val = el.value;
s += delim + el.name + '=' + BX.util.urlencode(val);
break;
case 'select-multiple':
var j, bAdded = false;
var l = el.options.length;
for (j=0; j<l; j++)
{
if (el.options[j].selected)
{
s += delim + el.name + '=' + BX.util.urlencode(el.options[j].value);
bAdded = true;
}
}
if (!bAdded)
s += delim + el.name + '=';
break;
default:
break;
}
}
return s;
};
BX.CDialog.prototype.PostParameters = function(params)
{
var url = this.PARAMS.content_url;
if (null == params)
params = "";
params += (params == "" ? "" : "&") + "bxsender=" + this._sender;
var index = url.indexOf('?');
if (index == -1)
url += '?' + params;
else
url = url.substring(0, index) + '?' + params + "&" + url.substring(index+1);
BX.showWait();
this.auth_callback = BX.delegate(function(){
this.hideNotify();
this.PostParameters(params);
}, this);
BX.ajax.Setup({skipAuthCheck:true},true);
BX.ajax.post(url, this.GetParameters(), BX.delegate(function(result) {
BX.closeWait();
if (!this.bSkipReplaceContent)
{
this.ClearButtons(); // buttons are appended during form reload, so we should clear footer
this.SetContent(result);
this.Show(true);
}
this.bSkipReplaceContent = false;
}, this));
};
BX.CDialog.prototype.Submit = function(params, url)
{
var FORM = this.GetForm();
if (FORM)
{
FORM.onsubmit = null;
FORM.method = 'POST';
if (!FORM.action || url)
{
url = url || this.PARAMS.content_url;
if (null != params)
{
var index = url.indexOf('?');
if (index == -1)
url += '?' + params;
else
url = url.substring(0, index) + '?' + params + "&" + url.substring(index+1);
}
FORM.action = url;
}
if (!FORM._bxsender)
{
FORM._bxsender = FORM.appendChild(BX.create('INPUT', {
attrs: {
type: 'hidden',
name: 'bxsender',
value: this._sender
}
}));
}
this._wait = BX.showWait();
this.auth_callback = BX.delegate(function(){
this.hideNotify();
this.Submit(params);
}, this);
BX.ajax.submit(FORM, BX.delegate(function(){this.closeWait()}, this));
}
else
{
window.alert('no form registered!');
}
};
BX.CDialog.prototype.GetForm = function()
{
if (null == this.__form)
{
var forms = this.PARTS.CONTENT_DATA.getElementsByTagName('FORM');
this.__form = forms[0] ? forms[0] : null;
}
return this.__form;
};
BX.CDialog.prototype.GetRealForm = function()
{
if (null == this.__rform)
{
var forms = this.PARTS.CONTENT_DATA.getElementsByTagName('FORM');
this.__rform = forms[1] ? forms[1] : (forms[0] ? forms[0] : null);
}
return this.__rform;
};
BX.CDialog.prototype._checkButton = function(btn)
{
var arCustomButtons = ['btnSave', 'btnCancel', 'btnClose'];
for (var i = 0; i < arCustomButtons.length; i++)
{
if (this[arCustomButtons[i]] && (btn == this[arCustomButtons[i]]))
return arCustomButtons[i];
}
return false;
};
BX.CDialog.prototype.ShowButtons = function()
{
var result = [];
if (this.PARAMS.buttons)
{
if (this.PARAMS.buttons.title) this.PARAMS.buttons = [this.PARAMS.buttons];
for (var i=0, len=this.PARAMS.buttons.length; i<len; i++)
{
if (BX.type.isNotEmptyString(this.PARAMS.buttons[i]))
{
result.push(this.PARAMS.buttons[i]);
}
else if (BX.type.isElementNode(this.PARAMS.buttons[i]))
{
result.push(this.PARAMS.buttons[i]);
}
else if (this.PARAMS.buttons[i])
{
//if (!(this.PARAMS.buttons[i] instanceof BX.CWindowButton))
if (!BX.is_subclass_of(this.PARAMS.buttons[i], BX.CWindowButton))
{
var b = this._checkButton(this.PARAMS.buttons[i]); // hack to set links to real CWindowButton object in btnSave etc;
this.PARAMS.buttons[i] = new BX.CWindowButton(this.PARAMS.buttons[i]);
if (b) this[b] = this.PARAMS.buttons[i];
}
result.push(this.PARAMS.buttons[i].Button(this));
}
}
}
return result;
};
BX.CDialog.prototype.setAutosave = function () {
if (!this.bSetAutosaveDelay)
{
this.bSetAutosaveDelay = true;
setTimeout(BX.proxy(this.setAutosave, this), 10);
}
};
BX.CDialog.prototype.SetTitle = function(title)
{
this.PARAMS.title = title;
BX.cleanNode(this.PARTS.TITLE_CONTAINER).appendChild(document.createTextNode(this.PARAMS.title));
};
BX.CDialog.prototype.SetHead = function(head)
{
this.PARAMS.head = BX.util.trim(head);
this.PARTS.HEAD.innerHTML = this.PARAMS.head || " ";
this.PARTS.HEAD.style.display = this.PARAMS.head ? 'block' : 'none';
this.adjustSize();
};
BX.CDialog.prototype.Notify = function(note, bError)
{
if (!this.PARTS.NOTIFY)
{
this.PARTS.NOTIFY = this.DIV.insertBefore(BX.create('DIV', {
props: {className: 'adm-warning-block'},
children: [
BX.create('SPAN', {
props: {className: 'adm-warning-text'}
}),
BX.create('SPAN', {
props: {className: 'adm-warning-icon'}
}),
BX.create('SPAN', {
props: {className: 'adm-warning-close'},
events: {click: BX.proxy(this.hideNotify, this)}
})
]
}), this.DIV.firstChild);
}
if (bError)
BX.addClass(this.PARTS.NOTIFY, 'adm-warning-block-red');
else
BX.removeClass(this.PARTS.NOTIFY, 'adm-warning-block-red');
this.PARTS.NOTIFY.firstChild.innerHTML = note || ' ';
this.PARTS.NOTIFY.firstChild.style.width = (this.PARAMS.width-50) + 'px';
BX.removeClass(this.PARTS.NOTIFY, 'adm-warning-animate');
};
BX.CDialog.prototype.hideNotify = function()
{
BX.addClass(this.PARTS.NOTIFY, 'adm-warning-animate');
};
BX.CDialog.prototype.__adjustHeadToIcon = function()
{
if (!this.PARTS.HEAD.offsetHeight)
{
setTimeout(BX.delegate(this.__adjustHeadToIcon, this), 50);
}
else
{
if (this.icon_image && this.icon_image.height && this.icon_image.height > this.PARTS.HEAD.offsetHeight - 5)
{
this.PARTS.HEAD.style.height = this.icon_image.height + 5 + 'px';
this.adjustSize();
}
this.icon_image.onload = null;
this.icon_image = null;
}
};
BX.CDialog.prototype.SetIcon = function(icon_class)
{
if (this.PARAMS.icon != icon_class)
{
if (this.PARAMS.icon)
BX.removeClass(this.PARTS.HEAD, this.PARAMS.icon);
this.PARAMS.icon = icon_class;
if (this.PARAMS.icon)
{
BX.addClass(this.PARTS.HEAD, this.PARAMS.icon);
var icon_file = (BX.style(this.PARTS.HEAD, 'background-image') || BX.style(this.PARTS.HEAD, 'backgroundImage'));
if (BX.type.isNotEmptyString(icon_file) && icon_file != 'none')
{
var match = icon_file.match(new RegExp('url\\s*\\(\\s*(\'|"|)(.+?)(\\1)\\s*\\)'));
if(match)
{
icon_file = match[2];
if (BX.type.isNotEmptyString(icon_file))
{
this.icon_image = new Image();
this.icon_image.onload = BX.delegate(this.__adjustHeadToIcon, this);
this.icon_image.src = icon_file;
}
}
}
}
}
this.adjustSize();
};
BX.CDialog.prototype.SetIconFile = function(icon_file)
{
this.icon_image = new Image();
this.icon_image.onload = BX.delegate(this.__adjustHeadToIcon, this);
this.icon_image.src = icon_file;
BX.adjust(this.PARTS.HEAD, {style: {backgroundImage: 'url(' + icon_file + ')', backgroundPosition: 'right 9px'/*'99% center'*/}});
this.adjustSize();
};
/*
BUTTON: {
title: 'title',
'action': function executed in window object context
}
BX.CDialog.btnSave || BX.CDialog.btnCancel - standard buttons
*/
BX.CDialog.prototype.SetButtons = function(a)
{
if (BX.type.isString(a))
{
if (a.length > 0)
{
this.PARTS.BUTTONS_CONTAINER.innerHTML += a;
var btns = this.PARTS.BUTTONS_CONTAINER.getElementsByTagName('INPUT');
if (btns.length > 0)
{
this.PARAMS.buttons = [];
for (var i = 0; i < btns.length; i++)
{
this.PARAMS.buttons.push(new BX.CWindowButton({btn: btns[i], parentWindow: this}));
}
}
}
}
else
{
this.PARAMS.buttons = a;
BX.adjust(this.PARTS.BUTTONS_CONTAINER, {
children: this.ShowButtons()
});
}
this.adjustSize();
};
BX.CDialog.prototype.ClearButtons = function()
{
BX.cleanNode(this.PARTS.BUTTONS_CONTAINER);
this.adjustSize();
};
BX.CDialog.prototype.SetContent = function(html)
{
this.__form = null;
if (BX.type.isElementNode(html))
{
if (html.parentNode)
html.parentNode.removeChild(html);
}
else if (BX.type.isString(html))
{
html = BX.create('DIV', {html: html});
}
this.PARAMS.content = html;
BX.cleanNode(this.PARTS.CONTENT_DATA);
BX.adjust(this.PARTS.CONTENT_DATA, {
children: [
this.PARTS.HEAD,
BX.create('DIV', {
props: {
className: 'bx-core-adm-dialog-content-wrap-inner'
},
children: [this.PARAMS.content]
})
]
});
if (this.PARAMS.content_url && this.GetForm())
{
this.__form.submitbtn = this.__form.appendChild(BX.create('INPUT', {props:{type:'submit'},style:{display:'none'}}));
this.__form.onsubmit = BX.delegate(this.__submit, this);
}
};
BX.CDialog.prototype.__submit = function(e)
{
for (var i=0,len=this.PARAMS.buttons.length; i<len; i++)
{
if (
this.PARAMS.buttons[i]
&& (
this.PARAMS.buttons[i].name && /save|apply/i.test(this.PARAMS.buttons[i].name)
||
this.PARAMS.buttons[i].btn && this.PARAMS.buttons[i].btn.name && /save|apply/i.test(this.PARAMS.buttons[i].btn.name)
)
)
{
this.PARAMS.buttons[i].emulate();
break;
}
}
return BX.PreventDefault(e);
};
BX.CDialog.prototype.SwapContent = function(cont)
{
cont = BX(cont);
BX.cleanNode(this.PARTS.CONTENT_DATA);
cont.parentNode.removeChild(cont);
this.PARTS.CONTENT_DATA.appendChild(cont);
cont.style.display = 'block';
this.SetContent(cont.innerHTML);
};
// this method deprecated
BX.CDialog.prototype.adjustSize = function()
{
};
// this method deprecated
BX.CDialog.prototype.__adjustSize = function()
{
};
BX.CDialog.prototype.adjustSizeEx = function()
{
BX.defer(this.__adjustSizeEx, this)();
};
BX.CDialog.prototype.__adjustSizeEx = function()
{
var ob = this.PARTS.CONTENT_DATA.firstChild,
new_height = 0,
marginTop,
marginBottom;
while (ob)
{
if (BX.type.isElementNode(ob))
{
marginTop = parseInt(BX.style(ob, 'margin-top'), 10);
if (isNaN(marginTop))
marginTop = 0;
marginBottom = parseInt(BX.style(ob, 'margin-bottom'), 10);
if (isNaN(marginBottom))
marginBottom = 0;
new_height += ob.offsetHeight + marginTop + marginBottom;
}
ob = BX.nextSibling(ob);
}
if (new_height)
this.PARTS.CONTENT_DATA.style.height = new_height + 'px';
};
BX.CDialog.prototype.__onResizeFinished = function()
{
BX.WindowManager.saveWindowSize(
this.PARAMS.resize_id || this.PARAMS.content_url, {height: parseInt(this.PARTS.CONTENT_DATA.style.height), width: parseInt(this.PARTS.CONTENT_DATA.style.width)}
);
};
BX.CDialog.prototype.Show = function(bNotRegister)
{
if ((!this.PARAMS.content) && this.PARAMS.content_url && BX.ajax && !bNotRegister)
{
var wait = BX.showWait();
BX.WindowManager.currently_loaded = this;
this.CreateOverlay(parseInt(BX.style(wait, 'z-index'))-1);
this.OVERLAY.style.display = 'block';
this.OVERLAY.className = 'bx-core-dialog-overlay';
var post_data = '', method = 'GET';
if (this.PARAMS.content_post)
{
post_data = this.PARAMS.content_post;
method = 'POST';
}
var url = this.PARAMS.content_url
+ (this.PARAMS.content_url.indexOf('?')<0?'?':'&')+'bxsender=' + this._sender;
this.auth_callback = BX.delegate(function(){
this.PARAMS.content = '';
this.hideNotify();
this.Show();
}, this);
BX.ajax({
method: method,
dataType: 'html',
url: url,
data: post_data,
skipAuthCheck: true,
onsuccess: BX.delegate(function(data) {
BX.closeWait(null, wait);
this.SetContent(data || ' ');
this.Show();
}, this)
});
}
else
{
BX.WindowManager.currently_loaded = null;
BX.CDialog.superclass.Show.apply(this, arguments);
this.adjustPos();
this.OVERLAY.className = 'bx-core-dialog-overlay';
this.__adjustSize();
BX.addCustomEvent(this, 'onWindowResize', BX.proxy(this.__adjustSize, this));
if (this.PARAMS.resizable && (this.PARAMS.content_url || this.PARAMS.resize_id))
BX.addCustomEvent(this, 'onWindowResizeFinished', BX.delegate(this.__onResizeFinished, this));
}
};
BX.CDialog.prototype.GetInnerPos = function()
{
return {'width': parseInt(this.PARTS.CONTENT_DATA.style.width), 'height': parseInt(this.PARTS.CONTENT_DATA.style.height)};
};
BX.CDialog.prototype.adjustPos = function()
{
if (!this.bExpanded)
{
var windowSize = BX.GetWindowInnerSize();
var windowScroll = BX.GetWindowScrollPos();
BX.adjust(this.DIV, {
style: {
left: parseInt(windowScroll.scrollLeft + windowSize.innerWidth / 2 - parseInt(this.DIV.offsetWidth) / 2) + 'px',
top: Math.max(parseInt(windowScroll.scrollTop + windowSize.innerHeight / 2 - parseInt(this.DIV.offsetHeight) / 2), 0) + 'px'
}
});
}
};
BX.CDialog.prototype.GetContent = function () {return this.PARTS.CONTENT_DATA};
BX.CDialog.prototype.btnSave = BX.CDialog.btnSave = {
title: BX.message('JS_CORE_WINDOW_SAVE'),
id: 'savebtn',
name: 'savebtn',
className: BX.browser.IsIE() && BX.browser.IsDoctype() && !BX.browser.IsIE10() ? '' : 'adm-btn-save',
action: function () {
this.disableUntilError();
this.parentWindow.PostParameters();
}
};
BX.CDialog.prototype.btnCancel = BX.CDialog.btnCancel = {
title: BX.message('JS_CORE_WINDOW_CANCEL'),
id: 'cancel',
name: 'cancel',
action: function () {
this.parentWindow.Close();
}
};
BX.CDialog.prototype.btnClose = BX.CDialog.btnClose = {
title: BX.message('JS_CORE_WINDOW_CLOSE'),
id: 'close',
name: 'close',
action: function () {
this.parentWindow.Close();
}
};
/* special child for admin forms loaded into public page */
BX.CAdminDialog = function(arParams)
{
BX.CAdminDialog.superclass.constructor.apply(this, arguments);
this._sender = 'core_window_cadmindialog';
BX.addClass(this.DIV, 'bx-core-adm-admin-dialog');
this.PARTS.CONTENT.insertBefore(this.PARTS.HEAD, this.PARTS.CONTENT.firstChild);
this.PARTS.HEAD.className = 'bx-core-adm-dialog-tabs';
};
BX.extend(BX.CAdminDialog, BX.CDialog);
BX.CAdminDialog.prototype.SetHead = function()
{
BX.CAdminDialog.superclass.SetHead.apply(this, arguments);
if (this.PARTS.HEAD.firstChild && BX.type.isElementNode(this.PARTS.HEAD.firstChild))
{
var ob = this.PARTS.HEAD.firstChild, new_width = 0, marginLeft = 0, marginRight = 0;
while (ob)
{
if (BX.type.isElementNode(ob))
{
marginLeft = parseInt(BX.style(ob, 'margin-left'), 10);
if (isNaN(marginLeft))
marginLeft = 0;
marginRight = parseInt(BX.style(ob, 'margin-right'), 10);
if (isNaN(marginRight))
marginRight = 0;
new_width += ob.offsetWidth + marginLeft + marginRight;
}
ob = BX.nextSibling(ob);
}
this.SETTINGS.min_width = Math.max(new_width, this.SETTINGS.min_width) - 2;
if (this.PARAMS.width < this.SETTINGS.min_width)
{
BX.adjust(this.PARTS.CONTENT_DATA, {
style: {
width: this.SETTINGS.min_width + 'px'
}
});
}
}
};
BX.CAdminDialog.prototype.SetContent = function(html)
{
this.__form = null;
if (BX.type.isElementNode(html))
{
if (html.parentNode)
html.parentNode.removeChild(html);
}
this.PARAMS.content = html;
BX.cleanNode(this.PARTS.CONTENT_DATA);
BX.adjust(this.PARTS.CONTENT_DATA, {
children: [
this.PARAMS.content || ' '
]
});
if (this.PARAMS.content_url && this.GetForm())
{
this.__form.appendChild(BX.create('INPUT', {props:{type:'submit'},style:{display:'none'}}));
this.__form.onsubmit = BX.delegate(this.__submit, this);
}
};
BX.CAdminDialog.prototype.__expandGetSize = function()
{
var res = BX.CAdminDialog.superclass.__expandGetSize.apply(this, arguments);
res.width -= parseInt(BX.style(this.PARTS.CONTENT_DATA, 'padding-right')) + parseInt(BX.style(this.PARTS.CONTENT_DATA, 'padding-left'));
res.height -= parseInt(BX.style(this.PARTS.CONTENT_DATA, 'padding-top')) + parseInt(BX.style(this.PARTS.CONTENT_DATA, 'padding-bottom'));
res.height -= this.PARTS.HEAD.offsetHeight;
return res;
};
BX.CAdminDialog.prototype.Submit = function()
{
var FORM = this.GetForm();
if (FORM && !FORM['bxpublic'] && !/bxpublic=/.test(FORM.action))
{
FORM.appendChild(BX.create('INPUT', {
props: {
type: 'hidden',
name: 'bxpublic',
value: 'Y'
}
}));
}
return BX.CAdminDialog.superclass.Submit.apply(this, arguments);
};
BX.CAdminDialog.prototype.btnSave = BX.CAdminDialog.btnSave = {
title: BX.message('JS_CORE_WINDOW_SAVE'),
id: 'savebtn',
name: 'savebtn',
className: 'adm-btn-save',
action: function () {
this.disableUntilError();
this.parentWindow.Submit();
}
};
BX.CAdminDialog.btnCancel = BX.CAdminDialog.superclass.btnCancel;
BX.CAdminDialog.btnClose = BX.CAdminDialog.superclass.btnClose;
BX.CDebugDialog = function(arParams)
{
BX.CDebugDialog.superclass.constructor.apply(this, arguments);
};
BX.extend(BX.CDebugDialog, BX.CDialog);
BX.CDebugDialog.prototype.ShowDetails = function(div_id)
{
var div = BX(div_id);
if (div)
{
if (this.div_detail_current)
this.div_detail_current.style.display = 'none';
div.style.display = 'block';
this.div_detail_current = div;
}
};
BX.CDebugDialog.prototype.SetContent = function(html)
{
if (!html)
return;
var arHtml = html.split('#DIVIDER#');
if (arHtml.length > 1)
{
this.PARAMS.content = arHtml[1];
this.PARTS.CONTENT_DATA.style.overflow = 'hidden';
BX.CDebugDialog.superclass.SetContent.apply(this, [arHtml[1]]);
this.PARTS.CONTENT_INNER = this.PARTS.CONTENT_DATA.firstChild.nextSibling;
this.PARTS.CONTENT_TOP = this.PARTS.CONTENT_DATA.insertBefore(BX.create('DIV', {
props: {
className: 'bx-debug-content-top'
},
html: arHtml[0]
}), this.PARTS.CONTENT_INNER);
this.PARTS.CONTENT_INNER.style.overflow = 'auto';
}
else
{
BX.CDebugDialog.superclass.SetContent.apply(this, arguments);
}
};
BX.CDebugDialog.prototype.__adjustSize = function()
{
BX.CDebugDialog.superclass.__adjustSize.apply(this, arguments);
if (this.PARTS.CONTENT_TOP)
{
var new_height = this.PARTS.CONTENT_DATA.offsetHeight - this.PARTS.HEAD.offsetHeight - this.PARTS.CONTENT_TOP.offsetHeight - 38;
if (new_height > 0)
{
this.PARTS.CONTENT_INNER.style.height = new_height + 'px';
}
}
};
/* class for dialog window with editors */
BX.CEditorDialog = function(arParams)
{
BX.CEditorDialog.superclass.constructor.apply(this, arguments);
BX.removeClass(this.PARTS.CONTENT, 'bx-core-adm-dialog-content-wrap');
BX.removeClass(this.PARTS.CONTENT_DATA, 'bx-core-adm-dialog-content');
BX.removeClass(this.PARTS.CONTENT_DATA.lastChild, 'bx-core-adm-dialog-content-wrap-inner');
BX.removeClass(this.PARTS.BUTTONS_CONTAINER, 'bx-core-adm-dialog-buttons');
BX.addClass(this.PARTS.CONTENT, 'bx-core-editor-dialog-content-wrap');
BX.addClass(this.PARTS.CONTENT_DATA, 'bx-core-editor-dialog-content');
BX.addClass(this.PARTS.BUTTONS_CONTAINER, 'bx-core-editor-dialog-buttons');
};
BX.extend(BX.CEditorDialog, BX.CDialog);
BX.CEditorDialog.prototype.SetContent = function()
{
BX.CEditorDialog.superclass.SetContent.apply(this, arguments);
BX.removeClass(this.PARTS.CONTENT_DATA.lastChild, 'bx-core-adm-dialog-content-wrap-inner');
};
/* class for wizards in admin section */
BX.CWizardDialog = function(arParams)
{
BX.CWizardDialog.superclass.constructor.apply(this, arguments);
BX.removeClass(this.PARTS.CONTENT, 'bx-core-adm-dialog-content-wrap');
BX.removeClass(this.PARTS.CONTENT_DATA, 'bx-core-adm-dialog-content');
BX.removeClass(this.PARTS.CONTENT_DATA.lastChild, 'bx-core-adm-dialog-content-wrap-inner');
BX.removeClass(this.PARTS.BUTTONS_CONTAINER, 'bx-core-adm-dialog-buttons');
BX.addClass(this.PARTS.CONTENT, 'bx-core-wizard-dialog-content-wrap');
};
BX.extend(BX.CWizardDialog, BX.CDialog);
/* class for auth dialog */
BX.CAuthDialog = function(arParams)
{
arParams.resizable = false;
arParams.width = 350;
arParams.height = 200;
arParams.buttons = [this.btnSave];
BX.CAuthDialog.superclass.constructor.apply(this, arguments);
this._sender = 'core_window_cauthdialog';
BX.addClass(this.DIV, 'bx-core-auth-dialog');
BX.AUTHAGENT = this;
};
BX.extend(BX.CAuthDialog, BX.CDialog);
BX.CAuthDialog.prototype.btnSave = BX.CAuthDialog.btnSave = {
title: BX.message('JS_CORE_WINDOW_AUTH'),
id: 'savebtn',
name: 'savebtn',
className: 'adm-btn-save',
action: function () {
this.disableUntilError();
this.parentWindow.Submit('', this.parentWindow.PARAMS.content_url);
}
};
BX.CAuthDialog.prototype.SetError = function(error)
{
BX.closeWait();
if (!!error)
this.ShowError(error.MESSAGE || error);
};
BX.CAuthDialog.prototype.setAuthResult = function(result)
{
BX.closeWait();
if (result === false)
{
this.Close();
if (this.PARAMS.callback)
this.PARAMS.callback();
}
else
{
this.SetError(result);
}
};
/* MENU CLASSES */
BX.CWindowFloat = function(node)
{
BX.CWindowFloat.superclass.constructor.apply(this, [node, 'float']);
this.SETTINGS.resizable = false;
};
BX.extend(BX.CWindowFloat, BX.CWindow);
BX.CWindowFloat.prototype.adjustPos = function()
{
if (this.PARAMS.parent)
this.adjustToNode();
else if (this.PARAMS.x && this.PARAMS.y)
this.adjustToPos([this.PARAMS.x, this.PARAMS.y]);
};
BX.CWindowFloat.prototype.adjustToPos = function(pos)
{
this.DIV.style.left = parseInt(pos[0]) + 'px';
this.DIV.style.top = parseInt(pos[1]) + 'px';
};
BX.CWindowFloat.prototype.adjustToNodeGetPos = function()
{
return BX.pos(this.PARAMS.parent);
};
BX.CWindowFloat.prototype.adjustToNode = function(el)
{
el = el || this.PARAMS.parent;
this.PARAMS.parent = BX(el);
if (this.PARAMS.parent)
{
var pos = this.adjustToNodeGetPos();
this.DIV.style.top = pos.top + 'px';//(pos.top - 26) + 'px';
this.DIV.style.left = pos.left + 'px';
this.PARAMS.parent.OPENER = this;
}
};
BX.CWindowFloat.prototype.Show = function()
{
this.adjustToPos([-1000, -1000]);
BX.CWindowFloat.superclass.Show.apply(this, arguments);
this.adjustPos();
};
/* menu opener class */
/*
{
DOMNode DIV,
BX.CMenu or Array MENU,
TYPE = 'hover' | 'click',
TIMEOUT: 1000
ATTACH_MODE: 'top' | 'right'
ACTIVE_CLASS: className for opener element when menu is opened
}
*/
BX.COpener = function(arParams)
{
this.PARAMS = arParams || {};
this.MENU = arParams.MENU || [];
this.DIV = arParams.DIV;
this.ATTACH = arParams.ATTACH || arParams.DIV;
this.ATTACH_MODE = arParams.ATTACH_MODE || 'bottom';
this.ACTIVE_CLASS = arParams.ACTIVE_CLASS || '';
this.LEVEL = arParams.LEVEL || 0;
this.CLOSE_ON_CLICK = typeof arParams.CLOSE_ON_CLICK != 'undefined' ? !!arParams.CLOSE_ON_CLICK : true;
this.ADJUST_ON_CLICK = typeof arParams.ADJUST_ON_CLICK != 'undefined' ? !!arParams.ADJUST_ON_CLICK : true;
this.TYPE = this.PARAMS.TYPE == 'hover' ? 'hover' : 'click';
this._openTimeout = null;
if (this.PARAMS.TYPE == 'hover' && arParams.TIMEOUT !== 0)
this.TIMEOUT = arParams.TIMEOUT || 1000;
else
this.TIMEOUT = 0;
if (!!this.PARAMS.MENU_URL)
{
this.bMenuLoaded = false;
this.bMenuLoading = false;
this.MENU = [{
TEXT: BX.message('JS_CORE_LOADING'),
CLOSE_ON_CLICK: false
}];
if (this.PARAMS.MENU_PRELOAD)
{
BX.defer(this.Load, this)();
}
}
BX.ready(BX.defer(this.Init, this));
};
BX.COpener.prototype.Init = function()
{
this.DIV = BX(this.DIV);
switch (this.TYPE)
{
case 'hover':
BX.bind(this.DIV, 'mouseover', BX.proxy(this.Open, this));
BX.bind(this.DIV, 'click', BX.proxy(this.Toggle, this));
break;
case 'click':
BX.bind(this.DIV, 'click', BX.proxy(this.Toggle, this));
break;
}
//BX.bind(window, 'scroll', BX.delegate(this.__close_immediately, this));
this.bMenuInit = false;
};
BX.COpener.prototype.Load = function()
{
if (this.PARAMS.MENU_URL && !this.bMenuLoaded)
{
if (!this.bMenuLoading)
{
var url = this.PARAMS.MENU_URL;
if (url.indexOf('sessid=') <= 0)
url += (url.indexOf('?') > 0 ? '&' : '?') + 'sessid=' + BX.bitrix_sessid();
this.bMenuLoading = true;
BX.ajax.loadJSON(url, BX.proxy(this.SetMenu, this), BX.proxy(this.LoadFailed, this));
}
}
};
BX.COpener.prototype.SetMenu = function(menu)
{
this.bMenuLoaded = true;
this.bMenuLoading = false;
if (this.bMenuInit)
{
this.MENU.setItems(menu);
}
else
{
this.MENU = menu;
}
};
BX.COpener.prototype.LoadFailed = function(type, error)
{
this.bMenuLoading = false;
this.SetMenu([{
TEXT: BX.message('JS_CORE_NO_DATA'),
CLOSE_ON_CLICK: true
}]);
BX.debug(arguments);
};
BX.COpener.prototype.checkAdminMenu = function()
{
if (document.documentElement.id == 'bx-admin-prefix')
return true;
return !!BX.findParent(this.DIV, {property: {id: 'bx-admin-prefix'}});
};
BX.COpener.prototype.Toggle = function(e)
{
this.__clear_timeout();
if (!this.bMenuInit || !this.MENU.visible())
{
var t = this.TIMEOUT;
this.TIMEOUT = 0;
this.Open(e);
this.TIMEOUT = t;
}
else
{
this.MENU.Close();
}
return !!(e||window.event) && BX.PreventDefault(e);
};
BX.COpener.prototype.GetMenu = function()
{
if (!this.bMenuInit)
{
if (BX.type.isArray(this.MENU))
{
this.MENU = new BX.CMenu({
ITEMS: this.MENU,
ATTACH_MODE: this.ATTACH_MODE,
SET_ID: this.checkAdminMenu() ? 'bx-admin-prefix' : '',
CLOSE_ON_CLICK: !!this.CLOSE_ON_CLICK,
ADJUST_ON_CLICK: !!this.ADJUST_ON_CLICK,
LEVEL: this.LEVEL,
parent: BX(this.DIV),
parent_attach: BX(this.ATTACH)
});
if (this.LEVEL > 0)
{
BX.bind(this.MENU.DIV, 'mouseover', BX.proxy(this._on_menu_hover, this));
BX.bind(this.MENU.DIV, 'mouseout', BX.proxy(this._on_menu_hout, this));
}
}
BX.addCustomEvent(this.MENU, 'onMenuOpen', BX.proxy(this.handler_onopen, this));
BX.addCustomEvent(this.MENU, 'onMenuClose', BX.proxy(this.handler_onclose, this));
BX.addCustomEvent('onMenuItemHover', BX.proxy(this.handler_onover, this));
this.bMenuInit = true;
}
return this.MENU;
};
BX.COpener.prototype.Open = function()
{
this.GetMenu();
this.bOpen = true;
this.__clear_timeout();
if (this.TIMEOUT > 0)
{
BX.bind(this.DIV, 'mouseout', BX.proxy(this.__clear_timeout, this));
this._openTimeout = setTimeout(BX.proxy(this.__open, this), this.TIMEOUT);
}
else
{
this.__open();
}
if (!!this.PARAMS.MENU_URL && !this.bMenuLoaded)
{
this._loadTimeout = setTimeout(BX.proxy(this.Load, this), parseInt(this.TIMEOUT/2));
}
return true;
};
BX.COpener.prototype.__clear_timeout = function()
{
if (!!this._openTimeout)
clearTimeout(this._openTimeout);
if (!!this._loadTimeout)
clearTimeout(this._loadTimeout);
BX.unbind(this.DIV, 'mouseout', BX.proxy(this.__clear_timeout, this));
};
BX.COpener.prototype._on_menu_hover = function()
{
this.bMenuHover = true;
this.__clear_timeout();
if (this.ACTIVE_CLASS)
BX.addClass(this.DIV, this.ACTIVE_CLASS);
};
BX.COpener.prototype._on_menu_hout = function()
{
this.bMenuHover = false;
};
BX.COpener.prototype.handler_onover = function(level, opener)
{
if (this.bMenuHover)
return;
if (opener != this && level == this.LEVEL-1 && this.ACTIVE_CLASS)
{
BX.removeClass(this.DIV, this.ACTIVE_CLASS);
}
if (this.bMenuInit && level <= this.LEVEL-1 && this.MENU.visible())
{
if (opener != this)
{
this.__clear_timeout();
this._openTimeout = setTimeout(BX.proxy(this.Close, this), this.TIMEOUT);
}
}
};
BX.COpener.prototype.handler_onopen = function()
{
this.bOpen = true;
if (this.ACTIVE_CLASS)
BX.addClass(this.DIV, this.ACTIVE_CLASS);
BX.defer(function() {
BX.onCustomEvent(this, 'onOpenerMenuOpen');
}, this)();
};
BX.COpener.prototype.handler_onclose = function()
{
this.bOpen = false;
BX.onCustomEvent(this, 'onOpenerMenuClose');
if (this.ACTIVE_CLASS)
BX.removeClass(this.DIV, this.ACTIVE_CLASS);
};
BX.COpener.prototype.Close = function()
{
if (!this.bMenuInit)
return;
if (!!this._openTimeout)
clearTimeout(this._openTimeout);
this.bOpen = false;
this.__close();
};
BX.COpener.prototype.__open = function()
{
this.__clear_timeout();
if (this.bMenuInit && this.bOpen && !this.MENU.visible())
this.MENU.Show();
};
BX.COpener.prototype.__close = function()
{
if (this.bMenuInit && !this.bOpen && this.MENU.visible())
this.MENU.Hide();
};
BX.COpener.prototype.__close_immediately = function() {
this.bOpen = false; this.__close();
};
BX.COpener.prototype.isMenuVisible = function() {
return null != this.MENU.visible && this.MENU.visible()
};
/* common menu class */
BX.CMenu = function(arParams)
{
BX.CMenu.superclass.constructor.apply(this);
this.DIV.style.width = 'auto';//this.DIV.firstChild.offsetWidth + 'px';
this.DIV.style.height = 'auto';//this.DIV.firstChild.offsetHeight + 'px';
this.PARAMS = arParams || {};
this.PARTS = {};
this.PARAMS.ATTACH_MODE = this.PARAMS.ATTACH_MODE || 'bottom';
this.PARAMS.CLOSE_ON_CLICK = typeof this.PARAMS.CLOSE_ON_CLICK == 'undefined' ? true : this.PARAMS.CLOSE_ON_CLICK;
this.PARAMS.ADJUST_ON_CLICK = typeof this.PARAMS.ADJUST_ON_CLICK == 'undefined' ? true : this.PARAMS.ADJUST_ON_CLICK;
this.PARAMS.LEVEL = this.PARAMS.LEVEL || 0;
this.DIV.className = 'bx-core-popup-menu bx-core-popup-menu-' + this.PARAMS.ATTACH_MODE + ' bx-core-popup-menu-level' + this.PARAMS.LEVEL + (typeof this.PARAMS.ADDITIONAL_CLASS != 'undefined' ? ' ' + this.PARAMS.ADDITIONAL_CLASS : '');
if (!!this.PARAMS.SET_ID)
this.DIV.id = this.PARAMS.SET_ID;
if (this.PARAMS.LEVEL == 0)
{
this.ARROW = this.DIV.appendChild(BX.create('SPAN', {props: {className: 'bx-core-popup-menu-angle'}, style: {left:'15px'}}));
}
if (!!this.PARAMS.CLASS_NAME)
this.DIV.className += ' ' + this.PARAMS.CLASS_NAME;
BX.bind(this.DIV, 'click', BX.eventCancelBubble);
this.ITEMS = [];
this.setItems(this.PARAMS.ITEMS);
BX.addCustomEvent('onMenuOpen', BX.proxy(this._onMenuOpen, this));
BX.addCustomEvent('onMenuItemSelected', BX.proxy(this.Hide, this));
};
BX.extend(BX.CMenu, BX.CWindowFloat);
BX.CMenu.broadcastCloseEvent = function()
{
BX.onCustomEvent("onMenuItemSelected");
};
BX.CMenu._toggleChecked = function()
{
BX.toggleClass(this, 'bx-core-popup-menu-item-checked');
};
BX.CMenu._itemDblClick = function()
{
window.location.href = this.href;
};
BX.CMenu.prototype.toggleArrow = function(v)
{
if (!!this.ARROW)
{
if (typeof v == 'undefined')
{
v = this.ARROW.style.visibility == 'hidden';
}
this.ARROW.style.visibility = !!v ? 'visible' : 'hidden';
}
};
BX.CMenu.prototype.visible = function()
{
return this.DIV.style.display !== 'none';
};
BX.CMenu.prototype._onMenuOpen = function(menu, menu_level)
{
if (this.visible())
{
if (menu_level == this.PARAMS.LEVEL && menu != this)
{
this.Hide();
}
}
};
BX.CMenu.prototype.onUnRegister = function()
{
if (!this.visible())
return;
this.Hide();
};
BX.CMenu.prototype.setItems = function(items)
{
this.PARAMS.ITEMS = items;
BX.cleanNode(this.DIV);
if (!!this.ARROW)
this.DIV.appendChild(this.ARROW);
if (this.PARAMS.ITEMS)
{
this.PARAMS.ITEMS = BX.util.array_values(this.PARAMS.ITEMS);
var bIcons = false;
var cnt = 0;
for (var i = 0, len = this.PARAMS.ITEMS.length; i < len; i++)
{
if ((i == 0 || i == len-1) && this.PARAMS.ITEMS[i].SEPARATOR)
continue;
cnt++;
if (!bIcons)
bIcons = !!this.PARAMS.ITEMS[i].GLOBAL_ICON;
this.addItem(this.PARAMS.ITEMS[i], i);
}
// Occam turning in his grave
if (cnt === 1)
BX.addClass(this.DIV, 'bx-core-popup-menu-single-item');
else
BX.removeClass(this.DIV, 'bx-core-popup-menu-single-item');
if (!bIcons)
BX.addClass(this.DIV, 'bx-core-popup-menu-no-icons');
else
BX.removeClass(this.DIV, 'bx-core-popup-menu-no-icons');
}
};
BX.CMenu.prototype.addItem = function(item)
{
this.ITEMS.push(item);
if (item.SEPARATOR)
{
item.NODE = BX.create(
'DIV', {props: {className: 'bx-core-popup-menu-separator'}}
);
}
else
{
var bHasMenu = (!!item.MENU
&& (
(BX.type.isArray(item.MENU) && item.MENU.length > 0)
|| item.MENU instanceof BX.CMenu
) || !!item.MENU_URL
);
if (item.DISABLED)
{
item.CLOSE_ON_CLICK = false;
item.LINK = null;
item.ONCLICK = null;
item.ACTION = null;
}
item.NODE = BX.create(!!item.LINK || BX.browser.IsIE() && !BX.browser.IsDoctype() ? 'A' : 'SPAN', {
props: {
className: 'bx-core-popup-menu-item'
+ (bHasMenu ? ' bx-core-popup-menu-item-opener' : '')
+ (!!item.DEFAULT ? ' bx-core-popup-menu-item-default' : '')
+ (!!item.DISABLED ? ' bx-core-popup-menu-item-disabled' : '')
+ (!!item.CHECKED ? ' bx-core-popup-menu-item-checked' : ''),
title: !!BX.message['MENU_ENABLE_TOOLTIP'] || !!item.SHOW_TITLE ? item.TITLE || '' : '',
BXMENULEVEL: this.PARAMS.LEVEL
},
attrs: !!item.LINK || BX.browser.IsIE() && !BX.browser.IsDoctype() ? {href: item.LINK || 'javascript:void(0)'} : {},
events: {
mouseover: function()
{
BX.onCustomEvent('onMenuItemHover', [this.BXMENULEVEL, this.OPENER])
}
},
html: '<span class="bx-core-popup-menu-item-icon' + (item.GLOBAL_ICON ? ' '+item.GLOBAL_ICON : '') + '"></span><span class="bx-core-popup-menu-item-text">'+(item.HTML||BX.util.htmlspecialchars(item.TEXT))+'</span>'
});
if (bHasMenu && !item.DISABLED)
{
item.NODE.OPENER = new BX.COpener({
DIV: item.NODE,
ACTIVE_CLASS: 'bx-core-popup-menu-item-opened',
TYPE: 'hover',
MENU: item.MENU,
MENU_URL: item.MENU_URL,
MENU_PRELOAD: !!item.MENU_PRELOAD,
LEVEL: this.PARAMS.LEVEL + 1,
ATTACH_MODE:'right',
TIMEOUT: 500
});
}
else if (this.PARAMS.CLOSE_ON_CLICK && (typeof item.CLOSE_ON_CLICK == 'undefined' || !!item.CLOSE_ON_CLICK))
{
BX.bind(item.NODE, 'click', BX.CMenu.broadcastCloseEvent);
}
else if (this.PARAMS.ADJUST_ON_CLICK && (typeof item.ADJUST_ON_CLICK == 'undefined' || !!item.ADJUST_ON_CLICK))
{
BX.bind(item.NODE, 'click', BX.defer(this.adjustPos, this));
}
if (bHasMenu && !!item.LINK)
{
BX.bind(item.NODE, 'dblclick', BX.CMenu._itemDblClick);
}
if (typeof item.CHECKED != 'undefined')
{
BX.bind(item.NODE, 'click', BX.CMenu._toggleChecked);
}
item.ONCLICK = item.ACTION || item.ONCLICK;
if (!!item.ONCLICK)
{
if (BX.type.isString(item.ONCLICK))
{
item.ONCLICK = new Function("event", item.ONCLICK);
}
BX.bind(item.NODE, 'click', item.ONCLICK);
}
}
this.DIV.appendChild(item.NODE);
};
BX.CMenu.prototype._documentClickBind = function()
{
this._documentClickUnBind();
BX.bind(document, 'click', BX.proxy(this._documentClick, this));
};
BX.CMenu.prototype._documentClickUnBind = function()
{
BX.unbind(document, 'click', BX.proxy(this._documentClick, this));
};
BX.CMenu.prototype._documentClick = function(e)
{
e = e||window.event;
if(!!e && !(BX.getEventButton(e) & BX.MSLEFT))
return;
this.Close();
};
BX.CMenu.prototype.Show = function()
{
BX.onCustomEvent(this, 'onMenuOpen', [this, this.PARAMS.LEVEL]);
BX.CMenu.superclass.Show.apply(this, []);
this.bCloseEventFired = false;
BX.addCustomEvent(this.PARAMS.parent_attach, 'onChangeNodePosition', BX.proxy(this.adjustToNode, this));
(BX.defer(this._documentClickBind, this))();
};
BX.CMenu.prototype.Close = // we shouldn't 'Close' window - only hide
BX.CMenu.prototype.Hide = function()
{
if (!this.visible())
return;
BX.removeCustomEvent(this.PARAMS.parent_attach, 'onChangeNodePosition', BX.proxy(this.adjustToNode, this));
this._documentClickUnBind();
if (!this.bCloseEventFired)
{
BX.onCustomEvent(this, 'onMenuClose', [this, this.PARAMS.LEVEL]);
this.bCloseEventFired = true;
}
BX.CMenu.superclass.Hide.apply(this, arguments);
// this.DIV.onclick = null;
//this.PARAMS.parent.onclick = null;
};
BX.CMenu.prototype.__adjustMenuToNode = function()
{
var pos = BX.pos(this.PARAMS.parent_attach),
bFixed = !!BX.findParent(this.PARAMS.parent_attach, BX.is_fixed);
if (bFixed)
this.DIV.style.position = 'fixed';
else
this.DIV.style.position = 'absolute';
if (!pos.top)
{
this.DIV.style.top = '-1000px';
this.DIV.style.left = '-1000px';
}
if (this.bTimeoutSet) return;
var floatWidth = this.DIV.offsetWidth, floatHeight = this.DIV.offsetHeight;
if (!floatWidth)
{
setTimeout(BX.delegate(function(){
this.bTimeoutSet = false; this.__adjustMenuToNode();
}, this), 100);
this.bTimeoutSet = true;
return;
}
var menu_pos = {},
wndSize = BX.GetWindowSize();
/*
if (BX.browser.IsIE() && !BX.browser.IsDoctype())
{
pos.top -= 4; pos.bottom -= 4;
pos.left -= 2; pos.right -= 2;
}
*/
switch (this.PARAMS.ATTACH_MODE)
{
case 'bottom':
menu_pos.top = pos.bottom + 9;
menu_pos.left = pos.left;
var arrowPos = 0;
if (!!this.ARROW)
{
if (pos.width > floatWidth)
arrowPos = parseInt(floatWidth/2 - 7);
else
arrowPos = parseInt(Math.min(floatWidth, pos.width)/2 - 7);
if (arrowPos < 7)
{
menu_pos.left -= 15;
arrowPos += 15;
}
}
if (menu_pos.left > wndSize.scrollWidth - floatWidth - 10)
{
var orig_menu_pos = menu_pos.left;
menu_pos.left = wndSize.scrollWidth - floatWidth - 10;
if (!!this.ARROW)
arrowPos += orig_menu_pos - menu_pos.left;
}
if (bFixed)
{
menu_pos.left -= wndSize.scrollLeft;
}
if (!!this.ARROW)
this.ARROW.style.left = arrowPos + 'px';
break;
case 'right':
menu_pos.top = pos.top-1;
menu_pos.left = pos.right;
if (menu_pos.left > wndSize.scrollWidth - floatWidth - 10)
{
menu_pos.left = pos.left - floatWidth - 1;
}
break;
}
if (bFixed)
{
menu_pos.top -= wndSize.scrollTop;
}
if (!!this.ARROW)
this.ARROW.className = 'bx-core-popup-menu-angle';
if((menu_pos.top + floatHeight > wndSize.scrollTop + wndSize.innerHeight)
|| (menu_pos.top + floatHeight > wndSize.scrollHeight))
{
var new_top = this.PARAMS.ATTACH_MODE == 'bottom'
? pos.top - floatHeight - 9
: pos.bottom - floatHeight + 1;
if((new_top > wndSize.scrollTop)
|| (menu_pos.top + floatHeight > wndSize.scrollHeight))
{
if ((menu_pos.top + floatHeight > wndSize.scrollHeight))
{
menu_pos.top = Math.max(0, wndSize.scrollHeight-floatHeight);
this.toggleArrow(false);
}
else
{
menu_pos.top = new_top;
if (!!this.ARROW)
this.ARROW.className = 'bx-core-popup-menu-angle-bottom';
}
}
}
if (menu_pos.top + menu_pos.left == 0)
{
this.Hide();
}
else
{
this.DIV.style.top = menu_pos.top + 'px';
this.DIV.style.left = menu_pos.left + 'px';
}
};
BX.CMenu.prototype.adjustToNode = function(el)
{
this.PARAMS.parent_attach = BX(el) || this.PARAMS.parent_attach || this.PARAMS.parent;
this.__adjustMenuToNode();
};
/* components toolbar class */
BX.CMenuOpener = function(arParams)
{
BX.CMenuOpener.superclass.constructor.apply(this);
this.PARAMS = arParams || {};
this.setParent(this.PARAMS.parent);
this.PARTS = {};
this.SETTINGS.drag_restrict = true;
this.defaultAction = null;
this.timeout = 500;
this.DIV.className = 'bx-component-opener';
this.DIV.ondblclick = BX.PreventDefault;
if (this.PARAMS.component_id)
{
this.PARAMS.transform = !!this.PARAMS.transform;
}
this.OPENERS = [];
this.DIV.appendChild(BX.create('SPAN', {
props: {className: 'bx-context-toolbar' + (this.PARAMS.transform ? ' bx-context-toolbar-vertical-mode' : '')}
}));
//set internal structure and register draggable element
this.PARTS.INNER = this.DIV.firstChild.appendChild(BX.create('SPAN', {
props: {className: 'bx-context-toolbar-inner'},
html: '<span class="bx-context-toolbar-drag-icon"></span><span class="bx-context-toolbar-vertical-line"></span><br>'
}));
this.EXTRA_BUTTONS = {};
var btnCount = 0;
for (var i = 0, len = this.PARAMS.menu.length; i < len; i++)
{
var item = this.addItem(this.PARAMS.menu[i]);
if (null != item)
{
btnCount++;
this.PARTS.INNER.appendChild(item);
this.PARTS.INNER.appendChild(BX.create('BR'));
}
}
var bHasButtons = btnCount > 0;
//menu items will be attached here
this.PARTS.ICONS = this.PARTS.INNER.appendChild(BX.create('SPAN', {
props: {className: 'bx-context-toolbar-icons'}
}));
if (this.PARAMS.component_id)
{
this.PARAMS.pin = !!this.PARAMS.pin;
if (bHasButtons)
this.PARTS.ICONS.appendChild(BX.create('SPAN', {props: {className: 'bx-context-toolbar-separator'}}));
this.PARTS.ICON_PIN = this.PARTS.ICONS.appendChild(BX.create('A', {
attrs: {
href: 'javascript:void(0)'
},
props: {
className: this.PARAMS.pin
? 'bx-context-toolbar-pin-fixed'
: 'bx-context-toolbar-pin'
},
events: {
click: BX.delegate(this.__pin_btn_clicked, this)
}
}));
}
if (this.EXTRA_BUTTONS['components2_props'])
{
var btn = this.EXTRA_BUTTONS['components2_props'] || {URL: 'javascript:void(0)'};
if (null == this.defaultAction)
{
this.defaultAction = btn.ONCLICK;
this.defaultActionTitle = btn.TITLE || btn.TEXT;
}
btn.URL = 'javascript:' + BX.util.urlencode(btn.ONCLICK);
this.ATTACH = this.PARTS.ICONS.appendChild(BX.create('SPAN', {
props: {className: 'bx-context-toolbar-button bx-context-toolbar-button-settings' },
children:
[
BX.create('SPAN',
{
props:{className: 'bx-context-toolbar-button-inner'},
children:
[
BX.create('A', {
attrs: {href: btn.URL},
events: {
mouseover: BX.proxy(this.__msover_text, this),
mouseout: BX.proxy(this.__msout_text, this),
mousedown: BX.proxy(this.__msdown_text, this)
},
html: '<span class="bx-context-toolbar-button-icon bx-context-toolbar-settings-icon"></span>'
}),
BX.create('A', {
attrs: {href: 'javascript: void(0)'},
props: {className: 'bx-context-toolbar-button-arrow'},
events: {
mouseover: BX.proxy(this.__msover_arrow, this),
mouseout: BX.proxy(this.__msout_arrow, this),
mousedown: BX.proxy(this.__msdown_arrow, this)
},
html: '<span class="bx-context-toolbar-button-arrow"></span>'
})
]
})
]
}));
this.OPENER = this.ATTACH.firstChild.lastChild;
var opener = this.attachMenu(this.EXTRA_BUTTONS['components2_submenu']['MENU']);
BX.addCustomEvent(opener, 'onOpenerMenuOpen', BX.proxy(this.__menu_open, this));
BX.addCustomEvent(opener, 'onOpenerMenuClose', BX.proxy(this.__menu_close, this));
}
if (btnCount > 1)
{
this.PARTS.ICONS.appendChild(BX.create('span', { props: {className: 'bx-context-toolbar-separator bx-context-toolbar-separator-switcher'}}));
this.ICON_TRANSFORM = this.PARTS.ICONS.appendChild(BX.create('A', {
attrs: {href: 'javascript: void(0)'},
props: {className: 'bx-context-toolbar-switcher'},
events: {
click: BX.delegate(this.__trf_btn_clicked, this)
}
}));
}
if (this.PARAMS.HINT)
{
this.DIV.BXHINT = this.HINT = new BX.CHint({
parent: this.DIV,
hint:this.PARAMS.HINT.TEXT || '',
title: this.PARAMS.HINT.TITLE || '',
hide_timeout: this.timeout/2,
preventHide: false
});
}
BX.addCustomEvent(this, 'onWindowDragFinished', BX.delegate(this.__onMoveFinished, this));
BX.addCustomEvent('onDynamicModeChange', BX.delegate(this.__onDynamicModeChange, this));
BX.addCustomEvent('onTopPanelCollapse', BX.delegate(this.__onPanelCollapse, this));
BX.addCustomEvent('onMenuOpenerMoved', BX.delegate(this.checkPosition, this));
BX.addCustomEvent('onMenuOpenerUnhide', BX.delegate(this.checkPosition, this));
if (this.OPENERS)
{
for (i=0,len=this.OPENERS.length; i<len; i++)
{
BX.addCustomEvent(this.OPENERS[i], 'onOpenerMenuOpen', BX.proxy(this.__hide_hint, this));
}
}
};
BX.extend(BX.CMenuOpener, BX.CWindowFloat);
BX.CMenuOpener.prototype.setParent = function(new_parent)
{
new_parent = BX(new_parent);
if(new_parent.OPENER && new_parent.OPENER != this)
{
new_parent.OPENER.Close();
new_parent.OPENER.clearHoverHoutEvents();
}
if(this.PARAMS.parent && this.PARAMS.parent != new_parent)
{
this.clearHoverHoutEvents();
this.PARAMS.parent.OPENER = null;
}
this.PARAMS.parent = new_parent;
this.PARAMS.parent.OPENER = this;
};
BX.CMenuOpener.prototype.setHoverHoutEvents = function(hover, hout)
{
if(!this.__opener_events_set)
{
BX.bind(this.Get(), 'mouseover', hover);
BX.bind(this.Get(), 'mouseout', hout);
this.__opener_events_set = true;
}
};
BX.CMenuOpener.prototype.clearHoverHoutEvents = function()
{
if(this.Get())
{
BX.unbindAll(this.Get());
this.__opener_events_set = false;
}
};
BX.CMenuOpener.prototype.unclosable = true;
BX.CMenuOpener.prototype.__check_intersection = function(pos_self, pos_other)
{
return !(pos_other.right <= pos_self.left || pos_other.left >= pos_self.right
|| pos_other.bottom <= pos_self.top || pos_other.top >= pos_self.bottom);
};
BX.CMenuOpener.prototype.__msover_text = function() {
this.bx_hover = true;
if (!this._menu_open)
BX.addClass(this.ATTACH, 'bx-context-toolbar-button-text-hover');
};
BX.CMenuOpener.prototype.__msout_text = function() {
this.bx_hover = false;
if (!this._menu_open)
BX.removeClass(this.ATTACH, 'bx-context-toolbar-button-text-hover bx-context-toolbar-button-text-active');
};
BX.CMenuOpener.prototype.__msover_arrow = function() {
this.bx_hover = true;
if (!this._menu_open)
BX.addClass(this.ATTACH, 'bx-context-toolbar-button-arrow-hover');
};
BX.CMenuOpener.prototype.__msout_arrow = function() {
this.bx_hover = false;
if (!this._menu_open)
BX.removeClass(this.ATTACH, 'bx-context-toolbar-button-arrow-hover bx-context-toolbar-button-arrow-active');
};
BX.CMenuOpener.prototype.__msdown_text = function() {
this.bx_active = true;
if (!this._menu_open)
BX.addClass(this.ATTACH, 'bx-context-toolbar-button-text-active');
};
BX.CMenuOpener.prototype.__msdown_arrow = function() {
this.bx_active = true;
if (!this._menu_open)
BX.addClass(this.ATTACH, 'bx-context-toolbar-button-arrow-active');
};
BX.CMenuOpener.prototype.__menu_close = function() {
this._menu_open = false;
this.bx_active = false;
BX.removeClass(this.ATTACH, 'bx-context-toolbar-button-active bx-context-toolbar-button-text-active bx-context-toolbar-button-arrow-active');
if (!this.bx_hover)
{
BX.removeClass(this.ATTACH, 'bx-context-toolbar-button-hover bx-context-toolbar-button-text-hover bx-context-toolbar-button-arrow-hover');
this.bx_hover = false;
}
};
BX.CMenuOpener.prototype.__menu_open = function() {
this._menu_open = true;
};
BX.CMenuOpener.prototype.checkPosition = function()
{
if (this.isMenuVisible() || this.DIV.style.display == 'none'
|| this == BX.proxy_context || BX.proxy_context.zIndex > this.zIndex)
return;
this.correctPosition(BX.proxy_context);
};
BX.CMenuOpener.prototype.correctPosition = function(opener)
{
var pos_self = BX.pos(this.DIV), pos_other = BX.pos(opener.Get());
if (this.__check_intersection(pos_self, pos_other))
{
var new_top = pos_other.top - pos_self.height;
if (new_top < 0)
new_top = pos_other.bottom;
this.DIV.style.top = new_top + 'px';
BX.addCustomEvent(opener, 'onMenuOpenerHide', BX.proxy(this.restorePosition, this));
BX.onCustomEvent(this, 'onMenuOpenerMoved');
}
};
BX.CMenuOpener.prototype.restorePosition = function()
{
if (!this.MOUSEOVER && !this.isMenuVisible())
{
if (this.originalPos)
this.DIV.style.top = this.originalPos.top + 'px';
BX.removeCustomEvent(BX.proxy_context, 'onMenuOpenerHide', BX.proxy(this.restorePosition, this));
if (this.restore_pos_timeout) clearTimeout(this.restore_pos_timeout);
}
else
{
this.restore_pos_timeout = setTimeout(BX.proxy(this.restorePosition, this), this.timeout);
}
};
BX.CMenuOpener.prototype.Show = function()
{
BX.CMenuOpener.superclass.Show.apply(this, arguments);
this.SetDraggable(this.PARTS.INNER.firstChild);
this.DIV.style.width = 'auto';
this.DIV.style.height = 'auto';
if (!this.PARAMS.pin)
{
this.DIV.style.left = '-1000px';
this.DIV.style.top = '-1000px';
this.Hide();
}
else
{
this.bPosAdjusted = true;
this.bMoved = true;
if (this.PARAMS.top) this.DIV.style.top = this.PARAMS.top + 'px';
if (this.PARAMS.left) this.DIV.style.left = this.PARAMS.left + 'px';
this.DIV.style.display = (!BX.admin.dynamic_mode || BX.admin.dynamic_mode_show_borders) ? 'block' : 'none';
if (this.DIV.style.display == 'block')
{
setTimeout(BX.delegate(function() {BX.onCustomEvent(this, 'onMenuOpenerUnhide')}, this), 50);
}
}
};
BX.CMenuOpener.prototype.executeDefaultAction = function()
{
if (this.defaultAction)
{
if (BX.type.isFunction(this.defaultAction))
this.defaultAction();
else if(BX.type.isString(this.defaultAction))
BX.evalGlobal(this.defaultAction);
}
};
BX.CMenuOpener.prototype.__onDynamicModeChange = function(val)
{
this.DIV.style.display = val ? 'block' : 'none';
};
BX.CMenuOpener.prototype.__onPanelCollapse = function(bCollapsed, dy)
{
this.DIV.style.top = (parseInt(this.DIV.style.top) + dy) + 'px';
if (this.PARAMS.pin)
{
this.__savePosition();
}
};
BX.CMenuOpener.prototype.__onMoveFinished = function()
{
BX.onCustomEvent(this, 'onMenuOpenerMoved');
this.bMoved = true;
if (this.PARAMS.pin)
this.__savePosition();
};
BX.CMenuOpener.prototype.__savePosition = function()
{
var arOpts = {};
arOpts.pin = this.PARAMS.pin;
if (!this.PARAMS.pin)
{
arOpts.top = false; arOpts.left = false; arOpts.transform = false;
}
else
{
arOpts.transform = this.PARAMS.transform;
if (this.bMoved)
{
arOpts.left = parseInt(this.DIV.style.left);
arOpts.top = parseInt(this.DIV.style.top);
}
}
BX.WindowManager.saveWindowOptions(this.PARAMS.component_id, arOpts);
};
BX.CMenuOpener.prototype.__pin_btn_clicked = function() {this.Pin()};
BX.CMenuOpener.prototype.Pin = function(val)
{
if (null == val)
this.PARAMS.pin = !this.PARAMS.pin;
else
this.PARAMS.pin = !!val;
this.PARTS.ICON_PIN.className = (this.PARAMS.pin ? 'bx-context-toolbar-pin-fixed' : 'bx-context-toolbar-pin');
this.__savePosition();
};
BX.CMenuOpener.prototype.__trf_btn_clicked = function() {this.Transform()};
BX.CMenuOpener.prototype.Transform = function(val)
{
var pos = {};
if (null == val)
this.PARAMS.transform = !this.PARAMS.transform;
else
this.PARAMS.transform = !!val;
if (this.bMoved)
{
pos = BX.pos(this.DIV);
}
if (this.PARAMS.transform)
BX.addClass(this.DIV.firstChild, 'bx-context-toolbar-vertical-mode');
else
BX.removeClass(this.DIV.firstChild, 'bx-context-toolbar-vertical-mode');
if (!this.bMoved)
{
this.adjustPos();
}
else
{
this.DIV.style.left = (pos.right - this.DIV.offsetWidth - (BX.browser.IsIE() && !BX.browser.IsDoctype() ? 2 : 0)) + 'px';
}
this.__savePosition();
};
BX.CMenuOpener.prototype.adjustToNodeGetPos = function()
{
var pos = BX.pos(this.PARAMS.parent/*, true*/);
var scrollSize = BX.GetWindowScrollSize();
var floatWidth = this.DIV.offsetWidth;
pos.left -= BX.admin.__border_dx;
pos.top -= BX.admin.__border_dx;
if (true || !this.PARAMS.transform)
{
pos.top -= 45;
}
if (pos.left > scrollSize.scrollWidth - floatWidth)
{
pos.left = scrollSize.scrollWidth - floatWidth;
}
return pos;
};
BX.CMenuOpener.prototype.addItem = function(item)
{
if (item.TYPE)
{
this.EXTRA_BUTTONS[item.TYPE] = item;
return null;
}
else
{
var q = new BX.CMenuOpenerItem(item);
if (null == this.defaultAction)
{
if (q.item.ONCLICK)
{
this.defaultAction = item.ONCLICK;
}
else if (q.item.MENU)
{
this.defaultAction = BX.delegate(function() {this.Open()}, q.item.OPENER);
}
this.defaultActionTitle = item.TITLE || item.TEXT;
BX.addClass(q.Get(), 'bx-content-toolbar-default');
}
if (q.item.OPENER) this.OPENERS[this.OPENERS.length] = q.item.OPENER;
return q.Get();
}
};
BX.CMenuOpener.prototype.attachMenu = function(menu)
{
var opener = new BX.COpener({
'DIV': this.OPENER,
'ATTACH': this.ATTACH,
'MENU': menu,
'TYPE': 'click'
});
this.OPENERS[this.OPENERS.length] = opener;
return opener;
};
BX.CMenuOpener.prototype.__hide_hint = function()
{
if (this.HINT) this.HINT.__hide_immediately();
};
BX.CMenuOpener.prototype.isMenuVisible = function()
{
for (var i=0,len=this.OPENERS.length; i<len; i++)
{
if (this.OPENERS[i].isMenuVisible())
return true;
}
return false;
};
BX.CMenuOpener.prototype.Hide = function()
{
if (!this.PARAMS.pin)
{
this.DIV.style.display = 'none';
BX.onCustomEvent(this, 'onMenuOpenerHide');
}
};
BX.CMenuOpener.prototype.UnHide = function()
{
this.DIV.style.display = 'block';
if (!this.bPosAdjusted && !this.PARAMS.pin)
{
this.adjustPos();
this.bPosAdjusted = true;
}
if (null == this.originalPos && !this.bMoved)
{
this.originalPos = BX.pos(this.DIV);
}
BX.onCustomEvent(this, 'onMenuOpenerUnhide');
};
BX.CMenuOpenerItem = function(item)
{
this.item = item;
if (this.item.ACTION && !this.item.ONCLICK)
{
this.item.ONCLICK = this.item.ACTION;
}
this.DIV = BX.create('SPAN');
this.DIV.appendChild(BX.create('SPAN', {props: {className: 'bx-context-toolbar-button-underlay'}}));
this.WRAPPER = this.DIV.appendChild(BX.create('SPAN', {
props: {className: 'bx-context-toolbar-button-wrapper'},
children: [
BX.create('SPAN', {
props: {className: 'bx-context-toolbar-button', title: item.TITLE},
children: [
BX.create('SPAN', {
props: {className: 'bx-context-toolbar-button-inner'}
})
]
})
]
}));
var btn_icon = BX.create('SPAN', {
props: {className: 'bx-context-toolbar-button-icon' + (this.item.ICON || this.item.ICONCLASS ? ' ' + (this.item.ICON || this.item.ICONCLASS) : '')},
attrs: (
!(this.item.ICON || this.item.ICONCLASS)
&&
(this.item.SRC || this.item.IMAGE)
)
? {
style: 'background: scroll transparent url(' + (this.item.SRC || this.item.IMAGE) + ') no-repeat center center !important;'
}
: {}
}), btn_text = BX.create('SPAN', {
props: {className: 'bx-context-toolbar-button-text'},
text: this.item.TEXT
});
if (this.item.ACTION && !this.item.ONCLICK)
{
this.item.ONCLICK = this.item.ACTION;
}
this.bHasMenu = !!this.item.MENU;
this.bHasAction = !!this.item.ONCLICK;
if (this.bHasAction)
{
this.LINK = this.WRAPPER.firstChild.firstChild.appendChild(BX.create('A', {
attrs: {
'href': 'javascript: void(0)'
},
events: {
mouseover: this.bHasMenu ? BX.proxy(this.__msover_text, this) : BX.proxy(this.__msover, this),
mouseout: this.bHasMenu ? BX.proxy(this.__msout_text, this) : BX.proxy(this.__msout, this),
mousedown: this.bHasMenu ? BX.proxy(this.__msdown_text, this) : BX.proxy(this.__msdown, this)
},
children: [btn_icon, btn_text]
}));
if (this.bHasMenu)
{
this.LINK_MENU = this.WRAPPER.firstChild.firstChild.appendChild(BX.create('A', {
props: {className: 'bx-context-toolbar-button-arrow'},
attrs: {
'href': 'javascript: void(0)'
},
events: {
mouseover: BX.proxy(this.__msover_arrow, this),
mouseout: BX.proxy(this.__msout_arrow, this),
mousedown: BX.proxy(this.__msdown_arrow, this)
},
children: [
BX.create('SPAN', {props: {className: 'bx-context-toolbar-button-arrow'}})
]
}));
}
}
else if (this.bHasMenu)
{
this.item.ONCLICK = null;
this.LINK = this.LINK_MENU = this.WRAPPER.firstChild.firstChild.appendChild(BX.create('A', {
attrs: {
'href': 'javascript: void(0)'
},
events: {
mouseover: BX.proxy(this.__msover, this),
mouseout: BX.proxy(this.__msout, this),
mousedown: BX.proxy(this.__msdown, this)
},
children: [
btn_icon,
btn_text
]
}));
this.LINK.appendChild(BX.create('SPAN', {props: {className: 'bx-context-toolbar-single-button-arrow'}}));
}
if (this.bHasMenu)
{
this.item.SUBMENU = new BX.CMenu({
ATTACH_MODE:'bottom',
ITEMS:this.item['MENU'],
//PARENT_MENU:this.parentMenu,
parent: this.LINK_MENU,
parent_attach: this.WRAPPER.firstChild
});
this.item.OPENER = new BX.COpener({
DIV: this.LINK_MENU,
TYPE: 'click',
MENU: this.item.SUBMENU
});
BX.addCustomEvent(this.item.OPENER, 'onOpenerMenuOpen', BX.proxy(this.__menu_open, this));
BX.addCustomEvent(this.item.OPENER, 'onOpenerMenuClose', BX.proxy(this.__menu_close, this));
}
if (this.bHasAction)
{
BX.bind(this.LINK, 'click', BX.delegate(this.__click, this));
}
};
BX.CMenuOpenerItem.prototype.Get = function() {return this.DIV;};
BX.CMenuOpenerItem.prototype.__msover = function() {
this.bx_hover = true;
if (!this._menu_open)
BX.addClass(this.LINK.parentNode.parentNode, 'bx-context-toolbar-button-hover');
};
BX.CMenuOpenerItem.prototype.__msout = function() {
this.bx_hover = false;
if (!this._menu_open)
BX.removeClass(this.LINK.parentNode.parentNode, 'bx-context-toolbar-button-hover bx-context-toolbar-button-active');
};
BX.CMenuOpenerItem.prototype.__msover_text = function() {
this.bx_hover = true;
if (!this._menu_open)
BX.addClass(this.LINK.parentNode.parentNode, 'bx-context-toolbar-button-text-hover');
};
BX.CMenuOpenerItem.prototype.__msout_text = function() {
this.bx_hover = false;
if (!this._menu_open)
BX.removeClass(this.LINK.parentNode.parentNode, 'bx-context-toolbar-button-text-hover bx-context-toolbar-button-text-active');
};
BX.CMenuOpenerItem.prototype.__msover_arrow = function() {
this.bx_hover = true;
if (!this._menu_open)
BX.addClass(this.LINK.parentNode.parentNode, 'bx-context-toolbar-button-arrow-hover');
};
BX.CMenuOpenerItem.prototype.__msout_arrow = function() {
this.bx_hover = false;
if (!this._menu_open)
BX.removeClass(this.LINK.parentNode.parentNode, 'bx-context-toolbar-button-arrow-hover bx-context-toolbar-button-arrow-active');
};
BX.CMenuOpenerItem.prototype.__msdown = function() {
this.bx_active = true;
if (!this._menu_open)
BX.addClass(this.LINK.parentNode.parentNode, 'bx-context-toolbar-button-active');
};
BX.CMenuOpenerItem.prototype.__msdown_text = function() {
this.bx_active = true;
if (!this._menu_open)
BX.addClass(this.LINK.parentNode.parentNode, 'bx-context-toolbar-button-text-active');
};
BX.CMenuOpenerItem.prototype.__msdown_arrow = function() {
this.bx_active = true;
if (!this._menu_open)
BX.addClass(this.LINK.parentNode.parentNode, 'bx-context-toolbar-button-arrow-active');
};
BX.CMenuOpenerItem.prototype.__menu_close = function() {
this._menu_open = false;
this.bx_active = false;
BX.removeClass(this.LINK.parentNode.parentNode, 'bx-context-toolbar-button-active bx-context-toolbar-button-text-active bx-context-toolbar-button-arrow-active');
if (!this.bx_hover)
{
BX.removeClass(this.LINK.parentNode.parentNode, 'bx-context-toolbar-button-hover bx-context-toolbar-button-text-hover bx-context-toolbar-button-arrow-hover');
this.bx_hover = false;
}
};
BX.CMenuOpenerItem.prototype.__menu_open = function() {
this._menu_open = true;
};
BX.CMenuOpenerItem.prototype.__click = function() {BX.evalGlobal(this.item.ONCLICK)};
/* global page opener class */
BX.CPageOpener = function(arParams)
{
//if (null == arParams.pin) arParams.pin = true;
BX.CPageOpener.superclass.constructor.apply(this, arguments);
this.timeout = 505;
window.PAGE_EDIT_CONTROL = this;
};
BX.extend(BX.CPageOpener, BX.CMenuOpener);
BX.CPageOpener.prototype.checkPosition = function()
{
if (/*this.isMenuVisible() || this.DIV.style.display == 'none' || */this == BX.proxy_context)
return;
this.correctPosition(BX.proxy_context);
};
BX.CPageOpener.prototype.correctPosition = function(opener)
{
if (this.bPosCorrected) return;
var pos_self;
if (this.DIV.style.display == 'none')
{
pos_self = this.adjustToNodeGetPos();
pos_self.bottom = pos_self.top + 30;
pos_self.right = pos_self.left + 300;
}
else
{
pos_self = BX.pos(this.DIV);
}
var pos_other = BX.pos(opener.Get());
if (this.__check_intersection(pos_self, pos_other))
{
this.DIV.style.display = 'none';
BX.addCustomEvent(opener, 'onMenuOpenerHide', BX.proxy(this.restorePosition, this));
this.bPosCorrected = true;
}
};
BX.CPageOpener.prototype.restorePosition = function()
{
if (BX.proxy_context && BX.proxy_context.Get().style.display == 'none')
{
this.bPosCorrected = false;
if (this.PARAMS.parent.bx_over || this.PARAMS.pin)
this.UnHide();
BX.removeCustomEvent('onMenuOpenerHide', BX.proxy(this.restorePosition, this));
}
};
BX.CPageOpener.prototype.UnHide = function()
{
if (!this.bPosCorrected)
BX.CPageOpener.superclass.UnHide.apply(this, arguments);
};
BX.CPageOpener.prototype.Remove = function()
{
BX.admin.removeComponentBorder(this.PARAMS.parent);
BX.userOptions.save('global', 'settings', 'page_edit_control_enable', 'N');
this.DIV.style.display = 'none';
};
/******* HINT ***************/
BX.CHintSimple = function()
{
BX.CHintSimple.superclass.constructor.apply(this, arguments);
};
BX.extend(BX.CHintSimple, BX.CHint);
BX.CHintSimple.prototype.Init = function()
{
this.DIV = document.body.appendChild(BX.create('DIV', {props: {className: 'bx-tooltip-simple'}, style: {display: 'none'}, children: [(this.CONTENT = BX.create('DIV'))]}));
if (this.HINT_TITLE)
this.CONTENT.appendChild(BX.create('B', {text: this.HINT_TITLE}));
if (this.HINT)
this.CONTENT_TEXT = this.CONTENT.appendChild(BX.create('DIV')).appendChild(BX.create('SPAN', {html: this.HINT}));
if (this.PARAMS.preventHide)
{
BX.bind(this.DIV, 'mouseout', BX.proxy(this.Hide, this));
BX.bind(this.DIV, 'mouseover', BX.proxy(this.Show, this));
}
this.bInited = true;
};
/*************************** admin informer **********************************/
BX.adminInformer = {
itemsShow: 3,
Init: function (itemsShow)
{
if(itemsShow)
BX.adminInformer.itemsShow = itemsShow;
var informer = BX("admin-informer");
if(informer)
document.body.appendChild(informer);
BX.addCustomEvent("onTopPanelCollapse", BX.proxy(BX.adminInformer.Close, BX.adminInformer));
},
Toggle: function(notifyBlock)
{
var informer = BX("admin-informer");
if(!informer)
return false;
var pos = BX.pos(notifyBlock);
informer.style.top = (parseInt(pos.top)+parseInt(pos.height)+7)+'px';
informer.style.left = pos.left+'px';
if(!BX.hasClass(informer, "adm-informer-active"))
BX.adminInformer.Show(informer);
else
BX.adminInformer.Hide(informer);
return false;
},
Close: function()
{
BX.adminInformer.Hide(BX("admin-informer"));
},
OnInnerClick: function(event)
{
var target = event.target || event.srcElement;
if(target.nodeName.toLowerCase() != 'a' || BX.hasClass(target,"adm-informer-footer"))
{
return BX.PreventDefault(event);
}
return true;
},
ToggleExtra : function()
{
var footerLink = BX("adm-informer-footer");
if (BX.hasClass(footerLink, "adm-informer-footer-collapsed"))
this.ShowAll();
else
this.HideExtra();
return false;
},
ShowAll: function()
{
var informer = BX("admin-informer");
for(var i=0; i<informer.children.length; i++)
if(BX.hasClass(informer.children[i], "adm-informer-item") && informer.children[i].style.display == "none") {
informer.children[i].style.display = "block";
}
var footerLink = BX("adm-informer-footer");
if(footerLink.textContent !== undefined)
footerLink.textContent = BX.message('JSADM_AI_HIDE_EXTRA');
else
footerLink.innerText = BX.message('JSADM_AI_HIDE_EXTRA');
BX.removeClass(footerLink, "adm-informer-footer-collapsed");
return false;
},
HideExtra: function()
{
var informer = BX("admin-informer");
var hided = 0;
for(var i=BX.adminInformer.itemsShow+1; i<informer.children.length; i++)
{
if (BX.hasClass(informer.children[i], "adm-informer-item") && informer.children[i].style.display == "block") {
informer.children[i].style.display = "none";
hided++;
}
}
var footerLink = BX("adm-informer-footer");
var linkText = BX.message('JSADM_AI_ALL_NOTIF')+" ("+(BX.adminInformer.itemsShow+parseInt(hided))+")";
if(footerLink.textContent !== undefined)
footerLink.textContent = linkText;
else
footerLink.innerText = linkText;
BX.addClass(footerLink, "adm-informer-footer-collapsed");
return false;
},
Show: function(informer)
{
var notifButton = BX("adm-header-notif-block");
if (notifButton)
BX.addClass(notifButton, "adm-header-notif-block-active");
BX.onCustomEvent(informer, 'onBeforeAdminInformerShow');
setTimeout(
BX.proxy(function() {
BX.bind(document, "click", BX.proxy(BX.adminInformer.Close, BX.adminInformer));
},
BX.adminInformer
),0
);
BX.addClass(informer, "adm-informer-active");
setTimeout(function() {BX.addClass(informer, "adm-informer-animate");},0);
},
Hide: function(informer)
{
var notifButton = BX("adm-header-notif-block");
if (notifButton)
BX.removeClass(notifButton, "adm-header-notif-block-active");
BX.unbind(document, "click", BX.proxy(BX.adminInformer.Close, BX.adminInformer));
BX.removeClass(informer, "adm-informer-animate");
if (this.IsAnimationSupported())
setTimeout(function() {BX.removeClass(informer, "adm-informer-active");}, 300);
else
BX.removeClass(informer, "adm-informer-active");
BX.onCustomEvent(informer, 'onAdminInformerHide');
//setTimeout(function() {BX.adminInformer.HideExtra();},500);
},
IsAnimationSupported : function()
{
var d = document.body || document.documentElement;
if (typeof(d.style.transition) == "string")
return true;
else if (typeof(d.style.MozTransition) == "string")
return true;
else if (typeof(d.style.OTransition) == "string")
return true;
else if (typeof(d.style.WebkitTransition) == "string")
return true;
else if (typeof(d.style.msTransition) == "string")
return true;
return false;
},
SetItemHtml: function(itemIdx, html)
{
var itemHtmlDiv = BX("adm-informer-item-html-"+itemIdx);
if(!itemHtmlDiv)
return false;
itemHtmlDiv.innerHTML = html;
return true;
},
SetItemFooter: function(itemIdx, html)
{
var itemFooterDiv = BX("adm-informer-item-footer-"+itemIdx);
if(!itemFooterDiv)
return false;
itemFooterDiv.innerHTML = html;
if(html)
itemFooterDiv.style.display = "block";
else
itemFooterDiv.style.display = "none";
return true;
}
};
})(window);