Type.registerNamespace('AjaxControlToolkit.Animation'); var $AA = AjaxControlToolkit.Animation; $AA.registerAnimation = function(name, type) { if (type && ((type === $AA.Animation) || (type.inheritsFrom && type.inheritsFrom($AA.Animation)))) { if (!$AA.__animations) {$AA.__animations = { };} $AA.__animations[name.toLowerCase()] = type; type.play = function() { var animation = new type(); type.apply(animation, arguments); animation.initialize(); var handler = Function.createDelegate(animation, function() { animation.remove_ended(handler); handler = null; animation.dispose(); }); animation.add_ended(handler); animation.play(); } } else { throw Error.argumentType('type', type, $AA.Animation, AjaxControlToolkit.Resources.Animation_InvalidBaseType); } } $AA.buildAnimation = function(json, defaultTarget) { if (!json || json === '') { return null; } var obj; json = '(' + json + ')'; if (! Sys.Debug.isDebug) { try { obj = Sys.Serialization.JavaScriptSerializer.deserialize(json); } catch (ex) { } } else { obj = Sys.Serialization.JavaScriptSerializer.deserialize(json); } return $AA.createAnimation(obj, defaultTarget); } $AA.createAnimation = function(obj, defaultTarget) { if (!obj || !obj.AnimationName) { throw Error.argument('obj', AjaxControlToolkit.Resources.Animation_MissingAnimationName); } var type = $AA.__animations[obj.AnimationName.toLowerCase()]; if (!type) { throw Error.argument('type', String.format(AjaxControlToolkit.Resources.Animation_UknownAnimationName, obj.AnimationName)); } var animation = new type(); if (defaultTarget) {animation.set_target(defaultTarget);} if (obj.AnimationChildren && obj.AnimationChildren.length) { if ($AA.ParentAnimation.isInstanceOfType(animation)) { for (var i = 0; i < obj.AnimationChildren.length; i++) { var child = $AA.createAnimation(obj.AnimationChildren[i]); if (child) {animation.add(child);} } } else {throw Error.argument('obj', String.format(AjaxControlToolkit.Resources.Animation_ChildrenNotAllowed, type.getName()));} } var properties = type.__animationProperties; if (!properties) { type.__animationProperties = { }; type.resolveInheritance(); for (var name in type.prototype) { if (name.startsWith('set_')) {type.__animationProperties[name.substr(4).toLowerCase()] = name;} } delete type.__animationProperties['id']; properties = type.__animationProperties; } for (var property in obj) { var prop = property.toLowerCase(); if (prop == 'animationname' || prop == 'animationchildren') {continue;} var value = obj[property]; var setter = properties[prop]; if (setter && String.isInstanceOfType(setter) && animation[setter]) { if (! Sys.Debug.isDebug) { try { animation[setter](value); } catch (ex) { } } else { animation[setter](value); } } else { if (prop.endsWith('script')) { setter = properties[prop.substr(0, property.length - 6)]; if (setter && String.isInstanceOfType(setter) && animation[setter]) { animation.DynamicProperties[setter] = value; } else if ( Sys.Debug.isDebug) { throw Error.argument('obj', String.format(AjaxControlToolkit.Resources.Animation_NoDynamicPropertyFound, property, property.substr(0, property.length - 5))); } } else if ( Sys.Debug.isDebug) { throw Error.argument('obj', String.format(AjaxControlToolkit.Resources.Animation_NoPropertyFound, property)); } } } return animation; } $AA.Animation = function(target, duration, fps) { $AA.Animation.initializeBase(this); this._duration = 1; this._fps = 25; this._target = null; this._tickHandler = null; this._timer = null; this._percentComplete = 0; this._percentDelta = null; this._owner = null; this._parentAnimation = null; this.DynamicProperties = { }; if (target) {this.set_target(target);} if (duration) {this.set_duration(duration);} if (fps) {this.set_fps(fps);} } $AA.Animation.prototype = { dispose : function() { if (this._timer) { this._timer.dispose(); this._timer = null; } this._tickHandler = null; this._target = null; $AA.Animation.callBaseMethod(this, 'dispose'); }, play : function() { if (!this._owner) { var resume = true; if (!this._timer) { resume = false; if (!this._tickHandler) {this._tickHandler = Function.createDelegate(this, this._onTimerTick);} this._timer = new Sys.Timer(); this._timer.add_tick(this._tickHandler); this.onStart(); this._timer.set_interval(1000 / this._fps); this._percentDelta = 100 / (this._duration * this._fps); this._updatePercentComplete(0, true); } this._timer.set_enabled(true); this.raisePropertyChanged('isPlaying'); if (!resume) {this.raisePropertyChanged('isActive');} } }, pause : function() { if (!this._owner) { if (this._timer) { this._timer.set_enabled(false); this.raisePropertyChanged('isPlaying'); } } }, stop : function(finish) { if (!this._owner) { var t = this._timer; this._timer = null; if (t) { t.dispose(); if (this._percentComplete !== 100) { this._percentComplete = 100; this.raisePropertyChanged('percentComplete'); if (finish || finish === undefined) { this.onStep(100); } } this.onEnd(); this.raisePropertyChanged('isPlaying'); this.raisePropertyChanged('isActive'); } } }, onStart : function() { this.raiseStarted(); for (var property in this.DynamicProperties) { try { this[property](eval(this.DynamicProperties[property])); } catch(ex) { if ( Sys.Debug.isDebug) { throw ex; } } } }, onStep : function(percentage) {this.setValue(this.getAnimatedValue(percentage));}, onEnd : function() {this.raiseEnded();}, getAnimatedValue : function(percentage) {throw Error.notImplemented();}, setValue : function(value) {throw Error.notImplemented();}, interpolate : function(start, end, percentage) {return start + (end - start) * (percentage / 100);}, _onTimerTick : function() {this._updatePercentComplete(this._percentComplete + this._percentDelta, true);}, _updatePercentComplete : function(percentComplete, animate) { if (percentComplete > 100) { percentComplete = 100; } this._percentComplete = percentComplete; this.raisePropertyChanged('percentComplete'); if (animate) { this.onStep(percentComplete); } if (percentComplete === 100) { this.stop(false); } }, setOwner : function(owner) { this._owner = owner; }, raiseStarted : function() { var handlers = this.get_events().getHandler('started'); if (handlers) { handlers(this, Sys.EventArgs.Empty); } }, add_started : function(handler) { this.get_events().addHandler("started", handler); }, remove_started : function(handler) { this.get_events().removeHandler("started", handler); }, raiseEnded : function() { var handlers = this.get_events().getHandler('ended'); if (handlers) { handlers(this, Sys.EventArgs.Empty); } }, add_ended : function(handler) { this.get_events().addHandler("ended", handler); }, remove_ended : function(handler) { this.get_events().removeHandler("ended", handler); }, get_target : function() { if (!this._target && this._parentAnimation) { return this._parentAnimation.get_target(); } return this._target; }, set_target : function(value) { if (this._target != value) { this._target = value; this.raisePropertyChanged('target'); } }, set_animationTarget : function(id) { var target = null; var element = $get(id); if (element) { target = element; } else { // Try to find the control in the AJAX controls collection var ctrl = $find(id); if (ctrl) { element = ctrl.get_element(); if (element) { target = element; } } } if (target) { this.set_target(target); } else { throw Error.argument('id', String.format(AjaxControlToolkit.Resources.Animation_TargetNotFound, id)); } }, get_duration : function() { return this._duration; }, set_duration : function(value) { value = this._getFloat(value); if (this._duration != value) { this._duration = value; this.raisePropertyChanged('duration'); } }, get_fps : function() { return this._fps; }, set_fps : function(value) { value = this._getInteger(value); if (this.fps != value) { this._fps = value; this.raisePropertyChanged('fps'); } }, get_isActive : function() { return (this._timer !== null); }, get_isPlaying : function() { return (this._timer !== null) && this._timer.get_enabled(); }, get_percentComplete : function() { return this._percentComplete; }, _getBoolean : function(value) { if (String.isInstanceOfType(value)) { return Boolean.parse(value); } return value; }, _getInteger : function(value) { if (String.isInstanceOfType(value)) { return parseInt(value); } return value; }, _getFloat : function(value) { if (String.isInstanceOfType(value)) { return parseFloat(value); } return value; }, _getEnum : function(value, type) { if (String.isInstanceOfType(value) && type && type.parse) { return type.parse(value); } return value; } } $AA.Animation.registerClass('AjaxControlToolkit.Animation.Animation', Sys.Component); $AA.registerAnimation('animation', $AA.Animation); $AA.ParentAnimation = function(target, duration, fps, animations) { $AA.ParentAnimation.initializeBase(this, [target, duration, fps]); this._animations = []; if (animations && animations.length) { for (var i = 0; i < animations.length; i++) { this.add(animations[i]); } } } $AA.ParentAnimation.prototype = { initialize : function() { $AA.ParentAnimation.callBaseMethod(this, 'initialize'); if (this._animations) { for (var i = 0; i < this._animations.length; i++) { var animation = this._animations[i]; if (animation && !animation.get_isInitialized) { animation.initialize(); } } } }, dispose : function() { this.clear(); this._animations = null; $AA.ParentAnimation.callBaseMethod(this, 'dispose'); }, get_animations : function() { return this._animations; }, add : function(animation) { if (this._animations) { if (animation) { animation._parentAnimation = this; } Array.add(this._animations, animation); this.raisePropertyChanged('animations'); } }, remove : function(animation) { if (this._animations) { if (animation) { animation.dispose(); } Array.remove(this._animations, animation); this.raisePropertyChanged('animations'); } }, removeAt : function(index) { if (this._animations) { var animation = this._animations[index]; if (animation) { animation.dispose(); } Array.removeAt(this._animations, index); this.raisePropertyChanged('animations'); } }, clear : function() { if (this._animations) { for (var i = this._animations.length - 1; i >= 0; i--) { this._animations[i].dispose(); this._animations[i] = null; } Array.clear(this._animations); this._animations = []; this.raisePropertyChanged('animations'); } } } $AA.ParentAnimation.registerClass('AjaxControlToolkit.Animation.ParentAnimation', $AA.Animation); $AA.registerAnimation('parent', $AA.ParentAnimation); $AA.ParallelAnimation = function(target, duration, fps, animations) { $AA.ParallelAnimation.initializeBase(this, [target, duration, fps, animations]); } $AA.ParallelAnimation.prototype = { add : function(animation) { $AA.ParallelAnimation.callBaseMethod(this, 'add', [animation]); animation.setOwner(this); }, onStart : function() { $AA.ParallelAnimation.callBaseMethod(this, 'onStart'); var animations = this.get_animations(); for (var i = 0; i < animations.length; i++) { animations[i].onStart(); } }, onStep : function(percentage) { var animations = this.get_animations(); for (var i = 0; i < animations.length; i++) { animations[i].onStep(percentage); } }, onEnd : function() { var animations = this.get_animations(); for (var i = 0; i < animations.length; i++) { animations[i].onEnd(); } $AA.ParallelAnimation.callBaseMethod(this, 'onEnd'); } } $AA.ParallelAnimation.registerClass('AjaxControlToolkit.Animation.ParallelAnimation', $AA.ParentAnimation); $AA.registerAnimation('parallel', $AA.ParallelAnimation); $AA.SequenceAnimation = function(target, duration, fps, animations, iterations) { $AA.SequenceAnimation.initializeBase(this, [target, duration, fps, animations]); this._handler = null; this._paused = false; this._playing = false; this._index = 0; this._remainingIterations = 0; this._iterations = (iterations !== undefined) ? iterations : 1; } $AA.SequenceAnimation.prototype = { dispose : function() { this._handler = null; $AA.SequenceAnimation.callBaseMethod(this, 'dispose'); }, stop : function() { if (this._playing) { var animations = this.get_animations(); if (this._index < animations.length) { animations[this._index].remove_ended(this._handler); for (var i = this._index; i < animations.length; i++) { animations[i].stop(); } } this._playing = false; this._paused = false; this.raisePropertyChanged('isPlaying'); this.onEnd(); } }, pause : function() { if (this.get_isPlaying()) { var current = this.get_animations()[this._index]; if (current != null) { current.pause(); } this._paused = true; this.raisePropertyChanged('isPlaying'); } }, play : function() { var animations = this.get_animations(); if (!this._playing) { this._playing = true; if (this._paused) { this._paused = false; var current = animations[this._index]; if (current != null) { current.play(); this.raisePropertyChanged('isPlaying'); } } else { this.onStart(); this._index = 0; var first = animations[this._index]; if (first) { first.add_ended(this._handler); first.play(); this.raisePropertyChanged('isPlaying'); } else { this.stop(); } } } }, onStart : function() { $AA.SequenceAnimation.callBaseMethod(this, 'onStart'); this._remainingIterations = this._iterations - 1; if (!this._handler) { this._handler = Function.createDelegate(this, this._onEndAnimation); } }, _onEndAnimation : function() { var animations = this.get_animations(); var current = animations[this._index++]; if (current) { current.remove_ended(this._handler); } if (this._index < animations.length) { var next = animations[this._index]; next.add_ended(this._handler); next.play(); } else if (this._remainingIterations >= 1 || this._iterations <= 0) { this._remainingIterations--; this._index = 0; var first = animations[0]; first.add_ended(this._handler); first.play(); } else { this.stop(); } }, onStep : function(percentage) { throw Error.invalidOperation(AjaxControlToolkit.Resources.Animation_CannotNestSequence); }, onEnd : function() { this._remainingIterations = 0; $AA.SequenceAnimation.callBaseMethod(this, 'onEnd'); }, get_isActive : function() { return true; }, get_isPlaying : function() { return this._playing && !this._paused; }, get_iterations : function() { return this._iterations; }, set_iterations : function(value) { value = this._getInteger(value); if (this._iterations != value) { this._iterations = value; this.raisePropertyChanged('iterations'); } }, get_isInfinite : function() { return this._iterations <= 0; } } $AA.SequenceAnimation.registerClass('AjaxControlToolkit.Animation.SequenceAnimation', $AA.ParentAnimation); $AA.registerAnimation('sequence', $AA.SequenceAnimation); $AA.SelectionAnimation = function(target, duration, fps, animations) { $AA.SelectionAnimation.initializeBase(this, [target, duration, fps, animations]); this._selectedIndex = -1; this._selected = null; } $AA.SelectionAnimation.prototype = { getSelectedIndex : function() { throw Error.notImplemented(); }, onStart : function() { $AA.SelectionAnimation.callBaseMethod(this, 'onStart'); var animations = this.get_animations(); this._selectedIndex = this.getSelectedIndex(); if (this._selectedIndex >= 0 && this._selectedIndex < animations.length) { this._selected = animations[this._selectedIndex]; if (this._selected) { this._selected.setOwner(this); this._selected.onStart(); } } }, onStep : function(percentage) { if (this._selected) { this._selected.onStep(percentage); } }, onEnd : function() { if (this._selected) { this._selected.onEnd(); this._selected.setOwner(null); } this._selected = null; this._selectedIndex = null; $AA.SelectionAnimation.callBaseMethod(this, 'onEnd'); } } $AA.SelectionAnimation.registerClass('AjaxControlToolkit.Animation.SelectionAnimation', $AA.ParentAnimation); $AA.registerAnimation('selection', $AA.SelectionAnimation); $AA.ConditionAnimation = function(target, duration, fps, animations, conditionScript) { $AA.ConditionAnimation.initializeBase(this, [target, duration, fps, animations]); this._conditionScript = conditionScript; } $AA.ConditionAnimation.prototype = { getSelectedIndex : function() { var selected = -1; if (this._conditionScript && this._conditionScript.length > 0) { try { selected = eval(this._conditionScript) ? 0 : 1; } catch(ex) { } } return selected; }, get_conditionScript : function() { return this._conditionScript; }, set_conditionScript : function(value) { if (this._conditionScript != value) { this._conditionScript = value; this.raisePropertyChanged('conditionScript'); } } } $AA.ConditionAnimation.registerClass('AjaxControlToolkit.Animation.ConditionAnimation', $AA.SelectionAnimation); $AA.registerAnimation('condition', $AA.ConditionAnimation); $AA.CaseAnimation = function(target, duration, fps, animations, selectScript) { $AA.CaseAnimation.initializeBase(this, [target, duration, fps, animations]); this._selectScript = selectScript; } $AA.CaseAnimation.prototype = { getSelectedIndex : function() { var selected = -1; if (this._selectScript && this._selectScript.length > 0) { try { var result = eval(this._selectScript) if (result !== undefined) selected = result; } catch (ex) { } } return selected; }, get_selectScript : function() { return this._selectScript; }, set_selectScript : function(value) { if (this._selectScript != value) { this._selectScript = value; this.raisePropertyChanged('selectScript'); } } } $AA.CaseAnimation.registerClass('AjaxControlToolkit.Animation.CaseAnimation', $AA.SelectionAnimation); $AA.registerAnimation('case', $AA.CaseAnimation); $AA.FadeEffect = function() { throw Error.invalidOperation(); } $AA.FadeEffect.prototype = { FadeIn : 0, FadeOut : 1 } $AA.FadeEffect.registerEnum("AjaxControlToolkit.Animation.FadeEffect", false); $AA.FadeAnimation = function(target, duration, fps, effect, minimumOpacity, maximumOpacity, forceLayoutInIE) { $AA.FadeAnimation.initializeBase(this, [target, duration, fps]); this._effect = (effect !== undefined) ? effect : $AA.FadeEffect.FadeIn; this._max = (maximumOpacity !== undefined) ? maximumOpacity : 1; this._min = (minimumOpacity !== undefined) ? minimumOpacity : 0; this._start = this._min; this._end = this._max; this._layoutCreated = false; this._forceLayoutInIE = (forceLayoutInIE === undefined || forceLayoutInIE === null) ? true : forceLayoutInIE; this._currentTarget = null; this._resetOpacities(); } $AA.FadeAnimation.prototype = { _resetOpacities : function() { if (this._effect == $AA.FadeEffect.FadeIn) { this._start = this._min; this._end = this._max; } else { this._start = this._max; this._end = this._min; } }, _createLayout : function() { var element = this._currentTarget; if (element) { // Get the original width/height/back color var originalWidth = CommonToolkitScripts.getCurrentStyle(element, 'width'); var originalHeight = CommonToolkitScripts.getCurrentStyle(element, 'height'); var originalBackColor = CommonToolkitScripts.getCurrentStyle(element, 'backgroundColor'); if ((!originalWidth || originalWidth == '' || originalWidth == 'auto') && (!originalHeight || originalHeight == '' || originalHeight == 'auto')) { element.style.width = element.offsetWidth + 'px'; } if (!originalBackColor || originalBackColor == '' || originalBackColor == 'transparent' || originalBackColor == 'rgba(0, 0, 0, 0)') { element.style.backgroundColor = CommonToolkitScripts.getInheritedBackgroundColor(element); } this._layoutCreated = true; } }, onStart : function() { $AA.FadeAnimation.callBaseMethod(this, 'onStart'); this._currentTarget = this.get_target(); this.setValue(this._start); if (this._forceLayoutInIE && !this._layoutCreated && Sys.Browser.agent == Sys.Browser.InternetExplorer) { this._createLayout(); } }, getAnimatedValue : function(percentage) { return this.interpolate(this._start, this._end, percentage); }, setValue : function(value) { if (this._currentTarget) { CommonToolkitScripts.setElementOpacity(this._currentTarget, value); } }, get_effect : function() { return this._effect; }, set_effect : function(value) { value = this._getEnum(value, $AA.FadeEffect); if (this._effect != value) { this._effect = value; this._resetOpacities(); this.raisePropertyChanged('effect'); } }, get_minimumOpacity : function() { return this._min; }, set_minimumOpacity : function(value) { value = this._getFloat(value); if (this._min != value) { this._min = value; this._resetOpacities(); this.raisePropertyChanged('minimumOpacity'); } }, get_maximumOpacity : function() { return this._max; }, set_maximumOpacity : function(value) { value = this._getFloat(value); if (this._max != value) { this._max = value; this._resetOpacities(); this.raisePropertyChanged('maximumOpacity'); } }, get_forceLayoutInIE : function() { return this._forceLayoutInIE; }, set_forceLayoutInIE : function(value) { value = this._getBoolean(value); if (this._forceLayoutInIE != value) { this._forceLayoutInIE = value; this.raisePropertyChanged('forceLayoutInIE'); } }, set_startValue : function(value) { value = this._getFloat(value); this._start = value; } } $AA.FadeAnimation.registerClass('AjaxControlToolkit.Animation.FadeAnimation', $AA.Animation); $AA.registerAnimation('fade', $AA.FadeAnimation); $AA.FadeInAnimation = function(target, duration, fps, minimumOpacity, maximumOpacity, forceLayoutInIE) { $AA.FadeInAnimation.initializeBase(this, [target, duration, fps, $AA.FadeEffect.FadeIn, minimumOpacity, maximumOpacity, forceLayoutInIE]); } $AA.FadeInAnimation.prototype = { onStart : function() { $AA.FadeInAnimation.callBaseMethod(this, 'onStart'); if (this._currentTarget) { this.set_startValue(CommonToolkitScripts.getElementOpacity(this._currentTarget)); } } } $AA.FadeInAnimation.registerClass('AjaxControlToolkit.Animation.FadeInAnimation', $AA.FadeAnimation); $AA.registerAnimation('fadeIn', $AA.FadeInAnimation); $AA.FadeOutAnimation = function(target, duration, fps, minimumOpacity, maximumOpacity, forceLayoutInIE) { $AA.FadeOutAnimation.initializeBase(this, [target, duration, fps, $AA.FadeEffect.FadeOut, minimumOpacity, maximumOpacity, forceLayoutInIE]); } $AA.FadeOutAnimation.prototype = { onStart : function() { $AA.FadeOutAnimation.callBaseMethod(this, 'onStart'); if (this._currentTarget) { this.set_startValue(CommonToolkitScripts.getElementOpacity(this._currentTarget)); } } } $AA.FadeOutAnimation.registerClass('AjaxControlToolkit.Animation.FadeOutAnimation', $AA.FadeAnimation); $AA.registerAnimation('fadeOut', $AA.FadeOutAnimation); $AA.PulseAnimation = function(target, duration, fps, iterations, minimumOpacity, maximumOpacity, forceLayoutInIE) { $AA.PulseAnimation.initializeBase(this, [target, duration, fps, null, ((iterations !== undefined) ? iterations : 3)]); this._out = new $AA.FadeOutAnimation(target, duration, fps, minimumOpacity, maximumOpacity, forceLayoutInIE); this.add(this._out); this._in = new $AA.FadeInAnimation(target, duration, fps, minimumOpacity, maximumOpacity, forceLayoutInIE); this.add(this._in); } $AA.PulseAnimation.prototype = { get_minimumOpacity : function() { return this._out.get_minimumOpacity(); }, set_minimumOpacity : function(value) { value = this._getFloat(value); this._out.set_minimumOpacity(value); this._in.set_minimumOpacity(value); this.raisePropertyChanged('minimumOpacity'); }, get_maximumOpacity : function() { return this._out.get_maximumOpacity(); }, set_maximumOpacity : function(value) { value = this._getFloat(value); this._out.set_maximumOpacity(value); this._in.set_maximumOpacity(value); this.raisePropertyChanged('maximumOpacity'); }, get_forceLayoutInIE : function() { return this._out.get_forceLayoutInIE(); }, set_forceLayoutInIE : function(value) { value = this._getBoolean(value); this._out.set_forceLayoutInIE(value); this._in.set_forceLayoutInIE(value); this.raisePropertyChanged('forceLayoutInIE'); }, set_duration : function(value) { value = this._getFloat(value); $AA.PulseAnimation.callBaseMethod(this, 'set_duration', [value]); this._in.set_duration(value); this._out.set_duration(value); }, set_fps : function(value) { value = this._getInteger(value); $AA.PulseAnimation.callBaseMethod(this, 'set_fps', [value]); this._in.set_fps(value); this._out.set_fps(value); } } $AA.PulseAnimation.registerClass('AjaxControlToolkit.Animation.PulseAnimation', $AA.SequenceAnimation); $AA.registerAnimation('pulse', $AA.PulseAnimation); $AA.PropertyAnimation = function(target, duration, fps, property, propertyKey) { $AA.PropertyAnimation.initializeBase(this, [target, duration, fps]); this._property = property; this._propertyKey = propertyKey; this._currentTarget = null; } $AA.PropertyAnimation.prototype = { onStart : function() { $AA.PropertyAnimation.callBaseMethod(this, 'onStart'); this._currentTarget = this.get_target(); }, setValue : function(value) { var element = this._currentTarget; if (element && this._property && this._property.length > 0) { if (this._propertyKey && this._propertyKey.length > 0 && element[this._property]) { element[this._property][this._propertyKey] = value; } else { element[this._property] = value; } } }, getValue : function() { var element = this.get_target(); if (element && this._property && this._property.length > 0) { var property = element[this._property]; if (property) { if (this._propertyKey && this._propertyKey.length > 0) { return property[this._propertyKey]; } return property; } } return null; }, get_property : function() { return this._property; }, set_property : function(value) { if (this._property != value) { this._property = value; this.raisePropertyChanged('property'); } }, get_propertyKey : function() { return this._propertyKey; }, set_propertyKey : function(value) { if (this._propertyKey != value) { this._propertyKey = value; this.raisePropertyChanged('propertyKey'); } } } $AA.PropertyAnimation.registerClass('AjaxControlToolkit.Animation.PropertyAnimation', $AA.Animation); $AA.registerAnimation('property', $AA.PropertyAnimation); $AA.DiscreteAnimation = function(target, duration, fps, property, propertyKey, values) { $AA.DiscreteAnimation.initializeBase(this, [target, duration, fps, property, propertyKey]); // Values to assign to the property this._values = (values && values.length) ? values : []; } $AA.DiscreteAnimation.prototype = { getAnimatedValue : function(percentage) { var index = Math.floor(this.interpolate(0, this._values.length - 1, percentage)); return this._values[index]; }, get_values : function() { return this._values; }, set_values : function(value) { if (this._values != value) { this._values = value; this.raisePropertyChanged('values'); } } } $AA.DiscreteAnimation.registerClass('AjaxControlToolkit.Animation.DiscreteAnimation', $AA.PropertyAnimation); $AA.registerAnimation('discrete', $AA.DiscreteAnimation); $AA.InterpolatedAnimation = function(target, duration, fps, property, propertyKey, startValue, endValue) { $AA.InterpolatedAnimation.initializeBase(this, [target, duration, fps, ((property !== undefined) ? property : 'style'), propertyKey]); this._startValue = startValue; this._endValue = endValue; } $AA.InterpolatedAnimation.prototype = { get_startValue : function() { return this._startValue; }, set_startValue : function(value) { value = this._getFloat(value); if (this._startValue != value) { this._startValue = value; this.raisePropertyChanged('startValue'); } }, get_endValue : function() { return this._endValue; }, set_endValue : function(value) { value = this._getFloat(value); if (this._endValue != value) { this._endValue = value; this.raisePropertyChanged('endValue'); } } } $AA.InterpolatedAnimation.registerClass('AjaxControlToolkit.Animation.InterpolatedAnimation', $AA.PropertyAnimation); $AA.registerAnimation('interpolated', $AA.InterpolatedAnimation); $AA.ColorAnimation = function(target, duration, fps, property, propertyKey, startValue, endValue) { $AA.ColorAnimation.initializeBase(this, [target, duration, fps, property, propertyKey, startValue, endValue]); this._start = null; this._end = null; this._interpolateRed = false; this._interpolateGreen = false; this._interpolateBlue = false; } $AA.ColorAnimation.prototype = { onStart : function() { $AA.ColorAnimation.callBaseMethod(this, 'onStart'); this._start = $AA.ColorAnimation.getRGB(this.get_startValue()); this._end = $AA.ColorAnimation.getRGB(this.get_endValue()); this._interpolateRed = (this._start.Red != this._end.Red); this._interpolateGreen = (this._start.Green != this._end.Green); this._interpolateBlue = (this._start.Blue != this._end.Blue); }, getAnimatedValue : function(percentage) { var r = this._start.Red; var g = this._start.Green; var b = this._start.Blue; if (this._interpolateRed) r = Math.round(this.interpolate(r, this._end.Red, percentage)); if (this._interpolateGreen) g = Math.round(this.interpolate(g, this._end.Green, percentage)); if (this._interpolateBlue) b = Math.round(this.interpolate(b, this._end.Blue, percentage)); return $AA.ColorAnimation.toColor(r, g, b); }, set_startValue : function(value) { if (this._startValue != value) { this._startValue = value; this.raisePropertyChanged('startValue'); } }, set_endValue : function(value) { if (this._endValue != value) { this._endValue = value; this.raisePropertyChanged('endValue'); } } } $AA.ColorAnimation.getRGB = function(color) { if (!color || color.length != 7) { throw String.format(AjaxControlToolkit.Resources.Animation_InvalidColor, color); } return { 'Red': parseInt(color.substr(1,2), 16), 'Green': parseInt(color.substr(3,2), 16), 'Blue': parseInt(color.substr(5,2), 16) }; } $AA.ColorAnimation.toColor = function(red, green, blue) { var r = red.toString(16); var g = green.toString(16); var b = blue.toString(16); if (r.length == 1) r = '0' + r; if (g.length == 1) g = '0' + g; if (b.length == 1) b = '0' + b; return '#' + r + g + b; } $AA.ColorAnimation.registerClass('AjaxControlToolkit.Animation.ColorAnimation', $AA.InterpolatedAnimation); $AA.registerAnimation('color', $AA.ColorAnimation); $AA.LengthAnimation = function(target, duration, fps, property, propertyKey, startValue, endValue, unit) { $AA.LengthAnimation.initializeBase(this, [target, duration, fps, property, propertyKey, startValue, endValue]); this._unit = (unit != null) ? unit : 'px'; } $AA.LengthAnimation.prototype = { getAnimatedValue : function(percentage) { var value = this.interpolate(this.get_startValue(), this.get_endValue(), percentage); return Math.round(value) + this._unit; }, get_unit : function() { return this._unit; }, set_unit : function(value) { if (this._unit != value) { this._unit = value; this.raisePropertyChanged('unit'); } } } $AA.LengthAnimation.registerClass('AjaxControlToolkit.Animation.LengthAnimation', $AA.InterpolatedAnimation); $AA.registerAnimation('length', $AA.LengthAnimation); $AA.MoveAnimation = function(target, duration, fps, horizontal, vertical, relative, unit) { $AA.MoveAnimation.initializeBase(this, [target, duration, fps, null]); this._horizontal = horizontal ? horizontal : 0; this._vertical = vertical ? vertical : 0; this._relative = (relative === undefined) ? true : relative; this._horizontalAnimation = new $AA.LengthAnimation(target, duration, fps, 'style', 'left', null, null, unit); this._verticalAnimation = new $AA.LengthAnimation(target, duration, fps, 'style', 'top', null, null, unit); this.add(this._verticalAnimation); this.add(this._horizontalAnimation); } $AA.MoveAnimation.prototype = { onStart : function() { $AA.MoveAnimation.callBaseMethod(this, 'onStart'); var element = this.get_target(); this._horizontalAnimation.set_startValue(element.offsetLeft); this._horizontalAnimation.set_endValue(this._relative ? element.offsetLeft + this._horizontal : this._horizontal); this._verticalAnimation.set_startValue(element.offsetTop); this._verticalAnimation.set_endValue(this._relative ? element.offsetTop + this._vertical : this._vertical); }, get_horizontal : function() { return this._horizontal; }, set_horizontal : function(value) { value = this._getFloat(value); if (this._horizontal != value) { this._horizontal = value; this.raisePropertyChanged('horizontal'); } }, get_vertical : function() { return this._vertical; }, set_vertical : function(value) { value = this._getFloat(value); if (this._vertical != value) { this._vertical = value; this.raisePropertyChanged('vertical'); } }, get_relative : function() { return this._relative; }, set_relative : function(value) { value = this._getBoolean(value); if (this._relative != value) { this._relative = value; this.raisePropertyChanged('relative'); } }, get_unit : function() { this._horizontalAnimation.get_unit(); }, set_unit : function(value) { var unit = this._horizontalAnimation.get_unit(); if (unit != value) { this._horizontalAnimation.set_unit(value); this._verticalAnimation.set_unit(value); this.raisePropertyChanged('unit'); } } } $AA.MoveAnimation.registerClass('AjaxControlToolkit.Animation.MoveAnimation', $AA.ParallelAnimation); $AA.registerAnimation('move', $AA.MoveAnimation); $AA.ResizeAnimation = function(target, duration, fps, width, height, unit) { $AA.ResizeAnimation.initializeBase(this, [target, duration, fps, null]); this._width = width; this._height = height; this._horizontalAnimation = new $AA.LengthAnimation(target, duration, fps, 'style', 'width', null, null, unit); this._verticalAnimation = new $AA.LengthAnimation(target, duration, fps, 'style', 'height', null, null, unit); this.add(this._horizontalAnimation); this.add(this._verticalAnimation); } $AA.ResizeAnimation.prototype = { onStart : function() { $AA.ResizeAnimation.callBaseMethod(this, 'onStart'); var element = this.get_target(); this._horizontalAnimation.set_startValue(element.offsetWidth); this._verticalAnimation.set_startValue(element.offsetHeight); this._horizontalAnimation.set_endValue((this._width !== null && this._width !== undefined) ? this._width : element.offsetWidth); this._verticalAnimation.set_endValue((this._height !== null && this._height !== undefined) ? this._height : element.offsetHeight); }, get_width : function() { return this._width; }, set_width : function(value) { value = this._getFloat(value); if (this._width != value) { this._width = value; this.raisePropertyChanged('width'); } }, get_height : function() { return this._height; }, set_height : function(value) { value = this._getFloat(value); if (this._height != value) { this._height = value; this.raisePropertyChanged('height'); } }, get_unit : function() { this._horizontalAnimation.get_unit(); }, set_unit : function(value) { var unit = this._horizontalAnimation.get_unit(); if (unit != value) { this._horizontalAnimation.set_unit(value); this._verticalAnimation.set_unit(value); this.raisePropertyChanged('unit'); } } } $AA.ResizeAnimation.registerClass('AjaxControlToolkit.Animation.ResizeAnimation', $AA.ParallelAnimation); $AA.registerAnimation('resize', $AA.ResizeAnimation); $AA.ScaleAnimation = function(target, duration, fps, scaleFactor, unit, center, scaleFont, fontUnit) { $AA.ScaleAnimation.initializeBase(this, [target, duration, fps]); this._scaleFactor = (scaleFactor !== undefined) ? scaleFactor : 1; this._unit = (unit !== undefined) ? unit : 'px'; this._center = center; this._scaleFont = scaleFont; this._fontUnit = (fontUnit !== undefined) ? fontUnit : 'pt'; this._element = null; this._initialHeight = null; this._initialWidth = null; this._initialTop = null; this._initialLeft = null; this._initialFontSize = null; } $AA.ScaleAnimation.prototype = { getAnimatedValue : function(percentage) { return this.interpolate(1.0, this._scaleFactor, percentage); }, onStart : function() { $AA.ScaleAnimation.callBaseMethod(this, 'onStart'); this._element = this.get_target(); if (this._element) { this._initialHeight = this._element.offsetHeight; this._initialWidth = this._element.offsetWidth; if (this._center) { this._initialTop = this._element.offsetTop; this._initialLeft = this._element.offsetLeft; } if (this._scaleFont) { // Note: we're assuming this is in the same units as fontUnit this._initialFontSize = parseFloat( CommonToolkitScripts.getCurrentStyle(this._element, 'fontSize')); } } }, setValue : function(scale) { if (this._element) { var width = Math.round(this._initialWidth * scale); var height = Math.round(this._initialHeight * scale); this._element.style.width = width + this._unit; this._element.style.height = height + this._unit; if (this._center) { this._element.style.top = (this._initialTop + Math.round((this._initialHeight - height) / 2)) + this._unit; this._element.style.left = (this._initialLeft + Math.round((this._initialWidth - width) / 2)) + this._unit; } if (this._scaleFont) { var size = this._initialFontSize * scale; if (this._fontUnit == 'px' || this._fontUnit == 'pt') { size = Math.round(size); } this._element.style.fontSize = size + this._fontUnit; } } }, onEnd : function() { this._element = null; this._initialHeight = null; this._initialWidth = null; this._initialTop = null; this._initialLeft = null; this._initialFontSize = null; $AA.ScaleAnimation.callBaseMethod(this, 'onEnd'); }, get_scaleFactor : function() { return this._scaleFactor; }, set_scaleFactor : function(value) { value = this._getFloat(value); if (this._scaleFactor != value) { this._scaleFactor = value; this.raisePropertyChanged('scaleFactor'); } }, get_unit : function() { return this._unit; }, set_unit : function(value) { if (this._unit != value) { this._unit = value; this.raisePropertyChanged('unit'); } }, get_center : function() { return this._center; }, set_center : function(value) { value = this._getBoolean(value); if (this._center != value) { this._center = value; this.raisePropertyChanged('center'); } }, get_scaleFont : function() { return this._scaleFont; }, set_scaleFont : function(value) { value = this._getBoolean(value); if (this._scaleFont != value) { this._scaleFont = value; this.raisePropertyChanged('scaleFont'); } }, get_fontUnit : function() { return this._fontUnit; }, set_fontUnit : function(value) { if (this._fontUnit != value) { this._fontUnit = value; this.raisePropertyChanged('fontUnit'); } } } $AA.ScaleAnimation.registerClass('AjaxControlToolkit.Animation.ScaleAnimation', $AA.Animation); $AA.registerAnimation('scale', $AA.ScaleAnimation); $AA.Action = function(target, duration, fps) { $AA.Action.initializeBase(this, [target, duration, fps]); if (duration === undefined) { this.set_duration(0); } } $AA.Action.prototype = { onEnd : function() { this.doAction(); $AA.Action.callBaseMethod(this, 'onEnd'); }, doAction : function() { throw Error.notImplemented(); }, getAnimatedValue : function() { }, setValue : function() { } } $AA.Action.registerClass('AjaxControlToolkit.Animation.Action', $AA.Animation); $AA.registerAnimation('action', $AA.Action); $AA.EnableAction = function(target, duration, fps, enabled) { $AA.EnableAction.initializeBase(this, [target, duration, fps]); this._enabled = (enabled !== undefined) ? enabled : true; } $AA.EnableAction.prototype = { doAction : function() { var element = this.get_target(); if (element) { element.disabled = !this._enabled; } }, get_enabled : function() { return this._enabled; }, set_enabled : function(value) { value = this._getBoolean(value); if (this._enabled != value) { this._enabled = value; this.raisePropertyChanged('enabled'); } } } $AA.EnableAction.registerClass('AjaxControlToolkit.Animation.EnableAction', $AA.Action); $AA.registerAnimation('enableAction', $AA.EnableAction); $AA.HideAction = function(target, duration, fps) { $AA.HideAction.initializeBase(this, [target, duration, fps]); } $AA.HideAction.prototype = { doAction : function() { var element = this.get_target(); if (element) { element.style.display = 'none'; } } } $AA.HideAction.registerClass('AjaxControlToolkit.Animation.HideAction', $AA.Action); $AA.registerAnimation('hideAction', $AA.HideAction); $AA.StyleAction = function(target, duration, fps, attribute, value) { $AA.StyleAction.initializeBase(this, [target, duration, fps]); this._attribute = attribute; this._value = value; } $AA.StyleAction.prototype = { doAction : function() { var element = this.get_target(); if (element) { element.style[this._attribute] = this._value; } }, get_attribute : function() { return this._attribute; }, set_attribute : function(value) { if (this._attribute != value) { this._attribute = value; this.raisePropertyChanged('attribute'); } }, get_value : function() { return this._value; }, set_value : function(value) { if (this._value != value) { this._value = value; this.raisePropertyChanged('value'); } } } $AA.StyleAction.registerClass('AjaxControlToolkit.Animation.StyleAction', $AA.Action); $AA.registerAnimation('styleAction', $AA.StyleAction); $AA.OpacityAction = function(target, duration, fps, opacity) { $AA.OpacityAction.initializeBase(this, [target, duration, fps]); this._opacity = opacity; } $AA.OpacityAction.prototype = { doAction : function() { var element = this.get_target(); if (element) { CommonToolkitScripts.setElementOpacity(element, this._opacity); } }, get_opacity : function() { return this._opacity; }, set_opacity : function(value) { value = this._getFloat(value); if (this._opacity != value) { this._opacity = value; this.raisePropertyChanged('opacity'); } } } $AA.OpacityAction.registerClass('AjaxControlToolkit.Animation.OpacityAction', $AA.Action); $AA.registerAnimation('opacityAction', $AA.OpacityAction); $AA.ScriptAction = function(target, duration, fps, script) { $AA.ScriptAction.initializeBase(this, [target, duration, fps]); this._script = script; } $AA.ScriptAction.prototype = { doAction : function() { try { eval(this._script); } catch (ex) { } }, get_script : function() { return this._script; }, set_script : function(value) { if (this._script != value) { this._script = value; this.raisePropertyChanged('script'); } } } $AA.ScriptAction.registerClass('AjaxControlToolkit.Animation.ScriptAction', $AA.Action); $AA.registerAnimation('scriptAction', $AA.ScriptAction); if(typeof(Sys)!=='undefined')Sys.Application.notifyScriptLoaded();