// Name: AlwaysVisibleControl.AlwaysVisibleControlBehavior.debug.js
// Assembly: AjaxControlToolkit
// Version: 4.5.7.1213
// FileVersion: 4.5.7.1213
// (c) 2010 CodePlex Foundation
///
///
///
///
///
///
///
(function() {
var scriptName = "ExtendedAlwaysVisible";
function execute() {
Type.registerNamespace('Sys.Extended.UI');
Sys.Extended.UI.HorizontalSide = function() {
///
/// The HorizontalSide enumeration describes the horizontal side
/// of the window used to anchor the element
///
///
///
///
throw Error.invalidOperation();
}
Sys.Extended.UI.HorizontalSide.prototype = {
Left : 0,
Center : 1,
Right : 2
}
Sys.Extended.UI.HorizontalSide.registerEnum("Sys.Extended.UI.HorizontalSide", false);
Sys.Extended.UI.VerticalSide = function() {
///
/// The VerticalSide enumeration describes the vertical side
/// of the window used to anchor the element
///
///
///
///
throw Error.invalidOperation();
}
Sys.Extended.UI.VerticalSide.prototype = {
Top : 0,
Middle : 1,
Bottom : 2
}
Sys.Extended.UI.VerticalSide.registerEnum("Sys.Extended.UI.VerticalSide", false);
Sys.Extended.UI.AlwaysVisibleControlBehavior = function(element) {
///
/// The AlwaysVisibleControl behavior is used to fix a particular control a specified distance
/// from the top/left corner at all times regardless of how the users scrolls or sizes the window.
///
///
/// The DOM element the behavior is associated with
///
Sys.Extended.UI.AlwaysVisibleControlBehavior.initializeBase(this, [element]);
this._horizontalOffset = 0;
this._horizontalSide = Sys.Extended.UI.HorizontalSide.Left;
this._verticalOffset = 0;
this._verticalSide = Sys.Extended.UI.VerticalSide.Top;
this._scrollEffectDuration = .1;
this._repositionHandler = null;
this._animate = false;
this._animation = null;
}
Sys.Extended.UI.AlwaysVisibleControlBehavior.prototype = {
initialize : function() {
///
/// Initialize the behavior
///
///
Sys.Extended.UI.AlwaysVisibleControlBehavior.callBaseMethod(this, 'initialize');
var element = this.get_element();
if (!element) throw Error.invalidOperation(Sys.Extended.UI.Resources.AlwaysVisible_ElementRequired);
this._repositionHandler = Function.createDelegate(this, this._reposition);
if (Sys.Browser.agent == Sys.Browser.InternetExplorer && Sys.Browser.version < 7) {
this._animate = true;
}
if (this._animate) {
this._animation = new Sys.Extended.UI.Animation.MoveAnimation(
element, this._scrollEffectDuration, 25, 0, 0, false, 'px');
element.style.position = 'absolute';
} else {
element.style.position = 'fixed';
}
$addHandler(window, 'resize', this._repositionHandler);
if (this._animate) {
$addHandler(window, 'scroll', this._repositionHandler);
}
this._reposition();
},
dispose : function() {
///
/// Dispose the behavior
///
///
if (this._repositionHandler) {
if (this._animate) {
$removeHandler(window, 'scroll', this._repositionHandler);
}
$removeHandler(window, 'resize', this._repositionHandler);
this._repositionHandler = null;
}
if (this._animation) {
this._animation.dispose();
this._animation = null;
}
Sys.Extended.UI.AlwaysVisibleControlBehavior.callBaseMethod(this, 'dispose');
},
_reposition : function(eventObject) {
///
/// Handler to reposition the element and place it where it actually belongs
/// whenever the browser is scrolled or resized
///
///
/// Event info
///
///
var element = this.get_element();
if (!element) return;
this.raiseRepositioning(Sys.EventArgs.Empty);
var x = 0;
var y = 0;
if (this._animate) {
if (document.documentElement && document.documentElement.scrollTop) {
x = document.documentElement.scrollLeft;
y = document.documentElement.scrollTop;
} else {
x = document.body.scrollLeft;
y = document.body.scrollTop;
}
}
var clientBounds = $common.getClientBounds();
var width = clientBounds.width;
var height = clientBounds.height;
switch (this._horizontalSide) {
case Sys.Extended.UI.HorizontalSide.Center :
x = Math.max(0, Math.floor(x + width / 2.0 - element.offsetWidth / 2.0 - this._horizontalOffset));
break;
case Sys.Extended.UI.HorizontalSide.Right :
x = Math.max(0, x + width - element.offsetWidth - this._horizontalOffset);
break;
case Sys.Extended.UI.HorizontalSide.Left :
default :
x += this._horizontalOffset;
break;
}
switch (this._verticalSide) {
case Sys.Extended.UI.VerticalSide.Middle :
y = Math.max(0, Math.floor(y + height / 2.0 - element.offsetHeight / 2.0 - this._verticalOffset));
break;
case Sys.Extended.UI.VerticalSide.Bottom :
y = Math.max(0, y + height - element.offsetHeight - this._verticalOffset);
break;
case Sys.Extended.UI.VerticalSide.Top :
default :
y += this._verticalOffset;
break;
}
if (this._animate && this._animation) {
this._animation.stop();
this._animation.set_horizontal(x);
this._animation.set_vertical(y);
this._animation.play();
} else {
element.style.left = x + 'px';
element.style.top = y + 'px';
}
this.raiseRepositioned(Sys.EventArgs.Empty);
},
get_HorizontalOffset : function() {
///
/// Distance to the horizontal edge of the browser in pixels from the same side of the target control. The default is 0 pixels.
///
return this._horizontalOffset;
},
set_HorizontalOffset : function(value) {
if (this._horizontalOffset != value) {
this._horizontalOffset = value;
this._reposition();
this.raisePropertyChanged('HorizontalOffset');
}
},
get_HorizontalSide : function() {
///
/// Horizontal side of the browser to anchor the control against. The default is the Left side.
///
return this._horizontalSide;
},
set_HorizontalSide : function(value) {
if (this._horizontalSide != value) {
this._horizontalSide = value;
this._reposition();
this.raisePropertyChanged('HorizontalSide');
}
},
get_VerticalOffset : function() {
///
/// Distance to the vertical edge of the browser in pixels from the same side of the target control. The default is 0 pixels.
///
return this._verticalOffset;
},
set_VerticalOffset : function(value) {
if (this._verticalOffset != value) {
this._verticalOffset = value;
this._reposition();
this.raisePropertyChanged('VerticalOffset');
}
},
get_VerticalSide : function() {
///
/// Vertical side of the browser to anchor the control against. The default is the Top side.
///
return this._verticalSide;
},
set_VerticalSide : function(value) {
if (this._verticalSide != value) {
this._verticalSide = value;
this._reposition();
this.raisePropertyChanged('VerticalSide');
}
},
get_ScrollEffectDuration : function() {
///
/// Length in seconds for the scrolling effect to last when the target control is repositioned. The default is .1 seconds.
///
return this._scrollEffectDuration;
},
set_ScrollEffectDuration : function(value) {
if (this._scrollEffectDuration != value) {
this._scrollEffectDuration = value;
if (this._animation) {
this._animation.set_duration(value);
}
this.raisePropertyChanged('ScrollEffectDuration');
}
},
get_useAnimation : function() {
///
/// Whether or not to animate the element into position. (note:
/// this value should always be true in IE6).
///
return this._animate;
},
set_useAnimation : function(value) {
value |= (Sys.Browser.agent == Sys.Browser.InternetExplorer && Sys.Browser.version < 7);
if (this._animate != value) {
this._animate = value;
this.raisePropertyChanged('useAnimation');
}
},
add_repositioning : function(handler) {
///
/// Add an event handler for the repositioning event
///
///
/// Event handler
///
///
this.get_events().addHandler('repositioning', handler);
},
remove_repositioning : function(handler) {
///
/// Remove an event handler from the repositioning event
///
///
/// Event handler
///
///
this.get_events().removeHandler('repositioning', handler);
},
raiseRepositioning : function(eventArgs) {
///
/// Raise the repositioning event
///
///
/// Event arguments for the repositioning event
///
///
var handler = this.get_events().getHandler('repositioning');
if (handler) {
handler(this, eventArgs);
}
},
add_repositioned : function(handler) {
///
/// Add an event handler for the repositioned event
///
///
/// Event handler
///
///
this.get_events().addHandler('repositioned', handler);
},
remove_repositioned : function(handler) {
///
/// Remove an event handler from the repositioned event
///
///
/// Event handler
///
///
this.get_events().removeHandler('repositioned', handler);
},
raiseRepositioned : function(eventArgs) {
///
/// Raise the repositioned event
///
///
/// Event arguments for the repositioned event
///
///
var handler = this.get_events().getHandler('repositioned');
if (handler) {
handler(this, eventArgs);
}
}
}
Sys.Extended.UI.AlwaysVisibleControlBehavior.registerClass('Sys.Extended.UI.AlwaysVisibleControlBehavior', Sys.Extended.UI.BehaviorBase);
Sys.registerComponent(Sys.Extended.UI.AlwaysVisibleControlBehavior, { name: "alwaysVisible" });
} // execute
if (window.Sys && Sys.loader) {
Sys.loader.registerScript(scriptName, ["ExtendedAnimations", "ExtendedBase"], execute);
}
else {
execute();
}
})();