﻿Type.registerNamespace('AjaxControlToolkit');AjaxControlToolkit.PopupBehavior = function(element) {
AjaxControlToolkit.PopupBehavior.initializeBase(this, [element]);this._x = 0;this._y = 0;this._positioningMode = AjaxControlToolkit.PositioningMode.Absolute;this._parentElement = null;this._parentElementID = null;this._moveHandler = null;this._firstPopup = true;this._originalParent = null;this._visible = false;this._onParentRepositionHandler = null;this._elementsWithAttachedRepositionHandlers = null;this._onShow = null;this._onShowEndedHandler = null;this._onHide = null;this._onHideEndedHandler = null;}
AjaxControlToolkit.PopupBehavior.prototype = {
initialize: function() {
AjaxControlToolkit.PopupBehavior.callBaseMethod(this, 'initialize');this._hidePopup();this._prepareElement();this._onShowEndedHandler = Function.createDelegate(this, this._onShowEnded);this._onHideEndedHandler = Function.createDelegate(this, this._onHideEnded);},
dispose: function() {
var element = this.get_element();if (element) {
if (this._visible) {
this.hide();}
if (this._originalParent) {
element.parentNode.removeChild(element);this._originalParent.appendChild(element);this._originalParent = null;}
element._hideWindowedElementsIFrame = null;}
this._parentElement = null;if (this._onShow && this._onShow.get_animation() && this._onShowEndedHandler) {
this._onShow.get_animation().remove_ended(this._onShowEndedHandler);}
this._onShowEndedHandler = null;this._onShow = null;if (this._onHide && this._onHide.get_animation() && this._onHideEndedHandler) {
this._onHide.get_animation().remove_ended(this._onHideEndedHandler);}
this._onHideEndedHandler = null;this._onHide = null;if (this._onParentRepositionHandler != null) {
$removeHandler(window, 'resize', this._onParentRepositionHandler);}
if (this._elementsWithAttachedRepositionHandlers != null) {
for (var i = 0;i < this._elementsWithAttachedRepositionHandlers.length;i++) {
$removeHandler(this._elementsWithAttachedRepositionHandlers[i], 'resize', this._onParentRepositionHandler);$removeHandler(this._elementsWithAttachedRepositionHandlers[i], 'scroll', this._onParentRepositionHandler);}
this._elementsWithAttachedRepositionHandlers = null;}
this._onParentRepositionHandler = null;AjaxControlToolkit.PopupBehavior.callBaseMethod(this, 'dispose');},
_prepareElement: function() {
var element = this.get_element();this._onParentRepositionHandler = Function.createDelegate(this, this._reposition);this._elementsWithAttachedRepositionHandlers = new Array();var parent = element.parentNode;while (parent) {
if (parent == document.body) {
break;}
$addHandler(parent, 'scroll', this._onParentRepositionHandler);$addHandler(parent, 'resize', this._onParentRepositionHandler);this._elementsWithAttachedRepositionHandlers.push(parent);parent = parent.parentNode;}
$addHandler(window, 'resize', this._onParentRepositionHandler);element.style.position = 'absolute';$common.appendElementToFormOrBody(element);},
_reposition: function() {
if (!this._visible) {
return;}
this.setupPopup();},
show: function() {
if (this._visible) {
return;}
var eventArgs = new Sys.CancelEventArgs();this.raiseShowing(eventArgs);if (eventArgs.get_cancel()) {
return;}
this._visible = true;var element = this.get_element();$common.setVisible(element, true);this.setupPopup();if (this._onShow) {
$common.setVisible(element, false);this.onShow();} else {
this.raiseShown(Sys.EventArgs.Empty);}
},
hide: function() {
if (!this._visible) {
return;}
var eventArgs = new Sys.CancelEventArgs();this.raiseHiding(eventArgs);if (eventArgs.get_cancel()) {
return;}
this._visible = false;if (this._onHide) {
this.onHide();} else {
this._hidePopup();this._hideCleanup();}
},
getBounds: function() {
var element = this.get_element();var offsetParent = element.offsetParent || document.documentElement;var diff;var parentBounds;if (this._parentElement) {
parentBounds = $common.getBounds(this._parentElement);var offsetParentLocation = $common.getLocation(offsetParent);diff = { x: parentBounds.x - offsetParentLocation.x, y: parentBounds.y - offsetParentLocation.y };} else {
parentBounds = $common.getBounds(offsetParent);diff = { x: 0, y: 0 };}
var width = element.offsetWidth - (element.clientLeft ? element.clientLeft * 2 : 0);var height = element.offsetHeight - (element.clientTop ? element.clientTop * 2 : 0);if (this._firstpopup) {
element.style.width = width + "px";this._firstpopup = false;}
var position, pos;switch (this._positioningMode) {
case AjaxControlToolkit.PositioningMode.Center:
pos = {
x: Math.round(parentBounds.width / 2 - width / 2),
y: Math.round(parentBounds.height / 2 - height / 2),
altX: Math.round(parentBounds.width / 2 - width / 2),
altY: Math.round(parentBounds.height / 2 - height / 2)
};break;case AjaxControlToolkit.PositioningMode.BottomLeft:
pos = {
x: 0,
y: parentBounds.height,
altX: parentBounds.width - width,
altY: 0 - height
}
break;case AjaxControlToolkit.PositioningMode.BottomRight:
pos = {
x: parentBounds.width - width,
y: parentBounds.height,
altX: 0,
altY: 0 - height
}
break;case AjaxControlToolkit.PositioningMode.TopLeft:
pos = {
x: 0,
y: -element.offsetHeight,
altX: parentBounds.width - width,
altY: parentBounds.height
}
break;case AjaxControlToolkit.PositioningMode.TopRight:
pos = {
x: parentBounds.width - width,
y: -element.offsetHeight,
altX: 0,
altY: parentBounds.height
}
break;case AjaxControlToolkit.PositioningMode.Right:
pos = {
x: parentBounds.width,
y: 0,
altX: -element.offsetWidth,
altY: parentBounds.height - height
}
break;case AjaxControlToolkit.PositioningMode.Left:
pos = {
x: -element.offsetWidth,
y: 0,
altX: parentBounds.width,
altY: parentBounds.height - height
}
break;default:
pos = { x: 0, y: 0, altX: 0, altY: 0 };}
pos.x += this._x + diff.x;pos.altX += this._x + diff.x;pos.y += this._y + diff.y;pos.altY += this._y + diff.y;position = this._verifyPosition(pos, width, height, parentBounds);return new Sys.UI.Bounds(position.x, position.y, width, height);},
_verifyPosition: function(pos, elementWidth, elementHeight, parentBounds) {
var newX = 0, newY = 0;var windowBounds = this._getWindowBounds();if (!((pos.x + elementWidth > windowBounds.x + windowBounds.width) || (pos.x < windowBounds.x))) {
newX = pos.x;} else {
newX = pos.altX;if (pos.altX < windowBounds.x) {
if (pos.x > pos.altX) {
newX = pos.x;}
} else if (windowBounds.width + windowBounds.x - pos.altX < elementWidth) {
var xDiff = pos.x > pos.altX ? Math.abs(windowBounds.x - pos.x) : (windowBounds.x - pos.x);if (xDiff < elementWidth - windowBounds.width - windowBounds.x + pos.altX) {
newX = pos.x;}
}
}
if (!((pos.y + elementHeight > windowBounds.y + windowBounds.height) || (pos.y < windowBounds.y))) {
newY = pos.y;} else {
newY = pos.altY;if (pos.altY < windowBounds.y) {
if (windowBounds.y - pos.altY > elementHeight - windowBounds.height - windowBounds.y + pos.y) {
newY = pos.y;}
} else if (windowBounds.height + windowBounds.y - pos.altY < elementHeight) {
if (windowBounds.y - pos.y < elementHeight - windowBounds.height - windowBounds.y + pos.altY) {
newY = pos.y;}
}
}
return { x: newX, y: newY };},
_getWindowBounds: function() {
var bounds = {
x: this._getWindowScrollLeft(),
y: this._getWindowScrollTop(),
width: this._getWindowWidth(),
height: this._getWindowHeight()
};return bounds;},
_getWindowHeight: function() {
var windowHeight = 0;if (document.documentElement && document.documentElement.clientHeight) {
windowHeight = document.documentElement.clientHeight;}
else if (document.body && document.body.clientHeight) {
windowHeight = document.body.clientHeight;}
return windowHeight;},
_getWindowWidth: function() {
var windowWidth = 0;if (document.documentElement && document.documentElement.clientWidth) {
windowWidth = document.documentElement.clientWidth;}
else if (document.body && document.body.clientWidth) {
windowWidth = document.body.clientWidth;}
return windowWidth;},
_getWindowScrollTop: function() {
var scrollTop = 0;if (typeof (window.pageYOffset) == 'number') {
scrollTop = window.pageYOffset;}
if (document.body && document.body.scrollTop) {
scrollTop = document.body.scrollTop;}
else if (document.documentElement && document.documentElement.scrollTop) {
scrollTop = document.documentElement.scrollTop;}
return scrollTop;},
_getWindowScrollLeft: function() {
var scrollLeft = 0;if (typeof (window.pageXOffset) == 'number') {
scrollLeft = window.pageXOffset;}
else if (document.body && document.body.scrollLeft) {
scrollLeft = document.body.scrollLeft;}
else if (document.documentElement && document.documentElement.scrollLeft) {
scrollLeft = document.documentElement.scrollLeft;}
return scrollLeft;},
adjustPopupPosition: function(bounds) {
var element = this.get_element();if (!bounds) {
bounds = this.getBounds();}
var newPosition = $common.getBounds(element);var updateNeeded = false;if (newPosition.x < 0) {
bounds.x -= newPosition.x;updateNeeded = true;}
if (newPosition.y < 0) {
bounds.y -= newPosition.y;updateNeeded = true;}
if (updateNeeded) {
$common.setLocation(element, bounds);}
},
addBackgroundIFrame: function() {
var element = this.get_element();if ((Sys.Browser.agent === Sys.Browser.InternetExplorer) && (Sys.Browser.version < 7)) {
var childFrame = element._hideWindowedElementsIFrame;if (!childFrame) {
childFrame = document.createElement("iframe");childFrame.src = "javascript:'<html></html>';";childFrame.style.position = "absolute";childFrame.style.display = "none";childFrame.scrolling = "no";childFrame.frameBorder = "0";childFrame.tabIndex = "-1";childFrame.style.filter = "progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=0)";element.parentNode.insertBefore(childFrame, element);element._hideWindowedElementsIFrame = childFrame;this._moveHandler = Function.createDelegate(this, this._onMove);Sys.UI.DomEvent.addHandler(element, "move", this._moveHandler);}
$common.setBounds(childFrame, $common.getBounds(element));childFrame.style.left = element.style.left;childFrame.style.top = element.style.top;childFrame.style.display = element.style.display;if (element.currentStyle && element.currentStyle.zIndex) {
childFrame.style.zIndex = element.currentStyle.zIndex;} else if (element.style.zIndex) {
childFrame.style.zIndex = element.style.zIndex;}
}
},
setupPopup: function() {
var element = this.get_element();var bounds = this.getBounds();$common.setLocation(element, bounds);this.adjustPopupPosition(bounds);element.style.zIndex = 1000;this.addBackgroundIFrame();},
_hidePopup: function() {
var element = this.get_element();$common.setVisible(element, false);if (element.originalWidth) {
element.style.width = element.originalWidth + "px";element.originalWidth = null;}
},
_hideCleanup: function() {
var element = this.get_element();if (this._moveHandler) {
Sys.UI.DomEvent.removeHandler(element, "move", this._moveHandler);this._moveHandler = null;}
if (Sys.Browser.agent === Sys.Browser.InternetExplorer) {
var childFrame = element._hideWindowedElementsIFrame;if (childFrame) {
childFrame.style.display = "none";}
}
this.raiseHidden(Sys.EventArgs.Empty);},
_onMove: function() {
var element = this.get_element();if (element._hideWindowedElementsIFrame) {
element.parentNode.insertBefore(element._hideWindowedElementsIFrame, element);element._hideWindowedElementsIFrame.style.top = element.style.top;element._hideWindowedElementsIFrame.style.left = element.style.left;}
},
get_onShow: function() {
return this._onShow ? this._onShow.get_json() : null;},
set_onShow: function(value) {
if (!this._onShow) {
this._onShow = new AjaxControlToolkit.Animation.GenericAnimationBehavior(this.get_element());this._onShow.initialize();}
this._onShow.set_json(value);var animation = this._onShow.get_animation();if (animation) {
animation.add_ended(this._onShowEndedHandler);}
this.raisePropertyChanged('onShow');},
get_onShowBehavior: function() {
return this._onShow;},
onShow: function() {
if (this._onShow) {
if (this._onHide) {
this._onHide.quit();}
this._onShow.play();}
},
_onShowEnded: function() {
this.adjustPopupPosition();this.addBackgroundIFrame();this.raiseShown(Sys.EventArgs.Empty);},
get_onHide: function() {
return this._onHide ? this._onHide.get_json() : null;},
set_onHide: function(value) {
if (!this._onHide) {
this._onHide = new AjaxControlToolkit.Animation.GenericAnimationBehavior(this.get_element());this._onHide.initialize();}
this._onHide.set_json(value);var animation = this._onHide.get_animation();if (animation) {
animation.add_ended(this._onHideEndedHandler);}
this.raisePropertyChanged('onHide');},
get_onHideBehavior: function() {
return this._onHide;},
onHide: function() {
if (this._onHide) {
if (this._onShow) {
this._onShow.quit();}
this._onHide.play();}
},
_onHideEnded: function() {
this._hideCleanup();},
get_parentElement: function() {
if (!this._parentElement && this._parentElementID) {
this.set_parentElement($get(this._parentElementID));Sys.Debug.assert(this._parentElement != null, String.format(AjaxControlToolkit.Resources.PopupExtender_NoParentElement, this._parentElementID));}
return this._parentElement;},
set_parentElement: function(element) {
this._parentElement = element;this.raisePropertyChanged('parentElement');},
get_parentElementID: function() {
if (this._parentElement) {
return this._parentElement.id
}
return this._parentElementID;},
set_parentElementID: function(elementID) {
this._parentElementID = elementID;if (this.get_isInitialized()) {
this.set_parentElement($get(elementID));}
},
get_positioningMode: function() {
return this._positioningMode;},
set_positioningMode: function(mode) {
this._positioningMode = mode;this.raisePropertyChanged('positioningMode');},
get_x: function() {
return this._x;},
set_x: function(value) {
if (value != this._x) {
this._x = value;if (this._visible) {
this.setupPopup();}
this.raisePropertyChanged('x');}
},
get_y: function() {
return this._y;},
set_y: function(value) {
if (value != this._y) {
this._y = value;if (this._visible) {
this.setupPopup();}
this.raisePropertyChanged('y');}
},
get_visible: function() {
return this._visible;},
add_showing: function(handler) {
this.get_events().addHandler('showing', handler);},
remove_showing: function(handler) {
this.get_events().removeHandler('showing', handler);},
raiseShowing: function(eventArgs) {
var handler = this.get_events().getHandler('showing');if (handler) {
handler(this, eventArgs);}
},
add_shown: function(handler) {
this.get_events().addHandler('shown', handler);},
remove_shown: function(handler) {
this.get_events().removeHandler('shown', handler);},
raiseShown: function(eventArgs) {
var handler = this.get_events().getHandler('shown');if (handler) {
handler(this, eventArgs);}
},
add_hiding: function(handler) {
this.get_events().addHandler('hiding', handler);},
remove_hiding: function(handler) {
this.get_events().removeHandler('hiding', handler);},
raiseHiding: function(eventArgs) {
var handler = this.get_events().getHandler('hiding');if (handler) {
handler(this, eventArgs);}
},
add_hidden: function(handler) {
this.get_events().addHandler('hidden', handler);},
remove_hidden: function(handler) {
this.get_events().removeHandler('hidden', handler);},
raiseHidden: function(eventArgs) {
var handler = this.get_events().getHandler('hidden');if (handler) {
handler(this, eventArgs);}
}
}
AjaxControlToolkit.PopupBehavior.registerClass('AjaxControlToolkit.PopupBehavior', AjaxControlToolkit.BehaviorBase);AjaxControlToolkit.PositioningMode = function() {
throw Error.invalidOperation();}
AjaxControlToolkit.PositioningMode.prototype = {
Absolute: 0,
Center: 1,
BottomLeft: 2,
BottomRight: 3,
TopLeft: 4,
TopRight: 5,
Right: 6,
Left: 7
}
AjaxControlToolkit.PositioningMode.registerEnum('AjaxControlToolkit.PositioningMode');
if(typeof(Sys)!=='undefined')Sys.Application.notifyScriptLoaded();