Index: openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/animation/Animation.js =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/animation/Attic/Animation.js,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/animation/Animation.js 7 Nov 2006 02:38:01 -0000 1.1 @@ -0,0 +1,245 @@ +/* + Copyright (c) 2004-2006, The Dojo Foundation + All Rights Reserved. + + Licensed under the Academic Free License version 2.1 or above OR the + modified BSD license. For more information on Dojo licensing, see: + + http://dojotoolkit.org/community/licensing.shtml +*/ + +dojo.provide("dojo.animation.Animation"); +dojo.require("dojo.animation.AnimationEvent"); + +dojo.require("dojo.lang.func"); +dojo.require("dojo.math"); +dojo.require("dojo.math.curves"); + +dojo.deprecated("dojo.animation.Animation is slated for removal in 0.5; use dojo.lfx.* instead.", "0.5"); + +/* +Animation package based off of Dan Pupius' work on Animations: +http://pupius.co.uk/js/Toolkit.Drawing.js +*/ + +dojo.animation.Animation = function(/*dojo.math.curves.* */ curve, /*int*/ duration, /*Decimal?*/ accel, /*int?*/ repeatCount, /*int?*/ rate) { + // summary: Animation object iterates a set of numbers over a curve for a given amount of time, calling 'onAnimate' at each step. + // curve: Curve to animate over. + // duration: Duration of the animation, in milliseconds. + // accel: Either an integer or curve representing amount of acceleration. (?) Default is linear acceleration. + // repeatCount: Number of times to repeat the animation. Default is 0. + // rate: Time between animation steps, in milliseconds. Default is 25. + // description: Calls the following events: "onBegin", "onAnimate", "onEnd", "onPlay", "onPause", "onStop" + // If the animation implements a "handler" function, that will be called before each event is called. + + if(dojo.lang.isArray(curve)) { + // curve: Array + // id: i + curve = new dojo.math.curves.Line(curve[0], curve[1]); + } + this.curve = curve; + this.duration = duration; + this.repeatCount = repeatCount || 0; + this.rate = rate || 25; + if(accel) { + // accel: Decimal + // id: j + if(dojo.lang.isFunction(accel.getValue)) { + // accel: dojo.math.curves.CatmullRom + // id: k + this.accel = accel; + } else { + var i = 0.35*accel+0.5; // 0.15 <= i <= 0.85 + this.accel = new dojo.math.curves.CatmullRom([[0], [i], [1]], 0.45); + } + } +} + +dojo.lang.extend(dojo.animation.Animation, { + // public properties + curve: null, + duration: 0, + repeatCount: 0, + accel: null, + + // events + onBegin: null, + onAnimate: null, + onEnd: null, + onPlay: null, + onPause: null, + onStop: null, + handler: null, + + // "private" properties + _animSequence: null, + _startTime: null, + _endTime: null, + _lastFrame: null, + _timer: null, + _percent: 0, + _active: false, + _paused: false, + _startRepeatCount: 0, + + // public methods + play: function(/*Boolean?*/ gotoStart) { + // summary: Play the animation. + // goToStart: If true, will restart the animation from the beginning. + // Otherwise, starts from current play counter. + // description: Sends an "onPlay" event to any observers. + // Also sends an "onBegin" event if starting from the beginning. + if( gotoStart ) { + clearTimeout(this._timer); + this._active = false; + this._paused = false; + this._percent = 0; + } else if( this._active && !this._paused ) { + return; + } + + this._startTime = new Date().valueOf(); + if( this._paused ) { + this._startTime -= (this.duration * this._percent / 100); + } + this._endTime = this._startTime + this.duration; + this._lastFrame = this._startTime; + + var e = new dojo.animation.AnimationEvent(this, null, this.curve.getValue(this._percent), + this._startTime, this._startTime, this._endTime, this.duration, this._percent, 0); + + this._active = true; + this._paused = false; + + if( this._percent == 0 ) { + if(!this._startRepeatCount) { + this._startRepeatCount = this.repeatCount; + } + e.type = "begin"; + if(typeof this.handler == "function") { this.handler(e); } + if(typeof this.onBegin == "function") { this.onBegin(e); } + } + + e.type = "play"; + if(typeof this.handler == "function") { this.handler(e); } + if(typeof this.onPlay == "function") { this.onPlay(e); } + + if(this._animSequence) { this._animSequence._setCurrent(this); } + + this._cycle(); + }, + + pause: function() { + // summary: Temporarily stop the animation, leaving the play counter at the current location. + // Resume later with sequence.play() + // description: Sends an "onPause" AnimationEvent to any observers. + clearTimeout(this._timer); + if( !this._active ) { return; } + this._paused = true; + var e = new dojo.animation.AnimationEvent(this, "pause", this.curve.getValue(this._percent), + this._startTime, new Date().valueOf(), this._endTime, this.duration, this._percent, 0); + if(typeof this.handler == "function") { this.handler(e); } + if(typeof this.onPause == "function") { this.onPause(e); } + }, + + playPause: function() { + // summary: Toggle between play and paused states. + if( !this._active || this._paused ) { + this.play(); + } else { + this.pause(); + } + }, + + gotoPercent: function(/*int*/ pct, /*Boolean*/ andPlay) { + // summary: Set the play counter at a certain point in the animation. + // pct: Point to set the play counter to, expressed as a percentage (0 to 100). + // andPlay: If true, will start the animation at the counter automatically. + clearTimeout(this._timer); + this._active = true; + this._paused = true; + this._percent = pct; + if( andPlay ) { this.play(); } + }, + + stop: function(/*Boolean?*/ gotoEnd) { + // summary: Stop the animation. + // gotoEnd: If true, will advance play counter to the end before sending the event. + // description: Sends an "onStop" AnimationEvent to any observers. + clearTimeout(this._timer); + var step = this._percent / 100; + if( gotoEnd ) { + step = 1; + } + var e = new dojo.animation.AnimationEvent(this, "stop", this.curve.getValue(step), + this._startTime, new Date().valueOf(), this._endTime, this.duration, this._percent); + if(typeof this.handler == "function") { this.handler(e); } + if(typeof this.onStop == "function") { this.onStop(e); } + this._active = false; + this._paused = false; + }, + + status: function() { + // summary: Return the status of the animation. + // description: Returns one of "playing", "paused" or "stopped". + if( this._active ) { + return this._paused ? "paused" : "playing"; /* String */ + } else { + return "stopped"; /* String */ + } + }, + + // "private" methods + _cycle: function() { + // summary: Perform once 'cycle' or step of the animation. + clearTimeout(this._timer); + if( this._active ) { + var curr = new Date().valueOf(); + var step = (curr - this._startTime) / (this._endTime - this._startTime); + var fps = 1000 / (curr - this._lastFrame); + this._lastFrame = curr; + + if( step >= 1 ) { + step = 1; + this._percent = 100; + } else { + this._percent = step * 100; + } + + // Perform accelleration + if(this.accel && this.accel.getValue) { + step = this.accel.getValue(step); + } + + var e = new dojo.animation.AnimationEvent(this, "animate", this.curve.getValue(step), + this._startTime, curr, this._endTime, this.duration, this._percent, Math.round(fps)); + + if(typeof this.handler == "function") { this.handler(e); } + if(typeof this.onAnimate == "function") { this.onAnimate(e); } + + if( step < 1 ) { + this._timer = setTimeout(dojo.lang.hitch(this, "_cycle"), this.rate); + } else { + e.type = "end"; + this._active = false; + if(typeof this.handler == "function") { this.handler(e); } + if(typeof this.onEnd == "function") { this.onEnd(e); } + + if( this.repeatCount > 0 ) { + this.repeatCount--; + this.play(true); + } else if( this.repeatCount == -1 ) { + this.play(true); + } else { + if(this._startRepeatCount) { + this.repeatCount = this._startRepeatCount; + this._startRepeatCount = 0; + } + if( this._animSequence ) { + this._animSequence._playNext(); + } + } + } + } + } +}); Index: openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/animation/AnimationEvent.js =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/animation/Attic/AnimationEvent.js,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/animation/AnimationEvent.js 7 Nov 2006 02:38:01 -0000 1.1 @@ -0,0 +1,64 @@ +/* + Copyright (c) 2004-2006, The Dojo Foundation + All Rights Reserved. + + Licensed under the Academic Free License version 2.1 or above OR the + modified BSD license. For more information on Dojo licensing, see: + + http://dojotoolkit.org/community/licensing.shtml +*/ + +dojo.provide("dojo.animation.AnimationEvent"); +dojo.require("dojo.lang.common"); + +dojo.deprecated("dojo.animation.AnimationEvent is slated for removal in 0.5; use dojo.lfx.* instead.", "0.5"); + +dojo.animation.AnimationEvent = function( + /*dojo.animation.Animation*/ animation, + /*String*/type, + /*int[] */ coords, + /*int*/ startTime, + /*int*/ currentTime, + /*int*/ endTime, + /*int*/ duration, + /*int*/ percent, + /*int?*/ fps) { + // summary: Event sent at various points during an Animation. + // animation: Animation throwing the event. + // type: One of: "animate", "begin", "end", "play", "pause" or "stop". + // coords: Current coordinates of the animation. + // startTime: Time the animation was started, as milliseconds. + // currentTime: Time the event was thrown, as milliseconds. + // endTime: Time the animation is expected to complete, as milliseconds. + // duration: Duration of the animation, in milliseconds. + // percent: Percent of the animation that has completed, between 0 and 100. + // fps: Frames currently shown per second. (Only sent for "animate" event). + // description: The AnimationEvent has public properties of the same name as + // all constructor arguments, plus "x", "y" and "z". + + this.type = type; // "animate", "begin", "end", "play", "pause", "stop" + this.animation = animation; + + this.coords = coords; + this.x = coords[0]; + this.y = coords[1]; + this.z = coords[2]; + + this.startTime = startTime; + this.currentTime = currentTime; + this.endTime = endTime; + + this.duration = duration; + this.percent = percent; + this.fps = fps; +}; +dojo.extend(dojo.animation.AnimationEvent, { + coordsAsInts: function() { + // summary: Coerce the coordinates into integers. + var cints = new Array(this.coords.length); + for(var i = 0; i < this.coords.length; i++) { + cints[i] = Math.round(this.coords[i]); + } + return cints; + } +}); Index: openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/animation/AnimationSequence.js =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/animation/Attic/AnimationSequence.js,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/animation/AnimationSequence.js 7 Nov 2006 02:38:01 -0000 1.1 @@ -0,0 +1,162 @@ +/* + Copyright (c) 2004-2006, The Dojo Foundation + All Rights Reserved. + + Licensed under the Academic Free License version 2.1 or above OR the + modified BSD license. For more information on Dojo licensing, see: + + http://dojotoolkit.org/community/licensing.shtml +*/ + +dojo.provide("dojo.animation.AnimationSequence"); +dojo.require("dojo.animation.AnimationEvent"); +dojo.require("dojo.animation.Animation"); + +dojo.deprecated("dojo.animation.AnimationSequence is slated for removal in 0.5; use dojo.lfx.* instead.", "0.5"); + +dojo.animation.AnimationSequence = function(/*int?*/ repeatCount){ + // summary: Sequence of Animations, played one after the other. + // repeatCount: Number of times to repeat the entire sequence. Default is 0 (play once only). + // description: Calls the following events: "onBegin", "onEnd", "onNext" + // If the animation implements a "handler" function, that will be called before each event is called. + this._anims = []; + this.repeatCount = repeatCount || 0; +} + +dojo.lang.extend(dojo.animation.AnimationSequence, { + repeatCount: 0, + + _anims: [], + _currAnim: -1, + + onBegin: null, + onEnd: null, + onNext: null, + handler: null, + + add: function() { + // summary: Add one or more Animations to the sequence. + // description: args: Animations (dojo.animation.Animation) to add to the sequence. + for(var i = 0; i < arguments.length; i++) { + this._anims.push(arguments[i]); + arguments[i]._animSequence = this; + } + }, + + remove: function(/*dojo.animation.Animation*/ anim) { + // summary: Remove one particular animation from the sequence. + // amim: Animation to remove. + for(var i = 0; i < this._anims.length; i++) { + if( this._anims[i] == anim ) { + this._anims[i]._animSequence = null; + this._anims.splice(i, 1); + break; + } + } + }, + + removeAll: function() { + // summary: Remove all animations from the sequence. + for(var i = 0; i < this._anims.length; i++) { + this._anims[i]._animSequence = null; + } + this._anims = []; + this._currAnim = -1; + }, + + clear: function() { + // summary: Remove all animations from the sequence. + this.removeAll(); + }, + + play: function(/*Boolean?*/ gotoStart) { + // summary: Play the animation sequence. + // gotoStart: If true, will start at the beginning of the first sequence. + // Otherwise, starts at the current play counter of the current animation. + // description: Sends an "onBegin" event to any observers. + if( this._anims.length == 0 ) { return; } + if( gotoStart || !this._anims[this._currAnim] ) { + this._currAnim = 0; + } + if( this._anims[this._currAnim] ) { + if( this._currAnim == 0 ) { + var e = {type: "begin", animation: this._anims[this._currAnim]}; + if(typeof this.handler == "function") { this.handler(e); } + if(typeof this.onBegin == "function") { this.onBegin(e); } + } + this._anims[this._currAnim].play(gotoStart); + } + }, + + pause: function() { + // summary: temporarily stop the current animation. Resume later with sequence.play() + if( this._anims[this._currAnim] ) { + this._anims[this._currAnim].pause(); + } + }, + + playPause: function() { + // summary: Toggle between play and paused states. + if( this._anims.length == 0 ) { return; } + if( this._currAnim == -1 ) { this._currAnim = 0; } + if( this._anims[this._currAnim] ) { + this._anims[this._currAnim].playPause(); + } + }, + + stop: function() { + // summary: Stop the current animation. + if( this._anims[this._currAnim] ) { + this._anims[this._currAnim].stop(); + } + }, + + status: function() { + // summary: Return the status of the current animation. + // description: Returns one of "playing", "paused" or "stopped". + if( this._anims[this._currAnim] ) { + return this._anims[this._currAnim].status(); + } else { + return "stopped"; + } + }, + + _setCurrent: function(/*dojo.animation.Animation*/ anim) { + // summary: Set the current animation. + // anim: Animation to make current, must have already been added to the sequence. + for(var i = 0; i < this._anims.length; i++) { + if( this._anims[i] == anim ) { + this._currAnim = i; + break; + } + } + }, + + _playNext: function() { + // summary: Play the next animation in the sequence. + // description: Sends an "onNext" event to any observers. + // Also sends "onEnd" if the last animation is finished. + if( this._currAnim == -1 || this._anims.length == 0 ) { return; } + this._currAnim++; + if( this._anims[this._currAnim] ) { + var e = {type: "next", animation: this._anims[this._currAnim]}; + if(typeof this.handler == "function") { this.handler(e); } + if(typeof this.onNext == "function") { this.onNext(e); } + this._anims[this._currAnim].play(true); + } else { + var e = {type: "end", animation: this._anims[this._anims.length-1]}; + if(typeof this.handler == "function") { this.handler(e); } + if(typeof this.onEnd == "function") { this.onEnd(e); } + if(this.repeatCount > 0) { + this._currAnim = 0; + this.repeatCount--; + this._anims[this._currAnim].play(true); + } else if(this.repeatCount == -1) { + this._currAnim = 0; + this._anims[this._currAnim].play(true); + } else { + this._currAnim = -1; + } + } + } +}); Index: openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/animation/Timer.js =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/animation/Attic/Timer.js,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/animation/Timer.js 7 Nov 2006 02:38:01 -0000 1.1 @@ -0,0 +1,16 @@ +/* + Copyright (c) 2004-2006, The Dojo Foundation + All Rights Reserved. + + Licensed under the Academic Free License version 2.1 or above OR the + modified BSD license. For more information on Dojo licensing, see: + + http://dojotoolkit.org/community/licensing.shtml +*/ + +dojo.provide("dojo.animation.Timer"); +dojo.require("dojo.lang.timing.Timer"); + +dojo.deprecated("dojo.animation.Timer is now dojo.lang.timing.Timer", "0.5"); + +dojo.animation.Timer = dojo.lang.timing.Timer; Index: openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/animation/__package__.js =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/animation/Attic/__package__.js,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/animation/__package__.js 7 Nov 2006 02:38:01 -0000 1.1 @@ -0,0 +1,20 @@ +/* + Copyright (c) 2004-2006, The Dojo Foundation + All Rights Reserved. + + Licensed under the Academic Free License version 2.1 or above OR the + modified BSD license. For more information on Dojo licensing, see: + + http://dojotoolkit.org/community/licensing.shtml +*/ + +dojo.kwCompoundRequire({ + common: [ + "dojo.animation.AnimationEvent", + "dojo.animation.Animation", + "dojo.animation.AnimationSequence" + ] +}); +dojo.provide("dojo.animation.*"); + +dojo.deprecated("dojo.Animation.* is slated for removal in 0.5; use dojo.lfx.* instead.", "0.5"); Index: openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/cal/iCalendar.js =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/cal/Attic/iCalendar.js,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/cal/iCalendar.js 7 Nov 2006 02:38:01 -0000 1.1 @@ -0,0 +1,815 @@ +/* + Copyright (c) 2004-2006, The Dojo Foundation + All Rights Reserved. + + Licensed under the Academic Free License version 2.1 or above OR the + modified BSD license. For more information on Dojo licensing, see: + + http://dojotoolkit.org/community/licensing.shtml +*/ + +dojo.provide("dojo.cal.iCalendar"); +dojo.require("dojo.lang.common"); +dojo.require("dojo.cal.textDirectory"); +dojo.require("dojo.date.common"); +dojo.require("dojo.date.serialize"); + + +dojo.cal.iCalendar.fromText = function (/* string */text) { + // summary + // Parse text of an iCalendar and return an array of iCalendar objects + + var properties = dojo.cal.textDirectory.tokenise(text); + var calendars = []; + + //dojo.debug("Parsing iCal String"); + for (var i = 0, begun = false; i < properties.length; i++) { + var prop = properties[i]; + if (!begun) { + if (prop.name == 'BEGIN' && prop.value == 'VCALENDAR') { + begun = true; + var calbody = []; + } + } else if (prop.name == 'END' && prop.value == 'VCALENDAR') { + calendars.push(new dojo.cal.iCalendar.VCalendar(calbody)); + begun = false; + } else { + calbody.push(prop); + } + } + return /* array */calendars; +} + + +dojo.cal.iCalendar.Component = function (/* string */ body ) { + // summary + // A component is the basic container of all this stuff. + + if (!this.name) { + this.name = "COMPONENT" + } + + this.properties = []; + this.components = []; + + if (body) { + for (var i = 0, context = ''; i < body.length; i++) { + if (context == '') { + if (body[i].name == 'BEGIN') { + context = body[i].value; + var childprops = []; + } else { + this.addProperty(new dojo.cal.iCalendar.Property(body[i])); + } + } else if (body[i].name == 'END' && body[i].value == context) { + if (context=="VEVENT") { + this.addComponent(new dojo.cal.iCalendar.VEvent(childprops)); + } else if (context=="VTIMEZONE") { + this.addComponent(new dojo.cal.iCalendar.VTimeZone(childprops)); + } else if (context=="VTODO") { + this.addComponent(new dojo.cal.iCalendar.VTodo(childprops)); + } else if (context=="VJOURNAL") { + this.addComponent(new dojo.cal.iCalendar.VJournal(childprops)); + } else if (context=="VFREEBUSY") { + this.addComponent(new dojo.cal.iCalendar.VFreeBusy(childprops)); + } else if (context=="STANDARD") { + this.addComponent(new dojo.cal.iCalendar.Standard(childprops)); + } else if (context=="DAYLIGHT") { + this.addComponent(new dojo.cal.iCalendar.Daylight(childprops)); + } else if (context=="VALARM") { + this.addComponent(new dojo.cal.iCalendar.VAlarm(childprops)); + }else { + dojo.unimplemented("dojo.cal.iCalendar." + context); + } + context = ''; + } else { + childprops.push(body[i]); + } + } + + if (this._ValidProperties) { + this.postCreate(); + } + } +} + +dojo.extend(dojo.cal.iCalendar.Component, { + + addProperty: function (prop) { + // summary + // push a new property onto a component. + this.properties.push(prop); + this[prop.name.toLowerCase()] = prop; + }, + + addComponent: function (prop) { + // summary + // add a component to this components list of children. + this.components.push(prop); + }, + + postCreate: function() { + for (var x=0; x 0) { + return events; + } + + return null; + } +}); + +/* + * STANDARD + */ + +var StandardProperties = [ + _P("dtstart", 1, true), _P("tzoffsetto", 1, true), _P("tzoffsetfrom", 1, true), + _P("comment"), _P("rdate"), _P("rrule"), _P("tzname") +]; + + +dojo.cal.iCalendar.Standard = function (/* string */ body) { + // summary + // STANDARD Component + + this.name = "STANDARD"; + this._ValidProperties = StandardProperties; + dojo.cal.iCalendar.Component.call(this, body); +} + +dojo.inherits(dojo.cal.iCalendar.Standard, dojo.cal.iCalendar.Component); + +/* + * DAYLIGHT + */ + +var DaylightProperties = [ + _P("dtstart", 1, true), _P("tzoffsetto", 1, true), _P("tzoffsetfrom", 1, true), + _P("comment"), _P("rdate"), _P("rrule"), _P("tzname") +]; + +dojo.cal.iCalendar.Daylight = function (/* string */ body) { + // summary + // Daylight Component + this.name = "DAYLIGHT"; + this._ValidProperties = DaylightProperties; + dojo.cal.iCalendar.Component.call(this, body); +} + +dojo.inherits(dojo.cal.iCalendar.Daylight, dojo.cal.iCalendar.Component); + +/* + * VEVENT + */ + +var VEventProperties = [ + // these can occur once only + _P("class", 1), _P("created", 1), _P("description", 1), _P("dtstart", 1), + _P("geo", 1), _P("last-mod", 1), _P("location", 1), _P("organizer", 1), + _P("priority", 1), _P("dtstamp", 1), _P("seq", 1), _P("status", 1), + _P("summary", 1), _P("transp", 1), _P("uid", 1), _P("url", 1), _P("recurid", 1), + // these two are exclusive + [_P("dtend", 1), _P("duration", 1)], + // these can occur many times over + _P("attach"), _P("attendee"), _P("categories"), _P("comment"), _P("contact"), + _P("exdate"), _P("exrule"), _P("rstatus"), _P("related"), _P("resources"), + _P("rdate"), _P("rrule") +]; + +dojo.cal.iCalendar.VEvent = function (/* string */ body) { + // summary + // VEVENT Component + this._ValidProperties = VEventProperties; + this.name = "VEVENT"; + dojo.cal.iCalendar.Component.call(this, body); + this.recurring = false; + this.startDate = dojo.date.fromIso8601(this.dtstart.value); +} + +dojo.inherits(dojo.cal.iCalendar.VEvent, dojo.cal.iCalendar.Component); + +dojo.extend(dojo.cal.iCalendar.VEvent, { + getDates: function(until) { + var dtstart = this.getDate(); + + var recurranceSet = []; + var weekdays=["su","mo","tu","we","th","fr","sa"]; + var order = { + "daily": 1, "weekly": 2, "monthly": 3, "yearly": 4, + "byday": 1, "bymonthday": 1, "byweekno": 2, "bymonth": 3, "byyearday": 4}; + + // expand rrules into the recurrance + for (var x=0; x interval) { + interval = rrule.interval; + } + + var set = []; + var freqInt = order[freq]; + + if (rrule.until) { + var tmpUntil = dojo.date.fromIso8601(rrule.until); + } else { + var tmpUntil = until + } + + if (tmpUntil > until) { + tmpUntil = until + } + + + if (dtstart 1) { + var regex = "([+-]?)([0-9]{1,3})"; + for (var z=1; x 0) { + var regex = "([+-]?)([0-9]{1,3})"; + for (var z=0; z 0) { + var regex = "([+-]?)([0-9]{0,1}?)([A-Za-z]{1,2})"; + for (var z=0; z 0) { + var arr = this.name.split('.'); + this.group = arr[0]; + this.name = arr[1]; + } + + // don't do any parsing, leave to implementation + this.value = right; +} + + +// tokeniser, parses into an array of properties. +dojo.cal.textDirectory.tokenise = function (text) { + // normlize to one propterty per line and parse + var nText = dojo.string.normalizeNewlines(text,"\n"); + nText = nText.replace(/\n[ \t]/g, ''); + nText = nText.replace(/\x00/g, ''); + + var lines = nText.split("\n"); + var properties = [] + + for (var i = 0; i < lines.length; i++) { + if (dojo.string.trim(lines[i]) == '') { continue; } + var prop = new dojo.cal.textDirectory.Property(lines[i]); + properties.push(prop); + } + return properties; +} Index: openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/charting/svg/Axis.js =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/charting/svg/Attic/Axis.js,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/charting/svg/Axis.js 7 Nov 2006 02:38:02 -0000 1.1 @@ -0,0 +1,224 @@ +/* + Copyright (c) 2004-2006, The Dojo Foundation + All Rights Reserved. + + Licensed under the Academic Free License version 2.1 or above OR the + modified BSD license. For more information on Dojo licensing, see: + + http://dojotoolkit.org/community/licensing.shtml +*/ + +dojo.provide("dojo.charting.svg.Axis"); +dojo.require("dojo.lang.common"); + +dojo.extend(dojo.charting.Axis, { + renderLines: function( + /* dojo.charting.PlotArea */plotArea, + /* dojo.charting.Plot */plot, + /* string */plane + ){ + // summary + // Renders any reference lines for this axis. + if(this.nodes.lines){ + while(this.nodes.lines.childNodes.length > 0){ + this.nodes.lines.removeChild(this.nodes.lines.childNodes[0]); + } + if(this.nodes.lines.parentNode){ + this.nodes.lines.parentNode.removeChild(this.nodes.lines); + this.nodes.lines = null; + } + } + + var area = plotArea.getArea(); + var g = this.nodes.lines = document.createElementNS(dojo.svg.xmlns.svg, "g"); + g.setAttribute("id", this.getId()+"-lines"); + for(var i=0; i 0){ + this.nodes.ticks.removeChild(this.nodes.ticks.childNodes[0]); + } + if(this.nodes.ticks.parentNode){ + this.nodes.ticks.parentNode.removeChild(this.nodes.ticks); + this.nodes.ticks = null; + } + } + + var g = this.nodes.ticks = document.createElementNS(dojo.svg.xmlns.svg, "g"); + g.setAttribute("id", this.getId()+"-ticks"); + for(var i=0; i 0){ + this.nodes.labels.removeChild(this.nodes.labels.childNodes[0]); + } + if(this.nodes.labels.parentNode){ + this.nodes.labels.parentNode.removeChild(this.nodes.labels); + this.nodes.labels = null; + } + } + var g = this.nodes.labels = document.createElementNS(dojo.svg.xmlns.svg, "g"); + g.setAttribute("id", this.getId()+"-labels"); + + for(var i=0; i 0){ + x = xOrigin; + } + + var bar=document.createElementNS(dojo.svg.xmlns.svg, "rect"); + bar.setAttribute("fill", data[j][i].series.color); + bar.setAttribute("stroke-width", "0"); + bar.setAttribute("x", xA); + bar.setAttribute("y", y); + bar.setAttribute("width", w); + bar.setAttribute("height", barH); + bar.setAttribute("fill-opacity", "0.6"); + if(applyTo){ applyTo(bar, data[j][i].src); } + group.appendChild(bar); + } + } + return group; // SVGGElement + }, + Gantt: function( + /* dojo.charting.PlotArea */plotarea, + /* dojo.charting.Plot */plot, + /* object? */kwArgs, + /* function? */applyTo + ){ + // summary + // Plots a grouped set of Gantt bars + // Bindings: high/low + var area = plotarea.getArea(); + var group = document.createElementNS(dojo.svg.xmlns.svg, "g"); + + // precompile the data + var n = plot.series.length; // how many series + var data = []; + for(var i=0; i high){ + var t = high; + high = low; + low = t; + } + var x = plot.axisX.getCoord(low, plotarea, plot); + var w = plot.axisX.getCoord(high, plotarea, plot) - x; + var y = yStart + (barH*j); + + var bar=document.createElementNS(dojo.svg.xmlns.svg, "rect"); + bar.setAttribute("fill", data[j][i].series.color); + bar.setAttribute("stroke-width", "0"); + bar.setAttribute("x", x); + bar.setAttribute("y", y); + bar.setAttribute("width", w); + bar.setAttribute("height", barH); + bar.setAttribute("fill-opacity", "0.6"); + if(applyTo){ applyTo(bar, data[j][i].src); } + group.appendChild(bar); + } + } + return group; // SVGGElement + }, + StackedArea: function( + /* dojo.charting.PlotArea */plotarea, + /* dojo.charting.Plot */plot, + /* object? */kwArgs, + /* function? */applyTo + ){ + // summary + // Plots a set of stacked areas. + // Bindings: x/y + var area = plotarea.getArea(); + var group = document.createElementNS(dojo.svg.xmlns.svg, "g"); + + // precompile the data + var n = plot.series.length; // how many series + var data = []; + var totals = []; + + // we're assuming that all series for this plot has the name x assignment for now. + for(var i=0; i=0; i--){ + var path = document.createElementNS(dojo.svg.xmlns.svg, "path"); + path.setAttribute("fill", data[i][0].series.color); + path.setAttribute("fill-opacity", "0.4"); + path.setAttribute("stroke", data[i][0].series.color); + path.setAttribute("stroke-width" , "1"); + path.setAttribute("stroke-opacity", "0.85"); + + var cmd = []; + var r=3; + for(var j=0; j=0; j--){ + var x = plot.axisX.getCoord(values[j].x, plotarea, plot); + var y = plot.axisY.getCoord(values[j].y, plotarea, plot); + cmd.push("L"); + cmd.push(x+","+y); + } + } + path.setAttribute("d", cmd.join(" ")+ " Z"); + group.appendChild(path); + } + return group; // SVGGElement + }, + StackedCurvedArea: function( + /* dojo.charting.PlotArea */plotarea, + /* dojo.charting.Plot */plot, + /* object? */kwArgs, + /* function? */applyTo + ){ + // summary + // Plots a set of stacked areas, using a tensioning factor to soften points. + // Bindings: x/y + var tension = 3; + var area = plotarea.getArea(); + var group = document.createElementNS(dojo.svg.xmlns.svg, "g"); + + // precompile the data + var n = plot.series.length; // how many series + var data = []; + var totals = []; + + // we're assuming that all series for this plot has the name x assignment for now. + for(var i=0; i=0; i--){ + var path = document.createElementNS(dojo.svg.xmlns.svg, "path"); + path.setAttribute("fill", data[i][0].series.color); + path.setAttribute("fill-opacity", "0.4"); + path.setAttribute("stroke", data[i][0].series.color); + path.setAttribute("stroke-width" , "1"); + path.setAttribute("stroke-opacity", "0.85"); + + var cmd = []; + var r=3; + for(var j=0; j0){ + dx = x - plot.axisX.getCoord(values[j-1].x, plotarea, plot); + dy = plot.axisY.getCoord(values[j-1].y, plotarea, plot); + } + + if(j==0){ cmd.push("M"); } + else { + cmd.push("C"); + var cx = x-(tension-1) * (dx/tension); + cmd.push(cx + "," + dy); + cx = x - (dx/tension); + cmd.push(cx + "," + y); + } + cmd.push(x+","+y); + + // points on the line + var c=document.createElementNS(dojo.svg.xmlns.svg, "circle"); + c.setAttribute("cx",x); + c.setAttribute("cy",y); + c.setAttribute("r","3"); + c.setAttribute("fill", values[j].series.color); + c.setAttribute("fill-opacity", "0.6"); + c.setAttribute("stroke-width", "1"); + c.setAttribute("stroke-opacity", "0.85"); + group.appendChild(c); + if(applyTo){ applyTo(c, data[i].src); } + } + + // now run the path backwards from the previous series. + if(i == 0){ + cmd.push("L"); + cmd.push(x + "," + plot.axisY.getCoord(plot.axisX.origin, plotarea, plot)); + cmd.push("L"); + cmd.push(plot.axisX.getCoord(data[0][0].x, plotarea, plot) + "," + plot.axisY.getCoord(plot.axisX.origin, plotarea, plot)); + cmd.push("Z"); + } else { + var values = data[i-1]; + cmd.push("L"); + cmd.push(x + "," + Math.round(plot.axisY.getCoord(values[values.length-1].y, plotarea, plot))); + for(var j=values.length-2; j>=0; j--){ + var x = plot.axisX.getCoord(values[j].x, plotarea, plot); + var y = plot.axisY.getCoord(values[j].y, plotarea, plot); + var dx = x - plot.axisX.getCoord(values[j+1].x, plotarea, plot); + var dy = plot.axisY.getCoord(values[j+1].y, plotarea, plot); + + cmd.push("C"); + var cx = x-(tension-1) * (dx/tension); + cmd.push(cx + "," + dy); + cx = x - (dx/tension); + cmd.push(cx + "," + y); + cmd.push(x+","+y); + } + } + path.setAttribute("d", cmd.join(" ")+ " Z"); + group.appendChild(path); + } + return group; // SVGGElement + }, + + /********************************************************* + * Single plotters: one series at a time. + *********************************************************/ + DataBar: function( + /* array */data, + /* dojo.charting.PlotArea */plotarea, + /* dojo.charting.Plot */plot, + /* function? */applyTo + ){ + // summary + // Plots a set of bars in relation to y==0. + // Bindings: x/y + var area = plotarea.getArea(); + var group = document.createElementNS(dojo.svg.xmlns.svg, "g"); + + var n = data.length; + var w = (area.right-area.left)/(plot.axisX.range.upper - plot.axisX.range.lower); // the width of each group. + var yOrigin = plot.axisY.getCoord(plot.axisX.origin, plotarea, plot); + + for(var i=0; i0){ + dx = x - plot.axisX.getCoord(data[i-1].x, plotarea, plot); + dy = plot.axisY.getCoord(data[i-1].y, plotarea, plot); + } + + if(i==0){ cmd.push("M"); } + else { + cmd.push("C"); + var cx = x-(tension-1) * (dx/tension); + cmd.push(cx + "," + dy); + cx = x - (dx/tension); + cmd.push(cx + "," + y); + } + cmd.push(x+","+y); + + // points on the line + var c=document.createElementNS(dojo.svg.xmlns.svg, "circle"); + c.setAttribute("cx",x); + c.setAttribute("cy",y); + c.setAttribute("r","3"); + c.setAttribute("fill", data[i].series.color); + c.setAttribute("fill-opacity", "0.6"); + c.setAttribute("stroke-width", "1"); + c.setAttribute("stroke-opacity", "0.85"); + line.appendChild(c); + if(applyTo){ applyTo(c, data[i].src); } + } + path.setAttribute("d", cmd.join(" ")); + return line; // SVGGElement + }, + Area: function( + /* array */data, + /* dojo.charting.PlotArea */plotarea, + /* dojo.charting.Plot */plot, + /* function? */applyTo + ){ + // summary + // Plots the series as an area. + // Bindings: x/y + var area = plotarea.getArea(); + var line = document.createElementNS(dojo.svg.xmlns.svg, "g"); + var path = document.createElementNS(dojo.svg.xmlns.svg, "path"); + line.appendChild(path); + + path.setAttribute("fill", data[0].series.color); + path.setAttribute("fill-opacity", "0.4"); + path.setAttribute("stroke", data[0].series.color); + path.setAttribute("stroke-width" , "1"); + path.setAttribute("stroke-opacity", "0.85"); + if(data[0].series.label != null){ + path.setAttribute("title", data[0].series.label); + } + + var cmd=[]; + for(var i=0; i0){ + dx = x - plot.axisX.getCoord(data[i-1].x, plotarea, plot); + dy = plot.axisY.getCoord(data[i-1].y, plotarea, plot); + } + + if(i==0){ cmd.push("M"); } + else { + cmd.push("C"); + var cx = x-(tension-1) * (dx/tension); + cmd.push(cx + "," + dy); + cx = x - (dx/tension); + cmd.push(cx + "," + y); + } + cmd.push(x+","+y); + + // points on the line + var c=document.createElementNS(dojo.svg.xmlns.svg, "circle"); + c.setAttribute("cx",x); + c.setAttribute("cy",y); + c.setAttribute("r","3"); + c.setAttribute("fill", data[i].series.color); + c.setAttribute("fill-opacity", "0.6"); + c.setAttribute("stroke-width", "1"); + c.setAttribute("stroke-opacity", "0.85"); + line.appendChild(c); + if(applyTo){ applyTo(c, data[i].src); } + } + // finish it off + cmd.push("L"); + cmd.push(x + "," + plot.axisY.getCoord(plot.axisX.origin, plotarea, plot)); + cmd.push("L"); + cmd.push(plot.axisX.getCoord(data[0].x, plotarea, plot) + "," + plot.axisY.getCoord(plot.axisX.origin, plotarea, plot)); + cmd.push("Z"); + path.setAttribute("d", cmd.join(" ")); + return line; // SVGGElement + }, + HighLow: function( + /* array */data, + /* dojo.charting.PlotArea */plotarea, + /* dojo.charting.Plot */plot, + /* function? */applyTo + ){ + // summary + // Plots the series as a set of high/low bars. + // Bindings: x/high/low + var area = plotarea.getArea(); + var group = document.createElementNS(dojo.svg.xmlns.svg, "g"); + + var n = data.length; + var part = ((area.right-area.left)/(plot.axisX.range.upper - plot.axisX.range.lower))/4; + var w = part*2; + + for(var i=0; i high){ + var t = low; + low = high; + high = t; + } + + var x = plot.axisX.getCoord(data[i].x, plotarea, plot) - (w/2); + var y = plot.axisY.getCoord(high, plotarea, plot); + var h = plot.axisY.getCoord(low, plotarea, plot)-y; + + // high + low + var bar=document.createElementNS(dojo.svg.xmlns.svg, "rect"); + bar.setAttribute("fill", data[i].series.color); + bar.setAttribute("stroke-width", "0"); + bar.setAttribute("x", x); + bar.setAttribute("y", y); + bar.setAttribute("width", w); + bar.setAttribute("height", h); + bar.setAttribute("fill-opacity", "0.6"); + if(applyTo){ applyTo(bar, data[i].src); } + group.appendChild(bar); + } + return group; // SVGGElement + }, + HighLowClose: function( + /* array */data, + /* dojo.charting.PlotArea */plotarea, + /* dojo.charting.Plot */plot, + /* function? */applyTo + ){ + // summary + // Plots the series as a set of high/low bars with a close indicator. + // Bindings: x/high/low/close + var area = plotarea.getArea(); + var group = document.createElementNS(dojo.svg.xmlns.svg, "g"); + + var n = data.length; + var part = ((area.right-area.left)/(plot.axisX.range.upper - plot.axisX.range.lower))/4; + var w = part*2; + + for(var i=0; i high){ + var t = low; + low = high; + high = t; + } + var c = data[i].close; + + var x = plot.axisX.getCoord(data[i].x, plotarea, plot) - (w/2); + var y = plot.axisY.getCoord(high, plotarea, plot); + var h = plot.axisY.getCoord(low, plotarea, plot)-y; + var close = plot.axisY.getCoord(c, plotarea, plot); + + var g = document.createElementNS(dojo.svg.xmlns.svg, "g"); + + // high + low + var bar=document.createElementNS(dojo.svg.xmlns.svg, "rect"); + bar.setAttribute("fill", data[i].series.color); + bar.setAttribute("stroke-width", "0"); + bar.setAttribute("x", x); + bar.setAttribute("y", y); + bar.setAttribute("width", w); + bar.setAttribute("height", h); + bar.setAttribute("fill-opacity", "0.6"); + g.appendChild(bar); + + // close + var line=document.createElementNS(dojo.svg.xmlns.svg, "line"); + line.setAttribute("x1", x); + line.setAttribute("x2", x+w+(part*2)); + line.setAttribute("y1", close); + line.setAttribute("y2", close); + line.setAttribute("style", "stroke:"+data[i].series.color+";stroke-width:1px;stroke-opacity:0.6;"); + g.appendChild(line); + + if(applyTo){ applyTo(g, data[i].src); } + group.appendChild(g); + } + return group; // SVGGElement + }, + HighLowOpenClose: function( + /* array */data, + /* dojo.charting.PlotArea */plotarea, + /* dojo.charting.Plot */plot, + /* function? */applyTo + ){ + // summary + // Plots the series as a set of high/low bars with open and close indicators. + // Bindings: x/high/low/open/close + var area = plotarea.getArea(); + var group = document.createElementNS(dojo.svg.xmlns.svg, "g"); + + var n = data.length; + var part = ((area.right-area.left)/(plot.axisX.range.upper - plot.axisX.range.lower))/4; + var w = part*2; + + for(var i=0; i high){ + var t = low; + low = high; + high = t; + } + var o = data[i].open; + var c = data[i].close; + + var x = plot.axisX.getCoord(data[i].x, plotarea, plot) - (w/2); + var y = plot.axisY.getCoord(high, plotarea, plot); + var h = plot.axisY.getCoord(low, plotarea, plot)-y; + var open = plot.axisY.getCoord(o, plotarea, plot); + var close = plot.axisY.getCoord(c, plotarea, plot); + + var g = document.createElementNS(dojo.svg.xmlns.svg, "g"); + + // high + low + var bar=document.createElementNS(dojo.svg.xmlns.svg, "rect"); + bar.setAttribute("fill", data[i].series.color); + bar.setAttribute("stroke-width", "0"); + bar.setAttribute("x", x); + bar.setAttribute("y", y); + bar.setAttribute("width", w); + bar.setAttribute("height", h); + bar.setAttribute("fill-opacity", "0.6"); + g.appendChild(bar); + + // open + var line=document.createElementNS(dojo.svg.xmlns.svg, "line"); + line.setAttribute("x1", x-(part*2)); + line.setAttribute("x2", x+w); + line.setAttribute("y1", open); + line.setAttribute("y2", open); + line.setAttribute("style", "stroke:"+data[i].series.color+";stroke-width:1px;stroke-opacity:0.6;"); + g.appendChild(line); + + // close + var line=document.createElementNS(dojo.svg.xmlns.svg, "line"); + line.setAttribute("x1", x); + line.setAttribute("x2", x+w+(part*2)); + line.setAttribute("y1", close); + line.setAttribute("y2", close); + line.setAttribute("style", "stroke:"+data[i].series.color+";stroke-width:1px;stroke-opacity:0.6;"); + g.appendChild(line); + + if(applyTo){ applyTo(g, data[i].src); } + group.appendChild(g); + } + return group; // SVGGElement + }, + Scatter: function( + /* array */data, + /* dojo.charting.PlotArea */plotarea, + /* dojo.charting.Plot */plot, + /* function? */applyTo + ){ + // summary + // Plots the series as a set of points. + // Bindings: x/y + var r=7; + var group = document.createElementNS(dojo.svg.xmlns.svg, "g"); + for (var i=0; i 0){ + this.nodes.lines.removeChild(this.nodes.lines.childNodes[0]); + } + if(this.nodes.lines.parentNode){ + this.nodes.lines.parentNode.removeChild(this.nodes.lines); + this.nodes.lines = null; + } + } + + var area = plotArea.getArea(); + var g = this.nodes.lines = document.createElement("div"); + g.setAttribute("id", this.getId()+"-lines"); + for(var i=0; i 0){ + this.nodes.ticks.removeChild(this.nodes.ticks.childNodes[0]); + } + if(this.nodes.ticks.parentNode){ + this.nodes.ticks.parentNode.removeChild(this.nodes.ticks); + this.nodes.ticks = null; + } + } + + var g = this.nodes.ticks = document.createElement("div"); + g.setAttribute("id", this.getId()+"-ticks"); + for(var i=0; i 0){ + this.nodes.labels.removeChild(this.nodes.labels.childNodes[0]); + } + if(this.nodes.labels.parentNode){ + this.nodes.labels.parentNode.removeChild(this.nodes.labels); + this.nodes.labels = null; + } + } + var g = this.nodes.labels = document.createElement("div"); + g.setAttribute("id", this.getId()+"-labels"); + + for(var i=0; i 0){ + x = xOrigin; + } + + var bar=document.createElement("v:rect"); + bar.style.position="absolute"; + bar.style.top=y+1+"px"; + bar.style.left=xA+"px"; + bar.style.width=w+"px"; + bar.style.height=barH+"px"; + bar.setAttribute("fillColor", data[j][i].series.color); + bar.setAttribute("stroked", "false"); + bar.style.antialias="false"; + var fill=document.createElement("v:fill"); + fill.setAttribute("opacity", "0.6"); + bar.appendChild(fill); + if(applyTo){ applyTo(bar, data[j][i].src); } + group.appendChild(bar); + } + } + + // calculate the width of each bar. + var space = 4; + var n = plot.series.length; + var h = ((area.bottom-area.top)-(space*(n-1)))/n; + var xOrigin = plot.axisX.getCoord(0, plotarea, plot); + for(var i=0; i 0){ + xA = x; + x = xOrigin; + } + + } + return group; // HTMLDivElement + }, + Gantt: function( + /* dojo.charting.PlotArea */plotarea, + /* dojo.charting.Plot */plot, + /* object? */kwArgs, + /* function? */applyTo + ){ + // summary + // Plots a grouped set of Gantt bars + // Bindings: high/low + var area = plotarea.getArea(); + var group = document.createElement("div"); + group.style.position="absolute"; + group.style.top="0px"; + group.style.left="0px"; + group.style.width=plotarea.size.width+"px"; + group.style.height=plotarea.size.height+"px"; + + // precompile the data + var n = plot.series.length; // how many series + var data = []; + for(var i=0; i high){ + var t = high; + high = low; + low = t; + } + var x = plot.axisX.getCoord(low, plotarea, plot); + var w = plot.axisX.getCoord(high, plotarea, plot) - x; + var y = yStart + (barH*j); + + var bar=document.createElement("v:rect"); + bar.style.position="absolute"; + bar.style.top=y+1+"px"; + bar.style.left=x+"px"; + bar.style.width=w+"px"; + bar.style.height=barH+"px"; + bar.setAttribute("fillColor", data[j][i].series.color); + bar.setAttribute("stroked", "false"); + bar.style.antialias="false"; + var fill=document.createElement("v:fill"); + fill.setAttribute("opacity", "0.6"); + bar.appendChild(fill); + if(applyTo){ applyTo(bar, data[j][i].src); } + group.appendChild(bar); + } + } + return group; // HTMLDivElement + }, + StackedArea: function( + /* dojo.charting.PlotArea */plotarea, + /* dojo.charting.Plot */plot, + /* object? */kwArgs, + /* function? */applyTo + ){ + // summary + // Plots a set of stacked areas. + // Bindings: x/y + var area = plotarea.getArea(); + var group=document.createElement("div"); + group.style.position="absolute"; + group.style.top="0px"; + group.style.left="0px"; + group.style.width=plotarea.size.width+"px"; + group.style.height=plotarea.size.height+"px"; + + // precompile the data + var n = plot.series.length; // how many series + var data = []; + var totals = []; + + // we're assuming that all series for this plot has the name x assignment for now. + for(var i=0; i=0; i--){ + var path=document.createElement("v:shape"); + path.setAttribute("strokeweight", "1px"); + path.setAttribute("strokecolor", data[i][0].series.color); + path.setAttribute("fillcolor", data[i][0].series.color); + path.setAttribute("coordsize", (area.right-area.left) + "," + (area.bottom-area.top)); + path.style.position="absolute"; + path.style.top="0px"; + path.style.left="0px"; + path.style.width=area.right-area.left+"px"; + path.style.height=area.bottom-area.top+"px"; + var stroke=document.createElement("v:stroke"); + stroke.setAttribute("opacity", "0.8"); + path.appendChild(stroke); + var fill=document.createElement("v:fill"); + fill.setAttribute("opacity", "0.4"); + path.appendChild(fill); + + var cmd = []; + var r=3; + for(var j=0; j=0; j--){ + var x = Math.round(plot.axisX.getCoord(values[j].x, plotarea, plot)); + var y = Math.round(plot.axisY.getCoord(values[j].y, plotarea, plot)); + + cmd.push("l"); + cmd.push(x+","+y); + } + } + path.setAttribute("path", cmd.join(" ")+" x e"); + group.appendChild(path); + } + return group; // HTMLDivElement + }, + StackedCurvedArea: function( + /* dojo.charting.PlotArea */plotarea, + /* dojo.charting.Plot */plot, + /* object? */kwArgs, + /* function? */applyTo + ){ + // summary + // Plots a set of stacked areas, using a tensioning factor to soften points. + // Bindings: x/y + var tension = 3; + var area = plotarea.getArea(); + var group=document.createElement("div"); + group.style.position="absolute"; + group.style.top="0px"; + group.style.left="0px"; + group.style.width=plotarea.size.width+"px"; + group.style.height=plotarea.size.height+"px"; + + // precompile the data + var n = plot.series.length; // how many series + var data = []; + var totals = []; + + // we're assuming that all series for this plot has the name x assignment for now. + for(var i=0; i=0; i--){ + var path=document.createElement("v:shape"); + path.setAttribute("strokeweight", "1px"); + path.setAttribute("strokecolor", data[i][0].series.color); + path.setAttribute("fillcolor", data[i][0].series.color); + path.setAttribute("coordsize", (area.right-area.left) + "," + (area.bottom-area.top)); + path.style.position="absolute"; + path.style.top="0px"; + path.style.left="0px"; + path.style.width=area.right-area.left+"px"; + path.style.height=area.bottom-area.top+"px"; + var stroke=document.createElement("v:stroke"); + stroke.setAttribute("opacity", "0.8"); + path.appendChild(stroke); + var fill=document.createElement("v:fill"); + fill.setAttribute("opacity", "0.4"); + path.appendChild(fill); + + var cmd = []; + var r=3; + for(var j=0; j=0; j--){ + var x = Math.round(plot.axisX.getCoord(values[j].x, plotarea, plot)); + var y = Math.round(plot.axisY.getCoord(values[j].y, plotarea, plot)); + + var lastx = Math.round(plot.axisX.getCoord(values[j+1].x, plotarea, plot)); + var lasty = Math.round(plot.axisY.getCoord(values[j+1].y, plotarea, plot)); + var dx=x-lastx; + var dy=y-lasty; + + cmd.push("c"); + var cx=Math.round((x-(tension-1)*(dx/tension))); + cmd.push(cx+","+lasty); + cx=Math.round((x-(dx/tension))); + cmd.push(cx+","+y); + cmd.push(x+","+y); + } + } + path.setAttribute("path", cmd.join(" ")+" x e"); + group.appendChild(path); + } + return group; // HTMLDivElement + }, + + /********************************************************* + * Single plotters: one series at a time. + *********************************************************/ + DataBar: function( + /* array */data, + /* dojo.charting.PlotArea */plotarea, + /* dojo.charting.Plot */plot, + /* function? */applyTo + ){ + // summary + // Plots a set of bars in relation to y==0. + // Bindings: x/y + var area = plotarea.getArea(); + var group = document.createElement("div"); + group.style.position="absolute"; + group.style.top="0px"; + group.style.left="0px"; + group.style.width=plotarea.size.width+"px"; + group.style.height=plotarea.size.height+"px"; + + var n = data.length; + var w = (area.right-area.left)/(plot.axisX.range.upper - plot.axisX.range.lower); // the width of each group. + var yOrigin = plot.axisY.getCoord(plot.axisX.origin, plotarea, plot); + + for(var i=0; i high){ + var t = low; + low = high; + high = t; + } + + var x = plot.axisX.getCoord(data[i].x, plotarea, plot) - (w/2); + var y = plot.axisY.getCoord(high, plotarea, plot); + var h = plot.axisY.getCoord(low, plotarea, plot)-y; + + // high + low + var bar=document.createElement("v:rect"); + bar.style.position="absolute"; + bar.style.top=y+1+"px"; + bar.style.left=x+"px"; + bar.style.width=w+"px"; + bar.style.height=h+"px"; + bar.setAttribute("fillColor", data[i].series.color); + bar.setAttribute("stroked", "false"); + bar.style.antialias="false"; + var fill=document.createElement("v:fill"); + fill.setAttribute("opacity", "0.6"); + bar.appendChild(fill); + if(applyTo){ applyTo(bar, data[i].src); } + group.appendChild(bar); + } + return group; // HTMLDivElement + }, + HighLowClose: function( + /* array */data, + /* dojo.charting.PlotArea */plotarea, + /* dojo.charting.Plot */plot, + /* function? */applyTo + ){ + // summary + // Plots the series as a set of high/low bars with a close indicator. + // Bindings: x/high/low/close + var area = plotarea.getArea(); + var group=document.createElement("div"); + group.style.position="absolute"; + group.style.top="0px"; + group.style.left="0px"; + group.style.width=plotarea.size.width+"px"; + group.style.height=plotarea.size.height+"px"; + + var n = data.length; + var part = ((area.right-area.left)/(plot.axisX.range.upper - plot.axisX.range.lower))/4; + var w = part*2; + + for(var i=0; i high){ + var t = low; + low = high; + high = t; + } + var c = data[i].close; + + var x = plot.axisX.getCoord(data[i].x, plotarea, plot) - (w/2); + var y = plot.axisY.getCoord(high, plotarea, plot); + var h = plot.axisY.getCoord(low, plotarea, plot)-y; + var close = plot.axisY.getCoord(c, plotarea, plot); + + var g = document.createElement("div"); + + // high + low + var bar=document.createElement("v:rect"); + bar.style.position="absolute"; + bar.style.top=y+1+"px"; + bar.style.left=x+"px"; + bar.style.width=w+"px"; + bar.style.height=h+"px"; + bar.setAttribute("fillColor", data[i].series.color); + bar.setAttribute("stroked", "false"); + bar.style.antialias="false"; + var fill=document.createElement("v:fill"); + fill.setAttribute("opacity", "0.6"); + bar.appendChild(fill); + g.appendChild(bar); + + var line = document.createElement("v:line"); + line.setAttribute("strokecolor", data[i].series.color); + line.setAttribute("strokeweight", "1px"); + line.setAttribute("from", x+"px,"+close+"px"); + line.setAttribute("to", (x+w+(part*2)-2)+"px,"+close+"px"); + var s=line.style; + s.position="absolute"; + s.top="0px"; + s.left="0px"; + s.antialias="false"; + var str=document.createElement("v:stroke"); + str.setAttribute("opacity","0.6"); + line.appendChild(str); + g.appendChild(line); + + if(applyTo){ applyTo(g, data[i].src); } + group.appendChild(g); + } + return group; // HTMLDivElement + }, + HighLowOpenClose: function( + /* array */data, + /* dojo.charting.PlotArea */plotarea, + /* dojo.charting.Plot */plot, + /* function? */applyTo + ){ + // summary + // Plots the series as a set of high/low bars with open and close indicators. + // Bindings: x/high/low/open/close + var area = plotarea.getArea(); + var group=document.createElement("div"); + group.style.position="absolute"; + group.style.top="0px"; + group.style.left="0px"; + group.style.width=plotarea.size.width+"px"; + group.style.height=plotarea.size.height+"px"; + + var n = data.length; + var part = ((area.right-area.left)/(plot.axisX.range.upper - plot.axisX.range.lower))/4; + var w = part*2; + + for(var i=0; i high){ + var t = low; + low = high; + high = t; + } + var o = data[i].open; + var c = data[i].close; + + var x = plot.axisX.getCoord(data[i].x, plotarea, plot) - (w/2); + var y = plot.axisY.getCoord(high, plotarea, plot); + var h = plot.axisY.getCoord(low, plotarea, plot)-y; + var open = plot.axisY.getCoord(o, plotarea, plot); + var close = plot.axisY.getCoord(c, plotarea, plot); + + var g = document.createElement("div"); + + // high + low + var bar=document.createElement("v:rect"); + bar.style.position="absolute"; + bar.style.top=y+1+"px"; + bar.style.left=x+"px"; + bar.style.width=w+"px"; + bar.style.height=h+"px"; + bar.setAttribute("fillColor", data[i].series.color); + bar.setAttribute("stroked", "false"); + bar.style.antialias="false"; + var fill=document.createElement("v:fill"); + fill.setAttribute("opacity", "0.6"); + bar.appendChild(fill); + g.appendChild(bar); + + var line = document.createElement("v:line"); + line.setAttribute("strokecolor", data[i].series.color); + line.setAttribute("strokeweight", "1px"); + line.setAttribute("from", (x-(part*2))+"px,"+open+"px"); + line.setAttribute("to", (x+w-2)+"px,"+open+"px"); + var s=line.style; + s.position="absolute"; + s.top="0px"; + s.left="0px"; + s.antialias="false"; + var str=document.createElement("v:stroke"); + str.setAttribute("opacity","0.6"); + line.appendChild(str); + g.appendChild(line); + + var line = document.createElement("v:line"); + line.setAttribute("strokecolor", data[i].series.color); + line.setAttribute("strokeweight", "1px"); + line.setAttribute("from", x+"px,"+close+"px"); + line.setAttribute("to", (x+w+(part*2)-2)+"px,"+close+"px"); + var s=line.style; + s.position="absolute"; + s.top="0px"; + s.left="0px"; + s.antialias="false"; + var str=document.createElement("v:stroke"); + str.setAttribute("opacity","0.6"); + line.appendChild(str); + g.appendChild(line); + + if(applyTo){ applyTo(g, data[i].src); } + group.appendChild(g); + } + return group; // HTMLDivElement + }, + Scatter: function( + /* array */data, + /* dojo.charting.PlotArea */plotarea, + /* dojo.charting.Plot */plot, + /* function? */applyTo + ){ + // summary + // Plots the series as a set of points. + // Bindings: x/y + var r=6; + var mod=r/2; + + var area = plotarea.getArea(); + var group=document.createElement("div"); + group.style.position="absolute"; + group.style.top="0px"; + group.style.left="0px"; + group.style.width=plotarea.size.width+"px"; + group.style.height=plotarea.size.height+"px"; + + for(var i=0; i + * var a = dataProvider.newItem("kermit"); + * var b = dataProvider.newItem("elmo"); + * var c = dataProvider.newItem("grover"); + * var array = new Array(a, b, c); + * array.sort(dojo.data.old.Item.compare); + * + */ + dojo.lang.assertType(itemOne, dojo.data.old.Item); + if (!dojo.lang.isOfType(itemTwo, dojo.data.old.Item)) { + return -1; + } + var nameOne = itemOne.getName(); + var nameTwo = itemTwo.getName(); + if (nameOne == nameTwo) { + var attributeArrayOne = itemOne.getAttributes(); + var attributeArrayTwo = itemTwo.getAttributes(); + if (attributeArrayOne.length != attributeArrayTwo.length) { + if (attributeArrayOne.length > attributeArrayTwo.length) { + return 1; + } else { + return -1; + } + } + for (var i in attributeArrayOne) { + var attribute = attributeArrayOne[i]; + var arrayOfValuesOne = itemOne.getValues(attribute); + var arrayOfValuesTwo = itemTwo.getValues(attribute); + dojo.lang.assert(arrayOfValuesOne && (arrayOfValuesOne.length > 0)); + if (!arrayOfValuesTwo) { + return 1; + } + if (arrayOfValuesOne.length != arrayOfValuesTwo.length) { + if (arrayOfValuesOne.length > arrayOfValuesTwo.length) { + return 1; + } else { + return -1; + } + } + for (var j in arrayOfValuesOne) { + var value = arrayOfValuesOne[j]; + if (!itemTwo.hasAttributeValue(value)) { + return 1; + } + } + return 0; + } + } else { + if (nameOne > nameTwo) { + return 1; + } else { + return -1; // 0, 1, or -1 + } + } +}; + +// ------------------------------------------------------------------- +// Public instance methods +// ------------------------------------------------------------------- +dojo.data.old.Item.prototype.toString = function() { + /** + * Returns a simple string representation of the item. + */ + var arrayOfStrings = []; + var attributes = this.getAttributes(); + for (var i in attributes) { + var attribute = attributes[i]; + var arrayOfValues = this.getValues(attribute); + var valueString; + if (arrayOfValues.length == 1) { + valueString = arrayOfValues[0]; + } else { + valueString = '['; + valueString += arrayOfValues.join(', '); + valueString += ']'; + } + arrayOfStrings.push(' ' + attribute + ': ' + valueString); + } + var returnString = '{ '; + returnString += arrayOfStrings.join(',\n'); + returnString += ' }'; + return returnString; // string +}; + +dojo.data.old.Item.prototype.compare = function(/* dojo.data.old.Item */ otherItem) { + /** + * summary: Compares this Item to another Item, and returns 0, 1, or -1. + */ + return dojo.data.old.Item.compare(this, otherItem); // 0, 1, or -1 +}; + +dojo.data.old.Item.prototype.isEqual = function(/* dojo.data.old.Item */ otherItem) { + /** + * summary: Returns true if this Item is equal to the otherItem, or false otherwise. + */ + return (this.compare(otherItem) == 0); // boolean +}; + +dojo.data.old.Item.prototype.getName = function() { + return this.get('name'); +}; + +dojo.data.old.Item.prototype.get = function(/* string or dojo.data.old.Attribute */ attributeId) { + /** + * summary: Returns a single literal value, like "foo" or 33. + */ + // dojo.lang.assertType(attributeId, [String, dojo.data.old.Attribute]); + var literalOrValueOrArray = this._dictionaryOfAttributeValues[attributeId]; + if (dojo.lang.isUndefined(literalOrValueOrArray)) { + return null; // null + } + if (literalOrValueOrArray instanceof dojo.data.old.Value) { + return literalOrValueOrArray.getValue(); // literal + } + if (dojo.lang.isArray(literalOrValueOrArray)) { + var dojoDataValue = literalOrValueOrArray[0]; + return dojoDataValue.getValue(); // literal + } + return literalOrValueOrArray; // literal +}; + +dojo.data.old.Item.prototype.getValue = function(/* string or dojo.data.old.Attribute */ attributeId) { + /** + * summary: Returns a single instance of dojo.data.old.Value. + */ + // dojo.lang.assertType(attributeId, [String, dojo.data.old.Attribute]); + var literalOrValueOrArray = this._dictionaryOfAttributeValues[attributeId]; + if (dojo.lang.isUndefined(literalOrValueOrArray)) { + return null; // null + } + if (literalOrValueOrArray instanceof dojo.data.old.Value) { + return literalOrValueOrArray; // dojo.data.old.Value + } + if (dojo.lang.isArray(literalOrValueOrArray)) { + var dojoDataValue = literalOrValueOrArray[0]; + return dojoDataValue; // dojo.data.old.Value + } + var literal = literalOrValueOrArray; + dojoDataValue = new dojo.data.old.Value(literal); + this._dictionaryOfAttributeValues[attributeId] = dojoDataValue; + return dojoDataValue; // dojo.data.old.Value +}; + +dojo.data.old.Item.prototype.getValues = function(/* string or dojo.data.old.Attribute */ attributeId) { + /** + * summary: Returns an array of dojo.data.old.Value objects. + */ + // dojo.lang.assertType(attributeId, [String, dojo.data.old.Attribute]); + var literalOrValueOrArray = this._dictionaryOfAttributeValues[attributeId]; + if (dojo.lang.isUndefined(literalOrValueOrArray)) { + return null; // null + } + if (literalOrValueOrArray instanceof dojo.data.old.Value) { + var array = [literalOrValueOrArray]; + this._dictionaryOfAttributeValues[attributeId] = array; + return array; // Array + } + if (dojo.lang.isArray(literalOrValueOrArray)) { + return literalOrValueOrArray; // Array + } + var literal = literalOrValueOrArray; + var dojoDataValue = new dojo.data.old.Value(literal); + array = [dojoDataValue]; + this._dictionaryOfAttributeValues[attributeId] = array; + return array; // Array +}; + +dojo.data.old.Item.prototype.load = function(/* string or dojo.data.old.Attribute */ attributeId, /* anything */ value) { + /** + * summary: + * Used for loading an attribute value into an item when + * the item is first being loaded into memory from some + * data store (such as a file). + */ + // dojo.lang.assertType(attributeId, [String, dojo.data.old.Attribute]); + this._dataProvider.registerAttribute(attributeId); + var literalOrValueOrArray = this._dictionaryOfAttributeValues[attributeId]; + if (dojo.lang.isUndefined(literalOrValueOrArray)) { + this._dictionaryOfAttributeValues[attributeId] = value; + return; + } + if (!(value instanceof dojo.data.old.Value)) { + value = new dojo.data.old.Value(value); + } + if (literalOrValueOrArray instanceof dojo.data.old.Value) { + var array = [literalOrValueOrArray, value]; + this._dictionaryOfAttributeValues[attributeId] = array; + return; + } + if (dojo.lang.isArray(literalOrValueOrArray)) { + literalOrValueOrArray.push(value); + return; + } + var literal = literalOrValueOrArray; + var dojoDataValue = new dojo.data.old.Value(literal); + array = [dojoDataValue, value]; + this._dictionaryOfAttributeValues[attributeId] = array; +}; + +dojo.data.old.Item.prototype.set = function(/* string or dojo.data.old.Attribute */ attributeId, /* anything */ value) { + /** + * summary: + * Used for setting an attribute value as a result of a + * user action. + */ + // dojo.lang.assertType(attributeId, [String, dojo.data.old.Attribute]); + this._dataProvider.registerAttribute(attributeId); + this._dictionaryOfAttributeValues[attributeId] = value; + this._dataProvider.noteChange(this, attributeId, value); +}; + +dojo.data.old.Item.prototype.setValue = function(/* string or dojo.data.old.Attribute */ attributeId, /* dojo.data.old.Value */ value) { + this.set(attributeId, value); +}; + +dojo.data.old.Item.prototype.addValue = function(/* string or dojo.data.old.Attribute */ attributeId, /* anything */ value) { + /** + * summary: + * Used for adding an attribute value as a result of a + * user action. + */ + this.load(attributeId, value); + this._dataProvider.noteChange(this, attributeId, value); +}; + +dojo.data.old.Item.prototype.setValues = function(/* string or dojo.data.old.Attribute */ attributeId, /* Array */ arrayOfValues) { + /** + * summary: + * Used for setting an array of attribute values as a result of a + * user action. + */ + // dojo.lang.assertType(attributeId, [String, dojo.data.old.Attribute]); + dojo.lang.assertType(arrayOfValues, Array); + this._dataProvider.registerAttribute(attributeId); + var finalArray = []; + this._dictionaryOfAttributeValues[attributeId] = finalArray; + for (var i in arrayOfValues) { + var value = arrayOfValues[i]; + if (!(value instanceof dojo.data.old.Value)) { + value = new dojo.data.old.Value(value); + } + finalArray.push(value); + this._dataProvider.noteChange(this, attributeId, value); + } +}; + +dojo.data.old.Item.prototype.getAttributes = function() { + /** + * summary: + * Returns an array containing all of the attributes for which + * this item has attribute values. + */ + var arrayOfAttributes = []; + for (var key in this._dictionaryOfAttributeValues) { + arrayOfAttributes.push(this._dataProvider.getAttribute(key)); + } + return arrayOfAttributes; // Array +}; + +dojo.data.old.Item.prototype.hasAttribute = function(/* string or dojo.data.old.Attribute */ attributeId) { + /** + * summary: Returns true if the given attribute of the item has been assigned any value. + */ + // dojo.lang.assertType(attributeId, [String, dojo.data.old.Attribute]); + return (attributeId in this._dictionaryOfAttributeValues); // boolean +}; + +dojo.data.old.Item.prototype.hasAttributeValue = function(/* string or dojo.data.old.Attribute */ attributeId, /* anything */ value) { + /** + * summary: Returns true if the given attribute of the item has been assigned the given value. + */ + var arrayOfValues = this.getValues(attributeId); + for (var i in arrayOfValues) { + var candidateValue = arrayOfValues[i]; + if (candidateValue.isEqual(value)) { + return true; // boolean + } + } + return false; // boolean +}; + + Index: openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/data/old/Kind.js =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/data/old/Attic/Kind.js,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/data/old/Kind.js 7 Nov 2006 02:38:02 -0000 1.1 @@ -0,0 +1,28 @@ +/* + Copyright (c) 2004-2006, The Dojo Foundation + All Rights Reserved. + + Licensed under the Academic Free License version 2.1 or above OR the + modified BSD license. For more information on Dojo licensing, see: + + http://dojotoolkit.org/community/licensing.shtml +*/ + +dojo.provide("dojo.data.old.Kind"); +dojo.require("dojo.data.old.Item"); + +// ------------------------------------------------------------------- +// Constructor +// ------------------------------------------------------------------- +dojo.data.old.Kind = function(/* dojo.data.old.provider.Base */ dataProvider) { + /** + * summary: + * A Kind represents a kind of item. In the dojo data model + * the item Snoopy might belong to the 'kind' Dog, where in + * a Java program the object Snoopy would belong to the 'class' + * Dog, and in MySQL the record for Snoopy would be in the + * table Dog. + */ + dojo.data.old.Item.call(this, dataProvider); +}; +dojo.inherits(dojo.data.old.Kind, dojo.data.old.Item); Index: openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/data/old/Observable.js =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/data/old/Attic/Observable.js,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/data/old/Observable.js 7 Nov 2006 02:38:02 -0000 1.1 @@ -0,0 +1,59 @@ +/* + Copyright (c) 2004-2006, The Dojo Foundation + All Rights Reserved. + + Licensed under the Academic Free License version 2.1 or above OR the + modified BSD license. For more information on Dojo licensing, see: + + http://dojotoolkit.org/community/licensing.shtml +*/ + +dojo.provide("dojo.data.old.Observable"); +dojo.require("dojo.lang.common"); +dojo.require("dojo.lang.assert"); + +// ------------------------------------------------------------------- +// Constructor +// ------------------------------------------------------------------- +dojo.data.old.Observable = function() { +}; + +// ------------------------------------------------------------------- +// Public instance methods +// ------------------------------------------------------------------- +dojo.data.old.Observable.prototype.addObserver = function(/* object */ observer) { + /** + * summary: Registers an object as an observer of this item, + * so that the object will be notified when the item changes. + */ + dojo.lang.assertType(observer, Object); + dojo.lang.assertType(observer.observedObjectHasChanged, Function); + if (!this._arrayOfObservers) { + this._arrayOfObservers = []; + } + if (!dojo.lang.inArray(this._arrayOfObservers, observer)) { + this._arrayOfObservers.push(observer); + } +}; + +dojo.data.old.Observable.prototype.removeObserver = function(/* object */ observer) { + /** + * summary: Removes the observer registration for a previously + * registered object. + */ + if (!this._arrayOfObservers) { + return; + } + var index = dojo.lang.indexOf(this._arrayOfObservers, observer); + if (index != -1) { + this._arrayOfObservers.splice(index, 1); + } +}; + +dojo.data.old.Observable.prototype.getObservers = function() { + /** + * summary: Returns an array with all the observers of this item. + */ + return this._arrayOfObservers; // Array or undefined +}; + Index: openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/data/old/ResultSet.js =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/data/old/Attic/ResultSet.js,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/data/old/ResultSet.js 7 Nov 2006 02:38:02 -0000 1.1 @@ -0,0 +1,70 @@ +/* + Copyright (c) 2004-2006, The Dojo Foundation + All Rights Reserved. + + Licensed under the Academic Free License version 2.1 or above OR the + modified BSD license. For more information on Dojo licensing, see: + + http://dojotoolkit.org/community/licensing.shtml +*/ + +dojo.provide("dojo.data.old.ResultSet"); +dojo.require("dojo.lang.assert"); +dojo.require("dojo.collections.Collections"); + +// ------------------------------------------------------------------- +// Constructor +// ------------------------------------------------------------------- +dojo.data.old.ResultSet = function(/* dojo.data.old.provider.Base */ dataProvider, /* Array */ arrayOfItems) { + /** + * summary: + * A ResultSet holds a collection of Items. A data provider + * returns a ResultSet in reponse to a query. + * (The name "Result Set" comes from the MySQL terminology.) + */ + dojo.lang.assertType(dataProvider, dojo.data.old.provider.Base, {optional: true}); + dojo.lang.assertType(arrayOfItems, Array, {optional: true}); + dojo.data.old.Observable.call(this); + this._dataProvider = dataProvider; + this._arrayOfItems = []; + if (arrayOfItems) { + this._arrayOfItems = arrayOfItems; + } +}; +dojo.inherits(dojo.data.old.ResultSet, dojo.data.old.Observable); + +// ------------------------------------------------------------------- +// Public instance methods +// ------------------------------------------------------------------- +dojo.data.old.ResultSet.prototype.toString = function() { + var returnString = this._arrayOfItems.join(', '); + return returnString; // string +}; + +dojo.data.old.ResultSet.prototype.toArray = function() { + return this._arrayOfItems; // Array +}; + +dojo.data.old.ResultSet.prototype.getIterator = function() { + return new dojo.collections.Iterator(this._arrayOfItems); +}; + +dojo.data.old.ResultSet.prototype.getLength = function() { + return this._arrayOfItems.length; // integer +}; + +dojo.data.old.ResultSet.prototype.getItemAt = function(/* numeric */ index) { + return this._arrayOfItems[index]; +}; + +dojo.data.old.ResultSet.prototype.indexOf = function(/* dojo.data.old.Item */ item) { + return dojo.lang.indexOf(this._arrayOfItems, item); // integer +}; + +dojo.data.old.ResultSet.prototype.contains = function(/* dojo.data.old.Item */ item) { + return dojo.lang.inArray(this._arrayOfItems, item); // boolean +}; + +dojo.data.old.ResultSet.prototype.getDataProvider = function() { + return this._dataProvider; // dojo.data.old.provider.Base +}; \ No newline at end of file Index: openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/data/old/Type.js =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/data/old/Attic/Type.js,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/data/old/Type.js 7 Nov 2006 02:38:02 -0000 1.1 @@ -0,0 +1,25 @@ +/* + Copyright (c) 2004-2006, The Dojo Foundation + All Rights Reserved. + + Licensed under the Academic Free License version 2.1 or above OR the + modified BSD license. For more information on Dojo licensing, see: + + http://dojotoolkit.org/community/licensing.shtml +*/ + +dojo.provide("dojo.data.old.Type"); +dojo.require("dojo.data.old.Item"); + +// ------------------------------------------------------------------- +// Constructor +// ------------------------------------------------------------------- +dojo.data.old.Type = function(/* dojo.data.old.provider.Base */ dataProvider) { + /** + * summary: + * A Type represents a type of value, like Text, Number, Picture, + * or Varchar. + */ + dojo.data.old.Item.call(this, dataProvider); +}; +dojo.inherits(dojo.data.old.Type, dojo.data.old.Item); Index: openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/data/old/Value.js =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/data/old/Attic/Value.js,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/data/old/Value.js 7 Nov 2006 02:38:02 -0000 1.1 @@ -0,0 +1,55 @@ +/* + Copyright (c) 2004-2006, The Dojo Foundation + All Rights Reserved. + + Licensed under the Academic Free License version 2.1 or above OR the + modified BSD license. For more information on Dojo licensing, see: + + http://dojotoolkit.org/community/licensing.shtml +*/ + +dojo.provide("dojo.data.old.Value"); +dojo.require("dojo.lang.assert"); + +// ------------------------------------------------------------------- +// Constructor +// ------------------------------------------------------------------- +dojo.data.old.Value = function(/* anything */ value) { + /** + * summary: + * A Value represents a simple literal value (like "foo" or 334), + * or a reference value (a pointer to an Item). + */ + this._value = value; + this._type = null; +}; + +// ------------------------------------------------------------------- +// Public instance methods +// ------------------------------------------------------------------- +dojo.data.old.Value.prototype.toString = function() { + return this._value.toString(); // string +}; + +dojo.data.old.Value.prototype.getValue = function() { + /** + * summary: Returns the value itself. + */ + return this._value; // anything +}; + +dojo.data.old.Value.prototype.getType = function() { + /** + * summary: Returns the data type of the value. + */ + dojo.unimplemented('dojo.data.old.Value.prototype.getType'); + return this._type; // dojo.data.old.Type +}; + +dojo.data.old.Value.prototype.compare = function() { + dojo.unimplemented('dojo.data.old.Value.prototype.compare'); +}; + +dojo.data.old.Value.prototype.isEqual = function() { + dojo.unimplemented('dojo.data.old.Value.prototype.isEqual'); +}; Index: openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/data/old/__package__.js =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/data/old/Attic/__package__.js,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/data/old/__package__.js 7 Nov 2006 02:38:02 -0000 1.1 @@ -0,0 +1,22 @@ +/* + Copyright (c) 2004-2006, The Dojo Foundation + All Rights Reserved. + + Licensed under the Academic Free License version 2.1 or above OR the + modified BSD license. For more information on Dojo licensing, see: + + http://dojotoolkit.org/community/licensing.shtml +*/ + +dojo.require("dojo.experimental"); + +dojo.experimental("dojo.data.old.*"); +dojo.kwCompoundRequire({ + common: [ + "dojo.data.old.Item", + "dojo.data.old.ResultSet", + "dojo.data.old.provider.FlatFile" + ] +}); +dojo.provide("dojo.data.old.*"); + Index: openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/data/old/to_do.txt =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/data/old/Attic/to_do.txt,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/data/old/to_do.txt 7 Nov 2006 02:38:02 -0000 1.1 @@ -0,0 +1,45 @@ +Existing Features + * can import data from .json or .csv format files + * can import data from del.icio.us + * can create and modify data programmatically + * can bind data to dojo.widget.Chart + * can bind data to dojo.widget.SortableTable + * can bind one data set to multiple widgets + * notifications: widgets are notified when data changes + * notification available per-item or per-resultSet + * can create ad-hoc attributes + * attributes can be loosely-typed + * attributes can have meta-data like type and display name + * half-implemented support for sorting + * half-implemented support for export to .json + * API for getting data in simple arrays + * API for getting ResultSets with iterators (precursor to support for something like the openrico.org live grid) + +~~~~~~~~~~~~~~~~~~~~~~~~ +To-Do List + * be able to import data from an html
+ * think about being able to import data from some type of XML + * think about integration with dojo.undo.Manager + * think more about how to represent the notion of different data types + * think about what problems we'll run into when we have a MySQL data provider + * in TableBindingHack, improve support for data types in the SortableTable binding + * deal with ids (including MySQL multi-field keys) + * add support for item-references: employeeItem.set('department', departmentItem); + * deal with Attributes as instances of Items, not just subclasses of Items + * unit tests for compare/sort code + * unit tests for everything + * implement item.toString('json') and item.toString('xml') + * implement dataProvider.newItem({name: 'foo', age: 26}) + * deal better with transactions + * add support for deleting items + * don't send out multiple notifications to the same observer + * deal with item versions + * prototype a Yahoo data provider -- http://developer.yahoo.net/common/json.html + * prototype a data provider that enforces strong typing + * prototype a data provider that prevents ad-hoc attributes + * prototype a data provider that enforces single-kind item + * prototype a data provider that allows for login/authentication + * have loosely typed result sets play nicely with widgets that expect strong typing + * prototype an example of spreadsheet-style formulas or derivation rules + * experiment with some sort of fetch() that returns only a subset of a data provider's items + Index: openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/flash/flash6/DojoExternalInterface.as =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/flash/flash6/Attic/DojoExternalInterface.as,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/flash/flash6/DojoExternalInterface.as 7 Nov 2006 02:38:02 -0000 1.1 @@ -0,0 +1,215 @@ +/* + Copyright (c) 2004-2006, The Dojo Foundation + All Rights Reserved. + + Licensed under the Academic Free License version 2.1 or above OR the + modified BSD license. For more information on Dojo licensing, see: + + http://dojotoolkit.org/community/licensing.shtml +*/ + +/** + An implementation of Flash 8's ExternalInterface that works with Flash 6 + and which is source-compatible with Flash 8. + + @author Brad Neuberg, bkn3@columbia.edu +*/ + +class DojoExternalInterface{ + public static var available:Boolean; + public static var dojoPath = ""; + + public static var _fscommandReady = false; + public static var _callbacks = new Array(); + + public static function initialize(){ + //getURL("javascript:dojo.debug('FLASH:DojoExternalInterface initialize')"); + // FIXME: Set available variable by testing for capabilities + DojoExternalInterface.available = true; + + // extract the dojo base path + DojoExternalInterface.dojoPath = DojoExternalInterface.getDojoPath(); + //getURL("javascript:dojo.debug('FLASH:dojoPath="+DojoExternalInterface.dojoPath+"')"); + + // Sometimes, on IE, the fscommand infrastructure can take a few hundred + // milliseconds the first time a page loads. Set a timer to keep checking + // to make sure we can issue fscommands; otherwise, our calls to fscommand + // for setCallback() and loaded() will just "disappear" + _root.fscommandReady = false; + var fsChecker = function(){ + // issue a test fscommand + fscommand("fscommandReady"); + + // JavaScript should set _root.fscommandReady if it got the call + if(_root.fscommandReady == "true"){ + DojoExternalInterface._fscommandReady = true; + clearInterval(_root.fsTimer); + } + }; + _root.fsTimer = setInterval(fsChecker, 100); + } + + public static function addCallback(methodName:String, instance:Object, + method:Function) : Boolean{ + // A variable that indicates whether the call below succeeded + _root._succeeded = null; + + // Callbacks are registered with the JavaScript side as follows. + // On the Flash side, we maintain a lookup table that associates + // the methodName with the actual instance and method that are + // associated with this method. + // Using fscommand, we send over the action "addCallback", with the + // argument being the methodName to add, such as "foobar". + // The JavaScript takes these values and registers the existence of + // this callback point. + + // precede the method name with a _ character in case it starts + // with a number + _callbacks["_" + methodName] = {_instance: instance, _method: method}; + _callbacks[_callbacks.length] = methodName; + + // The API for ExternalInterface says we have to make sure the call + // succeeded; check to see if there is a value + // for _succeeded, which is set by the JavaScript side + if(_root._succeeded == null){ + return false; + }else{ + return true; + } + } + + public static function call(methodName:String, + resultsCallback:Function) : Void{ + // FIXME: support full JSON serialization + + // First, we pack up all of the arguments to this call and set them + // as Flash variables, which the JavaScript side will unpack using + // plugin.GetVariable(). We set the number of arguments as "_numArgs", + // and add each argument as a variable, such as "_1", "_2", etc., starting + // from 0. + // We then execute an fscommand with the action "call" and the + // argument being the method name. JavaScript takes the method name, + // retrieves the arguments using GetVariable, executes the method, + // and then places the return result in a Flash variable + // named "_returnResult". + _root._numArgs = arguments.length - 2; + for(var i = 2; i < arguments.length; i++){ + var argIndex = i - 2; + _root["_" + argIndex] = arguments[i]; + } + + _root._returnResult = undefined; + fscommand("call", methodName); + + // immediately return if the caller is not waiting for return results + if(resultsCallback == undefined || resultsCallback == null){ + return; + } + + // check at regular intervals for return results + var resultsChecker = function(){ + if((typeof _root._returnResult != "undefined")&& + (_root._returnResult != "undefined")){ + clearInterval(_root._callbackID); + resultsCallback.call(null, _root._returnResult); + } + }; + _root._callbackID = setInterval(resultsChecker, 100); + } + + /** + Called by Flash to indicate to JavaScript that we are ready to have + our Flash functions called. Calling loaded() + will fire the dojo.flash.loaded() event, so that JavaScript can know that + Flash has finished loading and adding its callbacks, and can begin to + interact with the Flash file. + */ + public static function loaded(){ + //getURL("javascript:dojo.debug('FLASH:loaded')"); + + // one more step: see if fscommands are ready to be executed; if not, + // set an interval that will keep running until fscommands are ready; + // make sure the gateway is loaded as well + var execLoaded = function(){ + if(DojoExternalInterface._fscommandReady == true){ + clearInterval(_root.loadedInterval); + + // initialize the small Flash file that helps gateway JS to Flash + // calls + DojoExternalInterface._initializeFlashRunner(); + } + }; + + if(_fscommandReady == true){ + execLoaded(); + }else{ + _root.loadedInterval = setInterval(execLoaded, 50); + } + } + + /** + Handles and executes a JavaScript to Flash method call. Used by + initializeFlashRunner. + */ + public static function _handleJSCall(){ + // get our parameters + var numArgs = parseInt(_root._numArgs); + var jsArgs = new Array(); + for(var i = 0; i < numArgs; i++){ + var currentValue = _root["_" + i]; + jsArgs.push(currentValue); + } + + // get our function name + var functionName = _root._functionName; + + // now get the actual instance and method object to execute on, + // using our lookup table that was constructed by calls to + // addCallback on initialization + var instance = _callbacks["_" + functionName]._instance; + var method = _callbacks["_" + functionName]._method; + + // execute it + var results = method.apply(instance, jsArgs); + + // return the results + _root._returnResult = results; + } + + /** Called by the flash6_gateway.swf to indicate that it is loaded. */ + public static function _gatewayReady(){ + for(var i = 0; i < _callbacks.length; i++){ + fscommand("addCallback", _callbacks[i]); + } + call("dojo.flash.loaded"); + } + + /** + When JavaScript wants to communicate with Flash it simply sets + the Flash variable "_execute" to true; this method creates the + internal Movie Clip, called the Flash Runner, that makes this + magic happen. + */ + public static function _initializeFlashRunner(){ + // figure out where our Flash movie is + var swfLoc = DojoExternalInterface.dojoPath + "flash6_gateway.swf"; + + // load our gateway helper file + _root.createEmptyMovieClip("_flashRunner", 5000); + _root._flashRunner._lockroot = true; + _root._flashRunner.loadMovie(swfLoc); + } + + private static function getDojoPath(){ + var url = _root._url; + var start = url.indexOf("baseRelativePath=") + "baseRelativePath=".length; + var path = url.substring(start); + var end = path.indexOf("&"); + if(end != -1){ + path = path.substring(0, end); + } + return path; + } +} + +// vim:ts=4:noet:tw=0: Index: openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/flash/flash6/flash6_gateway.fla =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/flash/flash6/Attic/flash6_gateway.fla,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/flash/flash6/flash6_gateway.fla 7 Nov 2006 02:38:02 -0000 1.1 @@ -0,0 +1,72 @@ +��ࡱ�>�� ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Root Entry��������p�|Y�r��RASH�fUajb��Contents��������(�APage 1���������������������������������������������'������������������������������������������������������������������������������������������������������������������������������������)*+,-./0123456789:;<=>?@ABCDEFGM��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Root Entry��������p�|Y�r��RASHppګ�Z� �Contents�������� �APage 1������������������������������������������������������������� + + !"#$%&H������������������������������������������������������������������������������������������������������������������������������������IJKL���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� + +������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������CPicPage�� CPicLayer�� CPicFrame�����?�����start2�����/** + + Very simple two frame Flash file; frame 1 says we are all loaded, while frame 2 + + says to execute a JavaScript call. This small file is necessary because ActionScript + + 2.0 has no way to know when a specific frame has been called, which we use for all + + of our code. However, the Flash 6 communication we use kicks off a call by jumping + + to a specific frame and then calling Play() on the Flash player. + +*/ + + + +DojoExternalIn + +����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������terface._gatewayReady(); + +stop(); + +���������?�����execute}v���/DojoExternalInterface._handleJSCall(); + +stop();����� ���Layer 1����O�O���("javascript:alert('TCallLabel')"); + +DojoExte��CPicPage�� CPicLayer�� CPicFrame�����?�����startZz�����/** + + Very simple two frame Flash file; frame 1 says we are all loaded, while frame 2 + + says to execute a JavaScript call. This small file is necessary because ActionScript + + 2.0 has no way to know when a specific frame has been called, which we use for all + + of our code. However, the Flash 6 communication we use kicks off a call by jumping + + to a specific frame and then calling Play() on the Flash player. + +*/ + + + +DojoExternalIn8�� +CDocumentPagePage 1���Scene 1���s��C����������������������6D��������������������������������������������������������*@h�hhhh�������� ����PropSheet::ActiveTab���7628����%PublishFormatProperties::htmlFileName���flash6_gateway.html���"PublishHtmlProperties::StartPaused���0��� PublishRNWKProperties::speed256K���0���!PublishGifProperties::PaletteName������PublishFormatProperties::jpeg���0���PublishHtmlProperties::Loop���1���PublishProfileProperties::name���Default���Vector::Debugging Permitted���0���"PublishQTProperties::MatchMovieDim���1��� PublishQTProperties::AlphaOption������ PublishQTProperties::LayerOption������4PublishHtmlProperties::UsingDefaultAlternateFilename���1���PublishHtmlProperties::Units���0���%PublishHtmlProperties::showTagWarnMsg���1���Vector::External Player������&PublishRNWKProperties::singleRateAudio���0���&PublishRNWKProperties::speedSingleISDN���0���$PublishPNGProperties::OptimizeColors���1���PublishQTProperties::Width���550���%PublishFormatProperties::projectorMac���0���'PublishFormatProperties::gifDefaultName���1���&PublishFormatProperties::flashFileName���..\..\..\flash6_gateway.swf���Vector::Package Paths������Vector::Compress Movie���1���#PublishRNWKProperties::flashBitRate���1200���%PublishRNWKProperties::mediaCopyright���(c) 2000���PublishGifProperties::Smooth���1���PublishFormatProperties::html���0���$PublishFormatProperties::pngFileName���flash6_gateway.png���(PublishHtmlProperties::VerticalAlignment���1���PublishHtmlProperties::Quality���4���Vector::FireFox���0���"PublishRNWKProperties::exportAudio���1��� PublishRNWKProperties::speed384K���0���!PublishRNWKProperties::exportSMIL���1���"PublishGifProperties::DitherOption������-PublishFormatProperties::generatorDefaultName���1���!PublishHtmlProperties::DeviceFont���0���Vector::Override Sounds���0���'PublishRNWKProperties::mediaDescription������"PublishPNGProperties::FilterOption������PublishFormatProperties::gif���0���(PublishFormatProperties::jpegDefaultName���1���(PublishFormatProperties::rnwkDefaultName���1���*PublishFormatProperties::generatorFileName���flash6_gateway.swt���Vector::Template���0���2PublishHtmlProperties::VersionDetectionIfAvailable���0���*PublishHtmlProperties::HorizontalAlignment���1���"PublishHtmlProperties::DisplayMenu���1���Vector::Protect���0���Vector::Quality���80���PublishJpegProperties::DPI���4718592���PublishGifProperties::Interlace���0���"PublishGifProperties::DitherSolids���0���PublishPNGProperties::Smooth���1���PublishPNGProperties::BitDepth���24-bit with Alpha���PublishQTProperties::Flatten���1���#PublishFormatProperties::qtFileName���flash6_gateway.mov���PublishRNWKProperties::speed28K���1���!PublishRNWKProperties::mediaTitle������$PublishRNWKProperties::mediaKeywords������PublishGifProperties::Width���550���PublishGifProperties::Loop���1���PublishFormatProperties::flash���1���PublishJpegProperties::Quality���80���$PublishRNWKProperties::realVideoRate���100000���$PublishRNWKProperties::speedDualISDN���0���#PublishGifProperties::MatchMovieDim���1���#PublishGifProperties::PaletteOption������"PublishPNGProperties::DitherOption������0PublishFormatProperties::projectorMacDefaultName���1���'PublishFormatProperties::pngDefaultName���1���-PublishFormatProperties::projectorWinFileName���flash6_gateway.exe���PublishHtmlProperties::Align���0���!PublishProfileProperties::version���1���Vector::Package Export Frame���1���$PublishJpegProperties::MatchMovieDim���1���#PublishPNGProperties::MatchMovieDim���1���#PublishPNGProperties::PaletteOption������)PublishFormatProperties::flashDefaultName���0���%PublishFormatProperties::jpegFileName���flash6_gateway.jpg���PublishHtmlProperties::Width���550���PublishHtmlProperties::Height���400���Vector::Omit Trace Actions���0���Vector::Debugging Password������"PublishJpegProperties::Progressive���0���"PublishPNGProperties::DitherSolids���0���#PublishQTProperties::PlayEveryFrame���0���PublishFormatProperties::png���0���PublishFormatProperties::rnwk���0���(PublishFormatProperties::htmlDefaultName���1���-PublishFormatProperties::projectorMacFileName���flash6_gateway.hqx���2PublishHtmlProperties::UsingDefaultContentFilename���1���!PublishHtmlProperties::WindowMode���0���'PublishHtmlProperties::TemplateFileName����C:\Documents and Settings\bradneuberg\Local Settings\Application Data\Macromedia\Flash MX 2004\en\Configuration\Html\Default.html���Vector::TopDown���0���Vector::DeviceSound���0���PublishJpegProperties::Size���0���PublishGifProperties::Height���400���PublishPNGProperties::Interlace���0���"PublishFormatProperties::generator���0���&PublishHtmlProperties::ContentFilename������(PublishHtmlProperties::AlternateFilename������+PublishHtmlProperties::OwnAlternateFilename������Vector::Report���0���PublishRNWKProperties::speed56K���1���PublishGifProperties::LoopCount������'PublishGifProperties::TransparentOption������PublishGifProperties::MaxColors���255���%PublishPNGProperties::RemoveGradients���0���PublishQTProperties::Height���400���PublishFormatProperties::qt���0���Vector::Stream Compress���7���Vector::Event Format���0���Vector::Version���6���"PublishRNWKProperties::audioFormat���0���$PublishGifProperties::OptimizeColors���1���0PublishFormatProperties::projectorWinDefaultName���1���PublishHtmlProperties::Scale���0���Vector::Event Compress���7���Vector::ActionScriptVersion���2���PublishJpegProperties::Height���400��� PublishRNWKProperties::speed512K���0���%PublishGifProperties::RemoveGradients���0���PublishPNGProperties::Width���550���PublishPNGProperties::Height���400���&PublishFormatProperties::qtDefaultName���1���$PublishFormatProperties::gifFileName���flash6_gateway.gif���"PublishHtmlProperties::VersionInfo������Vector::Stream Format���0���PublishJpegProperties::Width���550���"PublishRNWKProperties::exportFlash���1���&PublishRNWKProperties::showBitrateDlog���1���(PublishRNWKProperties::speedCorporateLAN���0���"PublishRNWKProperties::mediaAuthor������PublishGifProperties::Animated���0���&PublishGifProperties::TransparentAlpha���128���!PublishPNGProperties::Transparent���0���!PublishPNGProperties::PaletteName������*PublishQTProperties::UseQTSoundCompression���0���PublishQTProperties::Looping���0���%PublishFormatProperties::defaultNames���0���%PublishFormatProperties::projectorWin���0���%PublishFormatProperties::rnwkFileName���flash6_gateway.smil���,PublishHtmlProperties::UsingOwnAlternateFile���0���PublishPNGProperties::MaxColors���255���%PublishQTProperties::ControllerOption���0���"PublishQTProperties::PausedAtStart���0������������� CColorDef������3�P��f�P�0���P�H���P�`���P�x�3���33�(��3f�<�0�3��C�H�3��F�`�3��H�x�f��0�f3��0�ff�(�0�f��5�H�f��<�`�f��@�x���333�0���3����33�x��f3�d�0��3�]�H��3�Z�`��3�X�x�33����333�0�3f3�PPH�3�3�Px`�3�3�P�x�3�3�P���f3���0�f33�PH�ff3�(PH�f�3�<x`�f�3�C�x�f�3�F�����fff�`���f���0�3f���0�ff�x�0��f�k�H��f�d�`��f�`�x�3f���0�33f��PH�3ff�xPH�3�f�dx`�3�f�]�x�3�f�Z���ff���0�f3f��PH�fff�`�f�f�P0x�f�f�Px��f�f�P�����������������H�3����H�f����H����x�H�̙�n�`����h�x�3����H�33���x`�3f���x`�3���xx`�3̙�k�x�3���d���f����H�f3���x`�ff���0x�f���x0x�f̙�dx��f���]�����������������`�3����`�f����`������`����x�`����p�x�3����`�33����x�3f����x�3�����x�3���x�x�3���n���f����`�f3����x�ff���x��f����x��f���xx��f���k�����������������x�3����x�f����x������x������x����x�x�3����x�33������3f������3�������3�������3���x���f����x�f3������ff������f�������f�������f���x��������x������H��3� +�H��fterface._gatewayReady(); + +stop(); + +���������?�����execute ���/DojoExternalInterface._handleJSCall(); + +stop();����� ���Layer 1����O�O���("javascript:alert('TCallLabel')"); + +DojoExte8�� +CDocumentPagePage 1���Scene 1���s��C�������������������� DD��������������������������������������������������������� +h�hhhh�������� ����PropSheet::ActiveTab���7628����!PublishGifProperties::PaletteName������ PublishRNWKProperties::speed256K���0���"PublishHtmlProperties::StartPaused���0���%PublishFormatProperties::htmlFileName���flash6_gateway.html��� PublishQTProperties::LayerOption������ PublishQTProperties::AlphaOption������"PublishQTProperties::MatchMovieDim���1���Vector::Debugging Permitted���0���PublishProfileProperties::name���Default���PublishHtmlProperties::Loop���1���PublishFormatProperties::jpeg���0���PublishQTProperties::Width���550���$PublishPNGProperties::OptimizeColors���1���&PublishRNWKProperties::speedSingleISDN���0���&PublishRNWKProperties::singleRateAudio���0���Vector::External Player������%PublishHtmlProperties::showTagWarnMsg���1���PublishHtmlProperties::Units���0���4PublishHtmlProperties::UsingDefaultAlternateFilename���1���PublishGifProperties::Smooth���1���%PublishRNWKProperties::mediaCopyright���(c) 2000���#PublishRNWKProperties::flashBitRate���1200���Vector::Compress Movie���1���Vector::Package Paths������&PublishFormatProperties::flashFileName���..\..\..\flash6_gateway.swf���'PublishFormatProperties::gifDefaultName���1���%PublishFormatProperties::projectorMac���0���"PublishGifProperties::DitherOption������!PublishRNWKProperties::exportSMIL���1��� PublishRNWKProperties::speed384K���0���"PublishRNWKProperties::exportAudio���1���Vector::FireFox���0���PublishHtmlProperties::Quality���4���(PublishHtmlProperties::VerticalAlignment���1���$PublishFormatProperties::pngFileName���flash6_gateway.png���PublishFormatProperties::html���0���"PublishPNGProperties::FilterOption������'PublishRNWKProperties::mediaDescription������Vector::Override Sounds���0���!PublishHtmlProperties::DeviceFont���0���-PublishFormatProperties::generatorDefaultName���1���PublishQTProperties::Flatten���1���PublishPNGProperties::BitDepth���24-bit with Alpha���PublishPNGProperties::Smooth���1���"PublishGifProperties::DitherSolids���0���PublishGifProperties::Interlace���0���PublishJpegProperties::DPI���4718592���Vector::Quality���80���Vector::Protect���0���"PublishHtmlProperties::DisplayMenu���1���*PublishHtmlProperties::HorizontalAlignment���1���2PublishHtmlProperties::VersionDetectionIfAvailable���0���Vector::Template���0���*PublishFormatProperties::generatorFileName���flash6_gateway.swt���(PublishFormatProperties::rnwkDefaultName���1���(PublishFormatProperties::jpegDefaultName���1���PublishFormatProperties::gif���0���PublishGifProperties::Loop���1���PublishGifProperties::Width���550���$PublishRNWKProperties::mediaKeywords������!PublishRNWKProperties::mediaTitle������PublishRNWKProperties::speed28K���1���#PublishFormatProperties::qtFileName���flash6_gateway.mov���"PublishPNGProperties::DitherOption������#PublishGifProperties::PaletteOption������#PublishGifProperties::MatchMovieDim���1���$PublishRNWKProperties::speedDualISDN���0���$PublishRNWKProperties::realVideoRate���100000���PublishJpegProperties::Quality���80���PublishFormatProperties::flash���1���#PublishPNGProperties::PaletteOption������#PublishPNGProperties::MatchMovieDim���1���$PublishJpegProperties::MatchMovieDim���1���Vector::Package Export Frame���1���!PublishProfileProperties::version���1���PublishHtmlProperties::Align���0���-PublishFormatProperties::projectorWinFileName���flash6_gateway.exe���'PublishFormatProperties::pngDefaultName���1���0PublishFormatProperties::projectorMacDefaultName���1���#PublishQTProperties::PlayEveryFrame���0���"PublishPNGProperties::DitherSolids���0���"PublishJpegProperties::Progressive���0���Vector::Debugging Password������Vector::Omit Trace Actions���0���PublishHtmlProperties::Height���400���PublishHtmlProperties::Width���550���%PublishFormatProperties::jpegFileName���flash6_gateway.jpg���)PublishFormatProperties::flashDefaultName���0���PublishPNGProperties::Interlace���0���PublishGifProperties::Height���400���PublishJpegProperties::Size���0���Vector::DeviceSound���0���Vector::TopDown���0���'PublishHtmlProperties::TemplateFileName����C:\Documents and Settings\bradneuberg\Local Settings\Application Data\Macromedia\Flash MX 2004\en\Configuration\Html\Default.html���!PublishHtmlProperties::WindowMode���0���2PublishHtmlProperties::UsingDefaultContentFilename���1���-PublishFormatProperties::projectorMacFileName���flash6_gateway.hqx���(PublishFormatProperties::htmlDefaultName���1���PublishFormatProperties::rnwk���0���PublishFormatProperties::png���0���PublishQTProperties::Height���400���%PublishPNGProperties::RemoveGradients���0���PublishGifProperties::MaxColors���255���'PublishGifProperties::TransparentOption������PublishGifProperties::LoopCount������PublishRNWKProperties::speed56K���1���Vector::Report���0���+PublishHtmlProperties::OwnAlternateFilename������(PublishHtmlProperties::AlternateFilename������&PublishHtmlProperties::ContentFilename������"PublishFormatProperties::generator���0���$PublishGifProperties::OptimizeColors���1���"PublishRNWKProperties::audioFormat���0���Vector::Version���6���Vector::Event Format���0���Vector::Stream Compress���7���PublishFormatProperties::qt���0���PublishPNGProperties::Height���400���PublishPNGProperties::Width���550���%PublishGifProperties::RemoveGradients���0��� PublishRNWKProperties::speed512K���0���PublishJpegProperties::Height���400���Vector::ActionScriptVersion���2���Vector::Event Compress���7���PublishHtmlProperties::Scale���0���0PublishFormatProperties::projectorWinDefaultName���1���PublishQTProperties::Looping���0���*PublishQTProperties::UseQTSoundCompression���0���!PublishPNGProperties::PaletteName������!PublishPNGProperties::Transparent���0���&PublishGifProperties::TransparentAlpha���128���PublishGifProperties::Animated���0���"PublishRNWKProperties::mediaAuthor������(PublishRNWKProperties::speedCorporateLAN���0���&PublishRNWKProperties::showBitrateDlog���1���"PublishRNWKProperties::exportFlash���1���PublishJpegProperties::Width���550���Vector::Stream Format���0���"PublishHtmlProperties::VersionInfo������$PublishFormatProperties::gifFileName���flash6_gateway.gif���&PublishFormatProperties::qtDefaultName���1���"PublishQTProperties::PausedAtStart���0���%PublishQTProperties::ControllerOption���0���PublishPNGProperties::MaxColors���255���,PublishHtmlProperties::UsingOwnAlternateFile���0���%PublishFormatProperties::rnwkFileName���flash6_gateway.smil���%PublishFormatProperties::projectorWin���0���%PublishFormatProperties::defaultNames���0������������� CColorDef������3�P��f�P�0���P�H���P�`���P�x�3���33�(��3f�<�0�3��C�H�3��F�`�3��H�x�f��0�f3��0�ff�(�0�f��5�H�f��<�`�f��@�x���333�0���3����33�x��f3�d�0��3�]�H��3�Z�`��3�X�x�33����333�0�3f3�PPH�3�3�Px`�3�3�P�x�3�3�P���f3���0�f33�PH�ff3�(PH�f�3�<x`�f�3�C�x�f�3�F�����fff�`���f���0�3f���0�ff�x�0��f�k�H��f�d�`��f�`�x�3f���0�33f��PH�3ff�xPH�3�f�dx`�3�f�]�x�3�f�Z���ff���0�f3f��PH�fff�`�f�f�P0x�f�f�Px��f�f�P�����������������H�3����H�f����H����x�H�̙�n�`����h�x�3����H�33���x`�3f���x`�3���xx`�3̙�k�x�3���d���f����H�f3���x`�ff���0x�f���x0x�f̙�dx��f���]�����������������`�3����`�f����`������`����x�`����p�x�3����`�33����x�3f����x�3�����x�3���x�x�3���n���f����`�f3����x�ff���x��f����x��f���xx��f���k�����������������x�3����x�f����x������x������x����x�x�3����x�33������3f������3�������3�������3���x���f����x�f3������ff������f�������f�������f���x��������x������H��3� +�H��f��H����(�H����2�`����8�x����`��3� +�`��f��`�̙��`����(�`����0�x����x��3��x��f��x�����x���� �x����(�x�����P�x����3���H��33�x`��f3�x`���3�(x`���3�5�x���3�<����3���`��33��x��f3� +�x�̙3��x���3�(�x���3�2����3���x��33�����f3� +�����3������3������3�(���������x����f���H��3f��x`��ff�0x���f�(0x���f�<x����f�C����f���`��3f���x��ff�x��̙f�x����f�(x����f�5����f���x��3f������ff������f� +�����f������f�(��������(�x��������H��3���x`��f���0x��������̙�PP������P��������`��3����x��f���x��̙��P���̙�(P������<��������x��3�������f��������������̙��������(��������x�x��������`��3����x��f���x�������P������xP������d��������`��3����x��f���x��̙���P������������P��������x��3�������f�������������������������(����������x��������x��3�������f��������������������������x��������x��3�������f������̙������������������x��������x��3�������f�������������������������������������������������������������H����(�H����2�`����8�x����`��3� +�`��f��`�̙��`����(�`����0�x����x��3��x��f��x�����x���� �x����(�x�����P�x����3���H��33�x`��f3�x`���3�(x`���3�5�x���3�<����3���`��33��x��f3� +�x�̙3��x���3�(�x���3�2����3���x��33�����f3� +�����3������3������3�(���������x����f���H��3f��x`��ff�0x���f�(0x���f�<x����f�C����f���`��3f���x��ff�x��̙f�x����f�(x����f�5����f���x��3f������ff������f� +�����f������f�(��������(�x��������H��3���x`��f���0x��������̙�PP������P��������`��3����x��f���x��̙��P���̙�(P������<��������x��3�������f��������������̙��������(��������x�x��������`��3����x��f���x�������P������xP������d��������`��3����x��f���x��̙���P������������P��������x��3�������f�������������������������(����������x��������x��3�������f��������������������������x��������x��3�������f������̙������������������x��������x��3�������f�����������������������������������������������������������������f��`����z������f��������������*���]������������������"PublishQTProperties::QTSndSettings��CQTAudioSettings�����h������ + +����������������f��`����z������f��������������*���]������������������"PublishQTProperties::QTSndSettings��CQTAudioSettings�����h������ + +���������� \ No newline at end of file Index: openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/flash/flash8/DojoExternalInterface.as =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/flash/flash8/Attic/DojoExternalInterface.as,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/flash/flash8/DojoExternalInterface.as 7 Nov 2006 02:38:02 -0000 1.1 @@ -0,0 +1,234 @@ +/* + Copyright (c) 2004-2006, The Dojo Foundation + All Rights Reserved. + + Licensed under the Academic Free License version 2.1 or above OR the + modified BSD license. For more information on Dojo licensing, see: + + http://dojotoolkit.org/community/licensing.shtml +*/ + +/** + A wrapper around Flash 8's ExternalInterface; DojoExternalInterface is needed so that we + can do a Flash 6 implementation of ExternalInterface, and be able + to support having a single codebase that uses DojoExternalInterface + across Flash versions rather than having two seperate source bases, + where one uses ExternalInterface and the other uses DojoExternalInterface. + + DojoExternalInterface class does a variety of optimizations to bypass ExternalInterface's + unbelievably bad performance so that we can have good performance + on Safari; see the blog post + http://codinginparadise.org/weblog/2006/02/how-to-speed-up-flash-8s.html + for details. + + @author Brad Neuberg, bkn3@columbia.edu +*/ +import flash.external.ExternalInterface; + +class DojoExternalInterface{ + public static var available:Boolean; + public static var dojoPath = ""; + + private static var flashMethods:Array = new Array(); + private static var numArgs:Number; + private static var argData:Array; + private static var resultData = null; + + public static function initialize(){ + // extract the dojo base path + DojoExternalInterface.dojoPath = DojoExternalInterface.getDojoPath(); + + // see if we need to do an express install + var install:ExpressInstall = new ExpressInstall(); + if(install.needsUpdate){ + install.init(); + } + + // register our callback functions + ExternalInterface.addCallback("startExec", DojoExternalInterface, startExec); + ExternalInterface.addCallback("setNumberArguments", DojoExternalInterface, + setNumberArguments); + ExternalInterface.addCallback("chunkArgumentData", DojoExternalInterface, + chunkArgumentData); + ExternalInterface.addCallback("exec", DojoExternalInterface, exec); + ExternalInterface.addCallback("getReturnLength", DojoExternalInterface, + getReturnLength); + ExternalInterface.addCallback("chunkReturnData", DojoExternalInterface, + chunkReturnData); + ExternalInterface.addCallback("endExec", DojoExternalInterface, endExec); + + // set whether communication is available + DojoExternalInterface.available = ExternalInterface.available; + DojoExternalInterface.call("loaded"); + } + + public static function addCallback(methodName:String, instance:Object, + method:Function) : Boolean{ + // register DojoExternalInterface methodName with it's instance + DojoExternalInterface.flashMethods[methodName] = instance; + + // tell JavaScript about DojoExternalInterface new method so we can create a proxy + ExternalInterface.call("dojo.flash.comm._addExternalInterfaceCallback", + methodName); + + return true; + } + + public static function call(methodName:String, + resultsCallback:Function) : Void{ + // we might have any number of optional arguments, so we have to + // pass them in dynamically; strip out the results callback + var parameters = new Array(); + for(var i = 0; i < arguments.length; i++){ + if(i != 1){ // skip the callback + parameters.push(arguments[i]); + } + } + + var results = ExternalInterface.call.apply(ExternalInterface, parameters); + + // immediately give the results back, since ExternalInterface is + // synchronous + if(resultsCallback != null && typeof resultsCallback != "undefined"){ + resultsCallback.call(null, results); + } + } + + /** + Called by Flash to indicate to JavaScript that we are ready to have + our Flash functions called. Calling loaded() + will fire the dojo.flash.loaded() event, so that JavaScript can know that + Flash has finished loading and adding its callbacks, and can begin to + interact with the Flash file. + */ + public static function loaded(){ + DojoExternalInterface.call("dojo.flash.loaded"); + } + + public static function startExec():Void{ + DojoExternalInterface.numArgs = null; + DojoExternalInterface.argData = null; + DojoExternalInterface.resultData = null; + } + + public static function setNumberArguments(numArgs):Void{ + DojoExternalInterface.numArgs = numArgs; + DojoExternalInterface.argData = new Array(DojoExternalInterface.numArgs); + } + + public static function chunkArgumentData(value, argIndex:Number):Void{ + //getURL("javascript:dojo.debug('FLASH: chunkArgumentData, value="+value+", argIndex="+argIndex+"')"); + var currentValue = DojoExternalInterface.argData[argIndex]; + if(currentValue == null || typeof currentValue == "undefined"){ + DojoExternalInterface.argData[argIndex] = value; + }else{ + DojoExternalInterface.argData[argIndex] += value; + } + } + + public static function exec(methodName):Void{ + // decode all of the arguments that were passed in + for(var i = 0; i < DojoExternalInterface.argData.length; i++){ + DojoExternalInterface.argData[i] = + DojoExternalInterface.decodeData(DojoExternalInterface.argData[i]); + } + + var instance = DojoExternalInterface.flashMethods[methodName]; + DojoExternalInterface.resultData = instance[methodName].apply( + instance, DojoExternalInterface.argData); + // encode the result data + DojoExternalInterface.resultData = + DojoExternalInterface.encodeData(DojoExternalInterface.resultData); + + //getURL("javascript:dojo.debug('FLASH: encoded result data="+DojoExternalInterface.resultData+"')"); + } + + public static function getReturnLength():Number{ + if(DojoExternalInterface.resultData == null || + typeof DojoExternalInterface.resultData == "undefined"){ + return 0; + } + var segments = Math.ceil(DojoExternalInterface.resultData.length / 1024); + return segments; + } + + public static function chunkReturnData(segment:Number):String{ + var numSegments = DojoExternalInterface.getReturnLength(); + var startCut = segment * 1024; + var endCut = segment * 1024 + 1024; + if(segment == (numSegments - 1)){ + endCut = segment * 1024 + DojoExternalInterface.resultData.length; + } + + var piece = DojoExternalInterface.resultData.substring(startCut, endCut); + + //getURL("javascript:dojo.debug('FLASH: chunking return piece="+piece+"')"); + + return piece; + } + + public static function endExec():Void{ + } + + private static function decodeData(data):String{ + // we have to use custom encodings for certain characters when passing + // them over; for example, passing a backslash over as //// from JavaScript + // to Flash doesn't work + data = DojoExternalInterface.replaceStr(data, "&custom_backslash;", "\\"); + + data = DojoExternalInterface.replaceStr(data, "\\\'", "\'"); + data = DojoExternalInterface.replaceStr(data, "\\\"", "\""); + + return data; + } + + private static function encodeData(data){ + //getURL("javascript:dojo.debug('inside flash, data before="+data+"')"); + + // double encode all entity values, or they will be mis-decoded + // by Flash when returned + data = DojoExternalInterface.replaceStr(data, "&", "&"); + + // certain XMLish characters break Flash's wire serialization for + // ExternalInterface; encode these into a custom encoding, rather than + // the standard entity encoding, because otherwise we won't be able to + // differentiate between our own encoding and any entity characters + // that are being used in the string itself + data = DojoExternalInterface.replaceStr(data, '<', '&custom_lt;'); + data = DojoExternalInterface.replaceStr(data, '>', '&custom_gt;'); + + // encode control characters and JavaScript delimiters + data = DojoExternalInterface.replaceStr(data, "\n", "\\n"); + data = DojoExternalInterface.replaceStr(data, "\r", "\\r"); + data = DojoExternalInterface.replaceStr(data, "\f", "\\f"); + data = DojoExternalInterface.replaceStr(data, "'", "\\'"); + data = DojoExternalInterface.replaceStr(data, '"', '\"'); + + //getURL("javascript:dojo.debug('inside flash, data after="+data+"')"); + return data; + } + + /** + Flash ActionScript has no String.replace method or support for + Regular Expressions! We roll our own very simple one. + */ + private static function replaceStr(inputStr:String, replaceThis:String, + withThis:String):String { + var splitStr = inputStr.split(replaceThis) + inputStr = splitStr.join(withThis) + return inputStr; + } + + private static function getDojoPath(){ + var url = _root._url; + var start = url.indexOf("baseRelativePath=") + "baseRelativePath=".length; + var path = url.substring(start); + var end = path.indexOf("&"); + if(end != -1){ + path = path.substring(0, end); + } + return path; + } +} + +// vim:ts=4:noet:tw=0: Index: openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/flash/flash8/ExpressInstall.as =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/flash/flash8/Attic/ExpressInstall.as,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/flash/flash8/ExpressInstall.as 7 Nov 2006 02:38:02 -0000 1.1 @@ -0,0 +1,81 @@ +/* + Copyright (c) 2004-2006, The Dojo Foundation + All Rights Reserved. + + Licensed under the Academic Free License version 2.1 or above OR the + modified BSD license. For more information on Dojo licensing, see: + + http://dojotoolkit.org/community/licensing.shtml +*/ + +/** + * Based on the expressinstall.as class created by Geoff Stearns as part + * of the FlashObject library. + * + * Use this file to invoke the Macromedia Flash Player Express Install functionality + * This file is intended for use with the FlashObject embed script. You can download FlashObject + * and this file at the following URL: http://blog.deconcept.com/flashobject/ + * + * Usage: + * var ExpressInstall = new ExpressInstall(); + * + * // test to see if install is needed: + * if (ExpressInstall.needsUpdate) { // returns true if update is needed + * ExpressInstall.init(); // starts the update + * } + * + * NOTE: Your Flash movie must be at least 214px by 137px in order to use ExpressInstall. + * + */ + +class ExpressInstall { + public var needsUpdate:Boolean; + private var updater:MovieClip; + private var hold:MovieClip; + + public function ExpressInstall(){ + // does the user need to update? + this.needsUpdate = (_root.MMplayerType == undefined) ? false : true; + } + + public function init():Void{ + this.loadUpdater(); + } + + public function loadUpdater():Void { + System.security.allowDomain("fpdownload.macromedia.com"); + + // hope that nothing is at a depth of 10000000, you can change this depth if needed, but you want + // it to be on top of your content if you have any stuff on the first frame + this.updater = _root.createEmptyMovieClip("expressInstallHolder", 10000000); + + // register the callback so we know if they cancel or there is an error + var _self = this; + this.updater.installStatus = _self.onInstallStatus; + this.hold = this.updater.createEmptyMovieClip("hold", 1); + + // can't use movieClipLoader because it has to work in 6.0.65 + this.updater.onEnterFrame = function():Void { + if(typeof this.hold.startUpdate == 'function'){ + _self.initUpdater(); + this.onEnterFrame = null; + } + } + + var cacheBuster:Number = Math.random(); + + this.hold.loadMovie("http://fpdownload.macromedia.com/pub/flashplayer/" + +"update/current/swf/autoUpdater.swf?"+ cacheBuster); + } + + private function initUpdater():Void{ + this.hold.redirectURL = _root.MMredirectURL; + this.hold.MMplayerType = _root.MMplayerType; + this.hold.MMdoctitle = _root.MMdoctitle; + this.hold.startUpdate(); + } + + public function onInstallStatus(msg):Void{ + getURL("javascript:dojo.flash.install._onInstallStatus('"+msg+"')"); + } +} Index: openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/gfx/color/hsl.js =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/gfx/color/Attic/hsl.js,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/gfx/color/hsl.js 7 Nov 2006 02:38:02 -0000 1.1 @@ -0,0 +1,139 @@ +/* + Copyright (c) 2004-2006, The Dojo Foundation + All Rights Reserved. + + Licensed under the Academic Free License version 2.1 or above OR the + modified BSD license. For more information on Dojo licensing, see: + + http://dojotoolkit.org/community/licensing.shtml +*/ + +dojo.provide("dojo.gfx.color.hsl"); +dojo.require("dojo.lang.array"); + +dojo.lang.extend(dojo.gfx.color.Color, { + toHsl: function() { + return dojo.gfx.color.rgb2hsl(this.toRgb()); + } +}); + +dojo.gfx.color.rgb2hsl = function(r, g, b){ + if (dojo.lang.isArray(r)) { + b = r[2] || 0; + g = r[1] || 0; + r = r[0] || 0; + } + + r /= 255; + g /= 255; + b /= 255; + + // + // based on C code from http://astronomy.swin.edu.au/~pbourke/colour/hsl/ + // + + var h = null; + var s = null; + var l = null; + + var min = Math.min(r, g, b); + var max = Math.max(r, g, b); + var delta = max - min; + + l = (min + max) / 2; + s = 0; + + if ((l > 0) && (l < 1)){ + s = delta / ((l < 0.5) ? (2 * l) : (2 - 2 * l)); + } + + h = 0; + + if (delta > 0) { + if ((max == r) && (max != g)){ + h += (g - b) / delta; + } + if ((max == g) && (max != b)){ + h += (2 + (b - r) / delta); + } + if ((max == b) && (max != r)){ + h += (4 + (r - g) / delta); + } + h *= 60; + } + + h = (h == 0) ? 360 : Math.ceil((h / 360) * 255); + s = Math.ceil(s * 255); + l = Math.ceil(l * 255); + + return [h, s, l]; +} + +dojo.gfx.color.hsl2rgb = function(h, s, l){ + if (dojo.lang.isArray(h)) { + l = h[2] || 0; + s = h[1] || 0; + h = h[0] || 0; + } + + h = (h / 255) * 360; + if (h == 360){ h = 0;} + s = s / 255; + l = l / 255; + + // + // based on C code from http://astronomy.swin.edu.au/~pbourke/colour/hsl/ + // + + + while (h < 0){ h += 360; } + while (h > 360){ h -= 360; } + var r, g, b; + if (h < 120){ + r = (120 - h) / 60; + g = h / 60; + b = 0; + }else if (h < 240){ + r = 0; + g = (240 - h) / 60; + b = (h - 120) / 60; + }else{ + r = (h - 240) / 60; + g = 0; + b = (360 - h) / 60; + } + + r = Math.min(r, 1); + g = Math.min(g, 1); + b = Math.min(b, 1); + + r = 2 * s * r + (1 - s); + g = 2 * s * g + (1 - s); + b = 2 * s * b + (1 - s); + + if (l < 0.5){ + r = l * r; + g = l * g; + b = l * b; + }else{ + r = (1 - l) * r + 2 * l - 1; + g = (1 - l) * g + 2 * l - 1; + b = (1 - l) * b + 2 * l - 1; + } + + r = Math.ceil(r * 255); + g = Math.ceil(g * 255); + b = Math.ceil(b * 255); + + return [r, g, b]; +} + +dojo.gfx.color.hsl2hex = function(h, s, l){ + var rgb = dojo.gfx.color.hsl2rgb(h, s, l); + return dojo.gfx.color.rgb2hex(rgb[0], rgb[1], rgb[2]); +} + +dojo.gfx.color.hex2hsl = function(hex){ + var rgb = dojo.gfx.color.hex2rgb(hex); + return dojo.gfx.color.rgb2hsl(rgb[0], rgb[1], rgb[2]); +} Index: openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/gfx/color/hsv.js =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/gfx/color/Attic/hsv.js,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/gfx/color/hsv.js 7 Nov 2006 02:38:02 -0000 1.1 @@ -0,0 +1,246 @@ +/* + Copyright (c) 2004-2006, The Dojo Foundation + All Rights Reserved. + + Licensed under the Academic Free License version 2.1 or above OR the + modified BSD license. For more information on Dojo licensing, see: + + http://dojotoolkit.org/community/licensing.shtml +*/ + +dojo.provide("dojo.gfx.color.hsv"); +dojo.require("dojo.lang.array"); +dojo.require("dojo.math"); + +dojo.lang.extend(dojo.gfx.color.Color, { + toHsv: function() { + return dojo.gfx.color.rgb2hsv(this.toRgb()); + } + +}); + +// Default input range for RBG values is 0-255 +dojo.gfx.color.rgb2hsv = function(/* int || Array */r, /* int */g, /* int */b, /* Object? */options){ + // summary + // converts an RGB value set to HSV, ranges depending on optional options object. + // patch for options by Matthew Eernisse + if (dojo.lang.isArray(r)) { + if(g) { + options = g; + } + b = r[2] || 0; + g = r[1] || 0; + r = r[0] || 0; + } + + var opt = { + inputRange: (options && options.inputRange) ? options.inputRange : 255, + outputRange: (options && options.outputRange) ? options.outputRange : [255, 255, 255] + }; + + // r,g,b, each 0 to 255, to HSV. + // h = 0.0 to 360.0 (corresponding to 0..360.0 degrees around hexcone) + // s = 0.0 (shade of gray) to 1.0 (pure color) + // v = 0.0 (black) to 1.0 {white) + // + // Based on C Code in "Computer Graphics -- Principles and Practice," + // Foley et al, 1996, p. 592. + // + // our calculatuions are based on 'regular' values (0-360, 0-1, 0-1) + // but we return bytes values (0-255, 0-255, 0-255) + + var h = null; + var s = null; + var v = null; + + switch(opt.inputRange) { + // 0.0-1.0 + case 1: + r = (r * 255); + g = (g * 255); + b = (b * 255); + break; + // 0-100 + case 100: + r = (r / 100) * 255; + g = (g / 100) * 255; + b = (b / 100) * 255; + break; + // 0-255 + default: + // Do nothing + break; + } + + var min = Math.min(r, g, b); + v = Math.max(r, g, b); + + var delta = v - min; + + // calculate saturation (0 if r, g and b are all 0) + + s = (v == 0) ? 0 : delta/v; + if (s == 0){ + // achromatic: when saturation is, hue is undefined + h = 0; + }else{ + // chromatic + if (r == v){ + // between yellow and magenta + h = 60 * (g - b) / delta; + }else{ + if (g == v){ + // between cyan and yellow + h = 120 + 60 * (b - r) / delta; + }else{ + if (b == v){ + // between magenta and cyan + h = 240 + 60 * (r - g) / delta; + } + } + } + if (h <= 0){ + h += 360; + } + } + // Hue + switch (opt.outputRange[0]) { + case 360: + // Do nothing + break; + case 100: + h = (h / 360) * 100; + break; + case 1: + h = (h / 360); + break; + default: // 255 + h = (h / 360) * 255; + break; + } + // Saturation + switch (opt.outputRange[1]) { + case 100: + s = s * 100; + case 1: + // Do nothing + break; + default: // 255 + s = s * 255; + break; + } + // Value + switch (opt.outputRange[2]) { + case 100: + v = (v / 255) * 100; + break; + case 1: + v = (v / 255); + break; + default: // 255 + // Do nothing + break; + } + h = dojo.math.round(h); + s = dojo.math.round(s); + v = dojo.math.round(v); + return [h, s, v]; +} + +// Based on C Code in "Computer Graphics -- Principles and Practice," +// Foley et al, 1996, p. 593. +// +// H = 0 to 255 (corresponding to 0..360 degrees around hexcone) 0 for S = 0 +// S = 0 (shade of gray) to 255 (pure color) +// V = 0 (black) to 255 (white) +dojo.gfx.color.hsv2rgb = function(/* int || Array */h, /* int */s, /* int */v, /* Object? */options){ + // summary + // converts an HSV value set to RGB, ranges depending on optional options object. + // patch for options by Matthew Eernisse + if (dojo.lang.isArray(h)) { + if(s){ + options = s; + } + v = h[2] || 0; + s = h[1] || 0; + h = h[0] || 0; + } + + var opt = { + inputRange: (options && options.inputRange) ? options.inputRange : [255, 255, 255], + outputRange: (options && options.outputRange) ? options.outputRange : 255 + }; + + switch(opt.inputRange[0]) { + // 0.0-1.0 + case 1: h = h * 360; break; + // 0-100 + case 100: h = (h / 100) * 360; break; + // 0-360 + case 360: h = h; break; + // 0-255 + default: h = (h / 255) * 360; + } + if (h == 360){ h = 0;} + + // no need to alter if inputRange[1] = 1 + switch(opt.inputRange[1]){ + case 100: s /= 100; break; + case 255: s /= 255; + } + + // no need to alter if inputRange[1] = 1 + switch(opt.inputRange[2]){ + case 100: v /= 100; break; + case 255: v /= 255; + } + + var r = null; + var g = null; + var b = null; + + if (s == 0){ + // color is on black-and-white center line + // achromatic: shades of gray + r = v; + g = v; + b = v; + }else{ + // chromatic color + var hTemp = h / 60; // h is now IN [0,6] + var i = Math.floor(hTemp); // largest integer <= h + var f = hTemp - i; // fractional part of h + + var p = v * (1 - s); + var q = v * (1 - (s * f)); + var t = v * (1 - (s * (1 - f))); + + switch(i){ + case 0: r = v; g = t; b = p; break; + case 1: r = q; g = v; b = p; break; + case 2: r = p; g = v; b = t; break; + case 3: r = p; g = q; b = v; break; + case 4: r = t; g = p; b = v; break; + case 5: r = v; g = p; b = q; break; + } + } + + switch(opt.outputRange){ + case 1: + r = dojo.math.round(r, 2); + g = dojo.math.round(g, 2); + b = dojo.math.round(b, 2); + break; + case 100: + r = Math.round(r * 100); + g = Math.round(g * 100); + b = Math.round(b * 100); + break; + default: + r = Math.round(r * 255); + g = Math.round(g * 255); + b = Math.round(b * 255); + } + + return [r, g, b]; +} Index: openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/html/images/shadowB.png =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/html/images/Attic/shadowB.png,v diff -u Binary files differ Index: openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/html/images/shadowBL.png =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/html/images/Attic/shadowBL.png,v diff -u Binary files differ Index: openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/html/images/shadowBR.png =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/html/images/Attic/shadowBR.png,v diff -u Binary files differ Index: openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/html/images/shadowL.png =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/html/images/Attic/shadowL.png,v diff -u Binary files differ Index: openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/html/images/shadowR.png =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/html/images/Attic/shadowR.png,v diff -u Binary files differ Index: openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/html/images/shadowT.png =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/html/images/Attic/shadowT.png,v diff -u Binary files differ Index: openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/html/images/shadowTL.png =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/html/images/Attic/shadowTL.png,v diff -u Binary files differ Index: openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/html/images/shadowTR.png =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/html/images/Attic/shadowTR.png,v diff -u Binary files differ Index: openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/i18n/currency/common.js =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/i18n/currency/Attic/common.js,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/i18n/currency/common.js 7 Nov 2006 02:38:03 -0000 1.1 @@ -0,0 +1,289 @@ +/* + Copyright (c) 2004-2006, The Dojo Foundation + All Rights Reserved. + + Licensed under the Academic Free License version 2.1 or above OR the + modified BSD license. For more information on Dojo licensing, see: + + http://dojotoolkit.org/community/licensing.shtml +*/ + +dojo.provide("dojo.i18n.currency.common"); + +dojo.require("dojo.experimental"); +dojo.experimental("dojo.i18n.currency"); + +dojo.require("dojo.regexp"); +dojo.require("dojo.i18n.common"); +dojo.require("dojo.i18n.number"); +dojo.require("dojo.lang.common"); + +/** +* Method to Format and validate a given number a monetary value +* +* @param Number value +* The number to be formatted and validated. +* @param String iso the ISO 4217 currency code +* @param Object flags +* flags.places The number of decimal places to be included in the formatted number +* @param String locale the locale to determine formatting used. By default, the locale defined by the +* host environment: dojo.locale +* @return String +* the formatted currency of type String if successful; Nan if an +* invalid currency is provided or null if an unsupported locale value was provided. +**/ +dojo.i18n.currency.format = function(value, iso, flags /*optional*/, locale /*optional*/){ + flags = (typeof flags == "object") ? flags : {}; + + var formatData = dojo.i18n.currency._mapToLocalizedFormatData(dojo.i18n.currency.FORMAT_TABLE, iso, locale); + if (typeof flags.places == "undefined") {flags.places = formatData.places;} + if (typeof flags.places == "undefined") {flags.places = 2;} + flags.signed = false; + + var result = dojo.i18n.number.format(value, flags, locale); + + var sym = formatData.symbol; + if (formatData.adjSpace == "symbol"){ + if (formatData.placement == "after"){ + sym = " " + sym;// TODO: nbsp? + }else{ + sym = sym + " ";// TODO: nbsp? + } + } + + if (value < 0){ + if (formatData.signPlacement == "before"){ + sym = "-" + sym; + }else if (formatData.signPlacement == "after"){ + sym = sym + "-"; + } + } + + var spc = (formatData.adjSpace == "number") ? " " : ""; // TODO: nbsp? + if (formatData.placement == "after"){ + result = result + spc + sym; + }else{ + result = sym + spc + result; + } + + if (value < 0){ + if (formatData.signPlacement == "around"){ + result = "(" + result + ")"; + }else if (formatData.signPlacement == "end"){ + result = result + "-"; + }else if (!formatData.signPlacement || formatData.signPlacement == "begin"){ + result = "-" + result; + } + } + + return result; +}; + +/** +* Method to convert a properly formatted monetary value to a primative numeric value. +* +* @param String value +* The int string to be convertted + @param String iso the ISO 4217 currency code +* @param String locale the locale to determine formatting used. By default, the locale defined by the +* host environment: dojo.locale +* @param Object flags +* flags.validate true to check the string for strict adherence to the locale settings for separator, sign, etc. +* Default is true +* @return Number +* Returns a primative numeric value, Number.NaN if unable to convert to a number, or null if an unsupported locale is provided. +**/ +dojo.i18n.currency.parse = function(value, iso, locale, flags /*optional*/){ + if (typeof flags.validate == "undefined") {flags.validate = true;} + + if (flags.validate && !dojo.i18n.number.isCurrency(value, iso, locale, flags)) { + return Number.NaN; + } + + var sign = (value.indexOf('-') != -1); + var abs = abs.replace(/\-/, ""); + + var formatData = dojo.i18n.currency._mapToLocalizedFormatData(dojo.i18n.currency.FORMAT_TABLE, iso, locale); + abs = abs.replace(new RegExp("\\" + formatData.symbol), ""); + //TODO: trim? + + var number = dojo.i18n.number.parse(abs, locale, flags); + if (sign){number = number * -1;} + return number; +}; + +/** + Validates whether a string denotes a monetary value. + + @param value A string + @param iso the ISO 4217 currency code + @param locale the locale to determine formatting used. By default, the locale defined by the + host environment: dojo.locale + @param flags An object + flags.symbol A currency symbol such as Yen "�", Pound "�", or the Euro sign "�". + The default is specified by the iso code. For more than one symbol use an array, e.g. ["$", ""], makes $ optional. + The empty array [] makes the default currency symbol optional. + flags.placement The symbol can come "before" or "after". The default is specified by the iso code. + flags.signed The leading plus-or-minus sign. Can be true, false, or [true, false]. + Default is [true, false], (i.e. sign is optional). + flags.signPlacement The sign can come "before" or "after" the symbol or "around" the whole expression + with parenthesis, such as CAD: (123$). The default is specified by the iso code. + flags.separator The character used as the thousands separator. The default is specified by the locale. + The empty array [] makes the default separator optional. + flags.fractional The appropriate number of decimal places for fractional currency (e.g. cents) + Can be true, false, or [true, false]. Default is [true, false], (i.e. cents are optional). + flags.places The integer number of decimal places. + If not given, an amount appropriate to the iso code is used. + flags.fractional The appropriate number of decimal places for fractional currency (e.g. cents) + Can be true, false, or [true, false]. Default is [true, false], (i.e. cents are optional). + flags.decimal The character used for the decimal point. The default is specified by the locale. + @return true or false. +*/ +dojo.i18n.currency.isCurrency = function(value, iso, locale /*optional*/, flags){ + flags = (typeof flags == "object") ? flags : {}; + + var numberFormatData = dojo.i18n.number._mapToLocalizedFormatData(dojo.i18n.number.FORMAT_TABLE, locale); + if (typeof flags.separator == "undefined") {flags.separator = numberFormatData[0];} + else if (dojo.lang.isArray(flags.separator) && flags.separator.length == 0){flags.separator = [numberFormatData[0],""];} + if (typeof flags.decimal == "undefined") {flags.decimal = numberFormatData[2];} + if (typeof flags.groupSize == "undefined") {flags.groupSize = numberFormatData[3];} + if (typeof flags.groupSize2 == "undefined") {flags.groupSize2 = numberFormatData[4];} + + var formatData = dojo.i18n.currency._mapToLocalizedFormatData(dojo.i18n.currency.FORMAT_TABLE, iso, locale); + if (typeof flags.places == "undefined") {flags.places = formatData.places;} + if (typeof flags.places == "undefined") {flags.places = 2;} + if (typeof flags.symbol == "undefined") {flags.symbol = formatData.symbol;} + else if (dojo.lang.isArray(flags.symbol) && flags.symbol.length == 0){flags.symbol = [formatData.symbol,""];} + if (typeof flags.placement == "undefined") {flags.placement = formatData.placement;} + //TODO more... or mixin? + + var re = new RegExp("^" + dojo.regexp.currency(flags) + "$"); +//dojo.debug(value+":"+dojo.regexp.currency(flags)+"="+re.test(value)); + return re.test(value); +}; + +dojo.i18n.currency._mapToLocalizedFormatData = function(table, iso, locale /*optional*/){ + var formatData = dojo.i18n.currency.FORMAT_TABLE[iso]; + if (!dojo.lang.isArray(formatData)){ + return formatData; + } + + return dojo.i18n.number._mapToLocalizedFormatData(formatData[0], locale); +}; + +(function() { + var arabic = {symbol: "\u062C", placement: "after", htmlSymbol: "?"}; + var euro = {symbol: "\u20AC", placement: "before", adjSpace: "symbol", htmlSymbol: "€"}; + var euroAfter = {symbol: "\u20AC", placement: "after", htmlSymbol: "€"}; + +//Q: Do European countries still use their old ISO symbols instead of just EUR? +//Q: are signPlacement and currency symbol placement ISO-dependent or are they really locale-dependent? +//TODO: htmlSymbol is for html entities, need images? (IBM: why? why can't we just use unicode everywhere?) +//TODO: hide visibility of this table? +//for html entities, need a image for arabic symbol "BHD" as "DZD", "EGP", "JOD", "KWD" "LBP", "MAD", "OMR", "QAR", "SAR", "SYP", "TND", "AED", "YER" +//Note: html entities not used at the moment +//placement: placement of currency symbol, before or after number +//signPlacement: placement of negative sign, before or after symbol, or begin or end of expression, or around with parentheses +// This table assumes defaults of +// places: 2, placement: "before", signPlacement: "begin", adjSpace: undefined, htmlSymbol: undefined] +dojo.i18n.currency.FORMAT_TABLE = { + AED: {symbol: "\u062c", placement: "after"}, + ARS: {symbol: "$", signPlacement: "after"}, + //Old ATS: {symbol: "S", adjSpace: "symbol"}, + ATS: {symbol: "\u20AC", adjSpace: "number", signPlacement: "after", htmlSymbol: "€"}, //Austria using "EUR" // neg should read euro + sign + space + number + AUD: {symbol: "$"}, + BOB: {symbol: "$b"}, + BRL: {symbol: "R$", adjSpace: "symbol"}, + //Old BEF: {symbol: "BF", placement: "after", adjSpace: "symbol"}, + BEF: euroAfter, //Belgium using "EUR" + //Old BHD: {symbol: "\u062C", signPlacement: "end", places: 3, htmlSymbol: "?"}, + BHD: arabic, + //TODO: I'm suspicious that all the other entries have locale-specific data in them, too? + //Q: which attributes are iso-specific and which are locale specific? + CAD: [{ + '*' : {symbol: "$"}, + 'fr-ca' : {symbol: "$", placement: "after", signPlacement: "around"} + }], + CHF: {symbol: "CHF", adjSpace: "symbol", signPlacement: "after"}, + CLP: {symbol: "$"}, + COP: {symbol: "$", signPlacement: "around"}, + CNY: {symbol: "\u00A5", htmlSymbol: "¥"}, + //// Costa Rica - Spanish slashed C. need to find out the html entity image + CRC: {symbol: "\u20A1", signPlacement: "after", htmlSymbol: "?"}, + // Czech Republic - Czech //need image for html entities + CZK: {symbol: "Kc", adjSpace: "symbol", signPlacement: "after"}, + DEM: euroAfter, + DKK: {symbol: "kr.", adjSpace: "symbol", signPlacement: "after"}, + DOP: {symbol: "$"}, + //for html entities, need a image, bidi, using "rtl", so from the link, symbol is suffix + //Old DZD: {symbol: "\u062C", signPlacement: "end", places: 3, htmlSymbol: "?"}, + DZD: arabic, + //Ecuador using "USD" + ECS: {symbol: "$", signPlacement: "after"}, + EGP: arabic, + //Old ESP: {symbol: "Pts", placement: "after", adjSpace: "symbol", places: 0}, + ESP: euroAfter, //spain using "EUR" + EUR: euro, + //Old FIM: {symbol: "mk", placement: "after", adjSpace: "symbol"}, + FIM: euroAfter, //Finland using "EUR" + //Old FRF: {symbol: "F", placement: "after", adjSpace: "symbol"}, + FRF: euroAfter, //France using "EUR" + GBP: {symbol: "\u00A3", htmlSymbol: "£"}, + GRD: {symbol: "\u20AC", signPlacement: "end", htmlSymbol: "€"}, + GTQ: {symbol: "Q", signPlacement: "after"}, + //Hong Kong need "HK$" and "$". Now only support "HK$" + HKD: {symbol: "HK$"}, + HNL: {symbol: "L.", signPlacement: "end"}, + HUF: {symbol: "Ft", placement: "after", adjSpace: "symbol"}, + //IEP: {symbol: "\u00A3", htmlSymbol: "£"}, + IEP: {symbol: "\u20AC", htmlSymbol: "€"}, //ireland using "EUR" at the front. + //couldn't know what Israel - Hebrew symbol, some sites use "NIS", bidi, using "rtl", so from the link, symbol is suffix (IBM: huh?) + //ILS: {symbol: "\u05E9\u0022\u05D7", signPlacement: "end", htmlSymbol: "?"}, + ILS: {symbol: "\u05E9\u0022\u05D7", placement: "after", htmlSymbol: "?"}, + INR: {symbol: "Rs."}, + //ITL: {symbol: "L", adjSpace: "symbol", signPlacement: "after", places: 0}, + ITL: {symbol: "\u20AC", signPlacement: "after", htmlSymbol: "€"}, //Italy using "EUR" + JOD: arabic, + JPY: {symbol: "\u00a5", places: 0, htmlSymbol: "¥"}, + KRW: {symbol: "\u20A9", places: 0, htmlSymbol: "?"}, + KWD: arabic, + LBP: arabic, + //Old LUF: {symbol: "LUF", placement: "after", adjSpace: "symbol"}, + //for Luxembourg,using "EUR" + LUF: euroAfter, + MAD: arabic, + MXN: {symbol: "$", signPlacement: "around"}, + NIO: {symbol: "C$", adjSpace: "symbol", signPlacement: "after"}, + //Old NLG: {symbol: "f", adjSpace: "symbol", signPlacement: "end"}, + //Netherlands, using "EUR" + NLG: {symbol: "\u20AC", signPlacement: "end", htmlSymbol: "€"}, + NOK: {symbol: "kr", adjSpace: "symbol", signPlacement: "after"}, + NZD: {symbol: "$"}, + OMR: arabic, + PAB: {symbol: "B/", adjSpace: "symbol", signPlacement: "after"}, + PEN: {symbol: "S/", signPlacement: "after"}, + //couldn't know what the symbol is from ibm link. (IBM: what does this mean? Is the symbol 'z' wrong?) + PLN: {symbol: "z", placement: "after"}, + //Old PTE: {symbol: "Esc.", placement: "after", adjSpace: "symbol", places: 0}, + PTE: euroAfter, + PYG: {symbol: "Gs.", signPlacement: "after"}, + QAR: arabic, + RUR: {symbol: "rub.", placement: "after"}, + SAR: arabic, + SEK: {symbol: "kr", placement: "after", adjSpace: "symbol"}, + SGD: {symbol: "$"}, + //// El Salvador - Spanish slashed C. need to find out. (IBM: need to find out what?) + SVC: {symbol: "\u20A1", signPlacement: "after", adjSpace: "symbol"}, + //for html entities, need a image + SYP: arabic, + TND: arabic, + TRL: {symbol: "TL", placement: "after"}, + TWD: {symbol: "NT$"}, + USD: {symbol: "$"}, + UYU: {symbol: "$U", signplacement: "after", adjSpace: "symbol"}, + VEB: {symbol: "Bs", signplacement: "after", adjSpace: "symbol"}, + YER: arabic, + ZAR: {symbol: "R", signPlacement: "around"} +}; + +})(); Index: openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/i18n/currency/nls/EUR.js =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/i18n/currency/nls/Attic/EUR.js,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/i18n/currency/nls/EUR.js 7 Nov 2006 02:38:03 -0000 1.1 @@ -0,0 +1,14 @@ +/* + Copyright (c) 2004-2006, The Dojo Foundation + All Rights Reserved. + + Licensed under the Academic Free License version 2.1 or above OR the + modified BSD license. For more information on Dojo licensing, see: + + http://dojotoolkit.org/community/licensing.shtml +*/ + +({ + displayName: "EUR", + symbol: "\u20AC" +}) \ No newline at end of file Index: openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/i18n/currency/nls/GBP.js =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/i18n/currency/nls/Attic/GBP.js,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/i18n/currency/nls/GBP.js 7 Nov 2006 02:38:03 -0000 1.1 @@ -0,0 +1,14 @@ +/* + Copyright (c) 2004-2006, The Dojo Foundation + All Rights Reserved. + + Licensed under the Academic Free License version 2.1 or above OR the + modified BSD license. For more information on Dojo licensing, see: + + http://dojotoolkit.org/community/licensing.shtml +*/ + +({ + displayName: "GBP", + symbol: "\u00A3" +}) \ No newline at end of file Index: openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/i18n/currency/nls/INR.js =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/i18n/currency/nls/Attic/INR.js,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/i18n/currency/nls/INR.js 7 Nov 2006 02:38:03 -0000 1.1 @@ -0,0 +1,14 @@ +/* + Copyright (c) 2004-2006, The Dojo Foundation + All Rights Reserved. + + Licensed under the Academic Free License version 2.1 or above OR the + modified BSD license. For more information on Dojo licensing, see: + + http://dojotoolkit.org/community/licensing.shtml +*/ + +({ + displayName: "INR", + symbol: function(value){return (value == 1) ? "Re." : "Rs.";} +}) \ No newline at end of file Index: openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/i18n/currency/nls/ITL.js =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/i18n/currency/nls/Attic/ITL.js,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/i18n/currency/nls/ITL.js 7 Nov 2006 02:38:03 -0000 1.1 @@ -0,0 +1,14 @@ +/* + Copyright (c) 2004-2006, The Dojo Foundation + All Rights Reserved. + + Licensed under the Academic Free License version 2.1 or above OR the + modified BSD license. For more information on Dojo licensing, see: + + http://dojotoolkit.org/community/licensing.shtml +*/ + +({ + displayName: "ITL", + symbol: "\u20A4" +}) \ No newline at end of file Index: openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/i18n/currency/nls/JPY.js =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/i18n/currency/nls/Attic/JPY.js,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/i18n/currency/nls/JPY.js 7 Nov 2006 02:38:03 -0000 1.1 @@ -0,0 +1,14 @@ +/* + Copyright (c) 2004-2006, The Dojo Foundation + All Rights Reserved. + + Licensed under the Academic Free License version 2.1 or above OR the + modified BSD license. For more information on Dojo licensing, see: + + http://dojotoolkit.org/community/licensing.shtml +*/ + +({ + displayName: "JPY", + symbol: "\u00a5" +}) \ No newline at end of file Index: openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/i18n/currency/nls/USD.js =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/i18n/currency/nls/Attic/USD.js,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/i18n/currency/nls/USD.js 7 Nov 2006 02:38:03 -0000 1.1 @@ -0,0 +1,14 @@ +/* + Copyright (c) 2004-2006, The Dojo Foundation + All Rights Reserved. + + Licensed under the Academic Free License version 2.1 or above OR the + modified BSD license. For more information on Dojo licensing, see: + + http://dojotoolkit.org/community/licensing.shtml +*/ + +({ + displayName: "USD", + symbol: "$" +}) \ No newline at end of file Index: openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/lang/timing/Streamer.js =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/lang/timing/Attic/Streamer.js,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/lang/timing/Streamer.js 7 Nov 2006 02:38:03 -0000 1.1 @@ -0,0 +1,99 @@ +/* + Copyright (c) 2004-2006, The Dojo Foundation + All Rights Reserved. + + Licensed under the Academic Free License version 2.1 or above OR the + modified BSD license. For more information on Dojo licensing, see: + + http://dojotoolkit.org/community/licensing.shtml +*/ + +dojo.provide("dojo.lang.timing.Streamer"); +dojo.require("dojo.lang.timing.Timer"); + +dojo.lang.timing.Streamer = function( + /* function */input, + /* function */output, + /* int */interval, + /* int */minimum, + /* array */initialData +){ + // summary + // Streamer will take an input function that pushes N datapoints into a + // queue, and will pass the next point in that queue out to an + // output function at the passed interval; this way you can emulate + // a constant buffered stream of data. + // input: the function executed when the internal queue reaches minimumSize + // output: the function executed on internal tick + // interval: the interval in ms at which the output function is fired. + // minimum: the minimum number of elements in the internal queue. + + var self = this; + var queue = []; + + // public properties + this.interval = interval || 1000; + this.minimumSize = minimum || 10; // latency usually == interval * minimumSize + this.inputFunction = input || function(q){ }; + this.outputFunction = output || function(point){ }; + + // more setup + var timer = new dojo.lang.timing.Timer(this.interval); + var tick = function(){ + self.onTick(self); + + if(queue.length < self.minimumSize){ + self.inputFunction(queue); + } + + var obj = queue.shift(); + while(typeof(obj) == "undefined" && queue.length > 0){ + obj = queue.shift(); + } + + // check to see if the input function needs to be fired + // stop before firing the output function + // TODO: relegate this to the output function? + if(typeof(obj) == "undefined"){ + self.stop(); + return; + } + + // call the output function. + self.outputFunction(obj); + }; + + this.setInterval = function(/* int */ms){ + // summary + // sets the interval in milliseconds of the internal timer + this.interval = ms; + timer.setInterval(ms); + }; + + this.onTick = function(/* dojo.lang.timing.Streamer */obj){ }; + // wrap the timer functions so that we can connect to them if needed. + this.start = function(){ + // summary + // starts the Streamer + if(typeof(this.inputFunction) == "function" && typeof(this.outputFunction) == "function"){ + timer.start(); + return; + } + dojo.raise("You cannot start a Streamer without an input and an output function."); + }; + this.onStart = function(){ }; + this.stop = function(){ + // summary + // stops the Streamer + timer.stop(); + }; + this.onStop = function(){ }; + + // finish initialization + timer.onTick = this.tick; + timer.onStart = this.onStart; + timer.onStop = this.onStop; + if(initialData){ + queue.concat(initialData); + } +}; Index: openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/lang/timing/Timer.js =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/lang/timing/Attic/Timer.js,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/lang/timing/Timer.js 7 Nov 2006 02:38:03 -0000 1.1 @@ -0,0 +1,64 @@ +/* + Copyright (c) 2004-2006, The Dojo Foundation + All Rights Reserved. + + Licensed under the Academic Free License version 2.1 or above OR the + modified BSD license. For more information on Dojo licensing, see: + + http://dojotoolkit.org/community/licensing.shtml +*/ + +dojo.provide("dojo.lang.timing.Timer"); +dojo.require("dojo.lang.func"); + +dojo.lang.timing.Timer = function(/*int*/ interval){ + // summary: Timer object executes an "onTick()" method repeatedly at a specified interval. + // repeatedly at a given interval. + // interval: Interval between function calls, in milliseconds. + this.timer = null; + this.isRunning = false; + this.interval = interval; + + this.onStart = null; + this.onStop = null; +}; + +dojo.extend(dojo.lang.timing.Timer, { + onTick : function(){ + // summary: Method called every time the interval passes. Override to do something useful. + }, + + setInterval : function(interval){ + // summary: Reset the interval of a timer, whether running or not. + // interval: New interval, in milliseconds. + if (this.isRunning){ + dj_global.clearInterval(this.timer); + } + this.interval = interval; + if (this.isRunning){ + this.timer = dj_global.setInterval(dojo.lang.hitch(this, "onTick"), this.interval); + } + }, + + start : function(){ + // summary: Start the timer ticking. + // description: Calls the "onStart()" handler, if defined. + // Note that the onTick() function is not called right away, + // only after first interval passes. + if (typeof this.onStart == "function"){ + this.onStart(); + } + this.isRunning = true; + this.timer = dj_global.setInterval(dojo.lang.hitch(this, "onTick"), this.interval); + }, + + stop : function(){ + // summary: Stop the timer. + // description: Calls the "onStop()" handler, if defined. + if (typeof this.onStop == "function"){ + this.onStop(); + } + this.isRunning = false; + dj_global.clearInterval(this.timer); + } +}); Index: openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/lang/timing/__package__.js =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/lang/timing/Attic/__package__.js,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/lang/timing/__package__.js 7 Nov 2006 02:38:03 -0000 1.1 @@ -0,0 +1,11 @@ +/* + Copyright (c) 2004-2006, The Dojo Foundation + All Rights Reserved. + + Licensed under the Academic Free License version 2.1 or above OR the + modified BSD license. For more information on Dojo licensing, see: + + http://dojotoolkit.org/community/licensing.shtml +*/ + +dojo.provide("dojo.lang.timing.*"); Index: openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/selection/Selection.js =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/selection/Attic/Selection.js,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/selection/Selection.js 7 Nov 2006 02:38:03 -0000 1.1 @@ -0,0 +1,425 @@ +/* + Copyright (c) 2004-2006, The Dojo Foundation + All Rights Reserved. + + Licensed under the Academic Free License version 2.1 or above OR the + modified BSD license. For more information on Dojo licensing, see: + + http://dojotoolkit.org/community/licensing.shtml +*/ + +dojo.provide("dojo.selection.Selection"); +dojo.require("dojo.lang.array"); +dojo.require("dojo.lang.func"); +dojo.require("dojo.math"); + +dojo.selection.Selection = function(items, isCollection) { + this.items = []; + this.selection = []; + this._pivotItems = []; + this.clearItems(); + + if(items) { + if(isCollection) { + this.setItemsCollection(items); + } else { + this.setItems(items); + } + } +} +dojo.lang.extend(dojo.selection.Selection, { + items: null, // items to select from, order matters for growable selections + + selection: null, // items selected, aren't stored in order (see sorted()) + lastSelected: null, // last item selected + + allowImplicit: true, // if true, grow selection will start from 0th item when nothing is selected + length: 0, // number of *selected* items + + // if true, the selection is treated as an in-order and can grow by ranges, not just by single item + isGrowable: true, + + _pivotItems: null, // stack of pivot items + _pivotItem: null, // item we grow selections from, top of stack + + // event handlers + onSelect: function(item) {}, + onDeselect: function(item) {}, + onSelectChange: function(item, selected) {}, + + _find: function(item, inSelection) { + if(inSelection) { + return dojo.lang.find(this.selection, item); + } else { + return dojo.lang.find(this.items, item); + } + }, + + isSelectable: function(item) { + // user-customizable, will filter items through this + return true; + }, + + setItems: function(/* ... */) { + this.clearItems(); + this.addItems.call(this, arguments); + }, + + // this is in case you have an active collection array-like object + // (i.e. getElementsByTagName collection) that manages its own order + // and item list + setItemsCollection: function(collection) { + this.items = collection; + }, + + addItems: function(/* ... */) { + var args = dojo.lang.unnest(arguments); + for(var i = 0; i < args.length; i++) { + this.items.push(args[i]); + } + }, + + addItemsAt: function(item, before /* ... */) { + if(this.items.length == 0) { // work for empy case + return this.addItems(dojo.lang.toArray(arguments, 2)); + } + + if(!this.isItem(item)) { + item = this.items[item]; + } + if(!item) { throw new Error("addItemsAt: item doesn't exist"); } + var idx = this._find(item); + if(idx > 0 && before) { idx--; } + for(var i = 2; i < arguments.length; i++) { + if(!this.isItem(arguments[i])) { + this.items.splice(idx++, 0, arguments[i]); + } + } + }, + + removeItem: function(item) { + // remove item + var idx = this._find(item); + if(idx > -1) { + this.items.splice(idx, 1); + } + // remove from selection + // FIXME: do we call deselect? I don't think so because this isn't how + // you usually want to deselect an item. For example, if you deleted an + // item, you don't really want to deselect it -- you want it gone. -DS + idx = this._find(item, true); + if(idx > -1) { + this.selection.splice(idx, 1); + } + }, + + clearItems: function() { + this.items = []; + this.deselectAll(); + }, + + isItem: function(item) { + return this._find(item) > -1; + }, + + isSelected: function(item) { + return this._find(item, true) > -1; + }, + + /** + * allows you to filter item in or out of the selection + * depending on the current selection and action to be taken + **/ + selectFilter: function(item, selection, add, grow) { + return true; + }, + + /** + * update -- manages selections, most selecting should be done here + * item => item which may be added/grown to/only selected/deselected + * add => behaves like ctrl in windows selection world + * grow => behaves like shift + * noToggle => if true, don't toggle selection on item + **/ + update: function(item, add, grow, noToggle) { + if(!this.isItem(item)) { return false; } + + if(this.isGrowable && grow) { + if(!this.isSelected(item) + && this.selectFilter(item, this.selection, false, true)) { + this.grow(item); + this.lastSelected = item; + } + } else if(add) { + if(this.selectFilter(item, this.selection, true, false)) { + if(noToggle) { + if(this.select(item)) { + this.lastSelected = item; + } + } else if(this.toggleSelected(item)) { + this.lastSelected = item; + } + } + } else { + this.deselectAll(); + this.select(item); + } + + this.length = this.selection.length; + }, + + /** + * Grow a selection. + * toItem => which item to grow selection to + * fromItem => which item to start the growth from (it won't be selected) + * + * Any items in (fromItem, lastSelected] that aren't part of + * (fromItem, toItem] will be deselected + **/ + grow: function(toItem, fromItem) { + if(!this.isGrowable) { return; } + + if(arguments.length == 1) { + fromItem = this._pivotItem; + if(!fromItem && this.allowImplicit) { + fromItem = this.items[0]; + } + } + if(!toItem || !fromItem) { return false; } + + var fromIdx = this._find(fromItem); + + // get items to deselect (fromItem, lastSelected] + var toDeselect = {}; + var lastIdx = -1; + if(this.lastSelected) { + lastIdx = this._find(this.lastSelected); + var step = fromIdx < lastIdx ? -1 : 1; + var range = dojo.math.range(lastIdx, fromIdx, step); + for(var i = 0; i < range.length; i++) { + toDeselect[range[i]] = true; + } + } + + // add selection (fromItem, toItem] + var toIdx = this._find(toItem); + var step = fromIdx < toIdx ? -1 : 1; + var shrink = lastIdx >= 0 && step == 1 ? lastIdx < toIdx : lastIdx > toIdx; + var range = dojo.math.range(toIdx, fromIdx, step); + if(range.length) { + for(var i = range.length-1; i >= 0; i--) { + var item = this.items[range[i]]; + if(this.selectFilter(item, this.selection, false, true)) { + if(this.select(item, true) || shrink) { + this.lastSelected = item; + } + if(range[i] in toDeselect) { + delete toDeselect[range[i]]; + } + } + } + } else { + this.lastSelected = fromItem; + } + + // now deselect... + for(var i in toDeselect) { + if(this.items[i] == this.lastSelected) { + //dojo.debug("oops!"); + } + this.deselect(this.items[i]); + } + + // make sure everything is all kosher after selections+deselections + this._updatePivot(); + }, + + /** + * Grow selection upwards one item from lastSelected + **/ + growUp: function() { + if(!this.isGrowable) { return; } + + var idx = this._find(this.lastSelected) - 1; + while(idx >= 0) { + if(this.selectFilter(this.items[idx], this.selection, false, true)) { + this.grow(this.items[idx]); + break; + } + idx--; + } + }, + + /** + * Grow selection downwards one item from lastSelected + **/ + growDown: function() { + if(!this.isGrowable) { return; } + + var idx = this._find(this.lastSelected); + if(idx < 0 && this.allowImplicit) { + this.select(this.items[0]); + idx = 0; + } + idx++; + while(idx > 0 && idx < this.items.length) { + if(this.selectFilter(this.items[idx], this.selection, false, true)) { + this.grow(this.items[idx]); + break; + } + idx++; + } + }, + + toggleSelected: function(item, noPivot) { + if(this.isItem(item)) { + if(this.select(item, noPivot)) { return 1; } + if(this.deselect(item)) { return -1; } + } + return 0; + }, + + select: function(item, noPivot) { + if(this.isItem(item) && !this.isSelected(item) + && this.isSelectable(item)) { + this.selection.push(item); + this.lastSelected = item; + this.onSelect(item); + this.onSelectChange(item, true); + if(!noPivot) { + this._addPivot(item); + } + this.length = this.selection.length; + return true; + } + return false; + }, + + deselect: function(item) { + var idx = this._find(item, true); + if(idx > -1) { + this.selection.splice(idx, 1); + this.onDeselect(item); + this.onSelectChange(item, false); + if(item == this.lastSelected) { + this.lastSelected = null; + } + this._removePivot(item); + this.length = this.selection.length; + return true; + } + return false; + }, + + selectAll: function() { + for(var i = 0; i < this.items.length; i++) { + this.select(this.items[i]); + } + }, + + deselectAll: function() { + while(this.selection && this.selection.length) { + this.deselect(this.selection[0]); + } + }, + + selectNext: function() { + var idx = this._find(this.lastSelected); + while(idx > -1 && ++idx < this.items.length) { + if(this.isSelectable(this.items[idx])) { + this.deselectAll(); + this.select(this.items[idx]); + return true; + } + } + return false; + }, + + selectPrevious: function() { + //debugger; + var idx = this._find(this.lastSelected); + while(idx-- > 0) { + if(this.isSelectable(this.items[idx])) { + this.deselectAll(); + this.select(this.items[idx]); + return true; + } + } + return false; + }, + + // select first selectable item + selectFirst: function() { + this.deselectAll(); + var idx = 0; + while(this.items[idx] && !this.select(this.items[idx])) { + idx++; + } + return this.items[idx] ? true : false; + }, + + // select last selectable item + selectLast: function() { + this.deselectAll(); + var idx = this.items.length-1; + while(this.items[idx] && !this.select(this.items[idx])) { + idx--; + } + return this.items[idx] ? true : false; + }, + + _addPivot: function(item, andClear) { + this._pivotItem = item; + if(andClear) { + this._pivotItems = [item]; + } else { + this._pivotItems.push(item); + } + }, + + _removePivot: function(item) { + var i = dojo.lang.find(this._pivotItems, item); + if(i > -1) { + this._pivotItems.splice(i, 1); + this._pivotItem = this._pivotItems[this._pivotItems.length-1]; + } + + this._updatePivot(); + }, + + _updatePivot: function() { + if(this._pivotItems.length == 0) { + if(this.lastSelected) { + this._addPivot(this.lastSelected); + } + } + }, + + sorted: function() { + return dojo.lang.toArray(this.selection).sort( + dojo.lang.hitch(this, function(a, b) { + var A = this._find(a), B = this._find(b); + if(A > B) { + return 1; + } else if(A < B) { + return -1; + } else { + return 0; + } + }) + ); + }, + + // remove any items from the selection that are no longer in this.items + updateSelected: function() { + for(var i = 0; i < this.selection.length; i++) { + if(this._find(this.selection[i]) < 0) { + var removed = this.selection.splice(i, 1); + + this._removePivot(removed[0]); + } + } + + this.length = this.selection.length; + } +}); Index: openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/storage/Storage.as =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/storage/Attic/Storage.as,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/storage/Storage.as 7 Nov 2006 02:38:04 -0000 1.1 @@ -0,0 +1,146 @@ +/* + Copyright (c) 2004-2006, The Dojo Foundation + All Rights Reserved. + + Licensed under the Academic Free License version 2.1 or above OR the + modified BSD license. For more information on Dojo licensing, see: + + http://dojotoolkit.org/community/licensing.shtml +*/ + +import DojoExternalInterface; + +class Storage { + public static var SUCCESS = "success"; + public static var FAILED = "failed"; + public static var PENDING = "pending"; + + public var so; + + public function Storage(){ + //getURL("javascript:dojo.debug('FLASH:Storage constructor')"); + DojoExternalInterface.initialize(); + DojoExternalInterface.addCallback("put", this, put); + DojoExternalInterface.addCallback("get", this, get); + DojoExternalInterface.addCallback("showSettings", this, showSettings); + DojoExternalInterface.addCallback("clear", this, clear); + DojoExternalInterface.addCallback("getKeys", this, getKeys); + DojoExternalInterface.addCallback("remove", this, remove); + DojoExternalInterface.loaded(); + + // preload the System Settings finished button movie for offline + // access so it is in the cache + _root.createEmptyMovieClip("_settingsBackground", 1); + // getURL("javascript:alert('"+DojoExternalInterface.dojoPath+"');"); + _root._settingsBackground.loadMovie(DojoExternalInterface.dojoPath + "storage_dialog.swf"); + } + + public function put(keyName, keyValue, namespace){ + // Get the SharedObject for these values and save it + so = SharedObject.getLocal(namespace); + + // prepare a storage status handler + var self = this; + so.onStatus = function(infoObject:Object){ + //getURL("javascript:dojo.debug('FLASH: onStatus, infoObject="+infoObject.code+"')"); + + // delete the data value if the request was denied + if (infoObject.code == "SharedObject.Flush.Failed"){ + delete self.so.data[keyName]; + } + + var statusResults; + if(infoObject.code == "SharedObject.Flush.Failed"){ + statusResults = Storage.FAILED; + }else if(infoObject.code == "SharedObject.Flush.Pending"){ + statusResults = Storage.PENDING; + }else if(infoObject.code == "SharedObject.Flush.Success"){ + statusResults = Storage.SUCCESS; + } + //getURL("javascript:dojo.debug('FLASH: onStatus, statusResults="+statusResults+"')"); + + // give the status results to JavaScript + DojoExternalInterface.call("dojo.storage._onStatus", null, statusResults, + keyName); + } + + // save the key and value + so.data[keyName] = keyValue; + var flushResults = so.flush(); + + // return results of this command to JavaScript + var statusResults; + if(flushResults == true){ + statusResults = Storage.SUCCESS; + }else if(flushResults == "pending"){ + statusResults = Storage.PENDING; + }else{ + statusResults = Storage.FAILED; + } + + DojoExternalInterface.call("dojo.storage._onStatus", null, statusResults, + keyName); + } + + public function get(keyName, namespace){ + // Get the SharedObject for these values and save it + so = SharedObject.getLocal(namespace); + var results = so.data[keyName]; + + return results; + } + + public function showSettings(){ + // Show the configuration options for the Flash player, opened to the + // section for local storage controls (pane 1) + System.showSettings(1); + + // there is no way we can intercept when the Close button is pressed, allowing us + // to hide the Flash dialog. Instead, we need to load a movie in the + // background that we can show a close button on. + _root.createEmptyMovieClip("_settingsBackground", 1); + _root._settingsBackground.loadMovie(DojoExternalInterface.dojoPath + "storage_dialog.swf"); + } + + public function clear(namespace){ + so = SharedObject.getLocal(namespace); + so.clear(); + so.flush(); + } + + public function getKeys(namespace){ + // Returns a list of the available keys in this namespace + + // get the storage object + so = SharedObject.getLocal(namespace); + + // get all of the keys + var results = new Array(); + for(var i in so.data) + results.push(i); + + // join the keys together in a comma seperated string + results = results.join(","); + + return results; + } + + public function remove(keyName, namespace){ + // Removes a key + + // get the storage object + so = SharedObject.getLocal(namespace); + + // delete this value + delete so.data[keyName]; + + // save the changes + so.flush(); + } + + static function main(mc){ + //getURL("javascript:dojo.debug('FLASH: storage loaded')"); + _root.app = new Storage(); + } +} + Index: openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/storage/__package__.js =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/storage/Attic/__package__.js,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/storage/__package__.js 7 Nov 2006 02:38:04 -0000 1.1 @@ -0,0 +1,17 @@ +/* + Copyright (c) 2004-2006, The Dojo Foundation + All Rights Reserved. + + Licensed under the Academic Free License version 2.1 or above OR the + modified BSD license. For more information on Dojo licensing, see: + + http://dojotoolkit.org/community/licensing.shtml +*/ + +dojo.kwCompoundRequire({ + common: ["dojo.storage"], + browser: ["dojo.storage.browser"], + dashboard: ["dojo.storage.dashboard"] +}); +dojo.provide("dojo.storage.*"); + Index: openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/storage/browser.js =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/storage/Attic/browser.js,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/storage/browser.js 7 Nov 2006 02:38:04 -0000 1.1 @@ -0,0 +1,195 @@ +/* + Copyright (c) 2004-2006, The Dojo Foundation + All Rights Reserved. + + Licensed under the Academic Free License version 2.1 or above OR the + modified BSD license. For more information on Dojo licensing, see: + + http://dojotoolkit.org/community/licensing.shtml +*/ + +dojo.provide("dojo.storage.browser"); + +dojo.require("dojo.storage"); +dojo.require("dojo.flash"); +dojo.require("dojo.json"); +dojo.require("dojo.uri.*"); + +/** + Storage provider that uses features in Flash to achieve permanent storage. + + @author Brad Neuberg, bkn3@columbia.edu +*/ +dojo.storage.browser.FlashStorageProvider = function(){ +} + +dojo.inherits(dojo.storage.browser.FlashStorageProvider, dojo.storage); + +// instance methods and properties +dojo.lang.extend(dojo.storage.browser.FlashStorageProvider, { + "namespace": "default", + initialized: false, + _available: null, + _statusHandler: null, + + initialize: function(){ + if(djConfig["disableFlashStorage"] == true){ + return; + } + + // initialize our Flash + var loadedListener = function(){ + dojo.storage._flashLoaded(); + } + dojo.flash.addLoadedListener(loadedListener); + var swfloc6 = dojo.uri.dojoUri("Storage_version6.swf").toString(); + var swfloc8 = dojo.uri.dojoUri("Storage_version8.swf").toString(); + dojo.flash.setSwf({flash6: swfloc6, flash8: swfloc8, visible: false}); + }, + + isAvailable: function(){ + if(djConfig["disableFlashStorage"] == true){ + this._available = false; + } + + return this._available; + }, + + setNamespace: function(ns){ + this["namespace"] = ns; + }, + + put: function(key, value, resultsHandler){ + if(this.isValidKey(key) == false){ + dojo.raise("Invalid key given: " + key); + } + + this._statusHandler = resultsHandler; + + // serialize the value + // Handle strings differently so they have better performance + if(dojo.lang.isString(value)){ + value = "string:" + value; + }else{ + value = dojo.json.serialize(value); + } + + dojo.flash.comm.put(key, value, this["namespace"]); + }, + + get: function(key){ + if(this.isValidKey(key) == false){ + dojo.raise("Invalid key given: " + key); + } + + var results = dojo.flash.comm.get(key, this["namespace"]); + + if(results == ""){ + return null; + } + + // destringify the content back into a + // real JavaScript object + // Handle strings differently so they have better performance + if(!dojo.lang.isUndefined(results) && results != null + && /^string:/.test(results)){ + results = results.substring("string:".length); + }else{ + results = dojo.json.evalJson(results); + } + + return results; + }, + + getKeys: function(){ + var results = dojo.flash.comm.getKeys(this["namespace"]); + + if(results == ""){ + return []; + } + + // the results are returned comma seperated; split them + return results.split(","); + }, + + clear: function(){ + dojo.flash.comm.clear(this["namespace"]); + }, + + remove: function(key){ + }, + + isPermanent: function(){ + return true; + }, + + getMaximumSize: function(){ + return dojo.storage.SIZE_NO_LIMIT; + }, + + hasSettingsUI: function(){ + return true; + }, + + showSettingsUI: function(){ + dojo.flash.comm.showSettings(); + dojo.flash.obj.setVisible(true); + dojo.flash.obj.center(); + }, + + hideSettingsUI: function(){ + // hide the dialog + dojo.flash.obj.setVisible(false); + + // call anyone who wants to know the dialog is + // now hidden + if(dojo.storage.onHideSettingsUI != null && + !dojo.lang.isUndefined(dojo.storage.onHideSettingsUI)){ + dojo.storage.onHideSettingsUI.call(null); + } + }, + + /** + The provider name as a string, such as + "dojo.storage.FlashStorageProvider". + */ + getType: function(){ + return "dojo.storage.FlashStorageProvider"; + }, + + /** Called when the Flash is finished loading. */ + _flashLoaded: function(){ + this.initialized = true; + + // indicate that this storage provider is now loaded + dojo.storage.manager.loaded(); + }, + + /** + Called if the storage system needs to tell us about the status + of a put() request. + */ + _onStatus: function(statusResult, key){ + var ds = dojo.storage; + var dfo = dojo.flash.obj; + //dojo.debug("_onStatus, statusResult="+statusResult+", key="+key); + if(statusResult == ds.PENDING){ + dfo.center(); + dfo.setVisible(true); + }else{ + dfo.setVisible(false); + } + + if((!dj_undef("_statusHandler", ds))&&(ds._statusHandler != null)){ + ds._statusHandler.call(null, statusResult, key); + } + } +}); + +// register the existence of our storage providers +dojo.storage.manager.register("dojo.storage.browser.FlashStorageProvider", + new dojo.storage.browser.FlashStorageProvider()); + +// now that we are loaded and registered tell the storage manager to initialize +// itself +dojo.storage.manager.initialize(); Index: openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/storage/dashboard.js =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/storage/Attic/dashboard.js,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/storage/dashboard.js 7 Nov 2006 02:38:04 -0000 1.1 @@ -0,0 +1,52 @@ +/* + Copyright (c) 2004-2006, The Dojo Foundation + All Rights Reserved. + + Licensed under the Academic Free License version 2.1 or above OR the + modified BSD license. For more information on Dojo licensing, see: + + http://dojotoolkit.org/community/licensing.shtml +*/ + +dojo.require("dojo.storage"); +dojo.require("dojo.json"); +dojo.provide("dojo.storage.dashboard"); + +dojo.storage.dashboard.StorageProvider = function(){ + this.initialized = false; +} + +dojo.inherits(dojo.storage.dashboard.StorageProvider, dojo.storage.StorageProvider); + +dojo.lang.extend(dojo.storage.dashboard.StorageProvider, { + storageOnLoad: function(){ + this.initialized = true; + }, + + set: function(key, value, ns){ + if (ns && widget.system){ + widget.system("/bin/mkdir " + ns); + var system = widget.system("/bin/echo " + value + " >" + ns + "/" + key); + if(system.errorString){ + return false; + } + return true; + } + + return widget.setPreferenceForKey(dojo.json.serialize(value), key); + }, + + get: function(key, ns){ + if (ns && widget.system) { + var system = widget.system("/bin/cat " + ns + "/" + key); + if(system.errorString){ + return ""; + } + return system.outputString; + } + + return dojo.json.evalJson(widget.preferenceForKey(key)); + } +}); + +dojo.storage.setProvider(new dojo.storage.dashboard.StorageProvider()); Index: openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/storage/storage_dialog.fla =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/storage/Attic/storage_dialog.fla,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/storage/storage_dialog.fla 7 Nov 2006 02:38:04 -0000 1.1 @@ -0,0 +1,5398 @@ +��ࡱ�>�� ���� +� ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Root Entry��������p�|Y�r��RASH�� !e��Contents������������ {jPage 1�������������Media 1�������������������������������������������������������� +B��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Root Entry��������p�|Y�r��RASH�:73�d��Contents������������{jPage 1�������������Media 1�������������������������������������������������������������������������������� !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~�  +   + !"#$%&'()*+,-./0123456789:;<=>?@A������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ + + !"#$%&'()*+,-./0123456789:������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������CDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������8�� +CDocumentPagePage 1���Scene 1���8">D����������������������GD���������������������������������������������������������CSwfPageMedia 1���Button��� �W?�ԱC���Button�������������������Button���mx.controls.Button����C:\Documents and Settings\bradneuberg\Local Settings\Application Data\Macromedia\Flash MX 2004\en\Configuration\TMP3yjbts6p08..swf]oCWS�x��; l\�q���].)�")R���E�,˺,ɇ���DYڕ��!_���O�����&i�ĉ +��#a";NU +�IѺp�&�ܴ5���h��ѴH�44���{��+�(���o޼y3�f��{o� _��W�=#Z�V� +{ '"�`�^�|���"�X{�_���n~l�Ջ�)�<�������?N=`���^���.��O�b�G�}�s9���ج떊�R��~�8�g`a��:�?~9���N~rt��?q.oy��o�ׅ�k�����W?;�W��Ɓ���C��qk���C����歂5RrJ���п� +-�Ba-� v� +ɥ^F�r�sp`�E8rY�\�t � !����c9 H�9�t֛q��&�i���U�L{�ť��������;�G��̏�}�s���?�4qϋ�gR��&M4,M�^��(��j�3�;���9������7������_}g�ֺ�ʶ�d>��1ߢ��e��0�Z�0����Z�-OV6~��o�ߒ,�}`,����#y+{!��a������ �9\���&Fa�����C� �=�wa�ιy@rq�*���Ӽ��/YPu+8h�> �7+G]؀�wऎU��qvu�lfuv +��� �ywqI�2wV�(�����jv�G�d ������!џ�:oe]xH��V*����� )®yl�Z0m:HY��}��b�� !kƱ/Zg*�Eۚ;mV/@�b��5V(� �Kq�2�/: Ř�f���8P(]�Ζ�A���ch�]��p}2�Y�B}�g��@n���Y�ǟb�1�y�rqQ�j�,[P*�[�!��qz�qm0{�gOb9H gA�4I��G� ���\�� +df�Ҕ�����E�i�J˚��J.,v"�T��Q�=c�d��CrtI�xd�� +v}k���'�o#����2 Ɲ-�������q���a�2v[zxq�g:ȷC��_��l��� + �l7;��Ή�ž�e`<�Z�Ki��]#!?�:a ��'�4 -����7��`G���٢�#�BG)tf(�vֱ������~Ԩ$�;�_-|MxϚ���,��ڄ'�ץ���c�i�A��K�>>и:;D�0 =��� +H�T�ڍ�oԄ��e��,n;�;G��b��=��7*d) +R4߇A�Gx\}�����$Y��y�^� +)�x@�~���r�s﯑����l4�A^쐻$��w"���ױ(k���]hX�m�1�F��c�M�����(�~g�&ÊL�KD�p�^n������`��Ṱ�� �MT�-�eb��0!�W�E���S4Q��W�NV��0�a��[�E(��2�r�V�ۣ�a���0���d�"eVboGR�a�����w^IT����'��㤓!��<����Z� ܏YoCɉR� +�ƪˎ�I��Qm5@奈�۷us0�=���B�7ǡ��7(ߑN�A���$��k]t#ɝO@ ���hA�[c��y�]u��$H�ӉHۈ�s��v�'�v_G�=i���CPicPage�� CPicLayer�� CPicFrame��CPicSwf % I}v������ closeButton ���icon������icon��F����L��s� �������label���Finished���label E�b[cF�E�\G��������labelPlacement���left���right���top���bottom���labelPlacement啢T��I���^��D�������selected���false���selected�/�?�ZJ��|��g������toggle���false���toggleg���Y�D��̜�������enabled���true���enabled!����RG�5S8��bm���Other���visible���true���visibleD*Lc�XTC�$�v�����Other��� minHeight���0��� minHeight�P���K��u@�&�j���Size���minWidth���0���minWidth! 7�C2�I���� l/����Size����<component metaDataFetched='true' schemaUrl='' schemaOperation='' sceneRootLabel='Scene 1' oldCopiedComponentPath='1'> + <eventMap> + <property name="selected" value="click" /> + </eventMap> + <property name="selected"> +<schema name="Boolean" base="Boolean" class="mx.data.types.Bool" required="true" readonly="false" writeonly="false" category="simple" original="true"> + <properties> + <property name="defaultLabel" value="" /> + <property name="defaultUIControl" value="" /> + </properties> + </schema> + </property> +</component> +��CPicText�� / X��� +�_sans�(Press Finished when done�����������������_!l��0��0_!0l���?�����Zz����V// know when the close button is pressed; this is needed as a workaround when + +// showing the storage configuration dialog, since there is no way we can + +// know when that panel's close button is pressed + +closeButton.onMouseDown = function(){ + + // some versions of Flash don't have access to containing parents + + // objects, like DojoExternalInterface; only Flash 8 seems to have access + + if(typeof DojoExternalInterface != "undefined"){ // flash 8 + + DojoExternalInterface.call("dojo.storage.hideSettingsUI", null); + + }else{ // flash 6 + + fscommand("call", "dojo.storage.hideSettingsUI"); + + } + +};����� ���Layer 1����O�O���", "dojo.storage.hideSettingsUI"); + +};����� ���Layer 1����O�O������right���top���bottom���labelPlacement啢T��I���^��D�������selected���8�� +CDocumentPagePage 1���Scene 1���8">D����������������������GD���������������������������������������������������������CSwfPageMedia 1���Button��� �W?�ԱC���Button�������������������Button���mx.controls.Button����C:\Documents and Settings\bradneuberg\Local Settings\Application Data\Macromedia\Flash MX 2004\en\Configuration\TMP3yjbts6p08..swf]oCWS�x��; l\�q���].)�")R���E�,˺,ɇ���DYڕ��!_���O�����&i�ĉ +��#a";NU +�IѺp�&�ܴ5���h��ѴH�44���{��+�(���o޼y3�f��{o� _��W�=#Z�V� +{ '"�`�^�|���"�X{�_���n~l�Ջ�)�<�������?N=`���^���.��O�b�G�}�s9���ج떊�R��~�8�g`a��:�?~9���N~rt��?q.oy��o�ׅ�k�����W?;�W��Ɓ���C��qk���C����歂5RrJ���п� +-�Ba-� v� +ɥ^F�r�sp`�E8rY�\�t � !����c9 H�9�t֛q��&�i���U�L{�ť��������;�G��̏�}�s���?�4qϋ�gR��&M4,M�^��(��j�3�;���9������7������_}g�ֺ�ʶ�d>��1ߢ��e��0�Z�0����Z�-OV6~��o�ߒ,�}`,����#y+{!��a������ �9\���&Fa�����C� �=�wa�ιy@rq�*���Ӽ��/YPu+8h�> �7+G]؀�wऎU��qvu�lfuv +��� �ywqI�2wV�(�����jv�G�d ������!џ�:oe]xH��V*����� )®yl�Z0m:HY��}��b�� !kƱ/Zg*�Eۚ;mV/@�b��5V(� �Kq�2�/: Ř�f���8P(]�Ζ�A���ch�]��p}2�Y�B}�g��@n���Y�ǟb�1�y�rqQ�j�,[P*�[�!��qz�qm0{�gOb9H gA�4I��G� ���\�� +df�Ҕ�����E�i�J˚��J.,v"�T��Q�=c�d��CrtI�xd�� +v}k���'�o#����2 Ɲ-�������q���a�2v[zxq�g:ȷC��_��l��� + �l7;��Ή�ž�e`<�Z�Ki��]#!?�:a ��'�4 -����7��`G���٢�#�BG)tf(�vֱ������~Ԩ$�;�_-|MxϚ���,��ڄ'�ץ���c�i�A��K�>>и:;D�0 =��� +H�T�ڍ�oԄ��e��,n;�;G��b��=��7*d) +R4߇A�Gx\}�����$Y��y�^� +)�x@�~���r�s﯑����l4�A^쐻$��w"���ױ(k���]hX�m�1�F��c�M�����(�~g�&ÊL�KD�p�^n������`��Ṱ�� �MT�-�eb��0!�W�E���S4Q��W�NV��0�a��[�E(��2�r�V�ۣ�a���0���d�"eVboGR�a�����w^IT����'��㤓!��<����Z� ܏YoCɉR� +�ƪˎ�I��Qm5@奈�۷us0�=���B�7ǡ��7(ߑN�A���$��k]t#ɝO@ ���hA�[c��y�]u��$H�ӉHۈ�s��v�'�v_G�=i��Z|o4����aI�m>��d�b�)#���2��O�$M,����R0���QH)\��ҙ�4����>~������� Ma��M�XtV��oK�~[�<��@����ߋߔ�h�V`O��,N�F�na����sP�|M:H� +5K��bxN��]O�{���1�d +��'kJl�ϓE�Y--:ԥ���C2)�!��H����R0�Q0^�;�4�Z�Vn{���C��qo�&����!9�=9b�t#��B���n-d�z��tb��?ՠל�T���!S�����R��9on�#���0�@�6�,ևBڬ�_��fa�!��za&pQ1�2 f�/k!jA��K�%��� ��S~�H�(��1��J3�����8ʍ +*c�a;�b�a�ZZP͛���/�f�CI���v±J�2���IF�KF�� �>����oD����v����_��Ìv1��t���ކ�n^�u��V��\E���`:�x�UXc�L�0AM\huä](;���-���=R|�ŏ�5y썵�z��+��*9�� �G��� �`�9�� +� +/t�=s�}��w?���]�~�_:n�1��w%@ޞ�;tG����4�� _;��C��}�� ۡ��&6�tu��2��+�k�?���-V�޾)\]�E0���(�~�j�� �Q��B��k�_�����KSX�S� ��D��ʛp�T����&�.WJ�-M) ��5�(9Jl��U�a�=m��6��k�Qr��K���܉�����/ +ū�+�w�`Ԛ61�J��B�Vý�Rcl޵�U�T$�ع44?2����J"���.4Zl�8����+���x���7"h-d�s�{��B/ݎw����/�T}�G��;�h��������}[� x�уp5~��N��ZB4��� +ٌ��m�7Pw�9u�,��B��<��Z����O,i;�#S�J);y�:/eg�i����q��O�t��G�F̲;[���0kv���Ǻ"芨�5��\E)��ɯS�6�� �"s���ki�0R*�KE���zގ��s +��VR�g���٥k�hER+wߓ���ˍA�H���M!)�(�����~�F��O������O�+!q��r���[�+�H��+�c䥰"6� ����!h0$��Bڮ�s��26��@�@#@P��He�ۑP�� d +�@Z�-F�"_")#��IQ�U�:&�����j�)��p�]E���Shw�+QL2���J33㣜r�U4��pS=KP�`�#H Q]�p�T���h5j����o��Z�z�}�1��FP�[�Po=�L�Ư/S�,�2}�dB]��xK��&s�BY%�����q0@�a��������.���M�t��f��M�ɜ1�З�; �;y���d��u&t�ԋ�2���zi�b�o2�\)�%w�ly����f��1�U�9�d4c�"(ǐ��x�,�+�Eӱ�d&:�IC�����NNZ�J�<�3U������8ׯR �R�ކe���,S6+��!�S%���F���^����������2"�e�PW +B=�] +��u�z�V!����sT���$jj�����"����T*U!�b +_��[�)+7^��O�;�6�N����C1(��H8+S�u���3�:Qĸd�jLӬʌUg(�ݳs�o�!D�/1=�R�$_*���� ���T�X�V���ڢ[�Zf.�٦�-�p.#6����.�,�m�2�=�N�!�9���������oC�H��[��q���Q8F�$r�G@U�l�/�wK�6љGQ�J���A +M<�x��]�k ��#���V������6yZ��h���QIlli�/�P��ٛ�d�L�I����܎r�x�v��-�[�� +�y[�W�D�٫6��E^t1&U!�Q7�s$~���~]�F|� ��9�HF���%��D��8#�:������ �� t���4^gk� +M+�#Mh��L���*z�� +�>���n���ca<(ʦ�#���U�Sb4��u-���^\K:������1�����`iw����#��c�vR����RM.kΈ�"-������1����7��<4� XRua�PCؿK�P� +�P04�'�� +��������ԇN'#��+�p�(���Z��[�]�F��$5� E:-�NL���,m�O���w�kE�R�������jQ���F 9��ZA�4�� +p��Mr���������9��B�@(�.�� �h�nM[�����ȃ���-C({��iĒ��J�?���j�T}<}X +���_F''~4������:6�P^������%���Q��(8F� �J����Ahz�r���)\�T{��M�?��XӤ?���;��m�� +v̴��[s�[^�@W��ۭ� +SʧET1�҄/��,�p��+d�e���{���9�T��H�S��:b�7>�)6@J*)s��G�G#J����`�~\pUܾ!Jp��7�Jx3>܌��u5ݣ굢A�u��q�������{���Ih:ׁ�\1��)�9��?U�}S%H!�>$W���V5j�c�h��v%9���������͕:��/&Y�P@� t9ɼR�d�S��)#t���ޛ@�u]���~U�¾� @��N��N�w� $�@��dI��P �(���Ȳ%�^�X^�fly�8��8N�3�9����v���%������Lwr<��>>�8�#̻�[����D���uT�ۗ��ᄏ^ ϱ� z���z�|���t +������UO��IL�% �w|�x"*���7[�����`�� +�n�ۜ��+��>�'�M1�G�1O+���� �>o/��Zp�+�gP�<�2͋�fQ +b��` �ac|d��4O��f5��o��:�o$C��d�`�n.F���YZ��6�a�SIzR������� �B���B:Ժ�k�rj�S�E���Z�uj�7��{I�2A��;�n�Ժ��nq��9��S��X����S�F�eF�����:�� Nݛ1uou�ң�����P�h?���u���S��1�>���ε>���h�8?j�����S�c1=~ {�Q�vN��?@�(�>>ua��p�渙)�Vs(�z��VЩ�N� ��\��A���4�Z�V3 +�ƹ 5����*����h��Mք���y&�b��ئ��ń_"���Y�/� +J��8��&G�֎��q�#���c��*��'�����1q*�2�L$�0������Ġz3&���B��lxY^�<����`�s'����.!���#�����]Y8Uc�G� @��u#����xK��� ��O�/���芩W"�1� N)�e��@3�:�d�4#�'F���݈�gۍ�Yi�N'H�0B��Y,����|V 7�c7�JmP�Wԧ����^�ԧ���ڠ����M���5\���6�'WWð�a�_�9U�!�y�xI�f@�WK���g`7'Q��#� ����=�$���C�����2�9���L����t�V;���%(�wG����26��`&�:%���OX�W��!Ē��Sk_��H�|���2�����a;�r@�2K�p|M�+�>hg�`�Ҹ�:��5�M�˙Mщ�_p�Wqv7f1�����[{��Pٿ�fo�쭘�͸�1�7�ڛ��F��|\����0�7㲛1�[F�D}2Z�緔��fl�hH 'D,J�Ζ��rj����B����������,�WrEqNA���?(��`�����Y �1��k�Y��TE�fZ��� M/���)�D�dJS��H)<�H�S�� w��� �p +�%L�(j�>t�,��V�Ylu|L�89m��i��(jЅu�+� +���T�f,\�D[���[x�o�m����(\���s C��� +��B�=�UQ;�J�u�f/��� na�'��&��&�JSESx�Ϯ�FX�"$��8!�Rb ��c�m�I�vteiU� i�m�K +�����&/���0�=�H;i���FU��F�Jt��H��v����Т��xA�h��_�x��c�n*���m$�[%��^��p� +�8oI�x�{�j��P#A�1B�������;�]K|w-�]�\�6�N[���-��mQ�߆�\r'��4,K ,�w��e��-��:�dw���uRw���w�i��E�Zpѻ�� ǹ�N�ee 6�a�-�0�>����d�ލRƟV����kHj؎�#�ջW�k売-wl���B�TI)���F'f�<�Ԋ�֯�š'��b�����3�4u�M� [�XPy,MN<�R,�챉�I +9Z��Q��Q� ��R��!@��LGE����P��N���枝)��v��+HgK��kn`��4c��0m�NF�@�s&E�ޕ�YX�Q��L�8%R��v��k����o�Za�/L����N@1 ��.��|K�{�x"��B~J�s�`J��g��T�C�iyW2���i>4���vC}$��^�dTS��������Y� +JJ�8��j��� +tf�gun1�qP���D��f7+Q&���%0�h�d�`ꉮ�'�:��n)n0�r0x���4F5ѽ@�r�т&q�5�_����_��-���מNd�=9pkJ��Dj��u��r��]�B�V�_������F�֊�:�[/~�o��m���,~[�o��m��e���[}�Co�`{� ve�D�; f��=�y��+���D��g�()d��l�я�x������l-5��?�+:��'q8�G�����wB�N��޴�yjޏ�Y�5[P�S��'~�����+�UG����P��v������=Z9հ���\ �ndR���Suy}�+�U[#5Z%Uij]MVB:9��(�H�C{����hmR�G�sx١�̓�$*2fF�^ki�Aq�R�K�khЇ��P�WY-y�L�6)�307먒��#�S�:'� �"v;X�_�Q��8(��d���Ŵ����J�"�zȚ�pS�3&�r�"�4c��P P)�J�U�P o���6����U��Ê� ���B�8m̰"إs�3Eh� '[7-ٶ`T�@�C�7=���4iɴS����l�~��33s���ʆ4L%�� �ը�Z���;�m!�[\�Z%Yws���pH +�����T� +�تC�!)��j!���C�L�zⷀL�ܺ!��5�fBYB��EC�� +����t�xL�J�G�.���b�m��R�i���iS������%�h�t�`����?��? �� V����M �e@ �P��Q�Y�u���$�}q +�)`�8XR�X�֮�*ޭ��J�%��Od��ա�V˾�D�e/����V��(�|Z�V�g��)��&����4��`��DG� ͍��W��k�*A���)���L�7�i��|�3�nʳІL��Y7(�tFeoTV#����h~���~<N����'}�)�z��'ދ\���F���?1�$ʢ'�)�9[�IR[�U:������ds���R�N�b8��aؑx�;�m��A +"K�����t�)濋a#�@�G�-?�=�<�mH�5y�WW�f��f#˲%��ƣ�+��g���I1�耒��'Zr�`p'��fo�*��@E +C ����Ħ� fᙣڎ.�x̾p$�*��G?2Tn��8>����'�x�IG�#�ٽ:�J\�~�K��֎6�)��������Li���26�p��ycs�[�5U�m�i�:�p#��]qֵn��>l��Ł��s3e@�l���Lq� +R\��BL +��� �L�� .�d����z8������N��Y�C04T�E,��"�h�AaaicGL��3l����0�"��ű&�/"��>*^�/�;�ݯ����@{�������B�^�Vv����:��J +�#�&S�}��1^�b���7;1�遆�'��6��m�6X��2E�*1��٩��1�*$��hԊΊ՛�)�D���X39on�@kTx��z��ٲ(�u�U�P�(gv�]��Ǡ�1�BcjX�;����[Y�:O6��B.Ie�\ı�V�$���!���ؤ�̸he�����/���9�W~�����*,�͖������ѻ�>�-N��аeJ�oC�FG?�v]�Z����>>"c���v�ހ�[P~����D�/‹vnZ΄8eU["� �Dөep-琡��#c� � +�1�9���b�媢�ٔ��� .����#���D�7��U�M�x~�{F�����P���bG�H�4��‡������R�i��U�E(��Y�OUE�;:ǩK:�eF����QT%�F1�X�>'�N�;���7:߰G7[7� �w����.zi +��ŽZR(�ʧB +�7I�zՐ�/1�Qɔ$4t +�%���ϳ��A�ܼ�w����wԢ�!�-���45�D��J����J/�'�� �I^d�,7[��f*�ٵsG���W���r!5��H Y�[�ǒ�Jն��Y��R ��=��}1 iE!O[pM��:I��~^@t���ʥ�_skM��]��:~�}V}H9-O�~�0���=(#g��!�S+��2�j�����^�b�5Δ�-��ؘ�3��攖�SzĜң�:�)=fN�M�{Z��^w�s���<�,g�̣��� u�<���-}߼�)�C�3ϧ��C���-�u��|��]<��Xc�o�b�=�����;�:��̡x��㪟 1� �~ +v?�%��Bֆ���^�n*�?j���/Ʒ?�ڿ����u��մ?j�PP=8to��A�T�LrK2��E�`�;^ +:�b��m�ye�h�žڹ��u�yI�9q7�.b�M�C��)y�� +kY�}:x�,16������>{X~�egH�*;��������ˎ��;�������������-��jx�m@��Խ���r��� �.�b�(�9j��5=i�ƙ�O����� +��9l���a�i|p-1>q�*�F���p/�����/�xw�>�^ظ��'�R@�� N%� ҁP{Q� +拾��p6��*f<��"�R�'\�_R^L����U�����H��������3��i�~�_ �8��Q^��������6F�g�Q����M +����< ��&���Ε/Yh _�/x6yB>eV�R42 +�o���-^t�psk����y9!c��JY��5�J����>d���媗��<�ۅ�B����R�����0DRN��Ώ�}4T�\���Q���X4_�V�K�K�(�,��h܎#���S�5�\�6���8��l��@��ǹ�|�#y�;�|R�����#�F�0�|�Gp�h�C�|�C�@@!*��*� *�� +}Q�~I�}Y��U�+*�U�� +�R�����:�/qhi�Y=|�C��¡sA+���zS�=�*����r�7�<��_�Ѓ����@Z�8���C�94|�CKbe��Dz�"�e���"Ke�b�<"���-�,��-���QP��c��ñEޤi� �疀�i�>����u8�/ �+V�X��H�;1p�O��3���O� ^>|<�e<�Dn3�6�9.���=/R�����g5.�+,&G��JH��|��:���]_�/"����FWک�W��W��ר�)��u�#?)o >�?h�T�&������]��a�����m���ʞ���=ىS=ڰƃCtg�쉒:�]un4��QI�$$ob���� ��!�\�!)��yʎ@��PJV���(�^В�Z�7��%kr�CR�Z��k���E2�!:P�"pzb�����Rfv���-�`H2HgKv��)�P�(sB�mhK�CI�{��Z@���v����.(^���jˡ�8��\��0��k^�9C��d�����19���( h����A�����%Gd���B�d�+y�� h1"W��w?�CJ@� )�o�I��7E�6��6�a�����#of�('2�/(�Y�/���F�TO�څ�`�,P�N�'�_��8�'Z�S'c )P��o���50;��S�����Ae�I�|hV�W0�٢�B�\��|��!�]y�/� ���ۍ�,�&��Ặ����U]�X��vٹ�g���)�!|4�R�f9q9���w�q�.��!� +Ζq�h�%5`�P��W�M%!.`����h�\��0[ 琕sXo�t���f$�1�R=�f��R��߄��ؾk��V���]Q�rۧO��41���B���E��Ǐ�2E�U�pV���s���z�������CD�M�H�)DYِ�Z�L]b�=����Pr�6�q,�@Za �}y@}i�m�ѥ�#>S5b;m���Y�S>h�����\0�����"Y7!�&�܄�MH� ����C3VS�'��#� �Ю6��;_��ш����Z:��=�D4t+��^6���}l�UD���i�`K]p�# ���y:~#��h���U +��w ��C&��7p��׆�f�(+�5�I +4kZ��j���"�Qa4f{�(��P��u�P�M �0��i"ׇd�dp���f����ϯ�3z4X��t�� +jqPU?\��l�V��C&�����.�$�5U,3�r�$;c@5&�y���������L�=wu߄ ����^/Y��f�2�qk� +ej�'%� ��S���D�Naa����̩SI�@��d,��99bX ����}L)�m�6����W��Y�����&{��.uy?���oÂ.����L��)���1_��LE[קHTs��=�9 +��8� ���� �x�p�[�?�{@�xP�!ћ3ySo0'�0< 6K̈�P���k��( +^�92kt�*r��\�6Q�L�W�&�x���Ĵ�H��Jk0�-��I:��&��ԛt-Y+SLW�Ը�i�Y�͖xbl�5��8��#;��gPd7xZ M$�I݈���`>�9r���� U���g�MQ��D�*�D�$k�i�M.���-z*��t�] +V�U�� +���EW�����V�K*4�B�UhJ�J*4 +��zk0CT�2�3� R���츥��ߕX���V��{���w����gy`� A��nf��e��A����9�6&��������>�8o"{�Ȯ�Z�vE�݅ �\�'D̦�A+���s ��� +��z�.�A��Z�[˰�e�Bz���)j2�yp[ +Y��jϱv����s@�{�)B��2�(�ㅩ��"+CMOO^�f 3�}3f��C�A�����5/�����}�nt޵�K�AC���y�7<�z���,��_�����M�^���O��~Fɛ䋖��Rp�tf�,�&.���+�HMJi�������zgTݚh������83I� +�����E�c���" +�E�hk��.����ep�@;�����l�MHϡNƗK%VQ�_��4�H&}�b⧔�Dz,���0���� +���R*hAHs<��gP��^ ��4�Wr+&.��|�' T��E��yEUkQL~ ����[�;'��I l +���]�'�B&dO��U .)�����.>] p����c<�����c7��S,�%����ς� +lA�������S���&�L���h}9�<�T�ƒѳ�vT�o@ �` +U�A�e�j��W��ZvG_-��/��T�o�N\����q]}8���$��9�^}����'U#k"��Z��*\���*���"��XV��`ۯ޸ؙZ��hR5���na�D�g�nK��Z��[c���ݗf�`Ȣ�* Z�M�T�������Hg⭇d�ev�dؿ��B�M��MG�;�2Cl%��[�KY[d�,�2��JCE5|�?ͻ�;|�w���U���>��y��z�.R�R]�5D��J��s�{U�&X�N{ul�`���a�V�lD�sko���ls8��R��2��[�$C���?x\-�D����]*T1����^!I>[�r]�Ӥ��-�6��$���v��� +� TY�Oc1bGn7�u-��lb�QU}$XN��(m).iK�l�-�T1��4�skj�IJrb>�i;I� ڗE43���c�r��]a���ļ��*�x���s�Ma��(�`Ф*��-�`�2���v���`��=��=��x�<�o�]�l ��/Q�=h�hZ�E<��j-^��.�H���+�'���'��8� �Q��h�W,].�W.�"*�5�Slۨ�����?�pջ�-�L�|F�y�)�1.�Ζ.{���'�m�pT�kLlÀJ+�����G��e�< !�j���l� +�Z��F\�.��\"I-+���9��R���h�K�X�w*���R��ؤȡ.��'e�E,_�b$�������?Z�O�BB�4�>��4sD6�dY�5;�2����0B^ű�XP-�H!3�6��A��ϐ����%��8�H�"#�Tծ,�x�`�!����y�l�m���Q��8�!��;Y�Ed�6��ڠ�[ښ����dҌI&�ё�������W�i/�KO�9I��e�bF]8�>oy���r�)�A� [����I3c����hnjef"�G��F>ã�^���uaC�[d���L��q�E�+�A��dl�(�*��D�tf@�s� lz�Rv0��5��5�w�`��uy) cW[��h�� �R�!��t�#��C���`��l��-"�EF���V�&"�dd��l���;dd��씑]"�KFv�؆�٣��ae�� +J�C� +�C�%]�����i?� �� 8@����=D��T#ҷ�A��g�C������ț��*����~��|�������}��)#�Glk� '@s�2�t��J��ir\�������H��${�ev�rI����ڽz�Q5�J������ ���z��\!��q�N����:� ?`7d��t������Wc��Y1�a�0����P�o�GȀ��LP�6���A'<�a?K"���.ي�Ljl� +�7�\oa�����5��ĆryNx3']RlT���ϐ%����ȂuTк�M��+���|K 5�8�������됓�����/8�'��n��i��%=��{q�����H_���h{/)�����%P����~!֛4T�T� ���MPY�O�l��ri�~����#C ��s +젢�(�/�֦)�ʱRj<5%J��3�˜*�/��ΔX�Qln�hu�k%���z� o�4=7���^���1� +�����s�|� +;.�L�i'K��K'JW����� D.NOg l���B9 +�4�L�g�봊��B��C^IΣ��Y � +�cb!KW�xW0�� +�q�6l�0[����'�3����P����k�VOf��#bx�v�C�۵K'y����(o�ʎ�(|�4͡D-}vb�0�W��Ѝ�xI,�X 1����̙µҜ�7=V,^�-\c + l +��z�aO:w�Ĩx�"'���͛���0;3q�<�U.��w��ĉ ���4A��>���@�=p�f���Jb ��?#s3�J~�����T��(_��&��n��?���aͷj �8oNɿT���'�Q�Ej�/�����5��%��؋A2�g�d��"�X�Ѩ��M�6�#�ٵ:�%����֠�����.�,��������������L�ߑ����/�t���(p͑����y�Vrrw��=��̪�!Ua���"#kxX{��º�,�>;66&#����~�ل�*��l�Ж`+���9�� +C$�]�n��'{K�h/��+�7�~�ۇ;��9��.�smf_y� >F���m7�����}_pت}dQs:(6��9�^�R��cٿ��������|�d�Y�d��헼��r>^����P�EF�9nFN���Qs/N�~��/��THNj'0���Rj��ya�J޺ �ݗ��_m��V�U�L�U;��j,r�g��/����Y��U���ֵ;��o~I�� �GB - ��yl�zӀ��0r0����_F�.��k >��Ix���[�ʼ�n(�m<�E��- +v����F��څE��$[#��8� +r���0�^��p�f��{Y� +M}t�S������ M��y5��Ͽꥮy�+^z�K�x�/(LN��V����\dD�kF��,p�[�b�X?��!�"`.-L$g=R�Lh��d�4Dj�l$�z��|�@-�����6�j��"ʁ Q�O\US�-�0 +��f�uy�Z=�j�A�f��͌������������V���P8��O���ZX�)�!(1���J��4��� ��~k�ԟ�t��˃��rT?y�NՀ[1 +�Y���ɾV� +l�s~6�A��leQXfe�ڙ�P?�2�� 8e���)^�\g�#?�'3���>��{����z�|���;����6&ױӴt.Z-�zgL��� .\�]�^�Q1�Wg����U��Q3Y�*Z�k�j��9���b>�}v���9��3$_�� +,g܍�y�b��R��q}�=ֺ�P�61�'C�y��ռ��q{j�" Z��� +�Nhm�\e9��{��>u��(�^�,��>�Yx��>� +�����1�Z��`��4��b%���[D^�������=>+��ﲯI~>rN��ng����Gю���6l�v�/�v����7t7@����V&�:U:�3̇b=(�R}z�<�[�0��a2�d��f��XiR#I�1�p,�>SD�^,i��7�'D�Ӯ��[h�B 3����L>��^oqzv\z���3�$��Y�6}7�QZ�LJax!e�4�D���k�UCI�C�)�c��Լ&(Okk�1ae+�Ggl��dJ2�$�*��|{f���'Q}����U�jM�Mu�#��Ѫ]�6�\�yi�TE�j��f +^\x����0Mɍ�ׄ�L�M�:~5<����ߦ�w� +?�i�e��Q\]��������m��KH����KB����B���K�ʠ#�ٳ珎���AT!�`�i5����g.#�$��גy + +�R7��(��YlwA���P�/�+��*k�/XyI��������=5����@E)c���@}� ��E�0�{���]k^�� +�� �� +'��:�j@�R>��2�Du�ȗ�~}_�È���� �m�u6/�&b�!{S�ݲ�{�J9�0��.�(�I(�F��ʒ_��XEV�7�m(��� +�C�B�VL���O�U���O���4EIG{-U��R�� T�A��Z��kňT ��#>���.��X�(���0RĜ�B�->l�dl�N7����Ӳ&�g�vo� �(�ab����m�F�D}�BI���p[O+�.��695��n�u;,G�׫E�:��!���H��Q=z��um��X�T;�I"�aNg�Ϣ:���o��2R�}?+7� ߤ�ef]<���,*\�|:]���6g\�dR�~]R���8��|����ֻg��c�P�ƻ��"��я%��ax<׺�*�M%�O�K�SJ�N'KW�����-f���ޥ|IC�)E�݀�i Poh�T�Tw�~57���p}_XO���l9-%Q�[2 0�,fr�b�䜟@�K'��O�ʸ�\�'Ш�� ������~B�qfr<2���l�� m4��/��(x�a�Xl�o����6{n�0R���1�=m��)a���������=dT�R����aF�…��ȟ����)��نO>����5��a��|�Λ�%�L��h��)0�V�7�jz���KY�'���yF`�k�f��3� +�#��u�V�Z%�t]��V�X�� +�"������ ��5�ݘF/j�PͶ������-� � ,���d��$ak��Xe��f� �*���i���`5�8��\��f�\s��|���Oqr7[�#��A����:l�q���)��50�}|>�Ag)�$��*�W�p�:��? �^M/`������K�LN�� �S��”8����ZV�[��G�uOs�>�v��%g���� +�� +��OB�4wح�_�W}�ɼ>�@m�jd�w��Q �֠ �z� +��-���b��6�@��� +�{��]� +d����o��T���z2j�31�.H�1��1�ƆMr�5��r)�!'Wk��\+'�N�[�CG��E�s6,H��:�D���+,�=��1uh�3�E������f���{$5�e�щ�����+C[��3松.�C��� �����I*'��}DP۬�2j4��D �t�p��'B%��*�L����'��� ��lu��)���:+��� �����)�h���m�Rܓ�30�X~E���8SOϋ?= 4}���r5�����5/ +f!������8�mcg�kmW��� +O���^�F��i��0SCԌ�^בG�]^l���D�N�9'00��h���j}�k�k +آ*��ye�R݅#閦Tw�����9�'�������耉����/y��j��l�����#>���s� rF!�LnM���v��ͧCG'r��� +�y +����M�O��,+M�*�֏q+�/��{�U� +� +X�'�*1pJ���=2��f��^������������G�.���OK� +���D|���10sڍ�_ ��yƙ�zg4���]#|��(<����e�����xDZQ~� ��h�O����C���<��C��|4�X���Č��x ����%ܚ��o����g_Ց +���NF6f�K(��K�EOE�f�t�#��:�"����g�����~�c!�h�X+ܢ�>Z���}`�Yc�İ��Udm"�S�6#�Z�Z(��Z�WԼ�/2��Բ*�,W�:�ٹ�8{Z�N+�ƌ�ep�:�,�x���� +WŽ�?5Z���=�2A��֋`g��*S���a"��ٹef�$zUV׮�.�T���M+iւ�{����9�'Yp���Գ7Q~�4G�2�O5+V�2���Ѣj�1_ +2�r T�:���&e�s3��Ea���c���d/����gU/�����hz���V���� ��h��6�MS���˥�N/{%��K` +@�; �s`��-�ږ�zg +EL��A��ʪY���땋���qX�!�y��M�gV9"�Cc3�Y�o�=��N�/�F�0fcS�y��E Sb������>�����B@6���~0�@8��#�Fɴ�L��ΰP�M{���2|�/bB�8�p��Mf���aJ3�mw}B�<5�n�Cg�!�|�@55�*���G&'F.9&�ᘁoaT�o֌�'f���+��� �q���7Q8�8c�C�)��i�l0�w�Ţ��CW�+q�п\���� ��s�4P {,���BّW���an{��ఇ`�"�h �$A�F0��Z�����Ț.x�,��BG֔�BV�r��.�.��daeDX�����kC��� T�|�&������z�4��K�w]�AE"�8ma��S%e�~Ƥ�6 NH�_�Ol4p��: +��Yl��4���w����6A�~P#�܄&�w҇�LI7;�ֺ�%yM��lY�5޴Z�r���ت~4J�(��f��tЀW����eF�Vo2%)�;�E�ɄCH딛c9�&�.�[�mʍ�ˬ����� s�*��H��*[�'�xSڎc��lai +lm��R"֒`"XN� �N)�ע=�K���6�|d�;����Iv�3hڝތ�mQ0�xs�`�Ľ��(Y�MN�P���w[�34_pۜ��6��g��ا�`4�����N����;�aV�f�;�5��=���^5�}4&_�����c���q �0�=LU4��wn��:�v��ݫFzP���cb���TH +�����[��o�!��n�3%]��T�s��J^j +lƒu��N�B;�!M�tGd��p�@+UMOH���e�Cx��?�[�H،�����u�Y,$cʆcv�r��.�^p"O���n����:ީ;Fs��3~DY���1ߗS���r6xU|����9n�,��R%�R,<��~G������N*������= �Y���36U�`��*w�gl�'#���ʧۘ�f�*���w��y��j��=��jg�e��ҝEbWp� D!h�k������d���%���_�1"�?ps?Hl��x����@���Ϯ��ČW7Y*]���j�AD�������s LX8�7k$NC���� +�4A��`*�߃YS;y����2Y�� �h�DY�e���d���3Q�E%���F%>l$������0����9>@��5#端���9L���yFd7&��#F��kc�u6�����?���]�Q BYrë��B�Fs��L�I<�'�#y���&���Ƽ����F��q���j�~�r�0��]����г���<⣦���yA=���P��N �ʏ���$��Ҝ���D��M��zɑ4�I�+a6QL���p4L�+�d�2L� ����0V0���Z�'6� LF�a2R&#�a2�a�&f�dD��Mx�m"��3�ԑ��́��Q���蠒l@��o&"0��JL ��� � ���_�>��6��ެ�咺d蝡e0 �;�@��5�Z�qC^R�~��,c����yÚ�~�^p�vޔ���/Rb���p8��G6^���ͤ�3 ;��7����Ǘq.?x!��|����A����1��,nCK�~�� � ܪk�3¡���z7����#r=�_�8~Z����Y�Q*y$��J�����Pd��_J }��o萶EVC{Y���w�U���P���g{�T��i�I=z�����;=h2��$�1�M^4_�'<��C +������ԏ�߷q��/��x�D$q'my%&⎤��� +?\�� �j�T�Կ��9�=e���~S��7��9�z�g�Sƍ +���A���,����jcPZ'a�!"`Þ5�$U��A>� +!�s{��b|i<�RxL�2�� �Y�e`D +2p!�M����p0:��UJ������%QRH�,? :���������i[̅*(�X�'om��dz:�ޅP���.߉*�/�._���ϳΞ�rOTh�8&�O7 +�+���5�'B�~L��:��˰Tx��񓰾�b��7�N/I��r�xB��r\��4�)�Pg�mQi�Ik -�LK�ƓtA�;m� +�*��:� +���z@�'���@s� ���e�8��@yȚr��%D���<����T��.�*�mEFP��ꐺV��ҙ��s1}���@gU�903��������=��P�E�jQb�Y>��懴5o�1�����`����0���Q�w��� R�%ZT�b�i�����j�$���c�@�B���v���?�j�oW����2w�-�uz��C�^��!�b�̖Jd.o��٤��=k���R�X��_l{�F +0I�|(� ��yńM�>���%�^�,�ޏ%��NV�u��~�?�#~�C��%�`{��&�_�$.żZj3������3��kp� �I����A�t��y� ����П�s䪈�Ky�~�9NV� �5�?�+Q��M�6E^��ĺ~�$�ȵ؆<������0s�i�{1Ұ/І�gQ٢�"X�>�@�vV3^�����5�^�{=$b�^��zdهa&����ww&��� |��)��>�(�/pQ��6�B%����B��޴��_Ŀ��@ + +��%9�J��M>?�����Q%!z�v�A�F��� ��"��7ړ�T�kiQ��2�؋n�$4e�2�kӡ��]�ɐ(��P8��`�y�(��CCQ��X&ʐZR��H�U��d�@tmx��(��jw��#Wr{^ �g�A��y��{�<�)�T��dX�l!�j��Y +:S�&Xf�'\Ҕ��ۄ�NeB�M����i�#����P~:}�e +Щ�2h53���� լ�t/��br]�2�ʈ5D̤1Ҫ�(���S�9�pK\�HA�e�D� ���IdK��`)f���j�dz�Θ�V��o��|��5�A�!��N��rj��i�*��97Z�.֠T +L�ie^iw$�nv:����i9?[+�|�+���X�����g|ǖ�C%� *��x�A;2?��k��@ɟ1�s���P��/��^>{�qD5�o�`�������8W�(+�3��aW�ԯY]�l=z7�hd]ԆR����kFl��DK����(*�w��� +�+u�ڷ[Q� ��0 +ݣ�v�-����w�K��I�c�n�B�,�oD:��� +�`���c�n�s��d�O�K����gU�I�t��m�'�Ó@��0= +������|����&�V•�5 +����ȥ~q/;�qU^Eܻ=��LHߔ��S�FE#>ш�2W����C���4��M�HHSS�*R�^��+��B�D +��b��7U\m�E�j��ɉ�k^$���.�0~�n�s��:3�F�P�\Y�;�� j*>YIn#VI�Y�}��Y�:�1��C$�R�lAK<���3�z}N�*"_���u3���px��#����A-*ިNצ�h_�F;�-�j|�{#/)5G ����u�4/�J _�4/|o2�q�6%��ml/�����%� �tq)$*<�v��L��;CX8� �M��FN����BX��C�<�Ā��H�&�t9Rvރ`ϲ["�܅d�I��޵T�bP���(�m$i��.�cZ�`u�Y��m�'>H��%��d�E[��e}Bum�l�5�6�j�ŵ: +����Zk�Z��m��}��J-D;�nܾS���ŗ!�����M�� �I @��$ȵ��]d���;�[�Oz-M:���Ǽ�Q�3��e4�qs�o1_c;ӗ��+�����NQ�`7��r�5�S���t,� �!���� VQ_����g��J&�^1�+Fi�d��b��^rd��F��=��}u�K�7�:�ʔ{�[����L�A�mo��}������›�����@e9�م�u�&���A�.Lj��F�±֧w����0����g�F��1���R�L� ���u��� +7UG�­�$���!�̆�^QxM\��W�^Qxm\�u����i�d���=���٩���t�ޢ�Ç�#9ڰ˃���ۋWg�v ]��� ih���"��hA�Ԁ�j�g��8��Q�������lؾ��'��x�u�KSNL�qӼE�|ܛ�L�����tqEE��O\.� ۺF��� �}��+�1#94����z�b��!Dfq�ؓ=�_ǜ��^ 0�V��W�|�� v`��ͼ�Pþ� +u7[$W�4�v;N��)�:6.ـ���$xkI�4Et�������l|���Qߒ׽��on�- R�ac+���%���K���e��`lA1�Es\^��)�5r�.g����銓W:�X���nuP���z<��u�&�I��<������8���21|v�l�P���ɜ0-Nw��7Q��d�CDQluh��Lqr�7��lT��)e]c�����Q��l�|9�%i�!�B3�&G�S��aC,� i8$����65C��J�cװ��1�*�ʢ v1R��&��)L�a�t|H`�A�LL]�>� :û�4��/�L̊Z1W��R���Ņ*����v�2�Ր�ň�w�E��>tW&~&� �Lz�=^ +fc��w�P�(jQx��,[��2s*��"��5Ps��U~ �j�/�8,����A֯�/�n��R�*�F g܈I}1/�&�c*Q����en�,��DE�UwR��@�1�w�?��6��do�_�H�-�����#�e_� {F#d�\��=m��?��K�� ?���R,y���'^Ufs6�luJo_����:p�mH�.��c)a�@2w�w����2�ʼn�&��v�)CߤSL�FaŃ }K�o}K���@��@4��H �N +�4@��%D�� +�Г0��R`��j�8�JأJ����A�V�}8�4.M�Ќ�Gk��{�@4�C����f��0��}X�3x!d�}f���3~m�}�ŊYQQ݇YQQ݇YQQ݇�5^G��>j�A���0vO_�ʈ�z7�o���}Xo߇,>l�J�����g���s�\�+��+�YȈ�/�w#��-���.]�e�}a�����7�qи#����T�$k�ڡ�,P���PK�� +s�3!�Ǵb�d�-m��/��,�6�FS�j!�M��x;���} _$��V���G�uv�`en�/� J#"��W�9�,�唑NZ^yFv7>��A��K����h�t�o�J�Ik�� �Z�E7����H7�ϥ\��*o?Q�Ei�5I�p�C^s��z\6d'� �Dx�)Im8r�p�ۙ���0F�.��d���� ”�7��#I�t��F�rT�hX9���}g��Z(�V�� �L��hj�ή�lߦ��#|����#�g;�㷓 �s"A��7~��{�C%Ϩ�Oy��'n�x7n8�O�֠�ul*ʺ�X��{��8 +:{c��rqn��E��>B �S�D��˳3sP���PE1U��^���8�A8Bq�3�� �ro0�Cv�� �r�|�\[׊<Ѝ?��h��n;��;�;Kc��厠K�#}SDZ����+c�[���D];hX�����$����%ǽ?n�s�^��� Z>��|}=HF�dl$�tH��Ik㣭 +"��Y�MY�,��wsi��?���2�L�S�"�M�ȎVq���CV�w��Vy(᝽}�%��4�k�rN]�,EV���B�����`�*�}����{�={��z� 1�H��Ղb��v�˵i�p�*G�������Gh|�{�ӕ��P�C�1��cHƎ!1�V�;܇�<9.Ia�)$�&�M*��T�n��o�Fu���1݀N\�����W�`�n��?����w�T��Zi џ\�V����[p��R�c�ZՊ�R��g���JSu+ ����;q6D��'?��O������wu��0�x7�� �低3��t6��h�a�����;t��~= ���?������Z��w�F]k��η�����~��Vy{ET��w�C��T\ϋ���t_����3?�g��NJ��������w��w�?J,���9����-��ﭯ��sL��/���&ƒ"�L0ݜ8e�f3����V +�CU��yPb�=�4�����y��IshS�������J�R�cK��6�Uqr�b���s4��c���y+Լ�.�`eNN$��7đA[w��g,��+Na�8S-���ȓn��f�eh;i����Ti��G��C�t�0�ΛI�4���"���PgI1=��,���u�/��*V�;����ۿo�?�z'd����}Q���X/�Q�:JV��"�ue��u��{��{���_�^���W�z�W^y%�z��4��L1a���t��S���Wg� /�MJޖ� ��  �X�b�5�'""7��̲�h�l j���ؙ�;����b�\5�;��RuecT����2vbʋ{���|�]�����h��������Oe�FVj��o ��} +�l�WT{~@"10�aN`ǽY�Rι�U:�������}�|�g��/7�� Fv{ّ=^fd�����#�����/{�s�M�1��2 >�Z�.���yͭY��XV*<�JC[ 6�q��4�V�>1]��}� ﻬ&�U;>?�j���[:酾����W��B���(�����!I:��Hpo } ��M];��kG�k^p48�Ե��q%g}b�փZo�x����u��A��L�$�_�A�.�G�ut od���oE�]��n�t@-!� �0�n���G�yq���pA;�[�<�6�"�t�Z�Epp"���%��� �FRq��ӢH�'�ՋR���V������J�>�l%Z(����&'i� +���,���d�%&�I���̤tN�ǚ���~^,'�ĈW1�c�������������� ���icon������icon��F����L��s� �������label���Button���label E�b[cF�E�\G��������labelPlacement���left���right���top���bottom���labelPlacement啢T��I���^��D�������selected���false���selected�/�?�ZJ��|��g������toggle���false���toggleg���Y�D��̜�������enabled���true���enabled!����RG�5S8��bm���Other���visible���true���visibleD*Lc�XTC�$�v�����Other��� minHeight���0��� minHeight�P���K��u@�&�j���Size���minWidth���0���minWidth! 7�C2�I���� l/����Size�����)<?xml version="1.0" encoding ="utf-8"?> + +<componentPackage xmlns="http://www.macromedia.com/flash/swccatalog/7"> + +<component id="Button" class="mx.controls.Button" implementation="Button.swf" iconFile="Button.png" tooltip="Button" src="mx.controls.Button.asi" modified="1059073889"> + +<movieBounds xmin="0" xmax="2000" ymin="0" ymax="440" /> + + <include id="BoundingBox"/> + + <include id="SimpleButton"/> + + <include id="Border"/> + + <include id="RectBorder"/> + + <include id="ButtonSkin"/> + + <exportAfter id="__Packages.mx.controls.Button"/> + +<class id="mx.controls.Button" > + + <Event param1="click" /> + + <TagName param1="Button" /> + + <IconFile param1="Button.png" /> + + <property id="_inherited_selected" type="Boolean" > + + <Bindable /> + + <ChangeEvent param1="click" /> + + </property> + + <method id="icon" > + + <param id="linkage" /> + + <Inspectable defaultValue="" /> + + </method> + + <method id="label" > + + <param id="lbl" type="String" /> + + <Inspectable defaultValue="Button" /> + + </method> + + <method id="labelPlacement" > + + <param id="val" type="String" /> + + <Inspectable enumeration="left,right,top,bottom" defaultValue="right" /> + + </method> + +</class> + +<class id="mx.controls.SimpleButton" > + + <Event param1="click" /> + + <TagName param1="SimpleButton" /> + + <method id="selected" returnType="Boolean"> + + <Inspectable defaultValue="false" /> + + </method> + + <method id="toggle" returnType="Boolean"> + + <Inspectable defaultValue="false" /> + + </method> + +</class> + +<class id="mx.core.UIComponent" > + + <Event param1="focusIn" /> + + <Event param1="focusOut" /> + + <Event param1="keyDown" /> + + <Event param1="keyUp" /> + + <property id="enabled" type="Boolean" > + + <Inspectable defaultValue="true" verbose="1" category="Other" /> + + </property> + +</class> + +<class id="mx.core.UIObject" > + + <Event param1="resize" /> + + <Event param1="move" /> + + <Event param1="draw" /> + + <Event param1="load" /> + + <Event param1="unload" /> + + <method id="minHeight" returnType="Number"> + + <Inspectable defaultValue="0" verbose="1" category="Size" /> + + </method> + + <method id="minWidth" returnType="Number"> + + <Inspectable defaultValue="0" verbose="1" category="Size" /> + + </method> + + <method id="visible" returnType="Boolean"> + + <Inspectable defaultValue="true" verbose="1" category="Other" /> + + </method> + +</class> + +<asset id="BoundingBox" modified="1054593655"> + +</asset> + +<asset id="UIComponentExtensions" modified="1058814666"> + + <exportAfter id="__Packages.mx.core.ext.UIComponentExtensions"/> + +</asset> + +<asset id="FocusRect" modified="1055744819"> + + <include id="BoundingBox"/> + + <exportAfter id="__Packages.mx.skins.halo.FocusRect"/> + +</asset> + +<asset id="FocusManager" modified="1055744781"> + + <include id="FocusRect"/> + + <include id="UIObject"/> + + <exportAfter id="__Packages.mx.managers.FocusManager"/> + +</asset> + +<asset id="UIObjectExtensions" modified="1058814702"> + + <exportAfter id="__Packages.mx.core.ext.UIObjectExtensions"/> + +</asset> + +<asset id="Defaults" modified="1055737279"> + + <exportAfter id="__Packages.mx.skins.halo.Defaults"/> + +</asset> + +<asset id="UIObject" modified="1058814731"> + + <include id="Defaults"/> + + <include id="UIObjectExtensions"/> + + <exportAfter id="__Packages.mx.core.UIObject"/> + +</asset> + +<asset id="UIComponent" modified="1058814700"> + + <include id="UIObject"/> + + <include id="FocusManager"/> + + <include id="UIComponentExtensions"/> + + <exportAfter id="__Packages.mx.core.UIComponent"/> + +</asset> + +<asset id="SimpleButtonUp" modified="1062225026"> + + <include id="BrdrBlk"/> + + <include id="BrdrFace"/> + + <include id="BrdrShdw"/> + + <include id="BrdrHilght"/> + + <include id="BrdrFace"/> + +</asset> + +<asset id="BrdrHilght" modified="1052770908"> + +</asset> + +<asset id="BrdrBlk" modified="1052770913"> + +</asset> + +<asset id="SimpleButtonIn" modified="1062225020"> + + <include id="BrdrBlk"/> + + <include id="BrdrHilght"/> + + <include id="BrdrShdw"/> + + <include id="BrdrFace"/> + +</asset> + +<asset id="BrdrFace" modified="1051767541"> + +</asset> + +<asset id="BrdrShdw" modified="1058931521"> + +</asset> + +<asset id="SimpleButtonDown" modified="1062225019"> + + <include id="BrdrShdw"/> + + <include id="BrdrFace"/> + +</asset> + +<asset id="SimpleButton" modified="1055744781"> + + <include id="BoundingBox"/> + + <include id="SimpleButtonDown"/> + + <include id="SimpleButtonIn"/> + + <include id="SimpleButtonUp"/> + + <include id="UIComponent"/> + + <exportAfter id="__Packages.mx.controls.SimpleButton"/> + +</asset> + +<asset id="Border" modified="1062224872"> + + <include id="UIObject"/> + + <exportAfter id="__Packages.mx.skins.Border"/> + +</asset> + +<asset id="RectBorder" modified="1062224887"> + + <include id="Border"/> + + <exportAfter id="__Packages.mx.skins.halo.RectBorder"/> + +</asset> + +<asset id="ButtonSkin" modified="1062224893"> + + <exportAfter id="__Packages.mx.skins.halo.ButtonSkin"/> + +</asset> + +<asset id="__Packages.mx.skins.ColoredSkinElement" src="mx.skins.ColoredSkinElement.asi" modified="1062582563"> + +</asset> + +<asset id="__Packages.mx.core.UIObject" src="mx.core.UIObject.asi" modified="1062582563"> + + <include id="__Packages.mx.skins.SkinElement" /> + + <include id="__Packages.mx.styles.CSSStyleDeclaration" /> + + <include id="__Packages.mx.styles.StyleManager" /> + +</asset> + +<asset id="__Packages.mx.skins.SkinElement" src="mx.skins.SkinElement.asi" modified="1062582564"> + +</asset> + +<asset id="__Packages.mx.styles.CSSTextStyles" src="mx.styles.CSSTextStyles.asi" modified="1062582564"> + +</asset> + +<asset id="__Packages.mx.styles.CSSStyleDeclaration" src="mx.styles.CSSStyleDeclaration.asi" modified="1062582564"> + + <include id="__Packages.mx.styles.StyleManager" /> + + <exportAfter id="__Packages.mx.styles.CSSTextStyles" /> + +</asset> + +<asset id="__Packages.mx.styles.StyleManager" src="mx.styles.StyleManager.asi" modified="1062582564"> + +</asset> + +<asset id="__Packages.mx.core.UIComponent" src="mx.core.UIComponent.asi" modified="1062582563"> + + <exportAfter id="__Packages.mx.core.UIObject" /> + +</asset> + +<asset id="__Packages.mx.controls.SimpleButton" src="mx.controls.SimpleButton.asi" modified="1061503691"> + + <exportAfter id="__Packages.mx.core.UIComponent" /> + +</asset> + +<asset id="__Packages.mx.controls.Button" src="mx.controls.Button.asi" modified="1061503690"> + + <exportAfter id="__Packages.mx.controls.SimpleButton" /> + + <exportAfter id="__Packages.mx.core.UIObject" /> + +</asset> + +<asset id="__Packages.mx.events.EventDispatcher" src="mx.events.EventDispatcher.asi" modified="1062582563"> + +</asset> + +<asset id="__Packages.mx.events.UIEventDispatcher" src="mx.events.UIEventDispatcher.asi" modified="1062582563"> + + <exportAfter id="__Packages.mx.events.EventDispatcher" /> + +</asset> + +<asset id="__Packages.mx.core.ext.UIObjectExtensions" src="mx.core.ext.UIObjectExtensions.asi" modified="1062582563"> + + <include id="__Packages.mx.skins.ColoredSkinElement" /> + + <include id="__Packages.mx.styles.CSSStyleDeclaration" /> + + <exportAfter id="__Packages.mx.core.UIObject" /> + + <exportAfter id="__Packages.mx.skins.SkinElement" /> + + <exportAfter id="__Packages.mx.styles.CSSTextStyles" /> + + <exportAfter id="__Packages.mx.events.UIEventDispatcher" /> + +</asset> + +<asset id="__Packages.mx.skins.halo.Defaults" src="mx.skins.halo.Defaults.asi" modified="1062582564"> + + <include id="__Packages.mx.core.UIComponent" /> + + <exportAfter id="__Packages.mx.core.UIObject" /> + + <exportAfter id="__Packages.mx.styles.CSSStyleDeclaration" /> + + <exportAfter id="__Packages.mx.core.ext.UIObjectExtensions" /> + +</asset> + +<asset id="__Packages.mx.skins.halo.FocusRect" src="mx.skins.halo.FocusRect.asi" modified="1062582564"> + + <include id="__Packages.mx.managers.DepthManager" /> + + <exportAfter id="__Packages.mx.core.UIComponent" /> + + <exportAfter id="__Packages.mx.skins.SkinElement" /> + + <exportAfter id="__Packages.mx.skins.halo.Defaults" /> + +</asset> + +<asset id="__Packages.mx.managers.DepthManager" src="mx.managers.DepthManager.asi" modified="1062582563"> + + <include id="__Packages.mx.core.UIObject" /> + +</asset> + +<asset id="__Packages.mx.managers.FocusManager" src="mx.managers.FocusManager.asi" modified="1062726409"> + + <include id="__Packages.mx.controls.SimpleButton" /> + + <include id="__Packages.mx.managers.DepthManager" /> + + <include id="__Packages.mx.managers.SystemManager" /> + + <exportAfter id="__Packages.mx.core.UIComponent" /> + + <exportAfter id="__Packages.mx.core.ext.UIObjectExtensions" /> + +</asset> + +<asset id="__Packages.mx.managers.SystemManager" src="mx.managers.SystemManager.asi" modified="1062582563"> + + <include id="__Packages.mx.core.UIComponent" /> + + <include id="__Packages.mx.events.EventDispatcher" /> + +</asset> + +<asset id="__Packages.mx.managers.OverlappedWindows" src="mx.managers.OverlappedWindows.asi" modified="1062582563"> + + <include id="__Packages.mx.core.UIComponent" /> + + <exportAfter id="__Packages.mx.managers.SystemManager" /> + +</asset> + +<asset id="__Packages.mx.core.ext.UIComponentExtensions" src="mx.core.ext.UIComponentExtensions.asi" modified="1062582563"> + + <include id="__Packages.mx.styles.CSSSetStyle" /> + + <exportAfter id="__Packages.mx.core.UIComponent" /> + + <exportAfter id="__Packages.mx.managers.FocusManager" /> + + <exportAfter id="__Packages.mx.managers.OverlappedWindows" /> + +</asset> + +<asset id="__Packages.mx.styles.CSSSetStyle" src="mx.styles.CSSSetStyle.asi" modified="1062582564"> + + <include id="__Packages.mx.styles.StyleManager" /> + + <exportAfter id="__Packages.mx.styles.CSSStyleDeclaration" /> + +</asset> + +<asset id="__Packages.mx.skins.Border" src="mx.skins.Border.asi" modified="1062582563"> + + <exportAfter id="__Packages.mx.core.UIObject" /> + +</asset> + +<asset id="__Packages.mx.skins.RectBorder" src="mx.skins.RectBorder.asi" modified="1062582564"> + + <exportAfter id="__Packages.mx.skins.Border" /> + +</asset> + +<asset id="__Packages.mx.skins.halo.ButtonSkin" src="mx.skins.halo.ButtonSkin.asi" modified="1062582563"> + + <exportAfter id="__Packages.mx.core.ext.UIObjectExtensions" /> + + <exportAfter id="__Packages.mx.skins.RectBorder" /> + +</asset> + +<asset id="__Packages.mx.skins.halo.RectBorder" src="mx.skins.halo.RectBorder.asi" modified="1062582564"> + + <include id="__Packages.mx.styles.CSSStyleDeclaration" /> + + <exportAfter id="__Packages.mx.core.ext.UIObjectExtensions" /> + + <exportAfter id="__Packages.mx.skins.RectBorder" /> + +</asset> + +</component> + +</componentPackage> + +Media 1���Bitmap 1��� +Button.png�ԱC�ԱC�������������������2Hxi�� @!E����Nw'w*� �Qa}�$K=�����E�FsW<_� ,)��CQj>�QY����Zq�uD܊SyK0�z���� ���_Y?A���7���IsQ�$����Button�����Button��� +Button.swf �W?+���Border���Border��� +Button.swf�CP?���UIObject��� +Button.swf���������__Packages.mx.skins.Border��� +Button.swf��������������� BoundingBox��� BoundingBox��� +Button.swfw��>���������BrdrBlk���BrdrBlk��� +Button.swfa�>���������BrdrFace���BrdrFace��� +Button.swf���>��������� +BrdrHilght��� +BrdrHilght��� +Button.swf\�>���������BrdrShdw���BrdrShdw��� +Button.swfA?��������� +ButtonSkin��� +ButtonSkin��� +Button.swf�CP?���#__Packages.mx.skins.halo.ButtonSkin��� +Button.swf���������������Defaults���Defaults��� +Button.swf�E�>�������������������������������������������������������������������������������������������������������������������������������������!__Packages.mx.skins.halo.Defaults��� +Button.swf��������������� FocusManager��� FocusManager��� +Button.swf +c�>��� FocusRect��� +Button.swf���������UIObject��� +Button.swf���������#__Packages.mx.managers.FocusManager��� +Button.swf��������������� FocusRect��� FocusRect��� +Button.swf3c�>��� BoundingBox��� +Button.swf���������"__Packages.mx.skins.halo.FocusRect��� +Button.swf��������������� +RectBorder��� +RectBorder��� +Button.swf�CP?���Border��� +Button.swf���������#__Packages.mx.skins.halo.RectBorder��� +Button.swf��������������� SimpleButton��� SimpleButton��� +Button.swf +c�>��� BoundingBox��� +Button.swf���������SimpleButtonDown��� +Button.swf���������SimpleButtonIn��� +Button.swf���������SimpleButtonUp��� +Button.swf��������� UIComponent��� +Button.swf���������#__Packages.mx.controls.SimpleButton��� +Button.swf���������������SimpleButtonDown���SimpleButtonDown��� +Button.swf{DP?���BrdrShdw��� +Button.swf���������BrdrFace��� +Button.swf���������������SimpleButtonIn���SimpleButtonIn��� +Button.swf|DP?���BrdrBlk��� +Button.swf��������� +BrdrHilght��� +Button.swf���������BrdrShdw��� +Button.swf���������BrdrFace��� +Button.swf���������������SimpleButtonUp���SimpleButtonUp��� +Button.swf�DP?���BrdrBlk��� +Button.swf���������BrdrFace��� +Button.swf���������BrdrShdw��� +Button.swf��������� +BrdrHilght��� +Button.swf���������BrdrFace��� +Button.swf��������������� UIComponent��� UIComponent��� +Button.swf�:?���UIObject��� +Button.swf��������� FocusManager��� +Button.swf���������UIComponentExtensions��� +Button.swf���������__Packages.mx.core.UIComponent��� +Button.swf���������������UIComponentExtensions���UIComponentExtensions��� +Button.swf�:?���,__Packages.mx.core.ext.UIComponentExtensions��� +Button.swf���������������UIObject���UIObject��� +Button.swf ;?���Defaults��� +Button.swf���������UIObjectExtensions��� +Button.swf���������__Packages.mx.core.UIObject��� +Button.swf���������������UIObjectExtensions���UIObjectExtensions��� +Button.swf�:?���)__Packages.mx.core.ext.UIObjectExtensions��� +Button.swf���������������__Packages.mx.controls.Button���__Packages.mx.controls.Button��� +Button.swf�BE?���#__Packages.mx.controls.SimpleButton��� +Button.swf���������__Packages.mx.core.UIObject��� +Button.swf���������mx.controls.Button����q import mx.core.UIObject; + +import mx.controls.SimpleButton; + +import mx.core.UIComponent; + + + +[Event("click")] + +[TagName("Button")] + +[IconFile("Button.png")] + +intrinsic class mx.controls.Button extends mx.controls.SimpleButton + +{ + + public function Button(); + + public var __get__icon:Function; + + public var __get__label:Function; + + public var __get__labelPlacement:Function; + + public var __label:String; + + public var __labelPlacement:String; + + public var _color; + + public function _getIcon(Void):String; + + public var _iconLinkageName:String; + + [Bindable] [ChangeEvent("click")] public var _inherited_selected:Boolean; + + public function _setIcon(linkage):Void; + + public var borderW:Number; + + public var btnOffset:Number; + + public function calcSize(tag:Number, ref:Object):Void; + + public var centerContent:Boolean; + + public var className:String; + + public var clipParameters:Object; + + public function createChildren(Void):Void; + + public function draw(); + + public var falseDisabledIcon:String; + + public var falseDisabledSkin:String; + + public var falseDownIcon:String; + + public var falseDownSkin:String; + + public var falseOverIcon:String; + + public var falseOverSkin:String; + + public var falseUpIcon:String; + + public var falseUpSkin:String; + + public function getBtnOffset(Void):Number; + + public function getLabel(Void):String; + + public function getLabelPlacement(Void):String; + + public var hitArea_mc:MovieClip; + + function get icon():String; + + [Inspectable(defaultValue="")] function set icon(linkage); + + public function init(Void):Void; + + public var initIcon; + + public function invalidateStyle(c:String):Void; + + [Inspectable(defaultValue="Button")] function set label(lbl:String); + + function get label():String; + + public var labelPath:Object; + + [Inspectable(enumeration="left,right,top,bottom"defaultValue="right")] function set labelPlacement(val:String); + + function get labelPlacement():String; + + static var mergedClipParameters:Boolean; + + public function onRelease(Void):Void; + + public function setColor(c:Number):Void; + + public function setEnabled(enable:Boolean):Void; + + public function setHitArea(w:Number, h:Number); + + public function setLabel(label:String):Void; + + public function setLabelPlacement(val:String):Void; + + public function setSkin(tag:Number, linkageName:String, initobj:Object):MovieClip; + + public function setView(offset:Number):Void; + + public function size(Void):Void; + + static var symbolName:String; + + static var symbolOwner; + + public var trueDisabledIcon:String; + + public var trueDisabledSkin:String; + + public var trueDownIcon:String; + + public var trueDownSkin:String; + + public var trueOverIcon:String; + + public var trueOverSkin:String; + + public var trueUpIcon:String; + + public var trueUpSkin:String; + + static var version:String; + + public function viewSkin(varName:String):Void; + +}; + +���#__Packages.mx.controls.SimpleButton���#__Packages.mx.controls.SimpleButton��� +Button.swf�BE?���__Packages.mx.core.UIComponent��� +Button.swf���������mx.controls.SimpleButton����import mx.core.UIComponent; + + + +[Event("click")] + +[TagName("SimpleButton")] + +intrinsic class mx.controls.SimpleButton extends mx.core.UIComponent + +{ + + public function SimpleButton(); + + public var __emphasized:Boolean; + + public var __emphatic:Boolean; + + public var __emphaticStyleName:String; + + public var __get__emphasized:Function; + + public var __get__selected:Function; + + public var __get__toggle:Function; + + public var __get__value:Function; + + public var __state:Boolean; + + public var __toggle:Boolean; + + public var autoRepeat:Boolean; + + public var boundingBox_mc:MovieClip; + + public var btnOffset:Number; + + public var buttonDownHandler:Function; + + public function calcSize(Void):Void; + + public function changeIcon(tag:Number, linkageName:String):Void; + + public function changeSkin(tag:Number, linkageName:String):Void; + + public var className:String; + + public var clickHandler:Function; + + public function createChildren(Void):Void; + + public var detail:Number; + + public var dfi; + + public var dfs; + + public var disabledIcon:Object; + + public var disabledSkin:Object; + + public var downIcon:Object; + + public var downSkin:Object; + + public function draw(Void):Void; + + public var dti; + + public var dts; + + function get emphasized():Boolean; + + function set emphasized(val:Boolean); + + static var emphasizedStyleDeclaration; + + static var falseDisabled:Number; + + public var falseDisabledIcon:String; + + public var falseDisabledIconEmphasized:String; + + public var falseDisabledSkin:String; + + public var falseDisabledSkinEmphasized:String; + + static var falseDown:Number; + + public var falseDownIcon:String; + + public var falseDownIconEmphasized:String; + + public var falseDownSkin:String; + + public var falseDownSkinEmphasized:String; + + static var falseOver:Number; + + public var falseOverIcon:String; + + public var falseOverIconEmphasized:String; + + public var falseOverSkin:String; + + public var falseOverSkinEmphasized:String; + + static var falseUp:Number; + + public var falseUpIcon:String; + + public var falseUpIconEmphasized:String; + + public var falseUpSkin:String; + + public var falseUpSkinEmphasized:String; + + public var fdi; + + public var fds; + + public var fri; + + public var frs; + + public var fui; + + public var fus; + + public function getLabel(Void):String; + + public function getSelected():Boolean; + + public function getState(Void):Boolean; + + public function getToggle(Void):Boolean; + + public var iconName:Object; + + public var idNames; + + public function init(Void):Void; + + public var initializing:Boolean; + + public var interval; + + public function keyDown(e:Object):Void; + + public function keyUp(e:Object):Void; + + public var linkLength:Number; + + public function onDragOut(Void):Void; + + public function onDragOver(Void):Void; + + public function onKillFocus(newFocus:Object):Void; + + public function onPress(Void):Void; + + public function onPressDelay(Void):Void; + + public function onPressRepeat(Void):Void; + + public function onRelease(Void):Void; + + public function onReleaseOutside(Void):Void; + + public function onRollOut(Void):Void; + + public function onRollOver(Void):Void; + + public var phase:String; + + public var preset:Boolean; + + public var refNames; + + public function refresh(Void):Void; + + public function removeIcons(); + + public var rolloverIcon:Object; + + public var rolloverSkin:Object; + + function set selected(val:Boolean); + + [Inspectable(defaultValue=false)] function get selected():Boolean; + + public function setEnabled(val:Boolean):Void; + + public function setIcon(tag:Number, linkageName:String):Object; + + public function setLabel(val:String):Void; + + public function setSelected(val:Boolean); + + public function setSkin(tag:Number, linkageName:String, initobj:Object):MovieClip; + + public function setState(state:Boolean):Void; + + public function setStateVar(state:Boolean):Void; + + public function setToggle(val:Boolean); + + public function setView(offset:Boolean):Void; + + public function showEmphasized(e:Boolean):Void; + + public function size(Void):Void; + + public var skinName:Object; + + public var stateNames; + + public var style3dInset:Number; + + static var symbolName:String; + + static var symbolOwner:Object; + + public var tagMap; + + public var tdi; + + public var tds; + + function set toggle(val:Boolean); + + [Inspectable(defaultValue=false)] function get toggle():Boolean; + + public var tri; + + public var trs; + + static var trueDisabled:Number; + + public var trueDisabledIcon:String; + + public var trueDisabledIconEmphasized:String; + + public var trueDisabledSkin:String; + + public var trueDisabledSkinEmphasized:String; + + static var trueDown:Number; + + public var trueDownIcon:String; + + public var trueDownIconEmphasized:String; + + public var trueDownSkin:String; + + public var trueDownSkinEmphasized:String; + + static var trueOver:Number; + + public var trueOverIcon:String; + + public var trueOverIconEmphasized:String; + + public var trueOverSkin:String; + + public var trueOverSkinEmphasized:String; + + static var trueUp:Number; + + public var trueUpIcon:String; + + public var trueUpIconEmphasized:String; + + public var trueUpSkin:String; + + public var trueUpSkinEmphasized:String; + + public var tui; + + public var tus; + + public var upIcon:Object; + + public var upSkin:Object; + + function set value(val:Boolean); + + function get value():Boolean; + + static var version:String; + + public function viewIcon(varName:String):Void; + + public function viewSkin(varName:String, initObj:Object):Void; + +}; + +���__Packages.mx.core.UIComponent���__Packages.mx.core.UIComponent��� +Button.swf#�U?���__Packages.mx.core.UIObject��� +Button.swf���������mx.core.UIComponent�����import mx.core.UIObject; + +import mx.skins.SkinElement; + + + +[Event("focusIn")] + +[Event("focusOut")] + +[Event("keyDown")] + +[Event("keyUp")] + +intrinsic class mx.core.UIComponent extends mx.core.UIObject + +{ + + public function UIComponent(); + + public var clipParameters:Object; + + public function dispatchValueChangedEvent(value):Void; + + public var drawFocus:Function; + + [Inspectable(defaultValue=true, verbose=1, category="Other")] public var enabled:Boolean; + + public function enabledChanged(id:String, oldValue:Boolean, newValue:Boolean):Boolean; + + public function findFocusFromObject(o:Object):Object; + + public function findFocusInChildren(o:Object):Object; + + public var focusEnabled:Boolean; + + public var focusManager:MovieClip; + + public var focusTextField:Object; + + public function getFocus():Object; + + public function getFocusManager():Object; + + public var groupName:String; + + function get height():Number; + + public function init():Void; + + public function isParent(o:Object):Boolean; + + static var kStretch:Number; + + static var mergedClipParameters:Boolean; + + public function onKillFocus(newFocus:Object):Void; + + public function onSetFocus(oldFocus:Object):Void; + + public var origBorderStyles:Object; + + public var origBorderValues:Object; + + public var popUp:Boolean; + + public function pressFocus():Void; + + public function releaseFocus():Void; + + public function setEnabled(enabled:Boolean):Void; + + public function setFocus():Void; + + public function setVisible(x:Boolean, noEvent:Boolean):Void; + + public function size():Void; + + static var symbolName:String; + + static var symbolOwner:Object; + + public var tabEnabled:Boolean; + + public var tabIndex:Number; + + static var version:String; + + function get width():Number; + +}; + +���__Packages.mx.core.UIObject���__Packages.mx.core.UIObject��� +Button.swf#�U?���__Packages.mx.skins.SkinElement��� +Button.swf���������(__Packages.mx.styles.CSSStyleDeclaration��� +Button.swf���������!__Packages.mx.styles.StyleManager��� +Button.swf���������mx.core.UIObject�����import mx.styles.StyleManager; + +import mx.styles.CSSStyleDeclaration; + +import mx.skins.SkinElement; + + + +[Event("resize")] + +[Event("move")] + +[Event("draw")] + +[Event("load")] + +[Event("unload")] + +intrinsic class mx.core.UIObject extends MovieClip + +{ + + public function UIObject(); + + public function __getTextFormat(tf:TextFormat, bAll:Boolean):Boolean; + + public var __get__minHeight:Function; + + public var __get__minWidth:Function; + + public var __get__scaleX:Function; + + public var __get__scaleY:Function; + + public var __get__visible:Function; + + public var __height:Number; + + private var __onUnload:Function; + + public var __width:Number; + + public var _color; + + public function _createChildren(Void):Void; + + private var _endInit:Function; + + public function _getTextFormat(Void):TextFormat; + + private var _id:String; + + private var _maxHeight:Number; + + private var _maxWidth:Number; + + private var _minHeight:Number; + + private var _minWidth:Number; + + private var _preferredHeight:Number; + + private var _preferredWidth:Number; + + private var _tf:TextFormat; + + public var _topmost:Boolean; + + public var addEventListener:Function; + + function get bottom():Number; + + public var buildDepthTable:Function; + + public function cancelAllDoLaters(Void):Void; + + public var changeColorStyleInChildren:Function; + + public var changeTextStyleInChildren:Function; + + public var childrenCreated:Boolean; + + public var className:String; + + public var clipParameters:Object; + + public var color:Number; + + public function constructObject(Void):Void; + + public var createAccessibilityImplementation:Function; + + public var createChildAtDepth:Function; + + public function createChildren(Void):Void; + + public var createClassChildAtDepth:Function; + + public function createClassObject(className:Function, id:String, depth:Number, initobj:Object):mx.core.UIObject; + + public function createEmptyObject(id:String, depth:Number):mx.core.UIObject; + + public var createEvent:Function; + + public function createLabel(name:String, depth:Number, text):TextField; + + public function createObject(linkageName:String, id:String, depth:Number, initobj:Object):MovieClip; + + public function createSkin(tag:Number):mx.core.UIObject; + + public function destroyObject(id:String):Void; + + public var dispatchEvent:Function; + + public function doLater(obj:Object, fn:String):Void; + + public function doLaterDispatcher(Void):Void; + + public function draw(Void):Void; + + public function drawRect(x1:Number, y1:Number, x2:Number, y2:Number):Void; + + public var embedFonts:Boolean; + + public var findNextAvailableDepth:Function; + + public var fontFamily:String; + + public var fontSize:Number; + + public var fontStyle:String; + + public var fontWeight:String; + + public function getClassStyleDeclaration(Void):mx.styles.CSSStyleDeclaration; + + public function getMinHeight(Void):Number; + + public function getMinWidth(Void):Number; + + public function getSkinIDName(tag:Number):String; + + public function getStyle(styleProp:String); + + public function getStyleName(Void):String; + + public var handleEvent:Function; + + function get height():Number; + + public var idNames:Array; + + public var ignoreClassStyleDeclaration:Object; + + public function init(Void):Void; + + public function initFromClipParameters(Void):Void; + + public var initProperties:Function; + + public function invalidate(Void):Void; + + private var invalidateFlag:Boolean; + + public function invalidateStyle(Void):Void; + + function get left():Number; + + private var lineColor:Number; + + private var lineWidth:Number; + + public var marginLeft:Number; + + public var marginRight:Number; + + static function mergeClipParameters(o, p):Boolean; + + public var methodTable:Array; + + [Inspectable(defaultValue=0, verbose=1, category="Size")] function get minHeight():Number; + + function set minHeight(h:Number):Void; + + [Inspectable(defaultValue=0, verbose=1, category="Size")] function get minWidth():Number; + + function set minWidth(w:Number):Void; + + public function move(x:Number, y:Number, noEvent:Boolean):Void; + + public var notifyStyleChangeInChildren:Function; + + public function redraw(bAlways:Boolean):Void; + + public var removeEventListener:Function; + + function get right():Number; + + function get scaleX():Number; + + function set scaleX(x:Number):Void; + + function get scaleY():Number; + + function set scaleY(y:Number):Void; + + public function setColor(color:Number):Void; + + public function setMinHeight(h:Number):Void; + + public function setMinWidth(w:Number):Void; + + public function setSize(w:Number, h:Number, noEvent:Boolean):Void; + + public function setSkin(tag:Number, linkageName:String, initObj:Object):MovieClip; + + public var setStyle:Function; + + public function setVisible(x:Boolean, noEvent:Boolean):Void; + + public function size(Void):Void; + + public var styleName:String; + + public var stylecache:Object; + + static var symbolName:String; + + static var symbolOwner:Object; + + public var tabEnabled:Boolean; + + public var textAlign:String; + + static var textColorList; + + public var textDecoration:String; + + public var textIndent:Number; + + private var tfList:Object; + + function get top():Number; + + public var validateNow:Boolean; + + static var version:String; + + [Inspectable(defaultValue=true, verbose=1, category="Other")] function get visible():Boolean; + + function set visible(x:Boolean):Void; + + function get width():Number; + + function get x():Number; + + function get y():Number; + +}; + +���,__Packages.mx.core.ext.UIComponentExtensions���,__Packages.mx.core.ext.UIComponentExtensions��� +Button.swf#�U?��� __Packages.mx.styles.CSSSetStyle��� +Button.swf���������__Packages.mx.core.UIComponent��� +Button.swf���������#__Packages.mx.managers.FocusManager��� +Button.swf���������(__Packages.mx.managers.OverlappedWindows��� +Button.swf���������!mx.core.ext.UIComponentExtensions����:import mx.core.UIComponent; + + + +intrinsic class mx.core.ext.UIComponentExtensions + +{ + + static function Extensions():Boolean; + + static var FocusManagerDependency; + + static var OverlappedWindowsDependency; + + static var UIComponentDependency; + + static var UIComponentExtended; + + static var bExtended; + +}; + +���)__Packages.mx.core.ext.UIObjectExtensions���)__Packages.mx.core.ext.UIObjectExtensions��� +Button.swf#�U?���&__Packages.mx.skins.ColoredSkinElement��� +Button.swf���������(__Packages.mx.styles.CSSStyleDeclaration��� +Button.swf���������__Packages.mx.core.UIObject��� +Button.swf���������__Packages.mx.skins.SkinElement��� +Button.swf���������"__Packages.mx.styles.CSSTextStyles��� +Button.swf���������&__Packages.mx.events.UIEventDispatcher��� +Button.swf���������mx.core.ext.UIObjectExtensions�����import mx.core.UIObject; + +import mx.styles.CSSStyleDeclaration; + +import mx.skins.SkinElement; + +import mx.events.UIEventDispatcher; + + + +intrinsic class mx.core.ext.UIObjectExtensions + +{ + + static var CSSTextStylesDependency; + + static function Extensions():Boolean; + + static var SkinElementDependency; + + static var UIEventDispatcherDependency; + + static var UIObjectDependency; + + static var UIObjectExtended; + + static function addGeometry(tf:Object, ui:Object):Void; + + static var bExtended; + +}; + +���$__Packages.mx.events.EventDispatcher���$__Packages.mx.events.EventDispatcher��� +Button.swf#�U?���mx.events.EventDispatcher���� + +intrinsic class mx.events.EventDispatcher + +{ + + static var _fEventDispatcher:mx.events.EventDispatcher; + + static function _removeEventListener(queue:Object, event:String, handler):Void; + + public function addEventListener(event:String, handler):Void; + + public function dispatchEvent(eventObj:Object):Void; + + public function dispatchQueue(queueObj:Object, eventObj:Object):Void; + + static function initialize(object:Object):Void; + + public function removeEventListener(event:String, handler):Void; + +}; + +���&__Packages.mx.events.UIEventDispatcher���&__Packages.mx.events.UIEventDispatcher��� +Button.swf#�U?���$__Packages.mx.events.EventDispatcher��� +Button.swf���������mx.events.UIEventDispatcher����import mx.core.UIObject; + +import mx.events.EventDispatcher; + + + +intrinsic class mx.events.UIEventDispatcher extends mx.events.EventDispatcher + +{ + + public function __addEventListener(event:String, handler):Void; + + public var __origAddEventListener:Function; + + public var __sentLoadEvent; + + static var _fEventDispatcher:mx.events.UIEventDispatcher; + + static function addKeyEvents(obj:Object):Void; + + static function addLoadEvents(obj:Object):Void; + + public function dispatchEvent(eventObj:Object):Void; + + static function initialize(obj:Object):Void; + + static var keyEvents:Object; + + static var loadEvents:Object; + + static var lowLevelEvents:Object; + + public function onKeyDown(Void):Void; + + public function onKeyUp(Void):Void; + + public function onLoad(Void):Void; + + public function onUnload(Void):Void; + + public var owner:Object; + + public function removeEventListener(event:String, handler):Void; + + static function removeKeyEvents(obj:Object):Void; + + static function removeLoadEvents(obj:Object):Void; + +}; + +���#__Packages.mx.managers.DepthManager���#__Packages.mx.managers.DepthManager��� +Button.swf#�U?���__Packages.mx.core.UIObject��� +Button.swf���������mx.managers.DepthManager����oimport mx.core.UIObject; + + + +intrinsic class mx.managers.DepthManager + +{ + + public function DepthManager(); + + static var __depthManager:mx.managers.DepthManager; + + public var _childCounter:Number; + + public var _parent:MovieClip; + + public var _topmost:Boolean; + + public function buildDepthTable(Void):Array; + + public function createChildAtDepth(linkageName:String, depthFlag:Number, initObj:Object):MovieClip; + + public function createClassChildAtDepth(className:Function, depthFlag:Number, initObj:Object):mx.core.UIObject; + + public var createClassObject:Function; + + static function createClassObjectAtDepth(className:Object, depthSpace:Number, initObj:Object):mx.core.UIObject; + + public var createObject:Function; + + static function createObjectAtDepth(linkageName:String, depthSpace:Number, initObj:Object):MovieClip; + + public function findNextAvailableDepth(targetDepth:Number, depthTable:Array, direction:String):Number; + + public var getDepth:Function; + + public function getDepthByFlag(depthFlag:Number, depthTable:Array):Number; + + static var highestDepth:Number; + + static private var holder:MovieClip; + + static var kBottom:Number; + + static var kCursor:Number; + + static var kNotopmost:Number; + + static var kTooltip:Number; + + static var kTop:Number; + + static var kTopmost:Number; + + static var lowestDepth:Number; + + static var numberOfAuthortimeLayers:Number; + + static var reservedDepth:Number; + + public function setDepthAbove(targetInstance:MovieClip):Void; + + public function setDepthBelow(targetInstance:MovieClip):Void; + + public function setDepthTo(depthFlag:Number):Void; + + public function shuffleDepths(subject:MovieClip, targetDepth:Number, depthTable:Array, direction:String):Void; + + static function sortFunction(a:MovieClip, b:MovieClip):Number; + + public var swapDepths:Function; + + static function test(depth:Number):Boolean; + +}; + +���#__Packages.mx.managers.FocusManager���#__Packages.mx.managers.FocusManager��� +Button.swf �W?���#__Packages.mx.controls.SimpleButton��� +Button.swf���������#__Packages.mx.managers.DepthManager��� +Button.swf���������$__Packages.mx.managers.SystemManager��� +Button.swf���������__Packages.mx.core.UIComponent��� +Button.swf���������)__Packages.mx.core.ext.UIObjectExtensions��� +Button.swf���������mx.managers.FocusManager����� import mx.core.UIObject; + +import mx.managers.SystemManager; + +import mx.controls.SimpleButton; + +import mx.core.UIComponent; + + + +intrinsic class mx.managers.FocusManager extends mx.core.UIComponent + +{ + + public function FocusManager(); + + static var UIObjectExtensionsDependency; + + public var __defaultPushButton:mx.controls.SimpleButton; + + public var __get__defaultPushButton:Function; + + private var _firstNode:Object; + + private var _firstObj:Object; + + private var _foundList:Object; + + private var _lastNode:Object; + + private var _lastObj:Object; + + private var _lastTarget:Object; + + private var _lastx:Object; + + private var _needPrev:Boolean; + + private var _nextIsNext:Boolean; + + private var _nextNode:Object; + + private var _nextObj:Object; + + public function _onMouseDown(Void):Void; + + private var _prevNode:Object; + + private var _prevObj:Object; + + private var _searchKey:Number; + + public function activate(Void):Void; + + private var activated:Boolean; + + public var bDrawFocus:Boolean; + + public var bNeedFocus:Boolean; + + public var className:String; + + public function deactivate(Void):Void; + + public var defPushButton:mx.controls.SimpleButton; + + function get defaultPushButton():mx.controls.SimpleButton; + + function set defaultPushButton(x:mx.controls.SimpleButton); + + public var defaultPushButtonEnabled:Boolean; + + static function enableFocusManagement():Void; + + public function enabledChanged(id:String, oldValue:Boolean, newValue:Boolean):Boolean; + + public var form; + + public function getActualFocus(o:Object):Object; + + public function getFocus(Void):Object; + + public function getFocusManagerFromObject(o:Object):Object; + + public function getMaxTabIndex(o:mx.core.UIComponent):Number; + + public function getMousedComponentFromChildren(x:Number, y:Number, o:Object):Object; + + public function getNextTabIndex(Void):Number; + + public function getSelectionFocus():Object; + + public function getTabCandidate(o:MovieClip, index:Number, groupName:String, dir:Boolean, firstChild:Boolean):Void; + + public function getTabCandidateFromChildren(o:MovieClip, index:Number, groupName:String, dir:Boolean, firstChild:Boolean):Void; + + public function handleEvent(e:Object); + + public function init(Void):Void; + + static var initialized:Boolean; + + public function isOurFocus(o:Object):Boolean; + + public var lastFocus:Object; + + public var lastSelFocus:Object; + + public var lastTabFocus:Object; + + public var lastXMouse:Number; + + public var lastYMouse:Number; + + public function mouseActivate(Void):Void; + + function get nextTabIndex():Number; + + public function onKeyDown(Void):Void; + + public function onMouseUp(Void):Void; + + public function onSetFocus(o:Object, n:Object):Void; + + public function onUnload(Void):Void; + + public function relocate(Void):Void; + + public function restoreFocus(Void):Void; + + public function sendDefaultPushButtonEvent(Void):Void; + + public function setFocus(o:Object):Void; + + static var symbolName:String; + + static var symbolOwner:Object; + + private var tabCapture:MovieClip; + + public function tabHandler(Void):Void; + + static var version:String; + + public function walkTree(p:MovieClip, index:Number, groupName:String, dir:Boolean, lookup:Boolean, firstChild:Boolean):Void; + +}; + +���(__Packages.mx.managers.OverlappedWindows���(__Packages.mx.managers.OverlappedWindows��� +Button.swf#�U?���__Packages.mx.core.UIComponent��� +Button.swf���������$__Packages.mx.managers.SystemManager��� +Button.swf���������mx.managers.OverlappedWindows����(import mx.managers.SystemManager; + +import mx.core.UIComponent; + + + +intrinsic class mx.managers.OverlappedWindows + +{ + + static var SystemManagerDependency; + + static function __addEventListener(e:String, o:Object, l:Function):Void; + + static function __removeEventListener(e:String, o:Object, l:Function):Void; + + static function activate(f:MovieClip):Void; + + static function addFocusManager(f:mx.core.UIComponent):Void; + + static function checkIdle(Void):Void; + + static function deactivate(f:MovieClip):Void; + + static function enableOverlappedWindows():Void; + + static var initialized:Boolean; + + static function onMouseDown(Void):Void; + + static function onMouseMove(Void):Void; + + static function onMouseUp(Void):Void; + + static function removeFocusManager(f:mx.core.UIComponent):Void; + +}; + +���$__Packages.mx.managers.SystemManager���$__Packages.mx.managers.SystemManager��� +Button.swf#�U?���__Packages.mx.core.UIComponent��� +Button.swf���������$__Packages.mx.events.EventDispatcher��� +Button.swf���������mx.managers.SystemManager�����import mx.events.EventDispatcher; + +import mx.core.UIComponent; + + + +[Event("idle")] + +[Event("resize")] + +intrinsic class mx.managers.SystemManager + +{ + + static var __addEventListener:Function; + + static var __removeEventListener:Function; + + static var __screen:Object; + + static private var _initialized:Boolean; + + static var _xAddEventListener:Function; + + static var _xRemoveEventListener:Function; + + static var activate:Function; + + static var addEventListener:Function; + + static function addFocusManager(f:mx.core.UIComponent):Void; + + static var checkIdle:Function; + + static var deactivate:Function; + + static var dispatchEvent:Function; + + static var form:MovieClip; + + static var forms:Array; + + static var idleFrames:Number; + + static function init(Void):Void; + + static var interval:Number; + + static var isMouseDown; + + static function onMouseDown(Void):Void; + + static var onMouseMove:Function; + + static var onMouseUp:Function; + + static function onResize(Void):Void; + + static var removeEventListener:Function; + + static function removeFocusManager(f:mx.core.UIComponent):Void; + + static function get screen():Object; + +}; + +���__Packages.mx.skins.Border���__Packages.mx.skins.Border��� +Button.swf#�U?���__Packages.mx.core.UIObject��� +Button.swf���������mx.skins.Border����himport mx.core.UIObject; + + + +intrinsic class mx.skins.Border extends mx.core.UIObject + +{ + + public function Border(); + + public var borderStyle:String; + + public var className:String; + + public var idNames:Array; + + public function init(Void):Void; + + static var symbolName:String; + + static var symbolOwner:Object; + + public var tagBorder:Number; + +}; + +���&__Packages.mx.skins.ColoredSkinElement���&__Packages.mx.skins.ColoredSkinElement��� +Button.swf#�U?���mx.skins.ColoredSkinElement����� + +intrinsic class mx.skins.ColoredSkinElement + +{ + + public var _color; + + public function draw(Void):Void; + + public var getStyle:Function; + + public function invalidateStyle(Void):Void; + + static var mixins:mx.skins.ColoredSkinElement; + + public var onEnterFrame:Function; + + public function setColor(c:Number):Void; + + static function setColorStyle(p:Object, colorStyle:String):Void; + +}; + +���__Packages.mx.skins.RectBorder���__Packages.mx.skins.RectBorder��� +Button.swf$�U?���__Packages.mx.skins.Border��� +Button.swf���������mx.skins.RectBorder�����import mx.skins.Border; + +import mx.styles.CSSStyleDeclaration; + + + +intrinsic class mx.skins.RectBorder extends mx.skins.Border + +{ + + public function RectBorder(); + + public var __borderMetrics:Object; + + public var backgroundColorName:String; + + public var borderColorName:String; + + function get borderMetrics():Object; + + public var borderStyleName:String; + + public var buttonColorName:String; + + public var className:String; + + public function draw(Void):Void; + + public function drawBorder(Void):Void; + + public function getBorderMetrics(Void):Object; + + function get height():Number; + + public var highlightColorName:String; + + public function init(Void):Void; + + public var offset:Number; + + public function setColor(Void):Void; + + public var shadowColorName:String; + + public function size(Void):Void; + + static var symbolName:String; + + static var symbolOwner:Object; + + static var version:String; + + function get width():Number; + +}; + +���__Packages.mx.skins.SkinElement���__Packages.mx.skins.SkinElement��� +Button.swf$�U?���mx.skins.SkinElement����� + +intrinsic class mx.skins.SkinElement extends MovieClip + +{ + + public function __set__visible(visible:Boolean):Void; + + public var height:Number; + + public function move(x:Number, y:Number):Void; + + static function registerElement(name:String, className:Function):Void; + + public function setSize(w:Number, h:Number):Void; + + public var top:Number; + + public var visible:Boolean; + + public var width:Number; + +}; + +���#__Packages.mx.skins.halo.ButtonSkin���#__Packages.mx.skins.halo.ButtonSkin��� +Button.swf#�U?���)__Packages.mx.core.ext.UIObjectExtensions��� +Button.swf���������__Packages.mx.skins.RectBorder��� +Button.swf���������mx.skins.halo.ButtonSkin����import mx.skins.RectBorder; + +import mx.core.ext.UIObjectExtensions; + +import mx.skins.SkinElement; + + + +intrinsic class mx.skins.halo.ButtonSkin extends mx.skins.RectBorder + +{ + + public function ButtonSkin(); + + static var UIObjectExtensionsDependency; + + public var backgroundColorName; + + static function classConstruct():Boolean; + + static var classConstructed:Boolean; + + public var className; + + public function drawHaloRect(w:Number, h:Number):Void; + + public var drawRoundRect:Function; + + public function init():Void; + + public function size():Void; + + static var symbolName:String; + + static var symbolOwner:Object; + +}; + +���!__Packages.mx.skins.halo.Defaults���!__Packages.mx.skins.halo.Defaults��� +Button.swf$�U?���__Packages.mx.core.UIComponent��� +Button.swf���������__Packages.mx.core.UIObject��� +Button.swf���������(__Packages.mx.styles.CSSStyleDeclaration��� +Button.swf���������)__Packages.mx.core.ext.UIObjectExtensions��� +Button.swf���������mx.skins.halo.Defaults�����import mx.core.UIObject; + +import mx.core.ext.UIObjectExtensions; + +import mx.styles.CSSStyleDeclaration; + + + +intrinsic class mx.skins.halo.Defaults + +{ + + static var CSSStyleDeclarationDependency; + + static var UIObjectDependency; + + static var UIObjectExtensionsDependency; + + public var beginFill:Function; + + public var beginGradientFill:Function; + + static function classConstruct():Boolean; + + static var classConstructed; + + public var curveTo:Function; + + public function drawRoundRect(x, y, w, h, r, c, alpha, rot, gradient, ratios); + + public var endFill:Function; + + public var lineTo:Function; + + public var moveTo:Function; + + static function setThemeDefaults():Void; + +}; + +���"__Packages.mx.skins.halo.FocusRect���"__Packages.mx.skins.halo.FocusRect��� +Button.swf$�U?���#__Packages.mx.managers.DepthManager��� +Button.swf���������__Packages.mx.core.UIComponent��� +Button.swf���������__Packages.mx.skins.SkinElement��� +Button.swf���������!__Packages.mx.skins.halo.Defaults��� +Button.swf���������mx.skins.halo.FocusRect�����import mx.core.UIObject; + +import mx.skins.halo.Defaults; + +import mx.managers.DepthManager; + +import mx.skins.SkinElement; + +import mx.core.UIComponent; + + + +intrinsic class mx.skins.halo.FocusRect extends mx.skins.SkinElement + +{ + + static var DefaultsDependency:mx.skins.halo.Defaults; + + public function FocusRect(); + + static var UIComponentDependency:mx.core.UIComponent; + + public var boundingBox_mc:MovieClip; + + static function classConstruct():Boolean; + + static var classConstructed:Boolean; + + public function draw(o:Object):Void; + + public var drawRoundRect:Function; + + public function handleEvent(e:Object):Void; + + public function setSize(w:Number, h:Number, r, a:Number, rectCol:Number):Void; + +}; + +���#__Packages.mx.skins.halo.RectBorder���#__Packages.mx.skins.halo.RectBorder��� +Button.swf$�U?���(__Packages.mx.styles.CSSStyleDeclaration��� +Button.swf���������)__Packages.mx.core.ext.UIObjectExtensions��� +Button.swf���������__Packages.mx.skins.RectBorder��� +Button.swf���������mx.skins.halo.RectBorder����oimport mx.core.ext.UIObjectExtensions; + +import mx.skins.Border; + +import mx.styles.CSSStyleDeclaration; + + + +intrinsic class mx.skins.halo.RectBorder extends mx.skins.RectBorder + +{ + + public function RectBorder(); + + static var UIObjectExtensionsDependency; + + public var borderCapColorName:String; + + private var borderWidths:Object; + + static function classConstruct():Boolean; + + static var classConstructed:Boolean; + + private var colorList:Object; + + public function draw3dBorder(c1:Number, c2:Number, c3:Number, c4:Number, c5:Number, c6:Number):Void; + + public function drawBorder(Void):Void; + + public var drawRoundRect:Function; + + public function getBorderMetrics(Void):Object; + + public function init(Void):Void; + + public var shadowCapColorName:String; + + static var symbolName:String; + + static var symbolOwner:Object; + + static var version:String; + +}; + +��� __Packages.mx.styles.CSSSetStyle��� __Packages.mx.styles.CSSSetStyle��� +Button.swf$�U?���!__Packages.mx.styles.StyleManager��� +Button.swf���������(__Packages.mx.styles.CSSStyleDeclaration��� +Button.swf���������mx.styles.CSSSetStyle����bimport mx.styles.StyleManager; + +import mx.styles.CSSStyleDeclaration; + + + +intrinsic class mx.styles.CSSSetStyle + +{ + + static var CSSStyleDeclarationDependency; + + public var _color:Number; + + public function _setStyle(styleProp:String, newValue):Void; + + public function changeColorStyleInChildren(sheetName:String, colorStyle:String, newValue):Void; + + public function changeTextStyleInChildren(styleProp:String):Void; + + static function classConstruct():Boolean; + + static var classConstructed:Boolean; + + static function enableRunTimeCSS():Void; + + public var invalidateStyle:Function; + + public function notifyStyleChangeInChildren(sheetName:String, styleProp:String, newValue):Void; + + public var setColor:Function; + + public function setStyle(styleProp:String, newValue):Void; + + public var styleName:String; + + public var stylecache:Object; + +}; + +���(__Packages.mx.styles.CSSStyleDeclaration���(__Packages.mx.styles.CSSStyleDeclaration��� +Button.swf$�U?���!__Packages.mx.styles.StyleManager��� +Button.swf���������"__Packages.mx.styles.CSSTextStyles��� +Button.swf���������mx.styles.CSSStyleDeclaration����%import mx.styles.StyleManager; + +import mx.styles.CSSTextStyles; + + + +intrinsic class mx.styles.CSSStyleDeclaration + +{ + + static var CSSTextStylesDependency; + + public function __getTextFormat(tf:TextFormat, bAll:Boolean):Boolean; + + public var _tf:TextFormat; + + static function classConstruct():Boolean; + + static var classConstructed:Boolean; + + public var color:Number; + + public var embedFonts:Boolean; + + public var fontFamily:String; + + public var fontSize:Number; + + public var fontStyle:String; + + public var fontWeight:String; + + public function getStyle(styleProp:String); + + public var marginLeft:Number; + + public var marginRight:Number; + + public var styleName:String; + + public var textAlign:String; + + public var textDecoration:String; + + public var textIndent:Number; + +}; + +���"__Packages.mx.styles.CSSTextStyles���"__Packages.mx.styles.CSSTextStyles��� +Button.swf$�U?���mx.styles.CSSTextStyles���t + +intrinsic class mx.styles.CSSTextStyles + +{ + + static function addTextStyles(o:Object, bColor:Boolean):Void; + +}; + +���!__Packages.mx.styles.StyleManager���!__Packages.mx.styles.StyleManager��� +Button.swf$�U?���mx.styles.StyleManager����� + +intrinsic class mx.styles.StyleManager + +{ + + static var TextFormatStyleProps:Object; + + static var TextStyleMap:Object; + + static var colorNames:Object; + + static var colorStyles:Object; + + static function getColorName(colorName:String):Number; + + static var inheritingStyles:Object; + + static function isColorName(colorName:String):Boolean; + + static function isColorStyle(styleName:String):Boolean; + + static function isInheritingStyle(styleName:String):Boolean; + + static function registerColorName(colorName:String, colorValue:Number):Void; + + static function registerColorStyle(styleName:String):Void; + + static function registerInheritingStyle(styleName:String):Void; + +}; + +��� BoundingBox��� +Button.swf��������� SimpleButton��� +Button.swf���������Border��� +Button.swf��������� +RectBorder��� +Button.swf��������� +ButtonSkin��� +Button.swf���������__Packages.mx.controls.Button��� +Button.swf���������mx.controls.Button����q import mx.core.UIObject; + +import mx.controls.SimpleButton; + +import mx.core.UIComponent; + + + +[Event("click")] + +[TagName("Button")] + +[IconFile("Button.png")] + +intrinsic class mx.controls.Button extends mx.controls.SimpleButton + +{ + + public function Button(); + + public var __get__icon:Function; + + public var __get__label:Function; + + public var __get__labelPlacement:Function; + + public var __label:String; + + public var __labelPlacement:String; + + public var _color; + + public function _getIcon(Void):String; + + public var _iconLinkageName:String; + + [Bindable] [ChangeEvent("click")] public var _inherited_selected:Boolean; + + public function _setIcon(linkage):Void; + + public var borderW:Number; + + public var btnOffset:Number; + + public function calcSize(tag:Number, ref:Object):Void; + + public var centerContent:Boolean; + + public var className:String; + + public var clipParameters:Object; + + public function createChildren(Void):Void; + + public function draw(); + + public var falseDisabledIcon:String; + + public var falseDisabledSkin:String; + + public var falseDownIcon:String; + + public var falseDownSkin:String; + + public var falseOverIcon:String; + + public var falseOverSkin:String; + + public var falseUpIcon:String; + + public var falseUpSkin:String; + + public function getBtnOffset(Void):Number; + + public function getLabel(Void):String; + + public function getLabelPlacement(Void):String; + + public var hitArea_mc:MovieClip; + + function get icon():String; + + [Inspectable(defaultValue="")] function set icon(linkage); + + public function init(Void):Void; + + public var initIcon; + + public function invalidateStyle(c:String):Void; + + [Inspectable(defaultValue="Button")] function set label(lbl:String); + + function get label():String; + + public var labelPath:Object; + + [Inspectable(enumeration="left,right,top,bottom"defaultValue="right")] function set labelPlacement(val:String); + + function get labelPlacement():String; + + static var mergedClipParameters:Boolean; + + public function onRelease(Void):Void; + + public function setColor(c:Number):Void; + + public function setEnabled(enable:Boolean):Void; + + public function setHitArea(w:Number, h:Number); + + public function setLabel(label:String):Void; + + public function setLabelPlacement(val:String):Void; + + public function setSkin(tag:Number, linkageName:String, initobj:Object):MovieClip; + + public function setView(offset:Number):Void; + + public function size(Void):Void; + + static var symbolName:String; + + static var symbolOwner; + + public var trueDisabledIcon:String; + + public var trueDisabledSkin:String; + + public var trueDownIcon:String; + + public var trueDownSkin:String; + + public var trueOverIcon:String; + + public var trueOverSkin:String; + + public var trueUpIcon:String; + + public var trueUpSkin:String; + + static var version:String; + + public function viewSkin(varName:String):Void; + +}; + +�� +h�hhhh�������� ����PropSheet::ActiveTab���7641����!PublishGifProperties::PaletteName������ PublishRNWKProperties::speed256K���0���"PublishHtmlProperties::StartPaused���0���%PublishFormatProperties::htmlFileName���storage_dialog.html��� PublishQTProperties::LayerOption������ PublishQTProperties::AlphaOption������"PublishQTProperties::MatchMovieDim���1���Vector::Debugging Permitted���0���PublishProfileProperties::name���Default���PublishHtmlProperties::Loop���1���PublishFormatProperties::jpeg���0���PublishQTProperties::Width���215���$PublishPNGProperties::OptimizeColors���1���&PublishRNWKProperties::speedSingleISDN���0���&PublishRNWKProperties::singleRateAudio���0���Vector::External Player������%PublishHtmlProperties::showTagWarnMsg���1���PublishHtmlProperties::Units���0���4PublishHtmlProperties::UsingDefaultAlternateFilename���1���PublishGifProperties::Smooth���1���%PublishRNWKProperties::mediaCopyright���(c) 2000���#PublishRNWKProperties::flashBitRate���1200���Vector::Compress Movie���1���Vector::Package Paths������&PublishFormatProperties::flashFileName���..\..\storage_dialog.swf���'PublishFormatProperties::gifDefaultName���1���%PublishFormatProperties::projectorMac���0���"PublishGifProperties::DitherOption������!PublishRNWKProperties::exportSMIL���1��� PublishRNWKProperties::speed384K���0���"PublishRNWKProperties::exportAudio���1���Vector::FireFox���0���PublishHtmlProperties::Quality���4���(PublishHtmlProperties::VerticalAlignment���1���$PublishFormatProperties::pngFileName���storage_dialog.png���PublishFormatProperties::html���0���"PublishPNGProperties::FilterOption������'PublishRNWKProperties::mediaDescription������Vector::Override Sounds���0���!PublishHtmlProperties::DeviceFont���0���-PublishFormatProperties::generatorDefaultName���1���PublishQTProperties::Flatten���1���PublishPNGProperties::BitDepth���24-bit with Alpha���PublishPNGProperties::Smooth���1���"PublishGifProperties::DitherSolids���0���PublishGifProperties::Interlace���0���PublishJpegProperties::DPI���4718592���Vector::Quality���80���Vector::Protect���0���"PublishHtmlProperties::DisplayMenu���1���*PublishHtmlProperties::HorizontalAlignment���1���2PublishHtmlProperties::VersionDetectionIfAvailable���0���Vector::Template���0���*PublishFormatProperties::generatorFileName���storage_dialog.swt���(PublishFormatProperties::rnwkDefaultName���1���(PublishFormatProperties::jpegDefaultName���1���PublishFormatProperties::gif���0���PublishGifProperties::Loop���1���PublishGifProperties::Width���215���$PublishRNWKProperties::mediaKeywords������!PublishRNWKProperties::mediaTitle������PublishRNWKProperties::speed28K���1���#PublishFormatProperties::qtFileName���storage_dialog.mov���"PublishPNGProperties::DitherOption������#PublishGifProperties::PaletteOption������#PublishGifProperties::MatchMovieDim���1���$PublishRNWKProperties::speedDualISDN���0���$PublishRNWKProperties::realVideoRate���100000���PublishJpegProperties::Quality���80���PublishFormatProperties::flash���1���#PublishPNGProperties::PaletteOption������#PublishPNGProperties::MatchMovieDim���1���$PublishJpegProperties::MatchMovieDim���1���Vector::Package Export Frame���1���!PublishProfileProperties::version���1���PublishHtmlProperties::Align���0���-PublishFormatProperties::projectorWinFileName���storage_dialog.exe���'PublishFormatProperties::pngDefaultName���1���0PublishFormatProperties::projectorMacDefaultName���1���#PublishQTProperties::PlayEveryFrame���0���"PublishPNGProperties::DitherSolids���0���"PublishJpegProperties::Progressive���0���Vector::Debugging Password������Vector::Omit Trace Actions���0���PublishHtmlProperties::Height���138���PublishHtmlProperties::Width���215���%PublishFormatProperties::jpegFileName���storage_dialog.jpg���)PublishFormatProperties::flashDefaultName���0���PublishPNGProperties::Interlace���0���PublishGifProperties::Height���138���PublishJpegProperties::Size���0���Vector::DeviceSound���0���Vector::TopDown���0���'PublishHtmlProperties::TemplateFileName����C:\Documents and Settings\bradneuberg\Local Settings\Application Data\Macromedia\Flash MX 2004\en\Configuration\Html\Default.html���!PublishHtmlProperties::WindowMode���0���2PublishHtmlProperties::UsingDefaultContentFilename���1���-PublishFormatProperties::projectorMacFileName���storage_dialog.hqx���(PublishFormatProperties::htmlDefaultName���1���PublishFormatProperties::rnwk���0���PublishFormatProperties::png���0���PublishQTProperties::Height���138���%PublishPNGProperties::RemoveGradients���0���PublishGifProperties::MaxColors���255���'PublishGifProperties::TransparentOption������PublishGifProperties::LoopCount������PublishRNWKProperties::speed56K���1���Vector::Report���0���+PublishHtmlProperties::OwnAlternateFilename������(PublishHtmlProperties::AlternateFilename������&PublishHtmlProperties::ContentFilename������"PublishFormatProperties::generator���0���$PublishGifProperties::OptimizeColors���1���"PublishRNWKProperties::audioFormat���0���Vector::Version���7���Vector::Event Format���0���Vector::Stream Compress���7���PublishFormatProperties::qt���0���PublishPNGProperties::Height���138���PublishPNGProperties::Width���215���%PublishGifProperties::�Z|o4����aI�m>��d�b�)#���2��O�$M,����R0���QH)\��ҙ�4����>~������� Ma��M�XtV��oK�~[�<��@����ߋߔ�h�V`O��,N�F�na����sP�|M:H� +5K��bxN��]O�{���1�d +��'kJl�ϓE�Y--:ԥ���C2)�!��H����R0�Q0^�;�4�Z�Vn{���C��qo�&����!9�=9b�t#��B���n-d�z��tb��?ՠל�T���!S�����R��9on�#���0�@�6�,ևBڬ�_��fa�!��za&pQ1�2 f�/k!jA��K�%��� ��S~�H�(��1��J3�����8ʍ +*c�a;�b�a�ZZP͛���/�f�CI���v±J�2���IF�KF�� �>����oD����v����_��Ìv1��t���ކ�n^�u��V��\E���`:�x�UXc�L�0AM\huä](;���-���=R|�ŏ�5y썵�z��+��*9�� �G��� �`�9�� +� +/t�=s�}��w?���]�~�_:n�1��w%@ޞ�;tG����4�� _;��C��}�� ۡ��&6�tu��2��+�k�?���-V�޾)\]�E0���(�~�j�� �Q��B��k�_�����KSX�S� ��D��ʛp�T����&�.WJ�-M) ��5�(9Jl��U�a�=m��6��k�Qr��K���܉�����/ +ū�+�w�`Ԛ61�J��B�Vý�Rcl޵�U�T$�ع44?2����J"���.4Zl�8����+���x���7"h-d�s�{��B/ݎw����/�T}�G��;�h��������}[� x�уp5~��N��ZB4��� +ٌ��m�7Pw�9u�,��B��<��Z����O,i;�#S�J);y�:/eg�i����q��O�t��G�F̲;[���0kv���Ǻ"芨�5��\E)��ɯS�6�� �"s���ki�0R*�KE���zގ��s +��VR�g���٥k�hER+wߓ���ˍA�H���M!)�(�����~�F��O������O�+!q��r���[�+�H��+�c䥰"6� ����!h0$��Bڮ�s��26��@�@#@P��He�ۑP�� d +�@Z�-F�"_")#��IQ�U�:&�����j�)��p�]E���Shw�+QL2���J33㣜r�U4��pS=KP�`�#H Q]�p�T���h5j����o��Z�z�}�1��FP�[�Po=�L�Ư/S�,�2}�dB]��xK��&s�BY%�����q0@�a��������.���M�t��f��M�ɜ1�З�; �;y���d��u&t�ԋ�2���zi�b�o2�\)�%w�ly����f��1�U�9�d4c�"(ǐ��x�,�+�Eӱ�d&:�IC�����NNZ�J�<�3U������8ׯR �R�ކe���,S6+��!�S%���F���^����������2"�e�PW +B=�] +��u�z�V!����sT���$jj�����"����T*U!�b +_��[�)+7^��O�;�6�N����C1(��H8+S�u���3�:Qĸd�jLӬʌUg(�ݳs�o�!D�/1=�R�$_*���� ���T�X�V���ڢ[�Zf.�٦�-�p.#6����.�,�m�2�=�N�!�9���������oC�H��[��q���Q8F�$r�G@U�l�/�wK�6љGQ�J���A +M<�x��]�k ��#���V������6yZ��h���QIlli�/�P��ٛ�d�L�I����܎r�x�v��-�[�� +�y[�W�D�٫6��E^t1&U!�Q7�s$~���~]�F|� ��9�HF���%��D��8#�:������ �� t���4^gk� +M+�#Mh��L���*z�� +�>���n���ca<(ʦ�#���U�Sb4��u-���^\K:������1�����`iw����#��c�vR����RM.kΈ�"-������1����7��<4� XRua�PCؿK�P� +�P04�'�� +��������ԇN'#��+�p�(���Z��[�]�F��$5� E:-�NL���,m�O���w�kE�R�������jQ���F 9��ZA�4�� +p��Mr���������9��B�@(�.�� �h�nM[�����ȃ���-C({��iĒ��J�?���j�T}<}X +���_F''~4������:6�P^������%���Q��(8F� �J����Ahz�r���)\�T{��M�?��XӤ?���;��m�� +v̴��[s�[^�@W��ۭ� +SʧET1�҄/��,�p��+d�e���{���9�T��H�S��:b�7>�)6@J*)s��G�G#J����`�~\pUܾ!Jp��7�Jx3>܌��u5ݣ굢A�u��q�������{���Ih:ׁ�\1��)�9��?U�}S%H!�>$W���V5j�c�h��v%9���������͕:��/&Y�P@� t9ɼR�d�S��)#t���ޛ@�u]���~U�¾� @��N��N�w� $�@��dI��P �(���Ȳ%�^�X^�fly�8��8N�3�9����v���%������Lwr<��>>�8�#̻�[����D���uT�ۗ��ᄏ^ ϱ� z���z�|���t +������UO��IL�% �w|�x"*���7[�����`�� +�n�ۜ��+��>�'�M1�G�1O+���� �>o/��Zp�+�gP�<�2͋�fQ +b��` �ac|d��4O��f5��o��:�o$C��d�`�n.F���YZ��6�a�SIzR������� �B���B:Ժ�k�rj�S�E���Z�uj�7��{I�2A��;�n�Ժ��nq��9��S��X����S�F�eF�����:�� Nݛ1uou�ң�����P�h?���u���S��1�>���ε>���h�8?j�����S�c1=~ {�Q�vN��?@�(�>>ua��p�渙)�Vs(�z��VЩ�N� ��\��A���4�Z�V3 +�ƹ 5����*����h��Mք���y&�b��ئ��ń_"���Y�/� +J��8��&G�֎��q�#���c��*��'�����1q*�2�L$�0������Ġz3&���B��lxY^�<����`�s'����.!���#�����]Y8Uc�G� @��u#����xK��� ��O�/���芩W"�1� N)�e��@3�:�d�4#�'F���݈�gۍ�Yi�N'H�0B��Y,����|V 7�c7�JmP�Wԧ����^�ԧ���ڠ����M���5\���6�'WWð�a�_�9U�!�y�xI�f@�WK���g`7'Q��#� ����=�$���C�����2�9���L����t�V;���%(�wG����26��`&�:%���OX�W��!Ē��Sk_��H�|���2�����a;�r@�2K�p|M�+�>hg�`�Ҹ�:��5�M�˙Mщ�_p�Wqv7f1�����[{��Pٿ�fo�쭘�͸�1�7�ڛ��F��|\����0�7㲛1�[F�D}2Z�緔��fl�hH 'D,J�Ζ��rj����B����������,�WrEqNA���?(��`�����Y �1��k�Y��TE�fZ��� M/���)�D�dJS��H)<�H�S�� w��� �p +�%L�(j�>t�,��V�Ylu|L�89m��i��(jЅu�+� +���T�f,\�D[���[x�o�m����(\���s C��� +��B�=�UQ;�J�u�f/��� na�'��&��&�JSESx�Ϯ�FX�"$��8!�Rb ��c�m�I�vteiU� i�m�K +�����&/���0�=�H;i���FU��F�Jt��H��v����Т��xA�h��_�x��c�n*���m$�[%��^��p� +�8oI�x�{�j��P#A�1B�������;�]K|w-�]�\�6�N[���-��mQ�߆�\r'��4,K ,�w��e��-��:�dw���uRw���w�i��E�Zpѻ�� ǹ�N�ee 6�a�-�0�>����d�ލRƟV����kHj؎�#�ջW�k売-wl���B�TI)���F'f�<�Ԋ�֯�š'��b�����3�4u�M� [�XPy,MN<�R,�챉�I +9Z��Q��Q� ��R��!@��LGE����P��N���枝)��v��+HgK��kn`��4c��0m�NF�@�s&E�ޕ�YX�Q��L�8%R��v��k����o�Za�/L����N@1 ��.��|K�{�x"��B~J�s�`J��g��T�C�iyW2���i>4���vC}$��^�dTS��������Y� +JJ�8��j��� +tf�gun1�qP���D��f7+Q&���%0�h�d�`ꉮ�'�:��n)n0�r0x���4F5ѽ@�r�т&q�5�_����_��-���מNd�=9pkJ��Dj��u��r��]�B�V�_������F�֊�:�[/~�o��m���,~[�o��m��e���[}�Co�`{� ve�D�; f��=�y��+���D��g�()d��l�я�x������l-5��?�+:��'q8�G�����wB�N��޴�yjޏ�Y�5[P�S��'~�����+�UG����P��v������=Z9հ���\ �ndR���Suy}�+�U[#5Z%Uij]MVB:9��(�H�C{����hmR�G�sx١�̓�$*2fF�^ki�Aq�R�K�khЇ��P�WY-y�L�6)�307먒��#�S�:'� �"v;X�_�Q��8(��d���Ŵ����J�"�zȚ�pS�3&�r�"�4c��P P)�J�U�P o���6����U��Ê� ���B�8m̰"إs�3Eh� '[7-ٶ`T�@�C�7=���4iɴS����l�~��33s���ʆ4L%�� �ը�Z���;�m!�[\�Z%Yws���pH +�����T� +�تC�!)��j!���C�L�zⷀL�ܺ!��5�fBYB��EC�� +����t�xL�J�G�.���b�m��R�i���iS������%�h�t�`����?��? �� V����M �e@ �P��Q�Y�u���$�}q +�)`�8XR�X�֮�*ޭ��J�%��Od��ա�V˾�D�e/����V��(�|Z�V�g��)��&����4��`��DG� ͍��W��k�*A���)���L�7�i��|�3�nʳІL��Y7(�tFeoTV#����h~���~<N����'}�)�z��'ދ\���F���?1�$ʢ'�)�9[�IR[�U:������ds���R�N�b8��aؑx�;�m��A +"K�����t�)濋a#�@�G�-?�=�<�mH�5y�WW�f��f#˲%��ƣ�+��g���I1�耒��'Zr�`p'��fo�*��@E +C ����Ħ� fᙣڎ.�x̾p$�*��G?2Tn��8>����'�x�IG�#�ٽ:�J\�~�K��֎6�)��������Li���26�p��ycs�[�5U�m�i�:�p#��]qֵn��>l��Ł��s3e@�l���Lq� +R\��BL +��� �L�� .�d����z8������N��Y�C04T�E,��"�h�AaaicGL��3l����0�"��ű&�/"��>*^�/�;�ݯ����@{�������B�^�Vv����:��J +�#�&S�}��1^�b���7;1�遆�'��6��m�6X��2E�*1��٩��1�*$��hԊΊ՛�)�D���X39on�@kTx��z��ٲ(�u�U�P�(gv�]��Ǡ�1�BcjX�;����[Y�:O6��B.Ie�\ı�V�$���!���ؤ�̸he�����/���9�W~�����*,�͖������ѻ�>�-N��аeJ�oC�FG?�v]�Z����>>"c���v�ހ�[P~����D�/‹vnZ΄8eU["� �Dөep-琡��#c� � +�1�9���b�媢�ٔ��� .����#���D�7��U�M�x~�{F�����P���bG�H�4��‡������R�i��U�E(��Y�OUE�;:ǩK:�eF����QT%�F1�X�>'�N�;���7:߰G7[7� �w����.zi +��ŽZR(�ʧB +�7I�zՐ�/1�Qɔ$4t +�%���ϳ��A�ܼ�w����wԢ�!�-���45�D��J����J/�'�� �I^d�,7[��f*�ٵsG���W���r!5��H Y�[�ǒ�Jն��Y��R ��=��}1 iE!O[pM��:I��~^@t���ʥ�_skM��]��:~�}V}H9-O�~�0���=(#g��!�S+��2�j�����^�b�5Δ�-��ؘ�3��攖�SzĜң�:�)=fN�M�{Z��^w�s���<�,g�̣��� u�<���-}߼�)�C�3ϧ��C���-�u��|��]<��Xc�o�b�=�����;�:��̡x��㪟 1� �~ +v?�%��Bֆ���^�n*�?j���/Ʒ?�ڿ����u��մ?j�PP=8to��A�T�LrK2��E�`�;^ +:�b��m�ye�h�žڹ��u�yI�9q7�.b�M�C��)y�� +kY�}:x�,16������>{X~�egH�*;��������ˎ��;�������������-��jx�m@��Խ���r��� �.�b�(�9j��5=i�ƙ�O����� +��9l���a�i|p-1>q�*�F���p/�����/�xw�>�^ظ��'�R@�� N%� ҁP{Q� +拾��p6��*f<��"�R�'\�_R^L����U�����H��������3��i�~�_ �8��Q^��������6F�g�Q����M +����< ��&���Ε/Yh _�/x6yB>eV�R42 +�o���-^t�psk����y9!c��JY��5�J����>d���媗��<�ۅ�B����R�����0DRN��Ώ�}4T�\���Q���X4_�V�K�K�(�,��h܎#���S�5�\�6���8��l��@��ǹ�|�#y�;�|R�����#�F�0�|�Gp�h�C�|�C�@@!*��*� *�� +}Q�~I�}Y��U�+*�U�� +�R�����:�/qhi�Y=|�C��¡sA+���zS�=�*����r�7�<��_�Ѓ����@Z�8���C�94|�CKbe��Dz�"�e���"Ke�b�<"���-�,��-���QP��c��ñEޤi� �疀�i�>����u8�/ �+V�X��H�;1p�O��3���O� ^>|<�e<�Dn3�6�9.���=/R�����g5.�+,&G��JH��|��:���]_�/"����FWک�W��W��ר�)��u�#?)o >�?h�T�&������]��a�����m���ʞ���=ىS=ڰƃCtg�쉒:�]un4��QI�$$ob���� ��!�\�!)��yʎ@��PJV���(�^В�Z�7��%kr�CR�Z��k���E2�!:P�"pzb�����Rfv���-�`H2HgKv��)�P�(sB�mhK�CI�{��Z@���v����.(^���jˡ�8��\��0��k^�9C��d�����19���( h����A�����%Gd���B�d�+y�� h1"W��w?�CJ@� )�o�I��7E�6��6�a�����#of�('2�/(�Y�/���F�TO�څ�`�,P�N�'�_��8�'Z�S'c )P��o���50;��S�����Ae�I�|hV�W0�٢�B�\��|��!�]y�/� ���ۍ�,�&��Ặ����U]�X��vٹ�g���)�!|4�R�f9q9���w�q�.��!� +Ζq�h�%5`�P��W�M%!.`����h�\��0[ 琕sXo�t���f$�1�R=�f��R��߄��ؾk��V���]Q�rۧO��41���B���E��Ǐ�2E�U�pV���s���z�������CD�M�H�)DYِ�Z�L]b�=����Pr�6�q,�@Za �}y@}i�m�ѥ�#>S5b;m���Y�S>h�����\0�����"Y7!�&�܄�MH� ����C3VS�'��#� �Ю6��;_��ш����Z:��=�D4t+��^6���}l�UD���i�`K]p�# ���y:~#��h���U +��w ��C&��7p��׆�f�(+�5�I +4kZ��j���"�Qa4f{�(��P��u�P�M �0��i"ׇd�dp���f����ϯ�3z4X��t�� +jqPU?\��l�V��C&�����.�$�5U,3�r�$;c@5&�y���������L�=wu߄ ����^/Y��f�2�qk� +ej�'%� ��S���D�Naa����̩SI�@��d,��99bX ����}L)�m�6����W��Y�����&{��.uy?���oÂ.����L��)���1_��LE[קHTs��=�9 +��8� ���� �x�p�[�?�{@�xP�!ћ3ySo0'�0< 6K̈�P���k��( +^�92kt�*r��\�6Q�L�W�&�x���Ĵ�H��Jk0�-��I:��&��ԛt-Y+SLW�Ը�i�Y�͖xbl�5��8��#;��gPd7xZ M$�I݈���`>�9r���� U���g�MQ��D�*�D�$k�i�M.���-z*��t�] +V�U�� +���EW�����V�K*4�B�UhJ�J*4 +��zk0CT�2�3� R���츥��ߕX���V��{���w����gy`� A��nf��e��A����9�6&��������>�8o"{�Ȯ�Z�vE�݅ �\�'D̦�A+���s ��� +��z�.�A��Z�[˰�e�Bz���)j2�yp[ +Y��jϱv����s@�{�)B��2�(�ㅩ��"+CMOO^�f 3�}3f��C�A�����5/�����}�nt޵�K�AC���y�7<�z���,��_�����M�^���O��~Fɛ䋖��Rp�tf�,�&.���+�HMJi�������zgTݚh������83I� +�����E�c���" +�E�hk��.����ep�@;�����l�MHϡNƗK%VQ�_��4�H&}�b⧔�Dz,���0���� +���R*hAHs<��gP��^ ��4�Wr+&.��|�' T��E��yEUkQL~ ����[�;'��I l +���]�'�B&dO��U .)�����.>] p����c<�����c7��S,�%����ς� +lA�������S���&�L���h}9�<�T�ƒѳ�vT�o@ �` +U�A�e�j��W��ZvG_-��/��T�o�N\����q]}8���$��9�^}����'U#k"��Z��*\���*���"��XV��`ۯ޸ؙZ��hR5���na�D�g�nK��Z��[c���ݗf�`Ȣ�* Z�M�T�������Hg⭇d�ev�dؿ��B�M��MG�;�2Cl%��[�KY[d�,�2��JCE5|�?ͻ�;|�w���U���>��y��z�.R�R]�5D��J��s�{U�&X�N{ul�`���a�V�lD�sko���ls8��R��2��[�$C���?x\-�D����]*T1����^!I>[�r]�Ӥ��-�6��$���v��� +� TY�Oc1bGn7�u-��lb�QU}$XN��(m).iK�l�-�T1��4�skj�IJrb>�i;I� ڗE43���c�r��]a���ļ��*�x���s�Ma��(�`Ф*��-�`�2���v���`��=��=��x�<�o�]�l ��/Q�=h�hZ�E<��j-^��.�H���+�'���'��8� �Q��h�W,].�W.�"*�5�Slۨ�����?�pջ�-�L�|F�y�)�1.�Ζ.{���'�m�pT�kLlÀJ+�����G��e�< !�j���l� +�Z��F\�.��\"I-+���9��R���h�K�X�w*���R��ؤȡ.��'e�E,_�b$�������?Z�O�BB�4�>��4sD6�dY�5;�2����0B^ű�XP-�H!3�6��A��ϐ����%��8�H�"#�Tծ,�x�`�!����y�l�m���Q��8�!��;Y�Ed�6��ڠ�[ښ����dҌI&�ё�������W�i/�KO�9I��e�bF]8�>oy���r�)�A� [����I3c����hnjef"�G��F>ã�^���uaC�[d���L��q�E�+�A��dl�(�*��D�tf@�s� lz�Rv0��5��5�w�`��uy) cW[��h�� �R�!��t�#��C���`��l��-"�EF���V�&"�dd��l���;dd��씑]"�KFv�؆�٣��ae�� +J�C� +�C�%]�����i?� �� 8@����=D��T#ҷ�A��g�C������ț��*����~��|�������}��)#�Glk� '@s�2�t��J��ir\�������H��${�ev�rI����ڽz�Q5�J������ ���z��\!��q�N����:� ?`7d��t������Wc��Y1�a�0����P�o�GȀ��LP�6���A'<�a?K"���.ي�Ljl� +�7�\oa�����5��ĆryNx3']RlT���ϐ%����ȂuTк�M��+���|K 5�8�������됓�����/8�'��n��i��%=��{q�����H_���h{/)�����%P����~!֛4T�T� ���MPY�O�l��ri�~����#C ��s +젢�(�/�֦)�ʱRj<5%J��3�˜*�/��ΔX�Qln�hu�k%���z� o�4=7���^���1� +�����s�|� +;.�L�i'K��K'JW����� D.NOg l���B9 +�4�L�g�봊��B��C^IΣ��Y � +�cb!KW�xW0�� +�q�6l�0[����'�3����P����k�VOf��#bx�v�C�۵K'y����(o�ʎ�(|�4͡D-}vb�0�W��Ѝ�xI,�X 1����̙µҜ�7=V,^�-\c + l +��z�aO:w�Ĩx�"'���͛���0;3q�<�U.��w��ĉ ���4A��>���@�=p�f���Jb ��?#s3�J~�����T��(_��&��n��?���aͷj �8oNɿT���'�Q�Ej�/�����5��%��؋A2�g�d��"�X�Ѩ��M�6�#�ٵ:�%����֠�����.�,��������������L�ߑ����/�t���(p͑����y�Vrrw��=��̪�!Ua���"#kxX{��º�,�>;66&#����~�ل�*��l�Ж`+���9�� +C$�]�n��'{K�h/��+�7�~�ۇ;��9��.�smf_y� >F���m7�����}_pت}dQs:(6��9�^�R��cٿ��������|�d�Y�d��헼��r>^����P�EF�9nFN���Qs/N�~��/��THNj'0���Rj��ya�J޺ �ݗ��_m��V�U�L�U;��j,r�g��/����Y��U���ֵ;��o~I�� �GB - ��yl�zӀ��0r0����_F�.��k >��Ix���[�ʼ�n(�m<�E��- +v����F��څE��$[#��8� +r���0�^��p�f��{Y� +M}t�S������ M��y5��Ͽꥮy�+^z�K�x�/(LN��V����\dD�kF��,p�[�b�X?��!�"`.-L$g=R�Lh��d�4Dj�l$�z��|�@-�����6�j��"ʁ Q�O\US�-�0 +��f�uy�Z=�j�A�f��͌������������V���P8��O���ZX�)�!(1���J��4��� ��~k�ԟ�t��˃��rT?y�NՀ[1 +�Y���ɾV� +l�s~6�A��leQXfe�ڙ�P?�2�� 8e���)^�\g�#?�'3���>��{����z�|���;����6&ױӴt.Z-�zgL��� .\�]�^�Q1�Wg����U��Q3Y�*Z�k�j��9���b>�}v���9��3$_�� +,g܍�y�b��R��q}�=ֺ�P�61�'C�y��ռ��q{j�" Z��� +�Nhm�\e9��{��>u��(�^�,��>�Yx��>� +�����1�Z��`��4��b%���[D^�������=>+��ﲯI~>rN��ng����Gю���6l�v�/�v����7t7@����V&�:U:�3̇b=(�R}z�<�[�0��a2�d��f��XiR#I�1�p,�>SD�^,i��7�'D�Ӯ��[h�B 3����L>��^oqzv\z���3�$��Y�6}7�QZ�LJax!e�4�D���k�UCI�C�)�c��Լ&(Okk�1ae+�Ggl��dJ2�$�*��|{f���'Q}����U�jM�Mu�#��Ѫ]�6�\�yi�TE�j��f +^\x����0Mɍ�ׄ�L�M�:~5<����ߦ�w� +?�i�e��Q\]��������m��KH����KB����B���K�ʠ#�ٳ珎���AT!�`�i5����g.#�$��גy + +�R7��(��YlwA���P�/�+��*k�/XyI��������=5����@E)c���@}� ��E�0�{���]k^�� +�� �� +'��:�j@�R>��2�Du�ȗ�~}_�È���� �m�u6/�&b�!{S�ݲ�{�J9�0��.�(�I(�F��ʒ_��XEV�7�m(��� +�C�B�VL���O�U���O���4EIG{-U��R�� T�A��Z��kňT ��#>���.��X�(���0RĜ�B�->l�dl�N7����Ӳ&�g�vo� �(�ab����m�F�D}�BI���p[O+�.��695��n�u;,G�׫E�:��!���H��Q=z��um��X�T;�I"�aNg�Ϣ:���o��2R�}?+7� ߤ�ef]<���,*\�|:]���6g\�dR�~]R���8��|����ֻg��c�P�ƻ��"��я%��ax<׺�*�M%�O�K�SJ�N'KW�����-f���ޥ|IC�)E�݀�i Poh�T�Tw�~57���p}_XO���l9-%Q�[2 0�,fr�b�䜟@�K'��O�ʸ�\�'Ш�� ������~B�qfr<2���l�� m4��/��(x�a�Xl�o����6{n�0R���1�=m��)a���������=dT�R����aF�…��ȟ����)��نO>����5��a��|�Λ�%�L��h��)0�V�7�jz���KY�'���yF`�k�f��3� +�#��u�V�Z%�t]��V�X�� +�"������ ��5�ݘF/j�PͶ������-� � ,���d��$ak��Xe��f� �*���i���`5�8��\��f�\s��|���Oqr7[�#��A����:l�q���)��50�}|>�Ag)�$��*�W�p�:��? �^M/`������K�LN�� �S��”8����ZV�[��G�uOs�>�v��%g���� +�� +��OB�4wح�_�W}�ɼ>�@m�jd�w��Q �֠ �z� +��-���b��6�@��� +�{��]� +d����o��T���z2j�31�.H�1��1�ƆMr�5��r)�!'Wk��\+'�N�[�CG��E�s6,H��:�D���+,�=��1uh�3�E������f���{$5�e�щ�����+C[��3松.�C��� �����I*'��}DP۬�2j4��D �t�p��'B%��*�L����'��� ��lu��)���:+��� �����)�h���m�Rܓ�30�X~E���8SOϋ?= 4}���r5�����5/ +f!������8�mcg�kmW��� +O���^�F��i��0SCԌ�^בG�]^l���D�N�9'00��h���j}�k�k +آ*��ye�R݅#閦Tw�����9�'�������耉����/y��j��l�����#>���s� rF!�LnM���v��ͧCG'r��� +�y +����M�O��,+M�*�֏q+�/��{�U� +� +X�'�*1pJ���=2��f��^������������G�.���OK� +���D|���10sڍ�_ ��yƙ�zg4���]#|��(<����e�����xDZQ~� ��h�O����C���<��C��|4�X���Č��x ����%ܚ��o����g_Ց +���NF6f�K(��K�EOE�f�t�#��:�"����g�����~�c!�h�X+ܢ�>Z���}`�Yc�İ��Udm"�S�6#�Z�Z(��Z�WԼ�/2��Բ*�,W�:�ٹ�8{Z�N+�ƌ�ep�:�,�x���� +WŽ�?5Z���=�2A��֋`g��*S���a"��ٹef�$zUV׮�.�T���M+iւ�{����9�'Yp���Գ7Q~�4G�2�O5+V�2���Ѣj�1_ +2�r T�:���&e�s3��Ea���c���d/����gU/�����hz���V���� ��h��6�MS���˥�N/{%��K` +@�; �s`��-�ږ�zg +EL��A��ʪY���땋���qX�!�y��M�gV9"�Cc3�Y�o�=��N�/�F�0fcS�y��E Sb������>�����B@6���~0�@8��#�Fɴ�L��ΰP�M{���2|�/bB�8�p��Mf���aJ3�mw}B�<5�n�Cg�!�|�@55�*���G&'F.9&�ᘁoaT�o֌�'f���+��� �q���7Q8�8c�C�)��i�l0�w�Ţ��CW�+q�п\���� ��s�4P {,���BّW���an{��ఇ`�"�h �$A�F0��Z�����Ț.x�,��BG֔�BV�r��.�.��daeDX�����kC��� T�|�&������z�4��K�w]�AE"�8ma��S%e�~Ƥ�6 NH�_�Ol4p��: +��Yl��4���w����6A�~P#�܄&�w҇�LI7;�ֺ�%yM��lY�5޴Z�r���ت~4J�(��f��tЀW����eF�Vo2%)�;�E�ɄCH딛c9�&�.�[�mʍ�ˬ����� s�*��H��*[�'�xSڎc��lai +lm��R"֒`"XN� �N)�ע=�K���6�|d�;����Iv�3hڝތ�mQ0�xs�`�Ľ��(Y�MN�P���w[�34_pۜ��6��g��ا�`4�����N����;�aV�f�;�5��=���^5�}4&_�����c���q �0�=LU4��wn��:�v��ݫFzP���cb���TH +�����[��o�!��n�3%]��T�s��J^j +lƒu��N�B;�!M�tGd��p�@+UMOH���e�Cx��?�[�H،�����u�Y,$cʆcv�r��.�^p"O���n����:ީ;Fs��3~DY���1ߗS���r6xU|����9n�,��R%�R,<��~G������N*������= �Y���36U�`��*w�gl�'#���ʧۘ�f�*���w��y��j��=��jg�e��ҝEbWp� D!h�k������d���%���_�1"�?ps?Hl��x����@���Ϯ��ČW7Y*]���j�AD�������s LX8�7k$NC���� +�4A��`*�߃YS;y����2Y�� �h�DY�e���d���3Q�E%���F%>l$������0����9>@��5#端���9L���yFd7&��#F��kc�u6�����?���]�Q BYrë��B�Fs��L�I<�'�#y���&���Ƽ����F��q���j�~�r�0��]����г���<⣦���yA=���P��N �ʏ���$��Ҝ���D��M��zɑ4�I�+a6QL���p4L�+�d�2L� ����0V0���Z�'6� LF�a2R&#�a2�a�&f�dD��Mx�m"��3�ԑ��́��Q���蠒l@��o&"0��JL ��� � ���_�>��6��ެ�咺d蝡e0 �;�@��5�Z�qC^R�~��,c����yÚ�~�^p�vޔ���/Rb���p8��G6^���ͤ�3 ;��7����Ǘq.?x!��|����A����1��,nCK�~�� � ܪk�3¡���z7����#r=�_�8~Z����Y�Q*y$��J�����Pd��_J }��o萶EVC{Y���w�U���P���g{�T��i�I=z�����;=h2��$�1�M^4_�'<��C +������ԏ�߷q��/��x�D$q'my%&⎤��� +?\�� �j�T�Կ��9�=e���~S��7��9�z�g�Sƍ +���A���,����jcPZ'a�!"`Þ5�$U��A>� +!�s{��b|i<�RxL�2�� �Y�e`D +2p!�M����p0:��UJ������%QRH�,? :���������i[̅*(�X�'om��dz:�ޅP���.߉*�/�._���ϳΞ�rOTh�8&�O7 +�+���5�'B�~L��:��˰Tx��񓰾�b��7�N/I��r�xB��r\��4�)�Pg�mQi�Ik -�LK�ƓtA�;m� +�*��:� +���z@�'���@s� ���e�8��@yȚr��%D���<����T��.�*�mEFP��ꐺV��ҙ��s1}���@gU�903��������=��P�E�jQb�Y>��懴5o�1�����`����0���Q�w��� R�%ZT�b�i�����j�$���c�@�B���v���?�j�oW����2w�-�uz��C�^��!�b�̖Jd.o��٤��=k���R�X��_l{�F +0I�|(� ��yńM�>���%�^�,�ޏ%��NV�u��~�?�#~�C��%�`{��&�_�$.żZj3������3��kp� �I����A�t��y� ����П�s䪈�Ky�~�9NV� �5�?�+Q��M�6E^��ĺ~�$�ȵ؆<������0s�i�{1Ұ/І�gQ٢�"X�>�@�vV3^�����5�^�{=$b�^��zdهa&����ww&��� |��)��>�(�/pQ��6�B%����B��޴��_Ŀ��@ + +��%9�J��M>?�����Q%!z�v�A�F��� ��"��7ړ�T�kiQ��2�؋n�$4e�2�kӡ��]�ɐ(��P8��`�y�(��CCQ��X&ʐZR��H�U��d�@tmx��(��jw��#Wr{^ �g�A��y��{�<�)�T��dX�l!�j��Y +:S�&Xf�'\Ҕ��ۄ�NeB�M����i�#����P~:}�e +Щ�2h53���� լ�t/��br]�2�ʈ5D̤1Ҫ�(���S�9�pK\�HA�e�D� ���IdK��`)f���j�dz�Θ�V��o��|��5�A�!��N��rj��i�*��97Z�.֠T +L�ie^iw$�nv:����i9?[+�|�+���X�����g|ǖ�C%� *��x�A;2?��k��@ɟ1�s���P��/��^>{�qD5�o�`�������8W�(+�3��aW�ԯY]�l=z7�hd]ԆR����kFl��DK����(*�w��� +�+u�ڷ[Q� ��0 +ݣ�v�-����w�K��I�c�n�B�,�oD:��� +�`���c�n�s��d�O�K����gU�I�t��m�'�Ó@��0= +������|����&�V•�5 +����ȥ~q/;�qU^Eܻ=��LHߔ��S�FE#>ш�2W����C���4��M�HHSS�*R�^��+��B�D +��b��7U\m�E�j��ɉ�k^$���.�0~�n�s��:3�F�P�\Y�;�� j*>YIn#VI�Y�}��Y�:�1��C$�R�lAK<���3�z}N�*"_���u3���px��#����A-*ިNצ�h_�F;�-�j|�{#/)5G ����u�4/�J _�4/|o2�q�6%��ml/�����%� �tq)$*<�v��L��;CX8� �M��FN����BX��C�<�Ā��H�&�t9Rvރ`ϲ["�܅d�I��޵T�bP���(�m$i��.�cZ�`u�Y��m�'>H��%��d�E[��e}Bum�l�5�6�j�ŵ: +����Zk�Z��m��}��J-D;�nܾS���ŗ!�����M�� �I @��$ȵ��]d���;�[�Oz-M:���Ǽ�Q�3��e4�qs�o1_c;ӗ��+�����NQ�`7��r�5�S���t,� �!���� VQ_����g��J&�^1�+Fi�d��b��^rd��F��=��}u�K�7�:�ʔ{�[����L�A�mo��}������›�����@e9�م�u�&���A�.Lj��F�±֧w����0����g�F��1���R�L� ���u��� +7UG�­�$���!�̆�^QxM\��W�^Qxm\�u����i�d���=���٩���t�ޢ�Ç�#9ڰ˃���ۋWg�v ]��� ih���"��hA�Ԁ�j�g��8��Q�������lؾ��'��x�u�KSNL�qӼE�|ܛ�L�����tqEE��O\.� ۺF��� �}��+�1#94����z�b��!Dfq�ؓ=�_ǜ��^ 0�V��W�|�� v`��ͼ�Pþ� +u7[$W�4�v;N��)�:6.ـ���$xkI�4Et�������l|���Qߒ׽��on�- R�ac+���%���K���e��`lA1�Es\^��)�5r�.g����銓W:�X���nuP���z<��u�&�I��<������8���21|v�l�P���ɜ0-Nw��7Q��d�CDQluh��Lqr�7��lT��)e]c�����Q��l�|9�%i�!�B3�&G�S��aC,� i8$����65C��J�cװ��1�*�ʢ v1R��&��)L�a�t|H`�A�LL]�>� :û�4��/�L̊Z1W��R���Ņ*����v�2�Ր�ň�w�E��>tW&~&� �Lz�=^ +fc��w�P�(jQx��,[��2s*��"��5Ps��U~ �j�/�8,����A֯�/�n��R�*�F g܈I}1/�&�c*Q����en�,��DE�UwR��@�1�w�?��6��do�_�H�-�����#�e_� {F#d�\��=m��?��K�� ?���R,y���'^Ufs6�luJo_����:p�mH�.��c)a�@2w�w����2�ʼn�&��v�)CߤSL�FaŃ }K�o}K���@��@4��H �N +�4@��%D�� +�Г0��R`��j�8�JأJ����A�V�}8�4.M�Ќ�Gk��{�@4�C����f��0��}X�3x!d�}f���3~m�}�ŊYQQ݇YQQ݇YQQ݇�5^G��>j�A���0vO_�ʈ�z7�o���}Xo߇,>l�J�����g���s�\�+��+�YȈ�/�w#��-���.]�e�}a�����7�qи#����T�$k�ڡ�,P���PK�� +s�3!�Ǵb�d�-m��/��,�6�FS�j!�M��x;���} _$��V���G�uv�`en�/� J#"��W�9�,�唑NZ^yFv7>��A��K����h�t�o�J�Ik�� �Z�E7����H7�ϥ\��*o?Q�Ei�5I�p�C^s��z\6d'� �Dx�)Im8r�p�ۙ���0F�.��d���� ”�7��#I�t��F�rT�hX9���}g��Z(�V�� �L��hj�ή�lߦ��#|����#�g;�㷓 �s"A��7~��{�C%Ϩ�Oy��'n�x7n8�O�֠�ul*ʺ�X��{��8 +:{c��rqn��E��>B �S�D��˳3sP���PE1U��^���8�A8Bq�3�� �ro0�Cv�� �r�|�\[׊<Ѝ?��h��n;��;�;Kc��厠K�#}SDZ����+c�[���D];hX�����$����%ǽ?n�s�^��� Z>��|}=HF�dl$�tH��Ik㣭 +"��Y�MY�,��wsi��?���2�L�S�"�M�ȎVq���CV�w��Vy(᝽}�%��4�k�rN]�,EV���B�����`�*�}����{�={��z� 1�H��Ղb��v�˵i�p�*G�������Gh|�{�ӕ��P�C�1��cHƎ!1�V�;܇�<9.Ia�)$�&�M*��T�n��o�Fu���1݀N\�����W�`�n��?����w�T��Zi џ\�V����[p��R�c�ZՊ�R��g���JSu+ ����;q6D��'?��O������wu��0�x7�� �低3��t6��h�a�����;t��~= ���?������Z��w�F]k��η�����~��Vy{ET��w�C��T\ϋ���t_����3?�g��NJ��������w��w�?J,���9����-��ﭯ��sL��/���&ƒ"�L0ݜ8e�f3����V +�CU��yPb�=�4�����y��IshS�������J�R�cK��6�Uqr�b���s4��c���y+Լ�.�`eNN$��7đA[w��g,��+Na�8S-���ȓn��f�eh;i����Ti��G��C�t�0�ΛI�4���"���PgI1=��,���u�/��*V�;����ۿo�?�z'd����}Q���X/�Q�:JV��"�ue��u��{��{���_�^���W�z�W^y%�z��4��L1a���t��S���Wg� /�MJޖ� ��  �X�b�5�'""7��̲�h�l j���ؙ�;����b�\5�;��RuecT����2vbʋ{���|�]�����h��������Oe�FVj��o ��} +�l�WT{~@"10�aN`ǽY�Rι�U:�������}�|�g��/7�� Fv{ّ=^fd�����#�����/{�s�M�1��2 >�Z�.���yͭY��XV*<�JC[ 6�q��4�V�>1]��}� ﻬ&�U;>?�j���[:酾����W��B���(�����!I:��Hpo } ��M];��kG�k^p48�Ե��q%g}b�փZo�x����u��A��L�$�_�A�.�G�ut od���oE�]��n�t@-!� �0�n���G�yq���pA;�[�<�6�"�t�Z�Epp"���%��� �FRq��ӢH�'�ՋR���V������J�>�l%Z(����&'i� +���,���d�%&�I���̤tN�ǚ���~^,'�ĈW1�c�������������� ���icon������icon��F����L��s� �������label���Button���label E�b[cF�E�\G��������labelPlacement���left���right���top���bottom���labelPlacement啢T��I���^��D�������selected���false���selected�/�?�ZJ��|��g������toggle���false���toggleg���Y�D��̜�������enabled���true���enabled!����RG�5S8��bm���Other���visible���true���visibleD*Lc�XTC�$�v�����Other��� minHeight���0��� minHeight�P���K��u@�&�j���Size���minWidth���0���minWidth! 7�C2�I���� l/����Size�����)<?xml version="1.0" encoding ="utf-8"?> + +<componentPackage xmlns="http://www.macromedia.com/flash/swccatalog/7"> + +<component id="Button" class="mx.controls.Button" implementation="Button.swf" iconFile="Button.png" tooltip="Button" src="mx.controls.Button.asi" modified="1059073889"> + +<movieBounds xmin="0" xmax="2000" ymin="0" ymax="440" /> + + <include id="BoundingBox"/> + + <include id="SimpleButton"/> + + <include id="Border"/> + + <include id="RectBorder"/> + + <include id="ButtonSkin"/> + + <exportAfter id="__Packages.mx.controls.Button"/> + +<class id="mx.controls.Button" > + + <Event param1="click" /> + + <TagName param1="Button" /> + + <IconFile param1="Button.png" /> + + <property id="_inherited_selected" type="Boolean" > + + <Bindable /> + + <ChangeEvent param1="click" /> + + </property> + + <method id="icon" > + + <param id="linkage" /> + + <Inspectable defaultValue="" /> + + </method> + + <method id="label" > + + <param id="lbl" type="String" /> + + <Inspectable defaultValue="Button" /> + + </method> + + <method id="labelPlacement" > + + <param id="val" type="String" /> + + <Inspectable enumeration="left,right,top,bottom" defaultValue="right" /> + + </method> + +</class> + +<class id="mx.controls.SimpleButton" > + + <Event param1="click" /> + + <TagName param1="SimpleButton" /> + + <method id="selected" returnType="Boolean"> + + <Inspectable defaultValue="false" /> + + </method> + + <method id="toggle" returnType="Boolean"> + + <Inspectable defaultValue="false" /> + + </method> + +</class> + +<class id="mx.core.UIComponent" > + + <Event param1="focusIn" /> + + <Event param1="focusOut" /> + + <Event param1="keyDown" /> + + <Event param1="keyUp" /> + + <property id="enabled" type="Boolean" > + + <Inspectable defaultValue="true" verbose="1" category="Other" /> + + </property> + +</class> + +<class id="mx.core.UIObject" > + + <Event param1="resize" /> + + <Event param1="move" /> + + <Event param1="draw" /> + + <Event param1="load" /> + + <Event param1="unload" /> + + <method id="minHeight" returnType="Number"> + + <Inspectable defaultValue="0" verbose="1" category="Size" /> + + </method> + + <method id="minWidth" returnType="Number"> + + <In����������������������������������������������������������������������������������������������������������������������������������spectable defaultValue="0" verbose="1" category="Size" /> + + </method> + + <method id="visible" returnType="Boolean"> + + <Inspectable defaultValue="true" verbose="1" category="Other" /> + + </method> + +</class> + +<asset id="BoundingBox" modified="1054593655"> + +</asset> + +<asset id="UIComponentExtensions" modified="1058814666"> + + <exportAfter id="__Packages.mx.core.ext.UIComponentExtensions"/> + +</asset> + +<asset id="FocusRect" modified="1055744819"> + + <include id="BoundingBox"/> + + <exportAfter id="__Packages.mx.skins.halo.FocusRect"/> + +</asset> + +<asset id="FocusManager" modified="1055744781"> + + <include id="FocusRect"/> + + <include id="UIObject"/> + + <exportAfter id="__Packages.mx.managers.FocusManager"/> + +</asset> + +<asset id="UIObjectExtensions" modified="1058814702"> + + <exportAfter id="__Packages.mx.core.ext.UIObjectExtensions"/> + +</asset> + +<asset id="Defaults" modified="1055737279"> + + <exportAfter id="__Packages.mx.skins.halo.Defaults"/> + +</asset> + +<asset id="UIObject" modified="1058814731"> + + <include id="Defaults"/> + + <include id="UIObjectExtensions"/> + + <exportAfter id="__Packages.mx.core.UIObject"/> + +</asset> + +<asset id="UIComponent" modified="1058814700"> + + <include id="UIObject"/> + + <include id="FocusManager"/> + + <include id="UIComponentExtensions"/> + + <exportAfter id="__Packages.mx.core.UIComponent"/> + +</asset> + +<asset id="SimpleButtonUp" modified="1062225026"> + + <include id="BrdrBlk"/> + + <include id="BrdrFace"/> + + <include id="BrdrShdw"/> + + <include id="BrdrHilght"/> + + <include id="BrdrFace"/> + +</asset> + +<asset id="BrdrHilght" modified="1052770908"> + +</asset> + +<asset id="BrdrBlk" modified="1052770913"> + +</asset> + +<asset id="SimpleButtonIn" modified="1062225020"> + + <include id="BrdrBlk"/> + + <include id="BrdrHilght"/> + + <include id="BrdrShdw"/> + + <include id="BrdrFace"/> + +</asset> + +<asset id="BrdrFace" modified="1051767541"> + +</asset> + +<asset id="BrdrShdw" modified="1058931521"> + +</asset> + +<asset id="SimpleButtonDown" modified="1062225019"> + + <include id="BrdrShdw"/> + + <include id="BrdrFace"/> + +</asset> + +<asset id="SimpleButton" modified="1055744781"> + + <include id="BoundingBox"/> + + <include id="SimpleButtonDown"/> + + <include id="SimpleButtonIn"/> + + <include id="SimpleButtonUp"/> + + <include id="UIComponent"/> + + <exportAfter id="__Packages.mx.controls.SimpleButton"/> + +</asset> + +<asset id="Border" modified="1062224872"> + + <include id="UIObject"/> + + <exportAfter id="__Packages.mx.skins.Border"/> + +</asset> + +<asset id="RectBorder" modified="1062224887"> + + <include id="Border"/> + + <exportAfter id="__Packages.mx.skins.halo.RectBorder"/> + +</asset> + +<asset id="ButtonSkin" modified="1062224893"> + + <exportAfter id="__Packages.mx.skins.halo.ButtonSkin"/> + +</asset> + +<asset id="__Packages.mx.skins.ColoredSkinElement" src="mx.skins.ColoredSkinElement.asi" modified="1062582563"> + +</asset> + +<asset id="__Packages.mx.core.UIObject" src="mx.core.UIObject.asi" modified="1062582563"> + + <include id="__Packages.mx.skins.SkinElement" /> + + <include id="__Packages.mx.styles.CSSStyleDeclaration" /> + + <include id="__Packages.mx.styles.StyleManager" /> + +</asset> + +<asset id="__Packages.mx.skins.SkinElement" src="mx.skins.SkinElement.asi" modified="1062582564"> + +</asset> + +<asset id="__Packages.mx.styles.CSSTextStyles" src="mx.styles.CSSTextStyles.asi" modified="1062582564"> + +</asset> + +<asset id="__Packages.mx.styles.CSSStyleDeclaration" src="mx.styles.CSSStyleDeclaration.asi" modified="1062582564"> + + <include id="__Packages.mx.styles.StyleManager" /> + + <exportAfter id="__Packages.mx.styles.CSSTextStyles" /> + +</asset> + +<asset id="__Packages.mx.styles.StyleManager" src="mx.styles.StyleManager.asi" modified="1062582564"> + +</asset> + +<asset id="__Packages.mx.core.UIComponent" src="mx.core.UIComponent.asi" modified="1062582563"> + + <exportAfter id="__Packages.mx.core.UIObject" /> + +</asset> + +<asset id="__Packages.mx.controls.SimpleButton" src="mx.controls.SimpleButton.asi" modified="1061503691"> + + <exportAfter id="__Packages.mx.core.UIComponent" /> + +</asset> + +<asset id="__Packages.mx.controls.Button" src="mx.controls.Button.asi" modified="1061503690"> + + <exportAfter id="__Packages.mx.controls.SimpleButton" /> + + <exportAfter id="__Packages.mx.core.UIObject" /> + +</asset> + +<asset id="__Packages.mx.events.EventDispatcher" src="mx.events.EventDispatcher.asi" modified="1062582563"> + +</asset> + +<asset id="__Packages.mx.events.UIEventDispatcher" src="mx.events.UIEventDispatcher.asi" modified="1062582563"> + + <exportAfter id="__Packages.mx.events.EventDispatcher" /> + +</asset> + +<asset id="__Packages.mx.core.ext.UIObjectExtensions" src="mx.core.ext.UIObjectExtensions.asi" modified="1062582563"> + + <include id="__Packages.mx.skins.ColoredSkinElement" /> + + <include id="__Packages.mx.styles.CSSStyleDeclaration" /> + + <exportAfter id="__Packages.mx.core.UIObject" /> + + <exportAfter id="__Packages.mx.skins.SkinElement" /> + + <exportAfter id="__Packages.mx.styles.CSSTextStyles" /> + + <exportAfter id="__Packages.mx.events.UIEventDispatcher" /> + +</asset> + +<asset id="__Packages.mx.skins.halo.Defaults" src="mx.skins.halo.Defaults.asi" modified="1062582564"> + + <include id="__Packages.mx.core.UIComponent" /> + + <exportAfter id="__Packages.mx.core.UIObject" /> + + <exportAfter id="__Packages.mx.styles.CSSStyleDeclaration" /> + + <exportAfter id="__Packages.mx.core.ext.UIObjectExtensions" /> + +</asset> + +<asset id="__Packages.mx.skins.halo.FocusRect" src="mx.skins.halo.FocusRect.asi" modified="1062582564"> + + <include id="__Packages.mx.managers.DepthManager" /> + + <exportAfter id="__Packages.mx.core.UIComponent" /> + + <exportAfter id="__Packages.mx.skins.SkinElement" /> + + <exportAfter id="__Packages.mx.skins.halo.Defaults" /> + +</asset> + +<asset id="__Packages.mx.managers.DepthManager" src="mx.managers.DepthManager.asi" modified="1062582563"> + + <include id="__Packages.mx.core.UIObject" /> + +</asset> + +<asset id="__Packages.mx.managers.FocusManager" src="mx.managers.FocusManager.asi" modified="1062726409"> + + <include id="__Packages.mx.controls.SimpleButton" /> + + <include id="__Packages.mx.managers.DepthManager" /> + + <include id="__Packages.mx.managers.SystemManager" /> + + <exportAfter id="__Packages.mx.core.UIComponent" /> + + <exportAfter id="__Packages.mx.core.ext.UIObjectExtensions" /> + +</asset> + +<asset id="__Packages.mx.managers.SystemManager" src="mx.managers.SystemManager.asi" modified="1062582563"> + + <include id="__Packages.mx.core.UIComponent" /> + + <include id="__Packages.mx.events.EventDispatcher" /> + +</asset> + +<asset id="__Packages.mx.managers.OverlappedWindows" src="mx.managers.OverlappedWindows.asi" modified="1062582563"> + + <include id="__Packages.mx.core.UIComponent" /> + + <exportAfter id="__Packages.mx.managers.SystemManager" /> + +</asset> + +<asset id="__Packages.mx.core.ext.UIComponentExtensions" src="mx.core.ext.UIComponentExtensions.asi" modified="1062582563"> + + <include id="__Packages.mx.styles.CSSSetStyle" /> + + <exportAfter id="__Packages.mx.core.UIComponent" /> + + <exportAfter id="__Packages.mx.managers.FocusManager" /> + + <exportAfter id="__Packages.mx.managers.OverlappedWindows" /> + +</asset> + +<asset id="__Packages.mx.styles.CSSSetStyle" src="mx.styles.CSSSetStyle.asi" modified="1062582564"> + + <include id="__Packages.mx.styles.StyleManager" /> + + <exportAfter id="__Packages.mx.styles.CSSStyleDeclaration" /> + +</asset> + +<asset id="__Packages.mx.skins.Border" src="mx.skins.Border.asi" modified="1062582563"> + + <exportAfter id="__Packages.mx.core.UIObject" /> + +</asset> + +<asset id="__Packages.mx.skins.RectBorder" src="mx.skins.RectBorder.asi" modified="1062582564"> + + <exportAfter id="__Packages.mx.skins.Border" /> + +</asset> + +<asset id="__Packages.mx.skins.halo.ButtonSkin" src="mx.skins.halo.ButtonSkin.asi" modified="1062582563"> + + <exportAfter id="__Packages.mx.core.ext.UIObjectExtensions" /> + + <exportAfter id="__Packages.mx.skins.RectBorder" /> + +</asset> + +<asset id="__Packages.mx.skins.halo.RectBorder" src="mx.skins.halo.RectBorder.asi" modified="1062582564"> + + <include id="__Packages.mx.styles.CSSStyleDeclaration" /> + + <exportAfter id="__Packages.mx.core.ext.UIObjectExtensions" /> + + <exportAfter id="__Packages.mx.skins.RectBorder" /> + +</asset> + +</component> + +</componentPackage> + +Media 1���Bitmap 1��� +Button.png�ԱC�ԱC�������������������2Hxi�� @!E����Nw'w*� �Qa}�$K=�����E�FsW<_� ,)��CQj>�QY����Zq�uD܊SyK0�z���� ���_Y?A���7���IsQ�$����Button�����Button��� +Button.swf �W?+���Border���Border��� +Button.swf�CP?���UIObject��� +Button.swf���������__Packages.mx.skins.Border��� +Button.swf��������������� BoundingBox��� BoundingBox��� +Button.swfw��>���������BrdrBlk���BrdrBlk��� +Button.swfa�>���������BrdrFace���BrdrFace��� +Button.swf���>��������� +BrdrHilght��� +BrdrHilght��� +Button.swf\�>���������BrdrShdw���BrdrShdw��� +Button.swfA?��������� +ButtonSkin��� +ButtonSkin��� +Button.swf�CP?���#__Packages.mx.skins.halo.ButtonSkin��� +Button.swf���������������Defaults���Defaults��� +Button.swf�E�>���!__Packages.mx.skins.halo.Defaults��� +Button.swf��������������� FocusManager��� FocusManager��� +Button.swf +c�>��� FocusRect��� +Button.swf���������UIObject��� +Button.swf���������#__Packages.mx.managers.FocusManager��� +Button.swf��������������� FocusRect��� FocusRect��� +Button.swf3c�>��� BoundingBox��� +Button.swf���������"__Packages.mx.skins.halo.FocusRect��� +Button.swf��������������� +RectBorder��� +RectBorder��� +Button.swf�CP?���Border��� +Button.swf���������#__Packages.mx.skins.halo.RectBorder��� +Button.swf��������������� SimpleButton��� SimpleButton��� +Button.swf +c�>��� BoundingBox��� +Button.swf���������SimpleButtonDown��� +Button.swf���������SimpleButtonIn��� +Button.swf���������SimpleButtonUp��� +Button.swf��������� UIComponent��� +Button.swf���������#__Packages.mx.controls.SimpleButton��� +Button.swf���������������SimpleButtonDown���SimpleButtonDown��� +Button.swf{DP?���BrdrShdw��� +Button.swf���������BrdrFace��� +Button.swf���������������SimpleButtonIn���SimpleButtonIn��� +Button.swf|DP?���BrdrBlk��� +Button.swf��������� +BrdrHilght��� +Button.swf���������BrdrShdw��� +Button.swf���������BrdrFace��� +Button.swf���������������SimpleButtonUp���SimpleButtonUp��� +Button.swf�DP?���BrdrBlk��� +Button.swf���������BrdrFace��� +Button.swf���������BrdrShdw��� +Button.swf��������� +BrdrHilght��� +Button.swf���������BrdrFace��� +Button.swf��������������� UIComponent��� UIComponent��� +Button.swf�:?���UIObject��� +Button.swf��������� FocusManager��� +Button.swf���������UIComponentExtensions��� +Button.swf���������__Packages.mx.core.UIComponent��� +Button.swf���������������UIComponentExtensions���UIComponentExtensions��� +Button.swf�:?���,__Packages.mx.core.ext.UIComponentExtensions��� +Button.swf���������������UIObject���UIObject��� +Button.swf ;?���Defaults��� +Button.swf���������UIObjectExtensions��� +Button.swf���������__Packages.mx.core.UIObject��� +Button.swf���������������UIObjectExtensions���UIObjectExtensions��� +Button.swf�:?���)__Packages.mx.core.ext.UIObjectExtensions��� +Button.swf���������������__Packages.mx.controls.Button���__Packages.mx.controls.Button��� +Button.swf�BE?���#__Packages.mx.controls.SimpleButton��� +Button.swf���������__Packages.mx.core.UIObject��� +Button.swf���������mx.controls.Button����q import mx.core.UIObject; + +import mx.controls.SimpleButton; + +import mx.core.UIComponent; + + + +[Event("click")] + +[TagName("Button")] + +[IconFile("Button.png")] + +intrinsic class mx.controls.Button extends mx.controls.SimpleButton + +{ + + public function Button(); + + public var __get__icon:Function; + + public var __get__label:Function; + + public var __get__labelPlacement:Function; + + public var __label:String; + + public var __labelPlacement:String; + + public var _color; + + public function _getIcon(Void):String; + + public var _iconLinkageName:String; + + [Bindable] [ChangeEvent("click")] public var _inherited_selected:Boolean; + + public function _setIcon(linkage):Void; + + public var borderW:Number; + + public var btnOffset:Number; + + public function calcSize(tag:Number, ref:Object):Void; + + public var centerContent:Boolean; + + public var className:String; + + public var clipParameters:Object; + + public function createChildren(Void):Void; + + public function draw(); + + public var falseDisabledIcon:String; + + public var falseDisabledSkin:String; + + public var falseDownIcon:String; + + public var falseDownSkin:String; + + public var falseOverIcon:String; + + public var falseOverSkin:String; + + public var falseUpIcon:String; + + public var falseUpSkin:String; + + public function getBtnOffset(Void):Number; + + public function getLabel(Void):String; + + public function getLabelPlacement(Void):String; + + public var hitArea_mc:MovieClip; + + function get icon():String; + + [Inspectable(defaultValue="")] function set icon(linkage); + + public function init(Void):Void; + + public var initIcon; + + public function invalidateStyle(c:String):Void; + + [Inspectable(defaultValue="Button")] function set label(lbl:String); + + function get label():String; + + public var labelPath:Object; + + [Inspectable(enumeration="left,right,top,bottom"defaultValue="right")] function set labelPlacement(val:String); + + function get labelPlacement():String; + + static var mergedClipParameters:Boolean; + + public function onRelease(Void):Void; + + public function setColor(c:Number):Void; + + public function setEnabled(enable:Boolean):Void; + + public function setHitArea(w:Number, h:Number); + + public function setLabel(label:String):Void; + + public function setLabelPlacement(val:String):Void; + + public function setSkin(tag:Number, linkageName:String, initobj:Object):MovieClip; + + public function setView(offset:Number):Void; + + public function size(Void):Void; + + static var symbolName:String; + + static var symbolOwner; + + public var trueDisabledIcon:String; + + public var trueDisabledSkin:String; + + public var trueDownIcon:String; + + public var trueDownSkin:String; + + public var trueOverIcon:String; + + public var trueOverSkin:String; + + public var trueUpIcon:String; + + public var trueUpSkin:String; + + static var version:String; + + public function viewSkin(varName:String):Void; + +}; + +���#__Packages.mx.controls.SimpleButton���#__Packages.mx.controls.SimpleButton��� +Button.swf�BE?���__Packages.mx.core.UIComponent��� +Button.swf���������mx.controls.SimpleButton����import mx.core.UIComponent; + + + +[Event("click")] + +[TagName("SimpleButton")] + +intrinsic class mx.controls.SimpleButton extends mx.core.UIComponent + +{ + + public function SimpleButton(); + + public var __emphasized:Boolean; + + public var __emphatic:Boolean; + + public var __emphaticStyleName:String; + + public var __get__emphasized:Function; + + public var __get__selected:Function; + + public var __get__toggle:Function; + + public var __get__value:Function; + + public var __state:Boolean; + + public var __toggle:Boolean; + + public var autoRepeat:Boolean; + + public var boundingBox_mc:MovieClip; + + public var btnOffset:Number; + + public var buttonDownHandler:Function; + + public function calcSize(Void):Void; + + public function changeIcon(tag:Number, linkageName:String):Void; + + public function changeSkin(tag:Number, linkageName:String):Void; + + public var className:String; + + public var clickHandler:Function; + + public function createChildren(Void):Void; + + public var detail:Number; + + public var dfi; + + public var dfs; + + public var disabledIcon:Object; + + public var disabledSkin:Object; + + public var downIcon:Object; + + public var downSkin:Object; + + public function draw(Void):Void; + + public var dti; + + public var dts; + + function get emphasized():Boolean; + + function set emphasized(val:Boolean); + + static var emphasizedStyleDeclaration; + + static var falseDisabled:Number; + + public var falseDisabledIcon:String; + + public var falseDisabledIconEmphasized:String; + + public var falseDisabledSkin:String; + + public var falseDisabledSkinEmphasized:String; + + static var falseDown:Number; + + public var falseDownIcon:String; + + public var falseDownIconEmphasized:String; + + public var falseDownSkin:String; + + public var falseDownSkinEmphasized:String; + + static var falseOver:Number; + + public var falseOverIcon:String; + + public var falseOverIconEmphasized:String; + + public var falseOverSkin:String; + + public var falseOverSkinEmphasized:String; + + static var falseUp:Number; + + public var falseUpIcon:String; + + public var falseUpIconEmphasized:String; + + public var falseUpSkin:String; + + public var falseUpSkinEmphasized:String; + + public var fdi; + + public var fds; + + public var fri; + + public var frs; + + public var fui; + + public var fus; + + public function getLabel(Void):String; + + public function getSelected():Boolean; + + public function getState(Void):Boolean; + + public function getToggle(Void):Boolean; + + public var iconName:Object; + + public var idNames; + + public function init(Void):Void; + + public var initializing:Boolean; + + public var interval; + + public function keyDown(e:Object):Void; + + public function keyUp(e:Object):Void; + + public var linkLength:Number; + + public function onDragOut(Void):Void; + + public function onDragOver(Void):Void; + + public function onKillFocus(newFocus:Object):Void; + + public function onPress(Void):Void; + + public function onPressDelay(Void):Void; + + public function onPressRepeat(Void):Void; + + public function onRelease(Void):Void; + + public function onReleaseOutside(Void):Void; + + public function onRollOut(Void):Void; + + public function onRollOver(Void):Void; + + public var phase:String; + + public var preset:Boolean; + + public var refNames; + + public function refresh(Void):Void; + + public function removeIcons(); + + public var rolloverIcon:Object; + + public var rolloverSkin:Object; + + function set selected(val:Boolean); + + [Inspectable(defaultValue=false)] function get selected():Boolean; + + public function setEnabled(val:Boolean):Void; + + public function setIcon(tag:Number, linkageName:String):Object; + + public function setLabel(val:String):Void; + + public function setSelected(val:Boolean); + + public function setSkin(tag:Number, linkageName:String, initobj:Object):MovieClip; + + public function setState(state:Boolean):Void; + + public function setStateVar(state:Boolean):Void; + + public function setToggle(val:Boolean); + + public function setView(offset:Boolean):Void; + + public function showEmphasized(e:Boolean):Void; + + public function size(Void):Void; + + public var skinName:Object; + + public var stateNames; + + public var style3dInset:Number; + + static var symbolName:String; + + static var symbolOwner:Object; + + public var tagMap; + + public var tdi; + + public var tds; + + function set toggle(val:Boolean); + + [Inspectable(defaultValue=false)] function get toggle():Boolean; + + public var tri; + + public var trs; + + static var trueDisabled:Number; + + public var trueDisabledIcon:String; + + public var trueDisabledIconEmphasized:String; + + public var trueDisabledSkin:String; + + public var trueDisabledSkinEmphasized:String; + + static var trueDown:Number; + + public var trueDownIcon:String; + + public var trueDownIconEmphasized:String; + + public var trueDownSkin:String; + + public var trueDownSkinEmphasized:String; + + static var trueOver:Number; + + public var trueOverIcon:String; + + public var trueOverIconEmphasized:String; + + public var trueOverSkin:String; + + public var trueOverSkinEmphasized:String; + + static var trueUp:Number; + + public var trueUpIcon:String; + + public var trueUpIconEmphasized:String; + + public var trueUpSkin:String; + + public var trueUpSkinEmphasized:String; + + public var tui; + + public var tus; + + public var upIcon:Object; + + public var upSkin:Object; + + function set value(val:Boolean); + + function get value():Boolean; + + static var version:String; + + public function viewIcon(varName:String):Void; + + public function viewSkin(varName:String, initObj:Object):Void; + +}; + +���__Packages.mx.core.UIComponent���__Packages.mx.core.UIComponent��� +Button.swf#�U?���__Packages.mx.core.UIObject��� +Button.swf���������mx.core.UIComponent�����import mx.core.UIObject; + +import mx.skins.SkinElement; + + + +[Event("focusIn")] + +[Event("focusOut")] + +[Event("keyDown")] + +[Event("keyUp")] + +intrinsic class mx.core.UIComponent extends mx.core.UIObject + +{ + + public function UIComponent(); + + public var clipParameters:Object; + + public function dispatchValueChangedEvent(value):Void; + + public var drawFocus:Function; + + [Inspectable(defaultValue=true, verbose=1, category="Other")] public var enabled:Boolean; + + public function enabledChanged(id:String, oldValue:Boolean, newValue:Boolean):Boolean; + + public function findFocusFromObject(o:Object):Object; + + public function findFocusInChildren(o:Object):Object; + + public var focusEnabled:Boolean; + + public var focusManager:MovieClip; + + public var focusTextField:Object; + + public function getFocus():Object; + + public function getFocusManager():Object; + + public var groupName:String; + + function get height():Number; + + public function init():Void; + + public function isParent(o:Object):Boolean; + + static var kStretch:Number; + + static var mergedClipParameters:Boolean; + + public function onKillFocus(newFocus:Object):Void; + + public function onSetFocus(oldFocus:Object):Void; + + public var origBorderStyles:Object; + + public var origBorderValues:Object; + + public var popUp:Boolean; + + public function pressFocus():Void; + + public function releaseFocus():Void; + + public function setEnabled(enabled:Boolean):Void; + + public function setFocus():Void; + + public function setVisible(x:Boolean, noEvent:Boolean):Void; + + public function size():Void; + + static var symbolName:String; + + static var symbolOwner:Object; + + public var tabEnabled:Boolean; + + public var tabIndex:Number; + + static var version:String; + + function get width():Number; + +}; + +���__Packages.mx.core.UIObject���__Packages.mx.core.UIObject��� +Button.swf#�U?���__Packages.mx.skins.SkinElement��� +Button.swf���������(__Packages.mx.styles.CSSStyleDeclaration��� +Button.swf���������!__Packages.mx.styles.StyleManager��� +Button.swf���������mx.core.UIObject�����import mx.styles.StyleManager; + +import mx.styles.CSSStyleDeclaration; + +import mx.skins.SkinElement; + + + +[Event("resize")] + +[Event("move")] + +[Event("draw")] + +[Event("load")] + +[Event("unload")] + +intrinsic class mx.core.UIObject extends MovieClip + +{ + + public function UIObject(); + + public function __getTextFormat(tf:TextFormat, bAll:Boolean):Boolean; + + public var __get__minHeight:Function; + + public var __get__minWidth:Function; + + public var __get__scaleX:Function; + + public var __get__scaleY:Function; + + public var __get__visible:Function; + + public var __height:Number; + + private var __onUnload:Function; + + public var __width:Number; + + public var _color; + + public function _createChildren(Void):Void; + + private var _endInit:Function; + + public function _getTextFormat(Void):TextFormat; + + private var _id:String; + + private var _maxHeight:Number; + + private var _maxWidth:Number; + + private var _minHeight:Number; + + private var _minWidth:Number; + + private var _preferredHeight:Number; + + private var _preferredWidth:Number; + + private var _tf:TextFormat; + + public var _topmost:Boolean; + + public var addEventListener:Function; + + function get bottom():Number; + + public var buildDepthTable:Function; + + public function cancelAllDoLaters(Void):Void; + + public var changeColorStyleInChildren:Function; + + public var changeTextStyleInChildren:Function; + + public var childrenCreated:Boolean; + + public var className:String; + + public var clipParameters:Object; + + public var color:Number; + + public function constructObject(Void):Void; + + public var createAccessibilityImplementation:Function; + + public var createChildAtDepth:Function; + + public function createChildren(Void):Void; + + public var createClassChildAtDepth:Function; + + public function createClassObject(className:Function, id:String, depth:Number, initobj:Object):mx.core.UIObject; + + public function createEmptyObject(id:String, depth:Number):mx.core.UIObject; + + public var createEvent:Function; + + public function createLabel(name:String, depth:Number, text):TextField; + + public function createObject(linkageName:String, id:String, depth:Number, initobj:Object):MovieClip; + + public function createSkin(tag:Number):mx.core.UIObject; + + public function destroyObject(id:String):Void; + + public var dispatchEvent:Function; + + public function doLater(obj:Object, fn:String):Void; + + public function doLaterDispatcher(Void):Void; + + public function draw(Void):Void; + + public function drawRect(x1:Number, y1:Number, x2:Number, y2:Number):Void; + + public var embedFonts:Boolean; + + public var findNextAvailableDepth:Function; + + public var fontFamily:String; + + public var fontSize:Number; + + public var fontStyle:String; + + public var fontWeight:String; + + public function getClassStyleDeclaration(Void):mx.styles.CSSStyleDeclaration; + + public function getMinHeight(Void):Number; + + public function getMinWidth(Void):Number; + + public function getSkinIDName(tag:Number):String; + + public function getStyle(styleProp:String); + + public function getStyleName(Void):String; + + public var handleEvent:Function; + + function get height():Number; + + public var idNames:Array; + + public var ignoreClassStyleDeclaration:Object; + + public function init(Void):Void; + + public function initFromClipParameters(Void):Void; + + public var initProperties:Function; + + public function invalidate(Void):Void; + + private var invalidateFlag:Boolean; + + public function invalidateStyle(Void):Void; + + function get left():Number; + + private var lineColor:Number; + + private var lineWidth:Number; + + public var marginLeft:Number; + + public var marginRight:Number; + + static function mergeClipParameters(o, p):Boolean; + + public var methodTable:Array; + + [Inspectable(defaultValue=0, verbose=1, category="Size")] function get minHeight():Number; + + function set minHeight(h:Number):Void; + + [Inspectable(defaultValue=0, verbose=1, category="Size")] function get minWidth():Number; + + function set minWidth(w:Number):Void; + + public function move(x:Number, y:Number, noEvent:Boolean):Void; + + public var notifyStyleChangeInChildren:Function; + + public function redraw(bAlways:Boolean):Void; + + public var removeEventListener:Function; + + function get right():Number; + + function get scaleX():Number; + + function set scaleX(x:Number):Void; + + function get scaleY():Number; + + function set scaleY(y:Number):Void; + + public function setColor(color:Number):Void; + + public function setMinHeight(h:Number):Void; + + public function setMinWidth(w:Number):Void; + + public function setSize(w:Number, h:Number, noEvent:Boolean):Void; + + public function setSkin(tag:Number, linkageName:String, initObj:Object):MovieClip; + + public var setStyle:Function; + + public function setVisible(x:Boolean, noEvent:Boolean):Void; + + public function size(Void):Void; + + public var styleName:String; + + public var stylecache:Object; + + static var symbolName:String; + + static var symbolOwner:Object; + + public var tabEnabled:Boolean; + + public var textAlign:String; + + static var textColorList; + + public var textDecoration:String; + + public var textIndent:Number; + + private var tfList:Object; + + function get top():Number; + + public var validateNow:Boolean; + + static var version:String; + + [Inspectable(defaultValue=true, verbose=1, category="Other")] function get visible():Boolean; + + function set visible(x:Boolean):Void; + + function get width():Number; + + function get x():Number; + + function get y():Number; + +}; + +���,__Packages.mx.core.ext.UIComponentExtensions���,__Packages.mx.core.ext.UIComponentExtensions��� +Button.swf#�U?��� __Packages.mx.styles.CSSSetStyle��� +Button.swf���������__Packages.mx.core.UIComponent��� +Button.swf���������#__Packages.mx.managers.FocusManager��� +Button.swf���������(__Packages.mx.managers.OverlappedWindows��� +Button.swf���������!mx.core.ext.UIComponentExtensions����:import mx.core.UIComponent; + + + +intrinsic class mx.core.ext.UIComponentExtensions + +{ + + static function Extensions():Boolean; + + static var FocusManagerDependency; + + static var OverlappedWindowsDependency; + + static var UIComponentDependency; + + static var UIComponentExtended; + + static var bExtended; + +}; + +���)__Packages.mx.core.ext.UIObjectExtensions���)__Packages.mx.core.ext.UIObjectExtensions��� +Button.swf#�U?���&__Packages.mx.skins.ColoredSkinElement��� +Button.swf���������(__Packages.mx.styles.CSSStyleDeclaration��� +Button.swf���������__Packages.mx.core.UIObject��� +Button.swf���������__Packages.mx.skins.SkinElement��� +Button.swf���������"__Packages.mx.styles.CSSTextStyles��� +Button.swf���������&__Packages.mx.events.UIEventDispatcher��� +Button.swf���������mx.core.ext.UIObjectExtensions�����import mx.core.UIObject; + +import mx.styles.CSSStyleDeclaration; + +import mx.skins.SkinElement; + +import mx.events.UIEventDispatcher; + + + +intrinsic class mx.core.ext.UIObjectExtensions + +{ + + static var CSSTextStylesDependency; + + static function Extensions():Boolean; + + static var SkinElementDependency; + + static var UIEventDispatcherDependency; + + static var UIObjectDependency; + + static var UIObjectExtended; + + static function addGeometry(tf:Object, ui:Object):Void; + + static var bExtended; + +}; + +���$__Packages.mx.events.EventDispatcher���$__Packages.mx.events.EventDispatcher��� +Button.swf#�U?���mx.events.EventDispatcher���� + +intrinsic class mx.events.EventDispatcher + +{ + + static var _fEventDispatcher:mx.events.EventDispatcher; + + static function _removeEventListener(queue:Object, event:String, handler):Void; + + public function addEventListener(event:String, handler):Void; + + public function dispatchEvent(eventObj:Object):Void; + + public function dispatchQueue(queueObj:Object, eventObj:Object):Void; + + static function initialize(object:Object):Void; + + public function removeEventListener(event:String, handler):Void; + +}; + +���&__Packages.mx.events.UIEventDispatcher���&__Packages.mx.events.UIEventDispatcher��� +Button.swf#�U?���$__Packages.mx.events.EventDispatcher��� +Button.swf���������mx.events.UIEventDispatcher����import mx.core.UIObject; + +import mx.events.EventDispatcher; + + + +intrinsic class mx.events.UIEventDispatcher extends mx.events.EventDispatcher + +{ + + public function __addEventListener(event:String, handler):Void; + + public var __origAddEventListener:Function; + + public var __sentLoadEvent; + + static var _fEventDispatcher:mx.events.UIEventDispatcher; + + static function addKeyEvents(obj:Object):Void; + + static function addLoadEvents(obj:Object):Void; + + public function dispatchEvent(eventObj:Object):Void; + + static function initialize(obj:Object):Void; + + static var keyEvents:Object; + + static var loadEvents:Object; + + static var lowLevelEvents:Object; + + public function onKeyDown(Void):Void; + + public function onKeyUp(Void):Void; + + public function onLoad(Void):Void; + + public function onUnload(Void):Void; + + public var owner:Object; + + public function removeEventListener(event:String, handler):Void; + + static function removeKeyEvents(obj:Object):Void; + + static function removeLoadEvents(obj:Object):Void; + +}; + +���#__Packages.mx.managers.DepthManager���#__Packages.mx.managers.DepthManager��� +Button.swf#�U?���__Packages.mx.core.UIObject��� +Button.swf���������mx.managers.DepthManager����oimport mx.core.UIObject; + + + +intrinsic class mx.managers.DepthManager + +{ + + public function DepthManager(); + + static var __depthManager:mx.managers.DepthManager; + + public var _childCounter:Number; + + public var _parent:MovieClip; + + public var _topmost:Boolean; + + public function buildDepthTable(Void):Array; + + public function createChildAtDepth(linkageName:String, depthFlag:Number, initObj:Object):MovieClip; + + public function createClassChildAtDepth(className:Function, depthFlag:Number, initObj:Object):mx.����  +   + !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrst������������������������������������������������core.UIObject; + + public var createClassObject:Function; + + static function createClassObjectAtDepth(className:Object, depthSpace:Number, initObj:Object):mx.core.UIObject; + + public var createObject:Function; + + static function createObjectAtDepth(linkageName:String, depthSpace:Number, initObj:Object):MovieClip; + + public function findNextAvailableDepth(targetDepth:Number, depthTable:Array, direction:String):Number; + + public var getDepth:Function; + + public function getDepthByFlag(depthFlag:Number, depthTable:Array):Number; + + static var highestDepth:Number; + + static private var holder:MovieClip; + + static var kBottom:Number; + + static var kCursor:Number; + + static var kNotopmost:Number; + + static var kTooltip:Number; + + static var kTop:Number; + + static var kTopmost:Number; + + static var lowestDepth:Number; + + static var numberOfAuthortimeLayers:Number; + + static var reservedDepth:Number; + + public function setDepthAbove(targetInstance:MovieClip):Void; + + public function setDepthBelow(targetInstance:MovieClip):Void; + + public function setDepthTo(depthFlag:Number):Void; + + public function shuffleDepths(subject:MovieClip, targetDepth:Number, depthTable:Array, direction:String):Void; + + static function sortFunction(a:MovieClip, b:MovieClip):Number; + + public var swapDepths:Function; + + static function test(depth:Number):Boolean; + +}; + +���#__Packages.mx.managers.FocusManager���#__Packages.mx.managers.FocusManager��� +Button.swf �W?���#__Packages.mx.controls.SimpleButton��� +Button.swf���������#__Packages.mx.managers.DepthManager��� +Button.swf���������$__Packages.mx.managers.SystemManager��� +Button.swf���������__Packages.mx.core.UIComponent��� +Button.swf���������)__Packages.mx.core.ext.UIObjectExtensions��� +Button.swf���������mx.managers.FocusManager����� import mx.core.UIObject; + +import mx.managers.SystemManager; + +import mx.controls.SimpleButton; + +import mx.core.UIComponent; + + + +intrinsic class mx.managers.FocusManager extends mx.core.UIComponent + +{ + + public function FocusManager(); + + static var UIObjectExtensionsDependency; + + public var __defaultPushButton:mx.controls.SimpleButton; + + public var __get__defaultPushButton:Function; + + private var _firstNode:Object; + + private var _firstObj:Object; + + private var _foundList:Object; + + private var _lastNode:Object; + + private var _lastObj:Object; + + private var _lastTarget:Object; + + private var _lastx:Object; + + private var _needPrev:Boolean; + + private var _nextIsNext:Boolean; + + private var _nextNode:Object; + + private var _nextObj:Object; + + public function _onMouseDown(Void):Void; + + private var _prevNode:Object; + + private var _prevObj:Object; + + private var _searchKey:Number; + + public function activate(Void):Void; + + private var activated:Boolean; + + public var bDrawFocus:Boolean; + + public var bNeedFocus:Boolean; + + public var className:String; + + public function deactivate(Void):Void; + + public var defPushButton:mx.controls.SimpleButton; + + function get defaultPushButton():mx.controls.SimpleButton; + + function set defaultPushButton(x:mx.controls.SimpleButton); + + public var defaultPushButtonEnabled:Boolean; + + static function enableFocusManagement():Void; + + public function enabledChanged(id:String, oldValue:Boolean, newValue:Boolean):Boolean; + + public var form; + + public function getActualFocus(o:Object):Object; + + public function getFocus(Void):Object; + + public function getFocusManagerFromObject(o:Object):Object; + + public function getMaxTabIndex(o:mx.core.UIComponent):Number; + + public function getMousedComponentFromChildren(x:Number, y:Number, o:Object):Object; + + public function getNextTabIndex(Void):Number; + + public function getSelectionFocus():Object; + + public function getTabCandidate(o:MovieClip, index:Number, groupName:String, dir:Boolean, firstChild:Boolean):Void; + + public function getTabCandidateFromChildren(o:MovieClip, index:Number, groupName:String, dir:Boolean, firstChild:Boolean):Void; + + public function handleEvent(e:Object); + + public function init(Void):Void; + + static var initialized:Boolean; + + public function isOurFocus(o:Object):Boolean; + + public var lastFocus:Object; + + public var lastSelFocus:Object; + + public var lastTabFocus:Object; + + public var lastXMouse:Number; + + public var lastYMouse:Number; + + public function mouseActivate(Void):Void; + + function get nextTabIndex():Number; + + public function onKeyDown(Void):Void; + + public function onMouseUp(Void):Void; + + public function onSetFocus(o:Object, n:Object):Void; + + public function onUnload(Void):Void; + + public function relocate(Void):Void; + + public function restoreFocus(Void):Void; + + public function sendDefaultPushButtonEvent(Void):Void; + + public function setFocus(o:Object):Void; + + static var symbolName:String; + + static var symbolOwner:Object; + + private var tabCapture:MovieClip; + + public function tabHandler(Void):Void; + + static var version:String; + + public function walkTree(p:MovieClip, index:Number, groupName:String, dir:Boolean, lookup:Boolean, firstChild:Boolean):Void; + +}; + +���(__Packages.mx.managers.OverlappedWindows���(__Packages.mx.managers.OverlappedWindows��� +Button.swf#�U?���__Packages.mx.core.UIComponent��� +Button.swf���������$__Packages.mx.managers.SystemManager��� +Button.swf���������mx.managers.OverlappedWindows����(import mx.managers.SystemManager; + +import mx.core.UIComponent; + + + +intrinsic class mx.managers.OverlappedWindows + +{ + + static var SystemManagerDependency; + + static function __addEventListener(e:String, o:Object, l:Function):Void; + + static function __removeEventListener(e:String, o:Object, l:Function):Void; + + static function activate(f:MovieClip):Void; + + static function addFocusManager(f:mx.core.UIComponent):Void; + + static function checkIdle(Void):Void; + + static function deactivate(f:MovieClip):Void; + + static function enableOverlappedWindows():Void; + + static var initialized:Boolean; + + static function onMouseDown(Void):Void; + + static function onMouseMove(Void):Void; + + static function onMouseUp(Void):Void; + + static function removeFocusManager(f:mx.core.UIComponent):Void; + +}; + +���$__Packages.mx.managers.SystemManager���$__Packages.mx.managers.SystemManager��� +Button.swf#�U?���__Packages.mx.core.UIComponent��� +Button.swf���������$__Packages.mx.events.EventDispatcher��� +Button.swf���������mx.managers.SystemManager�����import mx.events.EventDispatcher; + +import mx.core.UIComponent; + + + +[Event("idle")] + +[Event("resize")] + +intrinsic class mx.managers.SystemManager + +{ + + static var __addEventListener:Function; + + static var __removeEventListener:Function; + + static var __screen:Object; + + static private var _initialized:Boolean; + + static var _xAddEventListener:Function; + + static var _xRemoveEventListener:Function; + + static var activate:Function; + + static var addEventListener:Function; + + static function addFocusManager(f:mx.core.UIComponent):Void; + + static var checkIdle:Function; + + static var deactivate:Function; + + static var dispatchEvent:Function; + + static var form:MovieClip; + + static var forms:Array; + + static var idleFrames:Number; + + static function init(Void):Void; + + static var interval:Number; + + static var isMouseDown; + + static function onMouseDown(Void):Void; + + static var onMouseMove:Function; + + static var onMouseUp:Function; + + static function onResize(Void):Void; + + static var removeEventListener:Function; + + static function removeFocusManager(f:mx.core.UIComponent):Void; + + static function get screen():Object; + +}; + +���__Packages.mx.skins.Border���__Packages.mx.skins.Border��� +Button.swf#�U?���__Packages.mx.core.UIObject��� +Button.swf���������mx.skins.Border����himport mx.core.UIObject; + + + +intrinsic class mx.skins.Border extends mx.core.UIObject + +{ + + public function Border(); + + public var borderStyle:String; + + public var className:String; + + public var idNames:Array; + + public function init(Void):Void; + + static var symbolName:String; + + static var symbolOwner:Object; + + public var tagBorder:Number; + +}; + +���&__Packages.mx.skins.ColoredSkinElement���&__Packages.mx.skins.ColoredSkinElement��� +Button.swf#�U?���mx.skins.ColoredSkinElement����� + +intrinsic class mx.skins.ColoredSkinElement + +{ + + public var _color; + + public function draw(Void):Void; + + public var getStyle:Function; + + public function invalidateStyle(Void):Void; + + static var mixins:mx.skins.ColoredSkinElement; + + public var onEnterFrame:Function; + + public function setColor(c:Number):Void; + + static function setColorStyle(p:Object, colorStyle:String):Void; + +}; + +���__Packages.mx.skins.RectBorder���__Packages.mx.skins.RectBorder��� +Button.swf$�U?���__Packages.mx.skins.Border��� +Button.swf���������mx.skins.RectBorder�����import mx.skins.Border; + +import mx.styles.CSSStyleDeclaration; + + + +intrinsic class mx.skins.RectBorder extends mx.skins.Border + +{ + + public function RectBorder(); + + public var __borderMetrics:Object; + + public var backgroundColorName:String; + + public var borderColorName:String; + + function get borderMetrics():Object; + + public var borderStyleName:String; + + public var buttonColorName:String; + + public var className:String; + + public function draw(Void):Void; + + public function drawBorder(Void):Void; + + public function getBorderMetrics(Void):Object; + + function get height():Number; + + public var highlightColorName:String; + + public function init(Void):Void; + + public var offset:Number; + + public function setColor(Void):Void; + + public var shadowColorName:String; + + public function size(Void):Void; + + static var symbolName:String; + + static var symbolOwner:Object; + + static var version:String; + + function get width():Number; + +}; + +���__Packages.mx.skins.SkinElement���__Packages.mx.skins.SkinElement��� +Button.swf$�U?���mx.skins.SkinElement����� + +intrinsic class mx.skins.SkinElement extends MovieClip + +{ + + public function __set__visible(visible:Boolean):Void; + + public var height:Number; + + public function move(x:Number, y:Number):Void; + + static function registerElement(name:String, className:Function):Void; + + public function setSize(w:Number, h:Number):Void; + + public var top:Number; + + public var visible:Boolean; + + public var width:Number; + +}; + +���#__Packages.mx.skins.halo.ButtonSkin���#__Packages.mx.skins.halo.ButtonSkin��� +Button.swf#�U?���)__Packages.mx.core.ext.UIObjectExtensions��� +Button.swf���������__Packages.mx.skins.RectBorder��� +Button.swf���������mx.skins.halo.ButtonSkin����import mx.skins.RectBorder; + +import mx.core.ext.UIObjectExtensions; + +import mx.skins.SkinElement; + + + +intrinsic class mx.skins.halo.ButtonSkin extends mx.skins.RectBorder + +{ + + public function ButtonSkin(); + + static var UIObjectExtensionsDependency; + + public var backgroundColorName; + + static function classConstruct():Boolean; + + static var classConstructed:Boolean; + + public var className; + + public function drawHaloRect(w:Number, h:Number):Void; + + public var drawRoundRect:Function; + + public function init():Void; + + public function size():Void; + + static var symbolName:String; + + static var symbolOwner:Object; + +}; + +���!__Packages.mx.skins.halo.Defaults���!__Packages.mx.skins.halo.Defaults��� +Button.swf$�U?���__Packages.mx.core.UIComponent��� +Button.swf���������__Packages.mx.core.UIObject��� +Button.swf���������(__Packages.mx.styles.CSSStyleDeclaration��� +Button.swf���������)__Packages.mx.core.ext.UIObjectExtensions��� +Button.swf���������mx.skins.halo.Defaults�����import mx.core.UIObject; + +import mx.core.ext.UIObjectExtensions; + +import mx.styles.CSSStyleDeclaration; + + + +intrinsic class mx.skins.halo.Defaults + +{ + + static var CSSStyleDeclarationDependency; + + static var UIObjectDependency; + + static var UIObjectExtensionsDependency; + + public var beginFill:Function; + + public var beginGradientFill:Function; + + static function classConstruct():Boolean; + + static var classConstructed; + + public var curveTo:Function; + + public function drawRoundRect(x, y, w, h, r, c, alpha, rot, gradient, ratios); + + public var endFill:Function; + + public var lineTo:Function; + + public var moveTo:Function; + + static function setThemeDefaults():Void; + +}; + +���"__Packages.mx.skins.halo.FocusRect���"__Packages.mx.skins.halo.FocusRect��� +Button.swf$�U?���#__Packages.mx.managers.DepthManager��� +Button.swf���������__Packages.mx.core.UIComponent��� +Button.swf���������__Packages.mx.skins.SkinElement��� +Button.swf���������!__Packages.mx.skins.halo.Defaults��� +Button.swf���������mx.skins.halo.FocusRect�����import mx.core.UIObject; + +import mx.skins.halo.Defaults; + +import mx.managers.DepthManager; + +import mx.skins.SkinElement; + +import mx.core.UIComponent; + + + +intrinsic class mx.skins.halo.FocusRect extends mx.skins.SkinElement + +{ + + static var DefaultsDependency:mx.skins.halo.Defaults; + + public function FocusRect(); + + static var UIComponentDependency:mx.core.UIComponent; + + public var boundingBox_mc:MovieClip; + + static function classConstruct():Boolean; + + static var classConstructed:Boolean; + + public function draw(o:Object):Void; + + public var drawRoundRect:Function; + + public function handleEvent(e:Object):Void; + + public function setSize(w:Number, h:Number, r, a:Number, rectCol:Number):Void; + +}; + +���#__Packages.mx.skins.halo.RectBorder���#__Packages.mx.skins.halo.RectBorder��� +Button.swf$�U?���(__Packages.mx.styles.CSSStyleDeclaration��� +Button.swf���������)__Packages.mx.core.ext.UIObjectExtensions��� +Button.swf���������__Packages.mx.skins.RectBorder��� +Button.swf���������mx.skins.halo.RectBorder����oimport mx.core.ext.UIObjectExtensions; + +import mx.skins.Border; + +import mx.styles.CSSStyleDeclaration; + + + +intrinsic class mx.skins.halo.RectBorder extends mx.skins.RectBorder + +{ + + public function RectBorder(); + + static var UIObjectExtensionsDependency; + + public var borderCapColorName:String; + + private var borderWidths:Object; + + static function classConstruct():Boolean; + + static var classConstructed:Boolean; + + private var colorList:Object; + + public function draw3dBorder(c1:Number, c2:Number, c3:Number, c4:Number, c5:Number, c6:Number):Void; + + public function drawBorder(Void):Void; + + public var drawRoundRect:Function; + + public function getBorderMetrics(Void):Object; + + public function init(Void):Void; + + public var shadowCapColorName:String; + + static var symbolName:String; + + static var symbolOwner:Object; + + static var version:String; + +}; + +��� __Packages.mx.styles.CSSSetStyle��� __Packages.mx.styles.CSSSetStyle��� +Button.swf$�U?���!__Packages.mx.styles.StyleManager��� +Button.swf���������(__Packages.mx.styles.CSSStyleDeclaration��� +Button.swf���������mx.styles.CSSSetStyle����bimport mx.styles.StyleManager; + +import mx.styles.CSSStyleDeclaration; + + + +intrinsic class mx.styles.CSSSetStyle + +{ + + static var CSSStyleDeclarationDependency; + + public var _color:Number; + + public function _setStyle(styleProp:String, newValue):Void; + + public function changeColorStyleInChildren(sheetName:String, colorStyle:String, newValue):Void; + + public function changeTextStyleInChildren(styleProp:String):Void; + + static function classConstruct():Boolean; + + static var classConstructed:Boolean; + + static function enableRunTimeCSS():Void; + + public var invalidateStyle:Function; + + public function notifyStyleChangeInChildren(sheetName:String, styleProp:String, newValue):Void; + + public var setColor:Function; + + public function setStyle(styleProp:String, newValue):Void; + + public var styleName:String; + + public var stylecache:Object; + +}; + +���(__Packages.mx.styles.CSSStyleDeclaration���(__Packages.mx.styles.CSSStyleDeclaration��� +Button.swf$�U?���!__Packages.mx.styles.StyleManager��� +Button.swf���������"__Packages.mx.styles.CSSTextStyles��� +Button.swf���������mx.styles.CSSStyleDeclaration����%import mx.styles.StyleManager; + +import mx.styles.CSSTextStyles; + + + +intrinsic class mx.styles.CSSStyleDeclaration + +{ + + static var CSSTextStylesDependency; + + public function __getTextFormat(tf:TextFormat, bAll:Boolean):Boolean; + + public var _tf:TextFormat; + + static function classConstruct():Boolean; + + static var classConstructed:Boolean; + + public var color:Number; + + public var embedFonts:Boolean; + + public var fontFamily:String; + + public var fontSize:Number; + + public var fontStyle:String; + + public var fontWeight:String; + + public function getStyle(styleProp:String); + + public var marginLeft:Number; + + public var marginRight:Number; + + public var styleName:String; + + public var textAlign:String; + + public var textDecoration:String; + + public var textIndent:Number; + +}; + +���"__Packages.mx.styles.CSSTextStyles���"__Packages.mx.styles.CSSTextStyles��� +Button.swf$�U?���mx.styles.CSSTextStyles���t + +intrinsic class mx.styles.CSSTextStyles + +{ + + static function addTextStyles(o:Object, bColor:Boolean):Void; + +}; + +���!__Packages.mx.styles.StyleManager���!__Packages.mx.styles.StyleManager��� +Button.swf$�U?���mx.styles.StyleManager����� + +intrinsic class mx.styles.StyleManager + +{ + + static var TextFormatStyleProps:Object; + + static var TextStyleMap:Object; + + static var colorNames:Object; + + static var colorStyles:Object; + + static function getColorName(colorName:String):Number; + + static var inheritingStyles:Object; + + static function isColorName(colorName:String):Boolean; + + static function isColorStyle(styleName:String):Boolean; + + static function isInheritingStyle(styleName:String):Boolean; + + static function registerColorName(colorName:String, colorValue:Number):Void; + + static function registerColorStyle(styleName:String):Void; + + static function registerInheritingStyle(styleName:String):Void; + +}; + +��� BoundingBox��� +Button.swf��������� SimpleButton��� +Button.swf���������Border��� +Button.swf��������� +RectBorder��� +Button.swf��������� +ButtonSkin��� +Button.swf���������__Packages.mx.controls.Button��� +Button.swf���������mx.controls.Button����q import mx.core.UIObject; + +import mx.controls.SimpleButton; + +import mx.core.UIComponent; + + + +[Event("click")] + +[TagName("Button")] + +[IconFile("Button.png")] + +intrinsic class mx.controls.Button extends mx.controls.SimpleButton + +{ + + public function Button(); + + public var __get__icon:Function; + + public var __get__label:Function; + + public var __get__labelPlacement:Function; + + public var __label:String; + + public var __labelPlacement:String; + + public var _color; + + public function _getIcon(Void):String; + + public var _iconLinkageName:String; + + [Bindable] [ChangeEvent("click")] public var _inherited_selected:Boolean; + + public function _setIcon(linkage):Void; + + public var borderW:Number; + + public var btnOffset:Number; + + public function calcSize(tag:Number, ref:Object):Void; + + public var centerContent:Boolean; + + public var className:String; + + public var clipParameters:Object; + + public function createChildren(Void):Void; + + public function draw(); + + public var falseDisabledIcon:String; + + public var falseDisabledSkin:String; + + public var falseDownIcon:String; + + public var falseDownSkin:String; + + public var falseOverIcon:String; + + public var falseOverSkin:String; + + public var falseUpIcon:String; + + public var falseUpSkin:String; + + public function getBtnOffset(Void):Number; + + public function getLabel(Void):String; + + public function getLabelPlacement(Void):String; + + public var hitArea_mc:MovieClip; + + function get icon():String; + + [Inspectable(defaultValue="")] function set icon(linkage); + + public function init(Void):Void; + + public var initIcon; + + public function invalidateStyle(c:String):Void; + + [Inspectable(defaultValue="Button")] function set label(lbl:String); + + function get label():String; + + public var labelPath:Object; + + [Inspectable(enumeration="left,right,top,bottom"defaultValue="right")] function set labelPlacement(val:String); + + function get labelPlacement():String; + + static var mergedClipParameters:Boolean; + + public function onRelease(Void):Void; + + public function setColor(c:Number):Void; + + public function setEnabled(enable:Boolean):Void; + + public function setHitArea(w:Number, h:Number); + + public function setLabel(label:String):Void; + + public function setLabelPlacement(val:String):Void; + + public function setSkin(tag:Number, linkageName:String, initobj:Object):MovieClip; + + public function setView(offset:Number):Void; + + public function size(Void):Void; + + static var symbolName:String; + + static var symbolOwner; + + public var trueDisabledIcon:String; + + public var trueDisabledSkin:String; + + public var trueDownIcon:String; + + public var trueDownSkin:String; + + public var trueOverIcon:String; + + public var trueOverSkin:String; + + public var trueUpIcon:String; + + public var trueUpSkin:String; + + static var version:String; + + public function viewSkin(varName:String):Void; + +}; + +�� +h�hhhh�������� ����PropSheet::ActiveTab���7641����!PublishGifProperties::PaletteName������ PublishRNWKProperties::speed256K���0���"PublishHtmlProperties::StartPaused���0���%PublishFormatProperties::htmlFileName���storage_dialog.html��� PublishQTProperties::LayerOption������ PublishQTProperties::AlphaOption������"PublishQTProperties::MatchMovieDim���1���Vector::Debugging Permitted���0���PublishProfileProperties::name���Default���PublishHtmlProperties::Loop���1���PublishFormatProperties::jpeg���0���PublishQTProperties::Width���215���$PublishPNGProperties::OptimizeColors���1���&PublishRNWKProperties::speedSingleISDN���0���&PublishRNWKProperties::singleRateAudio���0���Vector::External Player������%PublishHtmlProperties::showTagWarnMsg���1���PublishHtmlProperties::Units���0���4PublishHtmlProperties::UsingDefaultAlternateFilename���1���PublishGifProperties::Smooth���1���%PublishRNWKProperties::mediaCopyright���(c) 2000���#PublishRNWKProperties::flashBitRate���1200���Vector::Compress Movie���1���Vector::Package Paths������&PublishFormatProperties::flashFileName���..\..\storage_dialog.swf���'PublishFormatProperties::gifDefaultName���1���%PublishFormatProperties::projectorMac���0���"PublishGifProperties::DitherOption������!PublishRNWKProperties::exportSMIL���1��� PublishRNWKProperties::speed384K���0���"PublishRNWKProperties::exportAudio���1���Vector::FireFox���0���PublishHtmlProperties::Quality���4���(PublishHtmlProperties::VerticalAlignment���1���$PublishFormatProperties::pngFileName���storage_dialog.png���PublishFormatProperties::html���0���"PublishPNGProperties::FilterOption������'PublishRNWKProperties::mediaDescription������Vector::Override Sounds���0���!PublishHtmlProperties::DeviceFont���0���-PublishFormatProperties::generatorDefaultName���1���PublishQTProperties::Flatten���1���PublishPNGProperties::BitDepth���24-bit with Alpha���PublishPNGProperties::Smooth���1���"PublishGifProperties::DitherSolids���0���PublishGifProperties::Interlace���0���PublishJpegProperties::DPI���4718592���Vector::Quality���80���Vector::Protect���0���"PublishHtmlProperties::DisplayMenu���1���*PublishHtmlProperties::HorizontalAlignment���1���2PublishHtmlProperties::VersionDetectionIfAvailable���0���Vector::Template���0���*PublishFormatProperties::generatorFileName���storage_dialog.swt���(PublishFormatProperties::rnwkDefaultName���1���(PublishFormatProperties::jpegDefaultName���1���PublishFormatProperties::gif���0���PublishGifProperties::Loop���1���PublishGifProperties::Width���215���$PublishRNWKProperties::mediaKeywords������!PublishRNWKProperties::mediaTitle������PublishRNWKProperties::speed28K���1���#PublishFormatProperties::qtFileName���storage_dialog.mov���"PublishPNGProperties::DitherOption������#PublishGifProperties::PaletteOption������#PublishGifProperties::MatchMovieDim���1���$PublishRNWKProperties::speedDualISDN���0���$PublishRNWKProperties::realVideoRate���100000���PublishJpegProperties::Quality���80���PublishFormatProperties::flash���1���#PublishPNGProperties::PaletteOption������#PublishPNGProperties::MatchMovieDim���1���$PublishJpegProperties::MatchMovieDim���1���Vector::Package Export Frame���1���!PublishProfileProperties::version���1���PublishHtmlProperties::Align���0���-PublishFormatProperties::projectorWinFileName���storage_dialog.exe���'PublishFormatProperties::pngDefaultName���1���0PublishFormatProperties::projectorMacDefaultName���1���#PublishQTProperties::PlayEveryFrame���0���"PublishPNGProperties::DitherSolids���0���"PublishJpegProperties::Progressive���0���Vector::Debugging Password������Vector::Omit Trace Actions���0���PublishHtmlProperties::Height���138���PublishHtmlProperties::Width���215���%PublishFormatProperties::jpegFileName���storage_dialog.jpg���)PublishFormatProperties::flashDefaultName���0���PublishPNGProperties::Interlace���0���PublishGifProperties::Height���138���PublishJpegProperties::Size���0���Vector::DeviceSound���0���Vector::TopDown���0���'PublishHtmlProperties::TemplateFileName����C:\Documents and Settings\bradneuberg\Local Settings\Application Data\Macromedia\Flash MX 2004\en\Configuration\Html\Default.html���!PublishHtmlProperties::WindowMode���0���2PublishHtmlProperties::UsingDefaultContentFilename���1���-PublishFormatProperties::projectorMacFileName���storage_dialog.hqx���(PublishFormatProperties::htmlDefaultName���1���PublishFormatProperties::rnwk���0���PublishFormatProperties::png���0���PublishQTProperties::Height���138���%PublishPNGProperties::RemoveGradients���0���PublishGifProperties::MaxColors���255���'PublishGifProperties::TransparentOption������PublishGifProperties::LoopCount������PublishRNWKProperties::speed56K���1���Vector::Report���0���+PublishHtmlProperties::OwnAlternateFilename������(PublishHtmlProperties::AlternateFilename������&PublishHtmlProperties::ContentFilename������"PublishFormatProperties::generator���0���$PublishGifProperties::OptimizeColors���1���"PublishRNWKProperties::audioFormat���0���Vector::Version���7���Vector::Event Format���0���Vector::Stream Compress���7���PublishFormatProperties::qt���0���PublishPNGProperties::Height���138���PublishPNGProperties::Width���215���%PublishGifProperties::RemoveGradients���0��� PublishRNWKProperties::speed512K���0���PublishJpegProperties::Height���138���Vector::ActionScriptVersion���2���Vector::Event Compress���7���PublishHtmlProperties::Scale���0���0PublishFormatProperties::projectorWinDefaultName���1���PublishQTProperties::Looping���0���*PublishQTProperties::UseQTSoundCompression���0���!PublishPNGProperties::PaletteName������!PublishPNGProperties::Transparent���0���&PublishGifProperties::TransparentAlpha���128���PublishGifProperties::Animated���0���"PublishRNWKProperties::mediaAuthor������(PublishRNWKProperties::speedCorporateLAN���0���&PublishRNWKProperties::showBitrateDlog���1���"PublishRNWKProperties::exportFlash���1���PublishJpegProperties::Width���215���Vector::Stream Format���0���"PublishHtmlProperties::VersionInfo������$PublishFormatProperties::gifFileName���storage_dialog.gif���&PublishFormatProperties::qtDefaultName���1���"PublishQTProperties::PausedAtStart���0���%PublishQTProperties::ControllerOption���0���PublishPNGProperties::MaxColors���255���,PublishHtmlProperties::UsingOwnAlternateFile���0���%PublishFormatProperties::rnwkFileName���storage_dialog.smil���%PublishFormatProperties::projectorWin���0���%PublishFormatProperties::defaultNames���0������������� CColorDef������3�P��f�P�0���P�H���P�`���P�x�3���33�(��3f�<�0�3��C�H�3��F�`�3��H�x�f��0�f3��0�ff�(�0�f��5�H�f��<�`�f��@�x���333�0���3����33�x��f3�d�0��3�]�H��3�Z�`��3�X�x�33����333�0�3f3�PPH�3�3�Px`�3�3�P�x�3�3�P���f3���0�f33�PH�ff3�(PH�f�3�<x`�f�3�C�x�f�3�F�����fff�`���f���0�3f���0�ff�x�0��f�k�H��f�d�`��f�`�x�3f���0�33f��PH�3ff�xPH�3�f�dx`�3�f�]�x�3�f�Z���ff���0�f3f��PH�fff�`�f�f�P0x�f�f�Px��f�f�P�����������������H�3����H�f����H����x�H�̙�n�`����h�x�3����H�33���x`�3f���x`�3���xx`�3̙�k�x�3���d���f����H�f3���x`�ff���0x�f���x0x�f̙�dx��f���]�����������������`�3����`�f����`������`����x�`����p�x�3����`�33����x�3f����x�3�����x�3���x�x�3���n���f����`�f3����x�ff���x��f����x��f���xx��f���k�����������������x�3����x�f����x������x������x����x�x�3����x�33������3f������3�������3�������3���x���f����x�f3������ff������f�������f�������f���x��������x������H��3� +�H��f��H����(�H����2�`����8�x����`��3� +�`��f��`�̙��`����(�`����0�x����x��3��x��f��x�����x���� �x����(�x�����P�x����3���H��33�x`��f3�x`���3�(x`���3�5�x���3�<����3���`��33��x��f3� +�x�̙3��x���3�(�x���3�2����3���x��33�����f3� +�����3������3������3�(���������x����f���H��3f��x`��ff�0x���f�(0x���f�<x����f�C����f���`��3f���x��ff�x��̙f�x����f�(x����f�5����f���x��3f������ff������f� +�����f������f�(��������(�x��������H��3���x`��f���0x��������̙�PP������P��������`��3����x��f���x��̙��P���̙�(P������<��������x��3�������f��������������̙��������(��������x�x��������`��3����x��f���x�������P������xP������d��������`��3����x��f���x��̙���P������������P��������x��3�������f�������������������������(����������x��������x��3�������f��������������������������x��������x��3�������f������̙������������������x��������x��3�������f�����������������������������������������������������������������f��`����z������f��������������*���]������������������"PublishQTProperties::QTSndSettings��CQTAudioSettings�����h������ + +����������8���PublishJpegProperties::Size���0���Vector::DeviceSound���0���Vector::TopDown���0���'PublishHtmlProperties::TemplateFileName����C:\Documents and Settings\bradneuberg\Local Settings\Application Data\Macromedia\Flash MX 2004\en\Configuration\Html\Default.html���!PublishHtmlProperties::WindowMode���0���2PublishHtmlProperties::UsingDefaultContentFilename���1���-PublishFormatProperties::projectorMacFileName���storage_dialog.hqx���(PublishFormatProperties::htmlDefaultName���1���PublishFormatProperties::rnwk���0���PublishFormatProperties::png���0���PublishQTProperties::Height���138���%PublishPNGProperties::RemoveGradients���0���PublishGifProperties::MaxColors���255���'PublishGifProperties::TransparentOption������PublishGifProperties::LoopCount������PublishRNWKProperties::speed56K���1���Vector::Report���0���+PublishHtmlProperties::OwnAlternateFilename������(PublishHtmlProperties::AlternateFilename������&PublishHtmlProperties::ContentFilename������"PublishFormatProperties::generator���0���$PublishGifProperties::OptimizeColors���1���"PublishRNWKProperties::audioFormat���0���Vector::Version���7���Vector::Event Format���0���Vector::Stream Compress���7���PublishFormatProperties::qt���0���PublishPNGProperties::Height���138���PublishPNGProperties::Width���215���%PublishGifProperties::RemoveGradients���0��� PublishRNWKProperties::speed512K���0���PublishJpegProperties::Height���138���Vector::ActionScriptVersion���2���Vector::Event Compress���7���PublishHtmlProperties::Scale���0���0PublishFormatProperties::projectorWinDefaultName���1���PublishQTProperties::Looping���0���*PublishQTProperties::UseQTSoundCompression���0���!PublishPNGProperties::PaletteName������!PublishPNGProperties::Transparent���0���&PublishGifProperties::TransparentAlpha���128���PublishGifProperties::Animated���0���"PublishRNWKProperties::mediaAuthor������(PublishRNWKProperties::speedCorporateLAN���0���&PublishRNWKProperties::showBitrateDlog���1���"PublishRNWKProperties::exportFlash���1���PublishJpegProperties::Width���215���Vector::Stream Format���0���"PublishHtmlProperties::VersionInfo������$PublishFormatProperties::gifFileName���storage_dialog.gif���&PublishFormatProperties::qtDefaultName���1���"PublishQTProperties::PausedAtStart���0���%PublishQTProperties::ControllerOption���0���PublishPNGProperties::MaxColors���255���,PublishHtmlProperties::UsingOwnAlternateFile���0���%PublishFormatProperties::rnwkFileName���storage_dialog.smil���%PublishFormatProperties::projectorWin���0���%PublishFormatProperties::defaultNames���0������������� CColorDef������3�P��f�P�0���P�H���P�`���P�x�3���33�(��3f�<�0�3��C�H�3��F�`�3��H�x�f��0�f3��0�ff�(�0�f��5�H�f��<�`�f��@�x���333�0���3����33�x��f3�d�0��3�]�H��3�Z�`��3�X�x�33����333�0�3f3�PPH�3�3�Px`�3�3�P�x�3�3�P���f3���0�f33�PH�ff3�(PH�f�3�<x`�f�3�C�x�f�3�F�����fff�`���f���0�3f���0�ff�x�0��f�k�H��f�d�`��f�`�x�3f���0�33f��PH�3ff�xPH�3�f�dx`�3�f�]�x�3�f�Z���ff���0�f3f��PH�fff�`�f�f�P0x�f�f�Px��f�f�P�����������������H�3����H�f����H����x�H�̙�n�`����h�x�3����H�33���x`�3f���x`�3���xx`�3̙�k�x�3���d���f����H�f3���x`�ff���0x�f���x0x�f̙�dx��f���]�����������������`�3����`�f����`������`����x�`����p�x�3����`�33����x�3f����x�3�����x�3���x�x�3���n���f����`�f3����x�ff���x��f����x��f���xx��f���k�����������������x�3����x�f����x������x������x����x�x�3����x�33������3f������3�������3�������3���x���f����x�f3������ff������f�������f�������f���x��������x������H��3� +�H��f��H����(�H����2�`����8�x����`��3� +�`��f��`�̙��`����(�`����0�x����x��3��x��f��x�����x���� �x����(�x�����P�x����3���H��33�x`��f3�x`���3�(x`���3�5�x���3�<����3���`��33��x��f3� +�x�̙3��x���3�(�x���3�2����3���x��33�����f3� +�����3������3������3�(���������x����f���H��3f��x`��ff�0x���f�(0x���f�<x����f�C����f���`��3f���x��ff�x��̙f�x����f�(x����f�5����f���x��3f������ff������f� +�����f������f�(��������(�x��������H��3���x`��f���0x��������̙�PP������P��������`��3����x��f���x��̙��P���̙�(P������<��������x��3�������f��������������̙��������(��������x�x��������`��3����x��f���x�������P������xP������d��������`��3����x��f���x��̙���P������������P��������x��3�������f�������������������������(����������x��������x��3�������f��������������������������x��������x��3�������f������̙������������������x��������x��3�������f�������������������������������RemoveGradients���0��� PublishRNWKProperties::speed512K���0���PublishJpegProperties::Height���138���Vector::ActionScriptVersion���2���Vector::Event Compress���7���PublishHtmlProperties::Scale���0���0PublishFormatProperties::projectorWinDefaultName���1���PublishQTProperties::Looping���0���*PublishQTProperties::UseQTSoundCompression���0���!PublishPNGProperties::PaletteName������!PublishPNGProperties::Transparent���0���&PublishGifProperties::TransparentAlpha���128���PublishGifProperties::Animated���0���"PublishRNWKProperties::mediaAuthor������(PublishRNWKProperties::speedCorporateLAN���0���&PublishRNWKProperties::showBitrateDlog���1���"PublishRNWKProperties::exportFlash���1���PublishJpegProperties::Width���215���Vector::Stream Format���0���"PublishHtmlProperties::VersionInfo������$PublishFormatProperties::gifFileName���storage_dialog.gif���&PublishFormatProperties::qtDefaultName���1���"PublishQTProperties::PausedAtStart���0���%PublishQTProperties::ControllerOption���0���PublishPNGProperties::MaxColors���255���,PublishHtmlProperties::UsingOwnAlternateFile���0���%PublishFormatProperties::rnwkFileName���storage_dialog.smil���%PublishFormatProperties::projectorWin���0���%PublishFormatProperties::defaultNames���0������������� CColorDef������3�P��f�P�0���P�H���P�`���P�x�3���33�(��3f�<�0�3��C�H�3��F�`�3��H�x�f��0�f3����������������������������������f��`����z������f��������������*���]������������������"PublishQTProperties::QTSndSettings��CQTAudioSettin��0�ff�(�0�f��5�H�f��<�`�f��@�x���333�0���3����33�x��f3�d�0��3�]�H��3�Z�`��3�X�x�33����333�0�3f3�PPH�3�3�Px`�3�3�P�x�3�3�P���f3���0�f33�PH�ff3�(PH�f�3�<x`�f�3�C�x�f�3�F�����fff�`���f���0�3f���0�ff�x�0��f�k�H��f�d�`��f�gs�����h������ + +����������`�x�3f���0�33f��PH�3ff�xPH�3�f�dx`�3�f�]�x�3�f�Z���ff���0�f3f��PH�fff�`�f�f�P0x�f�f�Px��f�f�P�����������������H�3����H�f����H����x�H�̙�n�`����h�x�3����H�33���x`�3f���x`�3���xx`�3̙�k�x�3���d���f����H�f3���x`�ff���0x�f���x0x�f̙�dx��f���]�����������������`�3����`�f����`������`����x�`����p�x�3����`�33����x�3f����x�3�����x�3���x�x�3���n���f����`�f3����x�ff���x��f����x��f���xx��f���k�����������������x�3����x�f����x������x������x����x�x�3����x�33������3f������3�������3�������3���x���f����x�f3������ff������f�������f�������f���x��������x������H��3� +�H��f��H����(�H����2�`����8�x����`��3� +�`��f��`�̙��`����(�`����0�x����x��3��x��f��x�����x���� �x����(�x�����P�x����3���H��33�x`��f3�x`���3�(x`���3�5�x���3�<����3���`��33��x��f3� +�x�̙3��x���3�(�x���3�2����3���x��33�����f3� +�����3������3������3�(���������x����f���H��3f��x`��ff�0x���f�(0x���f�<x����f�C����f���`��3f���x��ff�x��̙f�x����f�(x����f�5����f���x��3f������ff������f� +�����f������f�(��������(�x��������H��3���x`��f���0x��������̙�PP������P��������`��3����x��f���x��̙��P���̙�(P������<��������x��3�������f��������������̙��������(��������x�x��������`��3����x��f���x�������P������xP������d��������`��3����x��f���x��̙���P������������P��������x��3�������f�������������������������(����������x��������x��3�������f��������������������������x��������x��3�������f������̙������������������x��������x��3�������f�����������������������������������������������������������������f��`����z������f��������������*���]������������������"PublishQTProperties::QTSndSettings��CQTAudioSettings�����h������ + +���������� \ No newline at end of file Index: openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/string/Builder.js =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/string/Attic/Builder.js,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/string/Builder.js 7 Nov 2006 02:38:04 -0000 1.1 @@ -0,0 +1,128 @@ +/* + Copyright (c) 2004-2006, The Dojo Foundation + All Rights Reserved. + + Licensed under the Academic Free License version 2.1 or above OR the + modified BSD license. For more information on Dojo licensing, see: + + http://dojotoolkit.org/community/licensing.shtml +*/ + +dojo.provide("dojo.string.Builder"); +dojo.require("dojo.string"); +dojo.require("dojo.lang.common"); + +// NOTE: testing shows that direct "+=" concatenation is *much* faster on +// Spidermoneky and Rhino, while arr.push()/arr.join() style concatenation is +// significantly quicker on IE (Jscript/wsh/etc.). + +dojo.string.Builder = function(/* string? */str){ + // summary + this.arrConcat = (dojo.render.html.capable && dojo.render.html["ie"]); + + var a = []; + var b = ""; + var length = this.length = b.length; + + if(this.arrConcat){ + if(b.length > 0){ + a.push(b); + } + b = ""; + } + + this.toString = this.valueOf = function(){ + // summary + // Concatenate internal buffer and return as a string + return (this.arrConcat) ? a.join("") : b; // string + }; + + this.append = function(){ + // summary + // Append all arguments to the end of the internal buffer + for(var x=0; x0){ + s = b.substring(0, (f-1)); + } + b = s + b.substring(f + l); + length = this.length = b.length; + if(this.arrConcat){ + a.push(b); + b=""; + } + return this; // dojo.string.Builder + }; + + this.replace = function(/* string */o, /* string */n){ + // summary + // replace phrase *o* with phrase *n*. + if(this.arrConcat){ + b = a.join(""); + } + a = []; + b = b.replace(o,n); + length = this.length = b.length; + if(this.arrConcat){ + a.push(b); + b=""; + } + return this; // dojo.string.Builder + }; + + this.insert = function(/* integer */idx, /* string */s){ + // summary + // Insert string s at index idx. + if(this.arrConcat){ + b = a.join(""); + } + a=[]; + if(idx == 0){ + b = s + b; + }else{ + var t = b.split(""); + t.splice(idx,0,s); + b = t.join("") + } + length = this.length = b.length; + if(this.arrConcat){ + a.push(b); + b=""; + } + return this; // dojo.string.Builder + }; + + this.append.apply(this, arguments); +}; Index: openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/string/__package__.js =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/string/Attic/__package__.js,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/string/__package__.js 7 Nov 2006 02:38:04 -0000 1.1 @@ -0,0 +1,19 @@ +/* + Copyright (c) 2004-2006, The Dojo Foundation + All Rights Reserved. + + Licensed under the Academic Free License version 2.1 or above OR the + modified BSD license. For more information on Dojo licensing, see: + + http://dojotoolkit.org/community/licensing.shtml +*/ + +dojo.kwCompoundRequire({ + common: [ + "dojo.string", + "dojo.string.common", + "dojo.string.extras", + "dojo.string.Builder" + ] +}); +dojo.provide("dojo.string.*"); Index: openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/string/common.js =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/string/Attic/common.js,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/string/common.js 7 Nov 2006 02:38:04 -0000 1.1 @@ -0,0 +1,78 @@ +/* + Copyright (c) 2004-2006, The Dojo Foundation + All Rights Reserved. + + Licensed under the Academic Free License version 2.1 or above OR the + modified BSD license. For more information on Dojo licensing, see: + + http://dojotoolkit.org/community/licensing.shtml +*/ + +dojo.provide("dojo.string.common"); + +dojo.string.trim = function(/* string */str, /* integer? */wh){ + // summary + // Trim whitespace from str. If wh > 0, trim from start, if wh < 0, trim from end, else both + if(!str.replace){ return str; } + if(!str.length){ return str; } + var re = (wh > 0) ? (/^\s+/) : (wh < 0) ? (/\s+$/) : (/^\s+|\s+$/g); + return str.replace(re, ""); // string +} + +dojo.string.trimStart = function(/* string */str) { + // summary + // Trim whitespace at the beginning of 'str' + return dojo.string.trim(str, 1); // string +} + +dojo.string.trimEnd = function(/* string */str) { + // summary + // Trim whitespace at the end of 'str' + return dojo.string.trim(str, -1); +} + +dojo.string.repeat = function(/* string */str, /* integer */count, /* string? */separator) { + // summary + // Return 'str' repeated 'count' times, optionally placing 'separator' between each rep + var out = ""; + for(var i = 0; i < count; i++) { + out += str; + if(separator && i < count - 1) { + out += separator; + } + } + return out; // string +} + +dojo.string.pad = function(/* string */str, /* integer */len/*=2*/, /* string */ c/*='0'*/, /* integer */dir/*=1*/) { + // summary + // Pad 'str' to guarantee that it is at least 'len' length with the character 'c' at either the + // start (dir=1) or end (dir=-1) of the string + var out = String(str); + if(!c) { + c = '0'; + } + if(!dir) { + dir = 1; + } + while(out.length < len) { + if(dir > 0) { + out = c + out; + } else { + out += c; + } + } + return out; // string +} + +dojo.string.padLeft = function(/* string */str, /* integer */len, /* string */c) { + // summary + // same as dojo.string.pad(str, len, c, 1) + return dojo.string.pad(str, len, c, 1); // string +} + +dojo.string.padRight = function(/* string */str, /* integer */len, /* string */c) { + // summary + // same as dojo.string.pad(str, len, c, -1) + return dojo.string.pad(str, len, c, -1); // string +} Index: openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/string/extras.js =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/string/Attic/extras.js,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/string/extras.js 7 Nov 2006 02:38:04 -0000 1.1 @@ -0,0 +1,261 @@ +/* + Copyright (c) 2004-2006, The Dojo Foundation + All Rights Reserved. + + Licensed under the Academic Free License version 2.1 or above OR the + modified BSD license. For more information on Dojo licensing, see: + + http://dojotoolkit.org/community/licensing.shtml +*/ + +dojo.provide("dojo.string.extras"); + +dojo.require("dojo.string.common"); +dojo.require("dojo.lang.common"); +dojo.require("dojo.lang.array"); + +//TODO: should we use ${} substitution syntax instead, like widgets do? +dojo.string.substituteParams = function(/*string*/template, /* object - optional or ... */hash){ +// summary: +// Performs parameterized substitutions on a string. Throws an exception if any parameter is unmatched. +// +// description: +// For example, +// dojo.string.substituteParams("File '%{0}' is not found in directory '%{1}'.","foo.html","/temp"); +// returns +// "File 'foo.html' is not found in directory '/temp'." +// +// template: the original string template with %{values} to be replaced +// hash: name/value pairs (type object) to provide substitutions. Alternatively, substitutions may be +// included as arguments 1..n to this function, corresponding to template parameters 0..n-1 + + var map = (typeof hash == 'object') ? hash : dojo.lang.toArray(arguments, 1); + + return template.replace(/\%\{(\w+)\}/g, function(match, key){ + if(typeof(map[key]) != "undefined" && map[key] != null){ + return map[key]; + } + dojo.raise("Substitution not found: " + key); + }); // string +}; + +dojo.string.capitalize = function(/*string*/str){ +// summary: +// Uppercases the first letter of each word + + if(!dojo.lang.isString(str)){ return ""; } + if(arguments.length == 0){ str = this; } + + var words = str.split(' '); + for(var i=0; i"' +// Optionally skips escapes for single quotes + + str = str.replace(/&/gm, "&").replace(//gm, ">").replace(/"/gm, """); + if(!noSingleQuotes){ str = str.replace(/'/gm, "'"); } + return str; // string +} + +dojo.string.escapeSql = function(/*string*/str){ +//summary: +// Adds escape sequences for single quotes in SQL expressions + + return str.replace(/'/gm, "''"); //string +} + +dojo.string.escapeRegExp = function(/*string*/str){ +//summary: +// Adds escape sequences for special characters in regular expressions + + return str.replace(/\\/gm, "\\\\").replace(/([\f\b\n\t\r[\^$|?*+(){}])/gm, "\\$1"); // string +} + +//FIXME: should this one also escape backslash? +dojo.string.escapeJavaScript = function(/*string*/str){ +//summary: +// Adds escape sequences for single and double quotes as well +// as non-visible characters in JavaScript string literal expressions + + return str.replace(/(["'\f\b\n\t\r])/gm, "\\$1"); // string +} + +//FIXME: looks a lot like escapeJavaScript, just adds quotes? deprecate one? +dojo.string.escapeString = function(/*string*/str){ +//summary: +// Adds escape sequences for non-visual characters, double quote and backslash +// and surrounds with double quotes to form a valid string literal. + return ('"' + str.replace(/(["\\])/g, '\\$1') + '"' + ).replace(/[\f]/g, "\\f" + ).replace(/[\b]/g, "\\b" + ).replace(/[\n]/g, "\\n" + ).replace(/[\t]/g, "\\t" + ).replace(/[\r]/g, "\\r"); // string +} + +// TODO: make an HTML version +dojo.string.summary = function(/*string*/str, /*number*/len){ +// summary: +// Truncates 'str' after 'len' characters and appends periods as necessary so that it ends with "..." + + if(!len || str.length <= len){ + return str; // string + } + + return str.substring(0, len).replace(/\.+$/, "") + "..."; // string +} + +dojo.string.endsWith = function(/*string*/str, /*string*/end, /*boolean*/ignoreCase){ +// summary: +// Returns true if 'str' ends with 'end' + + if(ignoreCase){ + str = str.toLowerCase(); + end = end.toLowerCase(); + } + if((str.length - end.length) < 0){ + return false; // boolean + } + return str.lastIndexOf(end) == str.length - end.length; // boolean +} + +dojo.string.endsWithAny = function(/*string*/str /* , ... */){ +// summary: +// Returns true if 'str' ends with any of the arguments[2 -> n] + + for(var i = 1; i < arguments.length; i++) { + if(dojo.string.endsWith(str, arguments[i])) { + return true; // boolean + } + } + return false; // boolean +} + +dojo.string.startsWith = function(/*string*/str, /*string*/start, /*boolean*/ignoreCase){ +// summary: +// Returns true if 'str' starts with 'start' + + if(ignoreCase) { + str = str.toLowerCase(); + start = start.toLowerCase(); + } + return str.indexOf(start) == 0; // boolean +} + +dojo.string.startsWithAny = function(/*string*/str /* , ... */){ +// summary: +// Returns true if 'str' starts with any of the arguments[2 -> n] + + for(var i = 1; i < arguments.length; i++) { + if(dojo.string.startsWith(str, arguments[i])) { + return true; // boolean + } + } + return false; // boolean +} + +dojo.string.has = function(/*string*/str /* , ... */) { +// summary: +// Returns true if 'str' contains any of the arguments 2 -> n + + for(var i = 1; i < arguments.length; i++) { + if(str.indexOf(arguments[i]) > -1){ + return true; // boolean + } + } + return false; // boolean +} + +dojo.string.normalizeNewlines = function(/*string*/text, /*string? (\n or \r)*/newlineChar){ +// summary: +// Changes occurences of CR and LF in text to CRLF, or if newlineChar is provided as '\n' or '\r', +// substitutes newlineChar for occurrences of CR/LF and CRLF + + if (newlineChar == "\n"){ + text = text.replace(/\r\n/g, "\n"); + text = text.replace(/\r/g, "\n"); + } else if (newlineChar == "\r"){ + text = text.replace(/\r\n/g, "\r"); + text = text.replace(/\n/g, "\r"); + }else{ + text = text.replace(/([^\r])\n/g, "$1\r\n").replace(/\r([^\n])/g, "\r\n$1"); + } + return text; // string +} + +dojo.string.splitEscaped = function(/*string*/str, /*string of length=1*/charac){ +// summary: +// Splits 'str' into an array separated by 'charac', but skips characters escaped with a backslash + + var components = []; + for (var i = 0, prevcomma = 0; i < str.length; i++){ + if (str.charAt(i) == '\\'){ i++; continue; } + if (str.charAt(i) == charac){ + components.push(str.substring(prevcomma, i)); + prevcomma = i + 1; + } + } + components.push(str.substr(prevcomma)); + return components; // array +} Index: openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/text/__package__.js =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/text/Attic/__package__.js,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/text/__package__.js 7 Nov 2006 02:38:04 -0000 1.1 @@ -0,0 +1,18 @@ +/* + Copyright (c) 2004-2006, The Dojo Foundation + All Rights Reserved. + + Licensed under the Academic Free License version 2.1 or above OR the + modified BSD license. For more information on Dojo licensing, see: + + http://dojotoolkit.org/community/licensing.shtml +*/ + +dojo.kwCompoundRequire({ + common: [ + "dojo.text.String", + "dojo.text.Builder" + ] +}); + +dojo.deprecated("dojo.text", "textDirectory moved to cal, text.String and text.Builder havne't been here for awhile", "0.5"); Index: openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/text/textDirectory.js =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/text/Attic/textDirectory.js,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/text/textDirectory.js 7 Nov 2006 02:38:04 -0000 1.1 @@ -0,0 +1,12 @@ +/* + Copyright (c) 2004-2006, The Dojo Foundation + All Rights Reserved. + + Licensed under the Academic Free License version 2.1 or above OR the + modified BSD license. For more information on Dojo licensing, see: + + http://dojotoolkit.org/community/licensing.shtml +*/ + +dojo.require("dojo.cal.textDirectory"); +dojo.deprecate("dojo.text.textDirectory", "use dojo.cal.textDirectory", "0.5"); Index: openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/undo/Manager.js =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/undo/Attic/Manager.js,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/undo/Manager.js 7 Nov 2006 02:38:04 -0000 1.1 @@ -0,0 +1,200 @@ +/* + Copyright (c) 2004-2006, The Dojo Foundation + All Rights Reserved. + + Licensed under the Academic Free License version 2.1 or above OR the + modified BSD license. For more information on Dojo licensing, see: + + http://dojotoolkit.org/community/licensing.shtml +*/ + +dojo.provide("dojo.undo.Manager"); +dojo.require("dojo.lang.common"); + +dojo.undo.Manager = function(parent) { + this.clear(); + this._parent = parent; +}; +dojo.extend(dojo.undo.Manager, { + _parent: null, + _undoStack: null, + _redoStack: null, + _currentManager: null, + + canUndo: false, + canRedo: false, + + isUndoing: false, + isRedoing: false, + + // these events allow you to hook in and update your code (UI?) as necessary + onUndo: function(manager, item) {}, + onRedo: function(manager, item) {}, + + // fired when you do *any* undo action, which means you'll have one for every item + // in a transaction. this is usually only useful for debugging + onUndoAny: function(manager, item) {}, + onRedoAny: function(manager, item) {}, + + _updateStatus: function() { + this.canUndo = this._undoStack.length > 0; + this.canRedo = this._redoStack.length > 0; + }, + + clear: function() { + this._undoStack = []; + this._redoStack = []; + this._currentManager = this; + + this.isUndoing = false; + this.isRedoing = false; + + this._updateStatus(); + }, + + undo: function() { + if(!this.canUndo) { return false; } + + this.endAllTransactions(); + + this.isUndoing = true; + var top = this._undoStack.pop(); + if(top instanceof dojo.undo.Manager){ + top.undoAll(); + }else{ + top.undo(); + } + if(top.redo){ + this._redoStack.push(top); + } + this.isUndoing = false; + + this._updateStatus(); + this.onUndo(this, top); + if(!(top instanceof dojo.undo.Manager)) { + this.getTop().onUndoAny(this, top); + } + return true; + }, + + redo: function() { + if(!this.canRedo){ return false; } + + this.isRedoing = true; + var top = this._redoStack.pop(); + if(top instanceof dojo.undo.Manager) { + top.redoAll(); + }else{ + top.redo(); + } + this._undoStack.push(top); + this.isRedoing = false; + + this._updateStatus(); + this.onRedo(this, top); + if(!(top instanceof dojo.undo.Manager)){ + this.getTop().onRedoAny(this, top); + } + return true; + }, + + undoAll: function() { + while(this._undoStack.length > 0) { + this.undo(); + } + }, + + redoAll: function() { + while(this._redoStack.length > 0) { + this.redo(); + } + }, + + push: function(undo, redo /* optional */, description /* optional */) { + if(!undo) { return; } + + if(this._currentManager == this) { + this._undoStack.push({ + undo: undo, + redo: redo, + description: description + }); + } else { + this._currentManager.push.apply(this._currentManager, arguments); + } + // adding a new undo-able item clears out the redo stack + this._redoStack = []; + this._updateStatus(); + }, + + concat: function(manager) { + if ( !manager ) { return; } + + if (this._currentManager == this ) { + for(var x=0; x < manager._undoStack.length; x++) { + this._undoStack.push(manager._undoStack[x]); + } + // adding a new undo-able item clears out the redo stack + if (manager._undoStack.length > 0) { + this._redoStack = []; + } + this._updateStatus(); + } else { + this._currentManager.concat.apply(this._currentManager, arguments); + } + }, + + beginTransaction: function(description /* optional */) { + if(this._currentManager == this) { + var mgr = new dojo.undo.Manager(this); + mgr.description = description ? description : ""; + this._undoStack.push(mgr); + this._currentManager = mgr; + return mgr; + } else { + //for nested transactions need to make sure the top level _currentManager is set + this._currentManager = this._currentManager.beginTransaction.apply(this._currentManager, arguments); + } + }, + + endTransaction: function(flatten /* optional */) { + if(this._currentManager == this) { + if(this._parent) { + this._parent._currentManager = this._parent; + // don't leave empty transactions hangin' around + if(this._undoStack.length == 0 || flatten) { + var idx = dojo.lang.find(this._parent._undoStack, this); + if (idx >= 0) { + this._parent._undoStack.splice(idx, 1); + //add the current transaction to parents undo stack + if (flatten) { + for(var x=0; x < this._undoStack.length; x++){ + this._parent._undoStack.splice(idx++, 0, this._undoStack[x]); + } + this._updateStatus(); + } + } + } + return this._parent; + } + } else { + //for nested transactions need to make sure the top level _currentManager is set + this._currentManager = this._currentManager.endTransaction.apply(this._currentManager, arguments); + } + }, + + endAllTransactions: function() { + while(this._currentManager != this) { + this.endTransaction(); + } + }, + + // find the top parent of an undo manager + getTop: function() { + if(this._parent) { + return this._parent.getTop(); + } else { + return this; + } + } +}); Index: openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/undo/__package__.js =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/undo/Attic/__package__.js,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/undo/__package__.js 7 Nov 2006 02:38:04 -0000 1.1 @@ -0,0 +1,12 @@ +/* + Copyright (c) 2004-2006, The Dojo Foundation + All Rights Reserved. + + Licensed under the Academic Free License version 2.1 or above OR the + modified BSD license. For more information on Dojo licensing, see: + + http://dojotoolkit.org/community/licensing.shtml +*/ + +dojo.require("dojo.undo.Manager"); +dojo.provide("dojo.undo.*"); Index: openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/undo/browser.js =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/undo/Attic/browser.js,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/undo/browser.js 7 Nov 2006 02:38:04 -0000 1.1 @@ -0,0 +1,309 @@ +/* + Copyright (c) 2004-2006, The Dojo Foundation + All Rights Reserved. + + Licensed under the Academic Free License version 2.1 or above OR the + modified BSD license. For more information on Dojo licensing, see: + + http://dojotoolkit.org/community/licensing.shtml +*/ + +dojo.provide("dojo.undo.browser"); +dojo.require("dojo.io.common"); + +try{ + if((!djConfig["preventBackButtonFix"])&&(!dojo.hostenv.post_load_)){ + document.write(""); + } +}catch(e){/* squelch */} + +if(dojo.render.html.opera){ + dojo.debug("Opera is not supported with dojo.undo.browser, so back/forward detection will not work."); +} + +/* NOTES: + * Safari 1.2: + * back button "works" fine, however it's not possible to actually + * DETECT that you've moved backwards by inspecting window.location. + * Unless there is some other means of locating. + * FIXME: perhaps we can poll on history.length? + * Safari 2.0.3+ (and probably 1.3.2+): + * works fine, except when changeUrl is used. When changeUrl is used, + * Safari jumps all the way back to whatever page was shown before + * the page that uses dojo.undo.browser support. + * IE 5.5 SP2: + * back button behavior is macro. It does not move back to the + * previous hash value, but to the last full page load. This suggests + * that the iframe is the correct way to capture the back button in + * these cases. + * Don't test this page using local disk for MSIE. MSIE will not create + * a history list for iframe_history.html if served from a file: URL. + * The XML served back from the XHR tests will also not be properly + * created if served from local disk. Serve the test pages from a web + * server to test in that browser. + * IE 6.0: + * same behavior as IE 5.5 SP2 + * Firefox 1.0+: + * the back button will return us to the previous hash on the same + * page, thereby not requiring an iframe hack, although we do then + * need to run a timer to detect inter-page movement. + */ + +dojo.undo.browser = { + initialHref: window.location.href, + initialHash: window.location.hash, + + moveForward: false, + historyStack: [], + forwardStack: [], + historyIframe: null, + bookmarkAnchor: null, + locationTimer: null, + + /** + * setInitialState sets the state object and back callback for the very first page that is loaded. + * It is recommended that you call this method as part of an event listener that is registered via + * dojo.addOnLoad(). + */ + setInitialState: function(args){ + this.initialState = this._createState(this.initialHref, args, this.initialHash); + }, + + //FIXME: Would like to support arbitrary back/forward jumps. Have to rework iframeLoaded among other things. + //FIXME: is there a slight race condition in moz using change URL with the timer check and when + // the hash gets set? I think I have seen a back/forward call in quick succession, but not consistent. + /** + * addToHistory takes one argument, and it is an object that defines the following functions: + * - To support getting back button notifications, the object argument should implement a + * function called either "back", "backButton", or "handle". The string "back" will be + * passed as the first and only argument to this callback. + * - To support getting forward button notifications, the object argument should implement a + * function called either "forward", "forwardButton", or "handle". The string "forward" will be + * passed as the first and only argument to this callback. + * - If you want the browser location string to change, define "changeUrl" on the object. If the + * value of "changeUrl" is true, then a unique number will be appended to the URL as a fragment + * identifier (http://some.domain.com/path#uniquenumber). If it is any other value that does + * not evaluate to false, that value will be used as the fragment identifier. For example, + * if changeUrl: 'page1', then the URL will look like: http://some.domain.com/path#page1 + * + * Full example: + * + * dojo.undo.browser.addToHistory({ + * back: function() { alert('back pressed'); }, + * forward: function() { alert('forward pressed'); }, + * changeUrl: true + * }); + */ + addToHistory: function(args){ + //If addToHistory is called, then that means we prune the + //forward stack -- the user went back, then wanted to + //start a new forward path. + this.forwardStack = []; + + var hash = null; + var url = null; + if(!this.historyIframe){ + this.historyIframe = window.frames["djhistory"]; + } + if(!this.bookmarkAnchor){ + this.bookmarkAnchor = document.createElement("a"); + dojo.body().appendChild(this.bookmarkAnchor); + this.bookmarkAnchor.style.display = "none"; + } + if(args["changeUrl"]){ + hash = "#"+ ((args["changeUrl"]!==true) ? args["changeUrl"] : (new Date()).getTime()); + + //If the current hash matches the new one, just replace the history object with + //this new one. It doesn't make sense to track different state objects for the same + //logical URL. This matches the browser behavior of only putting in one history + //item no matter how many times you click on the same #hash link, at least in Firefox + //and Safari, and there is no reliable way in those browsers to know if a #hash link + //has been clicked on multiple times. So making this the standard behavior in all browsers + //so that dojo.undo.browser's behavior is the same in all browsers. + if(this.historyStack.length == 0 && this.initialState.urlHash == hash){ + this.initialState = this._createState(url, args, hash); + return; + }else if(this.historyStack.length > 0 && this.historyStack[this.historyStack.length - 1].urlHash == hash){ + this.historyStack[this.historyStack.length - 1] = this._createState(url, args, hash); + return; + } + + this.changingUrl = true; + setTimeout("window.location.href = '"+hash+"'; dojo.undo.browser.changingUrl = false;", 1); + this.bookmarkAnchor.href = hash; + + if(dojo.render.html.ie){ + url = this._loadIframeHistory(); + + var oldCB = args["back"]||args["backButton"]||args["handle"]; + + //The function takes handleName as a parameter, in case the + //callback we are overriding was "handle". In that case, + //we will need to pass the handle name to handle. + var tcb = function(handleName){ + if(window.location.hash != ""){ + setTimeout("window.location.href = '"+hash+"';", 1); + } + //Use apply to set "this" to args, and to try to avoid memory leaks. + oldCB.apply(this, [handleName]); + } + + //Set interceptor function in the right place. + if(args["back"]){ + args.back = tcb; + }else if(args["backButton"]){ + args.backButton = tcb; + }else if(args["handle"]){ + args.handle = tcb; + } + + var oldFW = args["forward"]||args["forwardButton"]||args["handle"]; + + //The function takes handleName as a parameter, in case the + //callback we are overriding was "handle". In that case, + //we will need to pass the handle name to handle. + var tfw = function(handleName){ + if(window.location.hash != ""){ + window.location.href = hash; + } + if(oldFW){ // we might not actually have one + //Use apply to set "this" to args, and to try to avoid memory leaks. + oldFW.apply(this, [handleName]); + } + } + + //Set interceptor function in the right place. + if(args["forward"]){ + args.forward = tfw; + }else if(args["forwardButton"]){ + args.forwardButton = tfw; + }else if(args["handle"]){ + args.handle = tfw; + } + + }else if(dojo.render.html.moz){ + // start the timer + if(!this.locationTimer){ + this.locationTimer = setInterval("dojo.undo.browser.checkLocation();", 200); + } + } + }else{ + url = this._loadIframeHistory(); + } + + this.historyStack.push(this._createState(url, args, hash)); + }, + + checkLocation: function(){ + if (!this.changingUrl){ + var hsl = this.historyStack.length; + + if((window.location.hash == this.initialHash||window.location.href == this.initialHref)&&(hsl == 1)){ + // FIXME: could this ever be a forward button? + // we can't clear it because we still need to check for forwards. Ugg. + // clearInterval(this.locationTimer); + this.handleBackButton(); + return; + } + + // first check to see if we could have gone forward. We always halt on + // a no-hash item. + if(this.forwardStack.length > 0){ + if(this.forwardStack[this.forwardStack.length-1].urlHash == window.location.hash){ + this.handleForwardButton(); + return; + } + } + + // ok, that didn't work, try someplace back in the history stack + if((hsl >= 2)&&(this.historyStack[hsl-2])){ + if(this.historyStack[hsl-2].urlHash==window.location.hash){ + this.handleBackButton(); + return; + } + } + } + }, + + iframeLoaded: function(evt, ifrLoc){ + if(!dojo.render.html.opera){ + var query = this._getUrlQuery(ifrLoc.href); + if(query == null){ + // alert("iframeLoaded"); + // we hit the end of the history, so we should go back + if(this.historyStack.length == 1){ + this.handleBackButton(); + } + return; + } + if(this.moveForward){ + // we were expecting it, so it's not either a forward or backward movement + this.moveForward = false; + return; + } + + //Check the back stack first, since it is more likely. + //Note that only one step back or forward is supported. + if(this.historyStack.length >= 2 && query == this._getUrlQuery(this.historyStack[this.historyStack.length-2].url)){ + this.handleBackButton(); + } + else if(this.forwardStack.length > 0 && query == this._getUrlQuery(this.forwardStack[this.forwardStack.length-1].url)){ + this.handleForwardButton(); + } + } + }, + + handleBackButton: function(){ + //The "current" page is always at the top of the history stack. + var current = this.historyStack.pop(); + if(!current){ return; } + var last = this.historyStack[this.historyStack.length-1]; + if(!last && this.historyStack.length == 0){ + last = this.initialState; + } + if (last){ + if(last.kwArgs["back"]){ + last.kwArgs["back"](); + }else if(last.kwArgs["backButton"]){ + last.kwArgs["backButton"](); + }else if(last.kwArgs["handle"]){ + last.kwArgs.handle("back"); + } + } + this.forwardStack.push(current); + }, + + handleForwardButton: function(){ + var last = this.forwardStack.pop(); + if(!last){ return; } + if(last.kwArgs["forward"]){ + last.kwArgs.forward(); + }else if(last.kwArgs["forwardButton"]){ + last.kwArgs.forwardButton(); + }else if(last.kwArgs["handle"]){ + last.kwArgs.handle("forward"); + } + this.historyStack.push(last); + }, + + _createState: function(url, args, hash){ + return {"url": url, "kwArgs": args, "urlHash": hash}; + }, + + _getUrlQuery: function(url){ + var segments = url.split("?"); + if (segments.length < 2){ + return null; + } + else{ + return segments[1]; + } + }, + + _loadIframeHistory: function(){ + var url = dojo.hostenv.getBaseScriptUri()+"iframe_history.html?"+(new Date()).getTime(); + this.moveForward = true; + dojo.io.setIFrameSrc(this.historyIframe, url, false); + return url; + } +} Index: openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/uri/Uri.js =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/uri/Attic/Uri.js,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/uri/Uri.js 7 Nov 2006 02:38:05 -0000 1.1 @@ -0,0 +1,110 @@ +/* + Copyright (c) 2004-2006, The Dojo Foundation + All Rights Reserved. + + Licensed under the Academic Free License version 2.1 or above OR the + modified BSD license. For more information on Dojo licensing, see: + + http://dojotoolkit.org/community/licensing.shtml +*/ + +dojo.provide("dojo.uri.Uri"); + +dojo.uri = new function() { + this.dojoUri = function (/*dojo.uri.Uri||String*/uri) { + // summary: returns a Uri object resolved relative to the dojo root + return new dojo.uri.Uri(dojo.hostenv.getBaseScriptUri(), uri); + } + + this.moduleUri = function(/*String*/module, /*dojo.uri.Uri||String*/uri){ + // summary: returns a Uri object relative to a (top-level) module + // description: Examples: dojo.uri.moduleUri("dojo","Editor"), or dojo.uri.moduleUri("acme","someWidget") + var loc = dojo.hostenv.getModulePrefix(module); + if(!loc){return null;} + if(loc.lastIndexOf("/") != loc.length-1){loc += "/";} + return new dojo.uri.Uri(dojo.hostenv.getBaseScriptUri()+loc,uri); + } + + this.Uri = function (/*dojo.uri.Uri||String...*/) { + // summary: Constructor to create an object representing a URI. + // description: + // Each argument is evaluated in order relative to the next until + // a canonical uri is produced. To get an absolute Uri relative + // to the current document use + // new dojo.uri.Uri(document.baseURI, uri) + + // TODO: support for IPv6, see RFC 2732 + + // resolve uri components relative to each other + var uri = arguments[0]; + for (var i = 1; i < arguments.length; i++) { + if(!arguments[i]) { continue; } + + // Safari doesn't support this.constructor so we have to be explicit + var relobj = new dojo.uri.Uri(arguments[i].toString()); + var uriobj = new dojo.uri.Uri(uri.toString()); + + if ((relobj.path=="")&&(relobj.scheme==null)&&(relobj.authority==null)&&(relobj.query==null)) { + if (relobj.fragment != null) { uriobj.fragment = relobj.fragment; } + relobj = uriobj; + } else if (relobj.scheme == null) { + relobj.scheme = uriobj.scheme; + + if (relobj.authority == null) { + relobj.authority = uriobj.authority; + + if (relobj.path.charAt(0) != "/") { + var path = uriobj.path.substring(0, + uriobj.path.lastIndexOf("/") + 1) + relobj.path; + + var segs = path.split("/"); + for (var j = 0; j < segs.length; j++) { + if (segs[j] == ".") { + if (j == segs.length - 1) { segs[j] = ""; } + else { segs.splice(j, 1); j--; } + } else if (j > 0 && !(j == 1 && segs[0] == "") && + segs[j] == ".." && segs[j-1] != "..") { + + if (j == segs.length - 1) { segs.splice(j, 1); segs[j - 1] = ""; } + else { segs.splice(j - 1, 2); j -= 2; } + } + } + relobj.path = segs.join("/"); + } + } + } + + uri = ""; + if (relobj.scheme != null) { uri += relobj.scheme + ":"; } + if (relobj.authority != null) { uri += "//" + relobj.authority; } + uri += relobj.path; + if (relobj.query != null) { uri += "?" + relobj.query; } + if (relobj.fragment != null) { uri += "#" + relobj.fragment; } + } + + this.uri = uri.toString(); + + // break the uri into its main components + var regexp = "^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?$"; + var r = this.uri.match(new RegExp(regexp)); + + this.scheme = r[2] || (r[1] ? "" : null); + this.authority = r[4] || (r[3] ? "" : null); + this.path = r[5]; // can never be undefined + this.query = r[7] || (r[6] ? "" : null); + this.fragment = r[9] || (r[8] ? "" : null); + + if (this.authority != null) { + // server based naming authority + regexp = "^((([^:]+:)?([^@]+))@)?([^:]*)(:([0-9]+))?$"; + r = this.authority.match(new RegExp(regexp)); + + this.user = r[3] || null; + this.password = r[4] || null; + this.host = r[5]; + this.port = r[7] || null; + } + + this.toString = function(){ return this.uri; } + } +}; Index: openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/uri/__package__.js =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/uri/Attic/__package__.js,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/uri/__package__.js 7 Nov 2006 02:38:05 -0000 1.1 @@ -0,0 +1,14 @@ +/* + Copyright (c) 2004-2006, The Dojo Foundation + All Rights Reserved. + + Licensed under the Academic Free License version 2.1 or above OR the + modified BSD license. For more information on Dojo licensing, see: + + http://dojotoolkit.org/community/licensing.shtml +*/ + +dojo.kwCompoundRequire({ + common: [["dojo.uri.Uri", false, false]] +}); +dojo.provide("dojo.uri.*"); Index: openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/uuid/LightweightGenerator.js =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/uuid/Attic/LightweightGenerator.js,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/uuid/LightweightGenerator.js 7 Nov 2006 02:38:05 -0000 1.1 @@ -0,0 +1,73 @@ +/* + Copyright (c) 2004-2006, The Dojo Foundation + All Rights Reserved. + + Licensed under the Academic Free License version 2.1 or above OR the + modified BSD license. For more information on Dojo licensing, see: + + http://dojotoolkit.org/community/licensing.shtml +*/ + +dojo.provide("dojo.uuid.LightweightGenerator"); + +/* + * summary: + * The LightweightGenerator is intended to be small and fast, + * but not necessarily good. + * + * description: + * Small: The LightweightGenerator has a small footprint. + * Once comments are stripped, it's only about 25 lines of + * code, and it doesn't dojo.require() any other packages. + * + * Fast: The LightweightGenerator can generate lots of new + * UUIDs fairly quickly (at least, more quickly than the other + * dojo UUID generators). + * + * Not necessarily good: We use Math.random() as our source + * of randomness, which may or may not provide much randomness. + */ + +dojo.uuid.LightweightGenerator = new function() { + var HEX_RADIX = 16; + + function _generateRandomEightCharacterHexString() { + // Make random32bitNumber be a randomly generated floating point number + // between 0 and (4,294,967,296 - 1), inclusive. + var random32bitNumber = Math.floor( (Math.random() % 1) * Math.pow(2, 32) ); + var eightCharacterHexString = random32bitNumber.toString(HEX_RADIX); + while (eightCharacterHexString.length < 8) { + eightCharacterHexString = "0" + eightCharacterHexString; + } + return eightCharacterHexString; // for example: "3B12F1DF" + } + + this.generate = function(/* constructor? */ returnType) { + // summary: + // This function generates random UUIDs, meaning "version 4" UUIDs. + // description: + // A typical generated value would be something like this: + // "3b12f1df-5232-4804-897e-917bf397618a" + // returnType: The type of object to return. Usually String or dojo.uuid.Uuid + + // examples: + // var string = dojo.uuid.LightweightGenerator.generate(); + // var string = dojo.uuid.LightweightGenerator.generate(String); + // var uuid = dojo.uuid.LightweightGenerator.generate(dojo.uuid.Uuid); + var hyphen = "-"; + var versionCodeForRandomlyGeneratedUuids = "4"; // 8 == binary2hex("0100") + var variantCodeForDCEUuids = "8"; // 8 == binary2hex("1000") + var a = _generateRandomEightCharacterHexString(); + var b = _generateRandomEightCharacterHexString(); + b = b.substring(0, 4) + hyphen + versionCodeForRandomlyGeneratedUuids + b.substring(5, 8); + var c = _generateRandomEightCharacterHexString(); + c = variantCodeForDCEUuids + c.substring(1, 4) + hyphen + c.substring(4, 8); + var d = _generateRandomEightCharacterHexString(); + var returnValue = a + hyphen + b + hyphen + c + d; + returnValue = returnValue.toLowerCase(); + if (returnType && (returnType != String)) { + returnValue = new returnType(returnValue); + } + return returnValue; + }; +}(); Index: openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/uuid/NameBasedGenerator.js =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/uuid/Attic/NameBasedGenerator.js,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/uuid/NameBasedGenerator.js 7 Nov 2006 02:38:05 -0000 1.1 @@ -0,0 +1,38 @@ +/* + Copyright (c) 2004-2006, The Dojo Foundation + All Rights Reserved. + + Licensed under the Academic Free License version 2.1 or above OR the + modified BSD license. For more information on Dojo licensing, see: + + http://dojotoolkit.org/community/licensing.shtml +*/ + +dojo.provide("dojo.uuid.NameBasedGenerator"); + +dojo.uuid.NameBasedGenerator = new function() { + this.generate = function(/* constructor? */ returnType) { + // summary: + // This function generates name-based UUIDs, meaning "version 3" + // and "version 5" UUIDs. + // returnType: The type of object to return. Usually String or dojo.uuid.Uuid + + // examples: + // var string = dojo.uuid.NameBasedGenerator.generate(); + // var string = dojo.uuid.NameBasedGenerator.generate(String); + // var uuid = dojo.uuid.NameBasedGenerator.generate(dojo.uuid.Uuid); + + dojo.unimplemented('dojo.uuid.NameBasedGenerator.generate'); + + // FIXME: + // For an algorithm to generate name-based UUIDs, + // see sections 4.3 of RFC 4122: + // http://www.ietf.org/rfc/rfc4122.txt + + var returnValue = "00000000-0000-0000-0000-000000000000"; // FIXME + if (returnType && (returnType != String)) { + returnValue = new returnType(returnValue); + } + return returnValue; // object + }; +}(); \ No newline at end of file Index: openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/uuid/NilGenerator.js =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/uuid/Attic/NilGenerator.js,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/uuid/NilGenerator.js 7 Nov 2006 02:38:05 -0000 1.1 @@ -0,0 +1,32 @@ +/* + Copyright (c) 2004-2006, The Dojo Foundation + All Rights Reserved. + + Licensed under the Academic Free License version 2.1 or above OR the + modified BSD license. For more information on Dojo licensing, see: + + http://dojotoolkit.org/community/licensing.shtml +*/ + +dojo.provide("dojo.uuid.NilGenerator"); + +dojo.uuid.NilGenerator = new function() { + this.generate = function(/* constructor? */ returnType) { + // summary: + // This function returns the Nil UUID: "00000000-0000-0000-0000-000000000000". + // description: + // The Nil UUID is described in section 4.1.7 of + // RFC 4122: http://www.ietf.org/rfc/rfc4122.txt + // returnType: The type of object to return. Usually String or dojo.uuid.Uuid + + // examples: + // var string = dojo.uuid.NilGenerator.generate(); + // var string = dojo.uuid.NilGenerator.generate(String); + // var uuid = dojo.uuid.NilGenerator.generate(dojo.uuid.Uuid); + var returnValue = "00000000-0000-0000-0000-000000000000"; + if (returnType && (returnType != String)) { + returnValue = new returnType(returnValue); + } + return returnValue; // object + }; +}(); \ No newline at end of file Index: openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/uuid/RandomGenerator.js =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/uuid/Attic/RandomGenerator.js,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/uuid/RandomGenerator.js 7 Nov 2006 02:38:05 -0000 1.1 @@ -0,0 +1,39 @@ +/* + Copyright (c) 2004-2006, The Dojo Foundation + All Rights Reserved. + + Licensed under the Academic Free License version 2.1 or above OR the + modified BSD license. For more information on Dojo licensing, see: + + http://dojotoolkit.org/community/licensing.shtml +*/ + +dojo.provide("dojo.uuid.RandomGenerator"); + +dojo.uuid.RandomGenerator = new function() { + this.generate = function(/* constructor? */ returnType) { + // summary: + // This function generates random UUIDs, meaning "version 4" UUIDs. + // description: + // A typical generated value would be something like this: + // "3b12f1df-5232-4804-897e-917bf397618a" + // returnType: The type of object to return. Usually String or dojo.uuid.Uuid + + // examples: + // var string = dojo.uuid.RandomGenerator.generate(); + // var string = dojo.uuid.RandomGenerator.generate(String); + // var uuid = dojo.uuid.RandomGenerator.generate(dojo.uuid.Uuid); + + dojo.unimplemented('dojo.uuid.RandomGenerator.generate'); + // FIXME: + // For an algorithm to generate a random UUID, see + // sections 4.4 and 4.5 of RFC 4122: + // http://www.ietf.org/rfc/rfc4122.txt + + var returnValue = "00000000-0000-0000-0000-000000000000"; // FIXME + if (returnType && (returnType != String)) { + returnValue = new returnType(returnValue); + } + return returnValue; // object + }; +}(); Index: openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/uuid/TimeBasedGenerator.js =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/uuid/Attic/TimeBasedGenerator.js,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/uuid/TimeBasedGenerator.js 7 Nov 2006 02:38:05 -0000 1.1 @@ -0,0 +1,355 @@ +/* + Copyright (c) 2004-2006, The Dojo Foundation + All Rights Reserved. + + Licensed under the Academic Free License version 2.1 or above OR the + modified BSD license. For more information on Dojo licensing, see: + + http://dojotoolkit.org/community/licensing.shtml +*/ + +dojo.provide("dojo.uuid.TimeBasedGenerator"); +dojo.require("dojo.lang.common"); +dojo.require("dojo.lang.type"); +dojo.require("dojo.lang.assert"); + +dojo.uuid.TimeBasedGenerator = new function() { + + // -------------------------------------------------- + // Public constants: + // Number of hours between October 15, 1582 and January 1, 1970: + this.GREGORIAN_CHANGE_OFFSET_IN_HOURS = 3394248; + // Number of seconds between October 15, 1582 and January 1, 1970: + // this.GREGORIAN_CHANGE_OFFSET_IN_SECONDS = 12219292800; + + // -------------------------------------------------- + // Private variables: + var _uuidPseudoNodeString = null; + var _uuidClockSeqString = null; + var _dateValueOfPreviousUuid = null; + var _nextIntraMillisecondIncrement = 0; + var _cachedMillisecondsBetween1582and1970 = null; + var _cachedHundredNanosecondIntervalsPerMillisecond = null; + var _uniformNode = null; + + // -------------------------------------------------- + // Private constants: + var HEX_RADIX = 16; + + function _carry(/* array */ arrayA) { + // summary: + // Given an array which holds a 64-bit number broken into 4 16-bit + // elements, this method carries any excess bits (greater than 16-bits) + // from each array element into the next. + // arrayA: An array with 4 elements, each of which is a 16-bit number. + arrayA[2] += arrayA[3] >>> 16; + arrayA[3] &= 0xFFFF; + arrayA[1] += arrayA[2] >>> 16; + arrayA[2] &= 0xFFFF; + arrayA[0] += arrayA[1] >>> 16; + arrayA[1] &= 0xFFFF; + dojo.lang.assert((arrayA[0] >>> 16) === 0); + } + + function _get64bitArrayFromFloat(/* float */ x) { + // summary: + // Given a floating point number, this method returns an array which + // holds a 64-bit number broken into 4 16-bit elements. + var result = new Array(0, 0, 0, 0); + result[3] = x % 0x10000; + x -= result[3]; + x /= 0x10000; + result[2] = x % 0x10000; + x -= result[2]; + x /= 0x10000; + result[1] = x % 0x10000; + x -= result[1]; + x /= 0x10000; + result[0] = x; + return result; // Array with 4 elements, each of which is a 16-bit number. + } + + function _addTwo64bitArrays(/* array */ arrayA, /* array */ arrayB) { + // summary: + // Takes two arrays, each of which holds a 64-bit number broken into 4 + // 16-bit elements, and returns a new array that holds a 64-bit number + // that is the sum of the two original numbers. + // arrayA: An array with 4 elements, each of which is a 16-bit number. + // arrayB: An array with 4 elements, each of which is a 16-bit number. + dojo.lang.assertType(arrayA, Array); + dojo.lang.assertType(arrayB, Array); + dojo.lang.assert(arrayA.length == 4); + dojo.lang.assert(arrayB.length == 4); + + var result = new Array(0, 0, 0, 0); + result[3] = arrayA[3] + arrayB[3]; + result[2] = arrayA[2] + arrayB[2]; + result[1] = arrayA[1] + arrayB[1]; + result[0] = arrayA[0] + arrayB[0]; + _carry(result); + return result; // Array with 4 elements, each of which is a 16-bit number. + } + + function _multiplyTwo64bitArrays(/* array */ arrayA, /* array */ arrayB) { + // summary: + // Takes two arrays, each of which holds a 64-bit number broken into 4 + // 16-bit elements, and returns a new array that holds a 64-bit number + // that is the product of the two original numbers. + // arrayA: An array with 4 elements, each of which is a 16-bit number. + // arrayB: An array with 4 elements, each of which is a 16-bit number. + dojo.lang.assertType(arrayA, Array); + dojo.lang.assertType(arrayB, Array); + dojo.lang.assert(arrayA.length == 4); + dojo.lang.assert(arrayB.length == 4); + + var overflow = false; + if (arrayA[0] * arrayB[0] !== 0) { overflow = true; } + if (arrayA[0] * arrayB[1] !== 0) { overflow = true; } + if (arrayA[0] * arrayB[2] !== 0) { overflow = true; } + if (arrayA[1] * arrayB[0] !== 0) { overflow = true; } + if (arrayA[1] * arrayB[1] !== 0) { overflow = true; } + if (arrayA[2] * arrayB[0] !== 0) { overflow = true; } + dojo.lang.assert(!overflow); + + var result = new Array(0, 0, 0, 0); + result[0] += arrayA[0] * arrayB[3]; + _carry(result); + result[0] += arrayA[1] * arrayB[2]; + _carry(result); + result[0] += arrayA[2] * arrayB[1]; + _carry(result); + result[0] += arrayA[3] * arrayB[0]; + _carry(result); + result[1] += arrayA[1] * arrayB[3]; + _carry(result); + result[1] += arrayA[2] * arrayB[2]; + _carry(result); + result[1] += arrayA[3] * arrayB[1]; + _carry(result); + result[2] += arrayA[2] * arrayB[3]; + _carry(result); + result[2] += arrayA[3] * arrayB[2]; + _carry(result); + result[3] += arrayA[3] * arrayB[3]; + _carry(result); + return result; // Array with 4 elements, each of which is a 16-bit number. + } + + function _padWithLeadingZeros(/* string */ string, /* int */ desiredLength) { + // summary: + // Pads a string with leading zeros and returns the result. + // string: A string to add padding to. + // desiredLength: The number of characters the return string should have. + + // examples: + // result = _padWithLeadingZeros("abc", 6); + // dojo.lang.assert(result == "000abc"); + while (string.length < desiredLength) { + string = "0" + string; + } + return string; // string + } + + function _generateRandomEightCharacterHexString() { + // summary: + // Returns a randomly generated 8-character string of hex digits. + + // FIXME: This probably isn't a very high quality random number. + + // Make random32bitNumber be a randomly generated floating point number + // between 0 and (4,294,967,296 - 1), inclusive. + var random32bitNumber = Math.floor( (Math.random() % 1) * Math.pow(2, 32) ); + + var eightCharacterString = random32bitNumber.toString(HEX_RADIX); + while (eightCharacterString.length < 8) { + eightCharacterString = "0" + eightCharacterString; + } + return eightCharacterString; // String (an 8-character hex string) + } + + function _generateUuidString(/* string? */ node) { + // summary: + // Generates a time-based UUID, meaning a version 1 UUID. + // description: + // JavaScript code running in a browser doesn't have access to the + // IEEE 802.3 address of the computer, so if a node value isn't + // supplied, we generate a random pseudonode value instead. + // node: An optional 12-character string to use as the node in the new UUID. + dojo.lang.assertType(node, String, {optional: true}); + if (node) { + dojo.lang.assert(node.length == 12); + } else { + if (_uniformNode) { + node = _uniformNode; + } else { + if (!_uuidPseudoNodeString) { + var pseudoNodeIndicatorBit = 0x8000; + var random15bitNumber = Math.floor( (Math.random() % 1) * Math.pow(2, 15) ); + var leftmost4HexCharacters = (pseudoNodeIndicatorBit | random15bitNumber).toString(HEX_RADIX); + _uuidPseudoNodeString = leftmost4HexCharacters + _generateRandomEightCharacterHexString(); + } + node = _uuidPseudoNodeString; + } + } + if (!_uuidClockSeqString) { + var variantCodeForDCEUuids = 0x8000; // 10--------------, i.e. uses only first two of 16 bits. + var random14bitNumber = Math.floor( (Math.random() % 1) * Math.pow(2, 14) ); + _uuidClockSeqString = (variantCodeForDCEUuids | random14bitNumber).toString(HEX_RADIX); + } + + // Maybe we should think about trying to make the code more readable to + // newcomers by creating a class called "WholeNumber" that encapsulates + // the methods and data structures for working with these arrays that + // hold 4 16-bit numbers? And then these variables below have names + // like "wholeSecondsPerHour" rather than "arraySecondsPerHour"? + var now = new Date(); + var millisecondsSince1970 = now.valueOf(); // milliseconds since midnight 01 January, 1970 UTC. + var nowArray = _get64bitArrayFromFloat(millisecondsSince1970); + if (!_cachedMillisecondsBetween1582and1970) { + var arraySecondsPerHour = _get64bitArrayFromFloat(60 * 60); + var arrayHoursBetween1582and1970 = _get64bitArrayFromFloat(dojo.uuid.TimeBasedGenerator.GREGORIAN_CHANGE_OFFSET_IN_HOURS); + var arraySecondsBetween1582and1970 = _multiplyTwo64bitArrays(arrayHoursBetween1582and1970, arraySecondsPerHour); + var arrayMillisecondsPerSecond = _get64bitArrayFromFloat(1000); + _cachedMillisecondsBetween1582and1970 = _multiplyTwo64bitArrays(arraySecondsBetween1582and1970, arrayMillisecondsPerSecond); + _cachedHundredNanosecondIntervalsPerMillisecond = _get64bitArrayFromFloat(10000); + } + var arrayMillisecondsSince1970 = nowArray; + var arrayMillisecondsSince1582 = _addTwo64bitArrays(_cachedMillisecondsBetween1582and1970, arrayMillisecondsSince1970); + var arrayHundredNanosecondIntervalsSince1582 = _multiplyTwo64bitArrays(arrayMillisecondsSince1582, _cachedHundredNanosecondIntervalsPerMillisecond); + + if (now.valueOf() == _dateValueOfPreviousUuid) { + arrayHundredNanosecondIntervalsSince1582[3] += _nextIntraMillisecondIncrement; + _carry(arrayHundredNanosecondIntervalsSince1582); + _nextIntraMillisecondIncrement += 1; + if (_nextIntraMillisecondIncrement == 10000) { + // If we've gotten to here, it means we've already generated 10,000 + // UUIDs in this single millisecond, which is the most that the UUID + // timestamp field allows for. So now we'll just sit here and wait + // for a fraction of a millisecond, so as to ensure that the next + // time this method is called there will be a different millisecond + // value in the timestamp field. + while (now.valueOf() == _dateValueOfPreviousUuid) { + now = new Date(); + } + } + } else { + _dateValueOfPreviousUuid = now.valueOf(); + _nextIntraMillisecondIncrement = 1; + } + + var hexTimeLowLeftHalf = arrayHundredNanosecondIntervalsSince1582[2].toString(HEX_RADIX); + var hexTimeLowRightHalf = arrayHundredNanosecondIntervalsSince1582[3].toString(HEX_RADIX); + var hexTimeLow = _padWithLeadingZeros(hexTimeLowLeftHalf, 4) + _padWithLeadingZeros(hexTimeLowRightHalf, 4); + var hexTimeMid = arrayHundredNanosecondIntervalsSince1582[1].toString(HEX_RADIX); + hexTimeMid = _padWithLeadingZeros(hexTimeMid, 4); + var hexTimeHigh = arrayHundredNanosecondIntervalsSince1582[0].toString(HEX_RADIX); + hexTimeHigh = _padWithLeadingZeros(hexTimeHigh, 3); + var hyphen = "-"; + var versionCodeForTimeBasedUuids = "1"; // binary2hex("0001") + var resultUuid = hexTimeLow + hyphen + hexTimeMid + hyphen + + versionCodeForTimeBasedUuids + hexTimeHigh + hyphen + + _uuidClockSeqString + hyphen + node; + resultUuid = resultUuid.toLowerCase(); + return resultUuid; // String (a 36 character string, which will look something like "b4308fb0-86cd-11da-a72b-0800200c9a66") + } + + this.setNode = function(/* string? */ node) { + // summary: + // Sets the 'node' value that will be included in generated UUIDs. + // node: A 12-character hex string representing a pseudoNode or hardwareNode. + dojo.lang.assert((node === null) || (node.length == 12)); + _uniformNode = node; + }; + + this.getNode = function() { + // summary: + // Returns the 'node' value that will be included in generated UUIDs. + return _uniformNode; // String (a 12-character hex string representing a pseudoNode or hardwareNode) + }; + + this.generate = function(/* misc? */ input) { + // summary: + // This function generates time-based UUIDs, meaning "version 1" UUIDs. + // description: + // For more info, see + // http://www.webdav.org/specs/draft-leach-uuids-guids-01.txt + // http://www.infonuovo.com/dma/csdocs/sketch/instidid.htm + // http://kruithof.xs4all.nl/uuid/uuidgen + // http://www.opengroup.org/onlinepubs/009629399/apdxa.htm#tagcjh_20 + // http://jakarta.apache.org/commons/sandbox/id/apidocs/org/apache/commons/id/uuid/clock/Clock.html + + // examples: + // var generate = dojo.uuid.TimeBasedGenerator.generate; + // var uuid; // an instance of dojo.uuid.Uuid + // var string; // a simple string literal + // string = generate(); + // string = generate(String); + // uuid = generate(dojo.uuid.Uuid); + // string = generate("017bf397618a"); + // string = generate({node: "017bf397618a"}); // hardwareNode + // string = generate({node: "f17bf397618a"}); // pseudoNode + // string = generate({hardwareNode: "017bf397618a"}); + // string = generate({pseudoNode: "f17bf397618a"}); + // string = generate({node: "017bf397618a", returnType: String}); + // uuid = generate({node: "017bf397618a", returnType: dojo.uuid.Uuid}); + // dojo.uuid.TimeBasedGenerator.setNode("017bf397618a"); + // string = generate(); // the generated UUID has node == "017bf397618a" + // uuid = generate(dojo.uuid.Uuid); // the generated UUID has node == "017bf397618a" + var nodeString = null; + var returnType = null; + + if (input) { + if (dojo.lang.isObject(input) && !dojo.lang.isBuiltIn(input)) { + // input: object {node: string, hardwareNode: string, pseudoNode: string} + // node: A 12-character hex string representing a pseudoNode or hardwareNode. + // hardwareNode: A 12-character hex string containing an IEEE 802.3 network node identificator. + // pseudoNode: A 12-character hex string representing a pseudoNode. + var namedParameters = input; + dojo.lang.assertValidKeywords(namedParameters, ["node", "hardwareNode", "pseudoNode", "returnType"]); + var node = namedParameters["node"]; + var hardwareNode = namedParameters["hardwareNode"]; + var pseudoNode = namedParameters["pseudoNode"]; + nodeString = (node || pseudoNode || hardwareNode); + if (nodeString) { + var firstCharacter = nodeString.charAt(0); + var firstDigit = parseInt(firstCharacter, HEX_RADIX); + if (hardwareNode) { + dojo.lang.assert((firstDigit >= 0x0) && (firstDigit <= 0x7)); + } + if (pseudoNode) { + dojo.lang.assert((firstDigit >= 0x8) && (firstDigit <= 0xF)); + } + } + returnType = namedParameters["returnType"]; + dojo.lang.assertType(returnType, Function, {optional: true}); + } else { + if (dojo.lang.isString(input)) { + // input: string A 12-character hex string representing a pseudoNode or hardwareNode. + nodeString = input; + returnType = null; + } else { + if (dojo.lang.isFunction(input)) { + // input: constructor The type of object to return. Usually String or dojo.uuid.Uuid + nodeString = null; + returnType = input; + } + } + } + if (nodeString) { + dojo.lang.assert(nodeString.length == 12); + var integer = parseInt(nodeString, HEX_RADIX); + dojo.lang.assert(isFinite(integer)); + } + dojo.lang.assertType(returnType, Function, {optional: true}); + } + + var uuidString = _generateUuidString(nodeString); + var returnValue; + if (returnType && (returnType != String)) { + returnValue = new returnType(uuidString); + } else { + returnValue = uuidString; + } + return returnValue; // object + }; +}(); Index: openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/uuid/Uuid.js =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/uuid/Attic/Uuid.js,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/uuid/Uuid.js 7 Nov 2006 02:38:05 -0000 1.1 @@ -0,0 +1,379 @@ +/* + Copyright (c) 2004-2006, The Dojo Foundation + All Rights Reserved. + + Licensed under the Academic Free License version 2.1 or above OR the + modified BSD license. For more information on Dojo licensing, see: + + http://dojotoolkit.org/community/licensing.shtml +*/ + +dojo.provide("dojo.uuid.Uuid"); +dojo.require("dojo.lang.common"); +dojo.require("dojo.lang.assert"); + +dojo.uuid.Uuid = function(/* string || generator */ input) { + // summary: + // This is the constructor for the Uuid class. The Uuid class offers + // methods for inspecting existing UUIDs. + + // examples: + // var uuid; + // uuid = new dojo.uuid.Uuid("3b12f1df-5232-4804-897e-917bf397618a"); + // uuid = new dojo.uuid.Uuid(); // "00000000-0000-0000-0000-000000000000" + // uuid = new dojo.uuid.Uuid(dojo.uuid.RandomGenerator); + // uuid = new dojo.uuid.Uuid(dojo.uuid.TimeBasedGenerator); + // dojo.uuid.Uuid.setGenerator(dojo.uuid.RandomGenerator); + // uuid = new dojo.uuid.Uuid(); + // dojo.lang.assert(!uuid.isEqual(dojo.uuid.Uuid.NIL_UUID)); + this._uuidString = dojo.uuid.Uuid.NIL_UUID; + if (input) { + if (dojo.lang.isString(input)) { + // input: string? A 36-character string that conforms to the UUID spec. + this._uuidString = input.toLowerCase(); + dojo.lang.assert(this.isValid()); + } else { + if (dojo.lang.isObject(input) && input.generate) { + // input: generator A UUID generator, such as dojo.uuid.TimeBasedGenerator. + var generator = input; + this._uuidString = generator.generate(); + dojo.lang.assert(this.isValid()); + } else { + // we got passed something other than a string + dojo.lang.assert(false, "The dojo.uuid.Uuid() constructor must be initializated with a UUID string."); + } + } + } else { + var ourGenerator = dojo.uuid.Uuid.getGenerator(); + if (ourGenerator) { + this._uuidString = ourGenerator.generate(); + dojo.lang.assert(this.isValid()); + } + } +}; + +// ------------------------------------------------------------------- +// Public constants +// ------------------------------------------------------------------- +dojo.uuid.Uuid.NIL_UUID = "00000000-0000-0000-0000-000000000000"; +dojo.uuid.Uuid.Version = { + UNKNOWN: 0, + TIME_BASED: 1, + DCE_SECURITY: 2, + NAME_BASED_MD5: 3, + RANDOM: 4, + NAME_BASED_SHA1: 5 }; +dojo.uuid.Uuid.Variant = { + NCS: "0", + DCE: "10", + MICROSOFT: "110", + UNKNOWN: "111" }; +dojo.uuid.Uuid.HEX_RADIX = 16; + +dojo.uuid.Uuid.compare = function(/* dojo.uuid.Uuid */ uuidOne, /* dojo.uuid.Uuid */ uuidTwo) { + // summary: + // Given two UUIDs to compare, this method returns 0, 1, or -1. + // description: + // This method is designed to be used by sorting routines, like the + // JavaScript built-in Array sort() method. This implementation is + // intended to match the sample implementation in IETF RFC 4122: + // http://www.ietf.org/rfc/rfc4122.txt + // uuidOne: Any object that has toString() method that returns a 36-character string that conforms to the UUID spec. + // uuidTwo: Any object that has toString() method that returns a 36-character string that conforms to the UUID spec. + + // examples: + // var uuid; + // var generator = dojo.uuid.TimeBasedGenerator; + // var a = new dojo.uuid.Uuid(generator); + // var b = new dojo.uuid.Uuid(generator); + // var c = new dojo.uuid.Uuid(generator); + // var array = new Array(a, b, c); + // array.sort(dojo.uuid.Uuid.compare); + var uuidStringOne = uuidOne.toString(); + var uuidStringTwo = uuidTwo.toString(); + if (uuidStringOne > uuidStringTwo) return 1; // integer + if (uuidStringOne < uuidStringTwo) return -1; // integer + return 0; // integer (either 0, 1, or -1) +}; + +dojo.uuid.Uuid.setGenerator = function(/* generator? */ generator) { + // summary: + // Sets the default generator, which will be used by the + // "new dojo.uuid.Uuid()" constructor if no parameters + // are passed in. + // generator: A UUID generator, such as dojo.uuid.TimeBasedGenerator. + dojo.lang.assert(!generator || (dojo.lang.isObject(generator) && generator.generate)); + dojo.uuid.Uuid._ourGenerator = generator; +}; + +dojo.uuid.Uuid.getGenerator = function() { + // summary: + // Returns the default generator. See setGenerator(). + return dojo.uuid.Uuid._ourGenerator; // generator (A UUID generator, such as dojo.uuid.TimeBasedGenerator). +}; + +dojo.uuid.Uuid.prototype.toString = function(/* string? */format) { + // summary: + // By default this method returns a standard 36-character string representing + // the UUID, such as "3b12f1df-5232-4804-897e-917bf397618a". You can also + // pass in an optional format specifier to request the output in any of + // a half dozen slight variations. + // format: One of these strings: '{}', '()', '""', "''", 'urn', '!-' + + // examples: + // var uuid = new dojo.uuid.Uuid(dojo.uuid.TimeBasedGenerator); + // var s; + // s = uuid.toString(); // eb529fec-6498-11d7-b236-000629ba5445 + // s = uuid.toString('{}'); // {eb529fec-6498-11d7-b236-000629ba5445} + // s = uuid.toString('()'); // (eb529fec-6498-11d7-b236-000629ba5445) + // s = uuid.toString('""'); // "eb529fec-6498-11d7-b236-000629ba5445" + // s = uuid.toString("''"); // 'eb529fec-6498-11d7-b236-000629ba5445' + // s = uuid.toString('!-'); // eb529fec649811d7b236000629ba5445 + // s = uuid.toString('urn'); // urn:uuid:eb529fec-6498-11d7-b236-000629ba5445 + if (format) { + switch (format) { + case '{}': + return '{' + this._uuidString + '}'; + break; + case '()': + return '(' + this._uuidString + ')'; + break; + case '""': + return '"' + this._uuidString + '"'; + break; + case "''": + return "'" + this._uuidString + "'"; + break; + case 'urn': + return 'urn:uuid:' + this._uuidString; + break; + case '!-': + return this._uuidString.split('-').join(''); + break; + default: + // we got passed something other than what we expected + dojo.lang.assert(false, "The toString() method of dojo.uuid.Uuid was passed a bogus format."); + } + } else { + return this._uuidString; // string + } +}; + +dojo.uuid.Uuid.prototype.compare = function(/* dojo.uuid.Uuid */ otherUuid) { + // summary: + // Compares this UUID to another UUID, and returns 0, 1, or -1. + // description: + // This implementation is intended to match the sample implementation + // in IETF RFC 4122: http://www.ietf.org/rfc/rfc4122.txt + // otherUuid: Any object that has toString() method that returns a 36-character string that conforms to the UUID spec. + return dojo.uuid.Uuid.compare(this, otherUuid); // integer (either 0, 1, or -1) +}; + +dojo.uuid.Uuid.prototype.isEqual = function(/* dojo.uuid.Uuid */ otherUuid) { + // summary: + // Returns true if this UUID is equal to the otherUuid, or false otherwise. + // otherUuid: Any object that has toString() method that returns a 36-character string that conforms to the UUID spec. + return (this.compare(otherUuid) == 0); // boolean +}; + +dojo.uuid.Uuid.prototype.isValid = function() { + // summary: + // Returns true if the UUID was initialized with a valid value. + try { + dojo.lang.assertType(this._uuidString, String); + dojo.lang.assert(this._uuidString.length == 36); + dojo.lang.assert(this._uuidString == this._uuidString.toLowerCase()); + var arrayOfParts = this._uuidString.split("-"); + dojo.lang.assert(arrayOfParts.length == 5); + dojo.lang.assert(arrayOfParts[0].length == 8); + dojo.lang.assert(arrayOfParts[1].length == 4); + dojo.lang.assert(arrayOfParts[2].length == 4); + dojo.lang.assert(arrayOfParts[3].length == 4); + dojo.lang.assert(arrayOfParts[4].length == 12); + for (var i in arrayOfParts) { + var part = arrayOfParts[i]; + var integer = parseInt(part, dojo.uuid.Uuid.HEX_RADIX); + dojo.lang.assert(isFinite(integer)); + } + return true; // boolean + } catch (e) { + return false; // boolean + } +}; + +dojo.uuid.Uuid.prototype.getVariant = function() { + // summary: + // Returns a variant code that indicates what type of UUID this is. + // Returns one of the enumerated dojo.uuid.Uuid.Variant values. + + // example: + // var uuid = new dojo.uuid.Uuid("3b12f1df-5232-4804-897e-917bf397618a"); + // var variant = uuid.getVariant(); + // dojo.lang.assert(variant == dojo.uuid.Uuid.Variant.DCE); + // example: + // "3b12f1df-5232-4804-897e-917bf397618a" + // ^ + // | + // (variant "10__" == DCE) + var variantCharacter = this._uuidString.charAt(19); + var variantNumber = parseInt(variantCharacter, dojo.uuid.Uuid.HEX_RADIX); + dojo.lang.assert((variantNumber >= 0) && (variantNumber <= 16)); + + if (!dojo.uuid.Uuid._ourVariantLookupTable) { + var Variant = dojo.uuid.Uuid.Variant; + var lookupTable = []; + + lookupTable[0x0] = Variant.NCS; // 0000 + lookupTable[0x1] = Variant.NCS; // 0001 + lookupTable[0x2] = Variant.NCS; // 0010 + lookupTable[0x3] = Variant.NCS; // 0011 + + lookupTable[0x4] = Variant.NCS; // 0100 + lookupTable[0x5] = Variant.NCS; // 0101 + lookupTable[0x6] = Variant.NCS; // 0110 + lookupTable[0x7] = Variant.NCS; // 0111 + + lookupTable[0x8] = Variant.DCE; // 1000 + lookupTable[0x9] = Variant.DCE; // 1001 + lookupTable[0xA] = Variant.DCE; // 1010 + lookupTable[0xB] = Variant.DCE; // 1011 + + lookupTable[0xC] = Variant.MICROSOFT; // 1100 + lookupTable[0xD] = Variant.MICROSOFT; // 1101 + lookupTable[0xE] = Variant.UNKNOWN; // 1110 + lookupTable[0xF] = Variant.UNKNOWN; // 1111 + + dojo.uuid.Uuid._ourVariantLookupTable = lookupTable; + } + + return dojo.uuid.Uuid._ourVariantLookupTable[variantNumber]; // dojo.uuid.Uuid.Variant +}; + +dojo.uuid.Uuid.prototype.getVersion = function() { + // summary: + // Returns a version number that indicates what type of UUID this is. + // Returns one of the enumerated dojo.uuid.Uuid.Version values. + + // example: + // var uuid = new dojo.uuid.Uuid("b4308fb0-86cd-11da-a72b-0800200c9a66"); + // var version = uuid.getVersion(); + // dojo.lang.assert(version == dojo.uuid.Uuid.Version.TIME_BASED); + // exceptions: + // Throws an Error if this is not a DCE Variant UUID. + if (!this._versionNumber) { + var errorMessage = "Called getVersion() on a dojo.uuid.Uuid that was not a DCE Variant UUID."; + dojo.lang.assert(this.getVariant() == dojo.uuid.Uuid.Variant.DCE, errorMessage); + + // "b4308fb0-86cd-11da-a72b-0800200c9a66" + // ^ + // | + // (version 1 == TIME_BASED) + var versionCharacter = this._uuidString.charAt(14); + this._versionNumber = parseInt(versionCharacter, dojo.uuid.Uuid.HEX_RADIX); + } + return this._versionNumber; // dojo.uuid.Uuid.Version +}; + +dojo.uuid.Uuid.prototype.getNode = function() { + // summary: + // If this is a version 1 UUID (a time-based UUID), getNode() returns a + // 12-character string with the "node" or "pseudonode" portion of the UUID, + // which is the rightmost 12 characters. + + // exceptions: + // Throws an Error if this is not a version 1 UUID. + if (!this._nodeString) { + var errorMessage = "Called getNode() on a dojo.uuid.Uuid that was not a TIME_BASED UUID."; + dojo.lang.assert(this.getVersion() == dojo.uuid.Uuid.Version.TIME_BASED, errorMessage); + + var arrayOfStrings = this._uuidString.split('-'); + this._nodeString = arrayOfStrings[4]; + } + return this._nodeString; // String (a 12-character string, which will look something like "917bf397618a") +}; + +dojo.uuid.Uuid.prototype.getTimestamp = function(/* misc. */ returnType) { + // summary: + // If this is a version 1 UUID (a time-based UUID), this method returns + // the timestamp value encoded in the UUID. The caller can ask for the + // timestamp to be returned either as a JavaScript Date object or as a + // 15-character string of hex digits. + // returnType: Any of these five values: "string", String, "hex", "date", Date + + // returns: + // Returns the timestamp value as a JavaScript Date object or a 15-character string of hex digits. + // examples: + // var uuid = new dojo.uuid.Uuid("b4308fb0-86cd-11da-a72b-0800200c9a66"); + // var date, string, hexString; + // date = uuid.getTimestamp(); // returns a JavaScript Date + // date = uuid.getTimestamp(Date); // + // string = uuid.getTimestamp(String); // "Mon, 16 Jan 2006 20:21:41 GMT" + // hexString = uuid.getTimestamp("hex"); // "1da86cdb4308fb0" + // exceptions: + // Throws an Error if this is not a version 1 UUID. + var errorMessage = "Called getTimestamp() on a dojo.uuid.Uuid that was not a TIME_BASED UUID."; + dojo.lang.assert(this.getVersion() == dojo.uuid.Uuid.Version.TIME_BASED, errorMessage); + + if (!returnType) {returnType = null}; + switch (returnType) { + case "string": + case String: + return this.getTimestamp(Date).toUTCString(); // String (e.g. "Mon, 16 Jan 2006 20:21:41 GMT") + break; + case "hex": + // Return a 15-character string of hex digits containing the + // timestamp for this UUID, with the high-order bits first. + if (!this._timestampAsHexString) { + var arrayOfStrings = this._uuidString.split('-'); + var hexTimeLow = arrayOfStrings[0]; + var hexTimeMid = arrayOfStrings[1]; + var hexTimeHigh = arrayOfStrings[2]; + + // Chop off the leading "1" character, which is the UUID + // version number for time-based UUIDs. + hexTimeHigh = hexTimeHigh.slice(1); + + this._timestampAsHexString = hexTimeHigh + hexTimeMid + hexTimeLow; + dojo.lang.assert(this._timestampAsHexString.length == 15); + } + return this._timestampAsHexString; // String (e.g. "1da86cdb4308fb0") + break; + case null: // no returnType was specified, so default to Date + case "date": + case Date: + // Return a JavaScript Date object. + if (!this._timestampAsDate) { + var GREGORIAN_CHANGE_OFFSET_IN_HOURS = 3394248; + + var arrayOfParts = this._uuidString.split('-'); + var timeLow = parseInt(arrayOfParts[0], dojo.uuid.Uuid.HEX_RADIX); + var timeMid = parseInt(arrayOfParts[1], dojo.uuid.Uuid.HEX_RADIX); + var timeHigh = parseInt(arrayOfParts[2], dojo.uuid.Uuid.HEX_RADIX); + var hundredNanosecondIntervalsSince1582 = timeHigh & 0x0FFF; + hundredNanosecondIntervalsSince1582 <<= 16; + hundredNanosecondIntervalsSince1582 += timeMid; + // What we really want to do next is shift left 32 bits, but the + // result will be too big to fit in an int, so we'll multiply by 2^32, + // and the result will be a floating point approximation. + hundredNanosecondIntervalsSince1582 *= 0x100000000; + hundredNanosecondIntervalsSince1582 += timeLow; + var millisecondsSince1582 = hundredNanosecondIntervalsSince1582 / 10000; + + // Again, this will be a floating point approximation. + // We can make things exact later if we need to. + var secondsPerHour = 60 * 60; + var hoursBetween1582and1970 = GREGORIAN_CHANGE_OFFSET_IN_HOURS; + var secondsBetween1582and1970 = hoursBetween1582and1970 * secondsPerHour; + var millisecondsBetween1582and1970 = secondsBetween1582and1970 * 1000; + var millisecondsSince1970 = millisecondsSince1582 - millisecondsBetween1582and1970; + + this._timestampAsDate = new Date(millisecondsSince1970); + } + return this._timestampAsDate; // Date + break; + default: + // we got passed something other than a valid returnType + dojo.lang.assert(false, "The getTimestamp() method dojo.uuid.Uuid was passed a bogus returnType: " + returnType); + break; + } +}; Index: openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/uuid/__package__.js =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/uuid/Attic/__package__.js,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/uuid/__package__.js 7 Nov 2006 02:38:05 -0000 1.1 @@ -0,0 +1,22 @@ +/* + Copyright (c) 2004-2006, The Dojo Foundation + All Rights Reserved. + + Licensed under the Academic Free License version 2.1 or above OR the + modified BSD license. For more information on Dojo licensing, see: + + http://dojotoolkit.org/community/licensing.shtml +*/ + +dojo.kwCompoundRequire({ + common: [ + "dojo.uuid.Uuid", + "dojo.uuid.LightweightGenerator", + "dojo.uuid.RandomGenerator", + "dojo.uuid.TimeBasedGenerator", + "dojo.uuid.NameBasedGenerator", + "dojo.uuid.NilGenerator" + ] +}); +dojo.provide("dojo.uuid.*"); + Index: openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/validate/__package__.js =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/validate/Attic/__package__.js,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/validate/__package__.js 7 Nov 2006 02:38:05 -0000 1.1 @@ -0,0 +1,21 @@ +/* + Copyright (c) 2004-2006, The Dojo Foundation + All Rights Reserved. + + Licensed under the Academic Free License version 2.1 or above OR the + modified BSD license. For more information on Dojo licensing, see: + + http://dojotoolkit.org/community/licensing.shtml +*/ + +dojo.require("dojo.validate"); +dojo.kwCompoundRequire({ + common: ["dojo.validate.check", + "dojo.validate.datetime", + "dojo.validate.de", + "dojo.validate.jp", + "dojo.validate.us", + "dojo.validate.web" + ] +}); +dojo.provide("dojo.validate.*"); Index: openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/validate/check.js =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/validate/Attic/check.js,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/validate/check.js 7 Nov 2006 02:38:05 -0000 1.1 @@ -0,0 +1,263 @@ +/* + Copyright (c) 2004-2006, The Dojo Foundation + All Rights Reserved. + + Licensed under the Academic Free License version 2.1 or above OR the + modified BSD license. For more information on Dojo licensing, see: + + http://dojotoolkit.org/community/licensing.shtml +*/ + +dojo.provide("dojo.validate.check"); +dojo.require("dojo.validate.common"); +dojo.require("dojo.lang.common"); + +dojo.validate.check = function(/*HTMLFormElement*/form, /*Object*/profile){ + // summary: validates user input of an HTML form based on input profile + // + // description: + // returns an object that contains several methods summarizing the results of the validation + // + // form: form to be validated + // profile: specifies how the form fields are to be validated + // {trim:Array, uppercase:Array, lowercase:Array, ucfirst:Array, digit:Array, + // required:Array, dependencies:Object, constraints:Object, confirm:Object} + + // Essentially private properties of results object + var missing = []; + var invalid = []; + + // results object summarizes the validation + var results = { + isSuccessful: function() {return ( !this.hasInvalid() && !this.hasMissing() );}, + hasMissing: function() {return ( missing.length > 0 );}, + getMissing: function() {return missing;}, + isMissing: function(elemname) { + for(var i = 0; i < missing.length; i++){ + if(elemname == missing[i]){ return true; } + } + return false; + }, + hasInvalid: function() {return ( invalid.length > 0 );}, + getInvalid: function() {return invalid;}, + isInvalid: function(elemname){ + for(var i = 0; i < invalid.length; i++){ + if(elemname == invalid[i]){ return true; } + } + return false; + } + }; + + // Filters are applied before fields are validated. + // Trim removes white space at the front and end of the fields. + if(profile.trim instanceof Array){ + for(var i = 0; i < profile.trim.length; i++){ + var elem = form[profile.trim[i]]; + if(elem.type != "text" && elem.type != "textarea" && elem.type != "password"){ continue; } + elem.value = elem.value.replace(/(^\s*|\s*$)/g, ""); + } + } + // Convert to uppercase + if(profile.uppercase instanceof Array){ + for(var i = 0; i < profile.uppercase.length; i++){ + var elem = form[profile.uppercase[i]]; + if(elem.type != "text" && elem.type != "textarea" && elem.type != "password"){ continue; } + elem.value = elem.value.toUpperCase(); + } + } + // Convert to lowercase + if(profile.lowercase instanceof Array){ + for (var i = 0; i < profile.lowercase.length; i++){ + var elem = form[profile.lowercase[i]]; + if(elem.type != "text" && elem.type != "textarea" && elem.type != "password"){ continue; } + elem.value = elem.value.toLowerCase(); + } + } + // Uppercase first letter + if(profile.ucfirst instanceof Array){ + for(var i = 0; i < profile.ucfirst.length; i++){ + var elem = form[profile.ucfirst[i]]; + if(elem.type != "text" && elem.type != "textarea" && elem.type != "password"){ continue; } + elem.value = elem.value.replace(/\b\w+\b/g, function(word) { return word.substring(0,1).toUpperCase() + word.substring(1).toLowerCase(); }); + } + } + // Remove non digits characters from the input. + if(profile.digit instanceof Array){ + for(var i = 0; i < profile.digit.length; i++){ + var elem = form[profile.digit[i]]; + if(elem.type != "text" && elem.type != "textarea" && elem.type != "password"){ continue; } + elem.value = elem.value.replace(/\D/g, ""); + } + } + + // See if required input fields have values missing. + if(profile.required instanceof Array){ + for(var i = 0; i < profile.required.length; i++){ + if(!dojo.lang.isString(profile.required[i])){ continue; } + var elem = form[profile.required[i]]; + // Are textbox, textarea, or password fields blank. + if((elem.type == "text" || elem.type == "textarea" || elem.type == "password") && /^\s*$/.test(elem.value)){ + missing[missing.length] = elem.name; + } + // Does drop-down box have option selected. + else if((elem.type == "select-one" || elem.type == "select-multiple") + && (elem.selectedIndex == -1 + || /^\s*$/.test(elem.options[elem.selectedIndex].value))){ + missing[missing.length] = elem.name; + } + // Does radio button group (or check box group) have option checked. + else if(elem instanceof Array){ + var checked = false; + for(var j = 0; j < elem.length; j++){ + if (elem[j].checked) { checked = true; } + } + if(!checked){ + missing[missing.length] = elem[0].name; + } + } + } + } + + // See if checkbox groups and select boxes have x number of required values. + if(profile.required instanceof Array){ + for (var i = 0; i < profile.required.length; i++){ + if(!dojo.lang.isObject(profile.required[i])){ continue; } + var elem, numRequired; + for(var name in profile.required[i]){ + elem = form[name]; + numRequired = profile.required[i][name]; + } + // case 1: elem is a check box group + if(elem instanceof Array){ + var checked = 0; + for(var j = 0; j < elem.length; j++){ + if(elem[j].checked){ checked++; } + } + if(checked < numRequired){ + missing[missing.length] = elem[0].name; + } + } + // case 2: elem is a select box + else if(elem.type == "select-multiple" ){ + var selected = 0; + for(var j = 0; j < elem.options.length; j++){ + if (elem.options[j].selected && !/^\s*$/.test(elem.options[j].value)) { selected++; } + } + if(selected < numRequired){ + missing[missing.length] = elem.name; + } + } + } + } + + // Dependent fields are required when the target field is present (not blank). + // Todo: Support dependent and target fields that are radio button groups, or select drop-down lists. + // Todo: Make the dependency based on a specific value of the target field. + // Todo: allow dependent fields to have several required values, like {checkboxgroup: 3}. + if(dojo.lang.isObject(profile.dependencies) || dojo.lang.isObject(profile.dependancies)){ + if(profile["dependancies"]){ + dojo.deprecated("dojo.validate.check", "profile 'dependancies' is deprecated, please use " + + "'dependencies'", "0.5"); + profile.dependencies=profile.dependancies; + } + // properties of dependencies object are the names of dependent fields to be checked + for(name in profile.dependencies){ + var elem = form[name]; // the dependent element + if(elem.type != "text" && elem.type != "textarea" && elem.type != "password"){ continue; } // limited support + if(/\S+/.test(elem.value)){ continue; } // has a value already + if(results.isMissing(elem.name)){ continue; } // already listed as missing + var target = form[profile.dependencies[name]]; + if(target.type != "text" && target.type != "textarea" && target.type != "password"){ continue; } // limited support + if(/^\s*$/.test(target.value)){ continue; } // skip if blank + missing[missing.length] = elem.name; // ok the dependent field is missing + } + } + + // Find invalid input fields. + if(dojo.lang.isObject(profile.constraints)){ + // constraint properties are the names of fields to bevalidated + for(name in profile.constraints){ + var elem = form[name]; + if( (elem.type != "text")&& + (elem.type != "textarea")&& + (elem.type != "password")){ + continue; + } + // skip if blank - its optional unless required, in which case it + // is already listed as missing. + if(/^\s*$/.test(elem.value)){ continue; } + + var isValid = true; + // case 1: constraint value is validation function + if(dojo.lang.isFunction(profile.constraints[name])){ + isValid = profile.constraints[name](elem.value); + }else if(dojo.lang.isArray(profile.constraints[name])){ + // handle nested arrays for multiple constraints + if(dojo.lang.isArray(profile.constraints[name][0])){ + for (var i=0; i value.length){ return false; } // Boolean + if(typeof flags.maxlength == "number" && flags.maxlength < value.length){ return false; } // Boolean + + return true; // Boolean +} + +dojo.validate.isInteger = function(/*String*/value, /*Object?*/flags){ +// summary: +// Validates whether a string is in an integer format +// +// value A string +// flags {signed: Boolean|[true,false], separator: String} +// flags.signed The leading plus-or-minus sign. Can be true, false, or [true, false]. +// Default is [true, false], (i.e. sign is optional). +// flags.separator The character used as the thousands separator. Default is no separator. +// For more than one symbol use an array, e.g. [",", ""], makes ',' optional. + + var re = new RegExp("^" + dojo.regexp.integer(flags) + "$"); + return re.test(value); // Boolean +} + +dojo.validate.isRealNumber = function(/*String*/value, /*Object?*/flags){ +// summary: +// Validates whether a string is a real valued number. +// Format is the usual exponential notation. +// +// value: A string +// flags: {places: Number, decimal: String, exponent: Boolean|[true,false], eSigned: Boolean|[true,false], ...} +// flags.places The integer number of decimal places. +// If not given, the decimal part is optional and the number of places is unlimited. +// flags.decimal The character used for the decimal point. Default is ".". +// flags.exponent Express in exponential notation. Can be true, false, or [true, false]. +// Default is [true, false], (i.e. the exponential part is optional). +// flags.eSigned The leading plus-or-minus sign on the exponent. Can be true, false, +// or [true, false]. Default is [true, false], (i.e. sign is optional). +// flags in regexp.integer can be applied. + + var re = new RegExp("^" + dojo.regexp.realNumber(flags) + "$"); + return re.test(value); // Boolean +} + +dojo.validate.isCurrency = function(/*String*/value, /*Object?*/flags){ +// summary: +// Validates whether a string denotes a monetary value. +// value: A string +// flags: {signed:Boolean|[true,false], symbol:String, placement:String, separator:String, +// fractional:Boolean|[true,false], decimal:String} +// flags.signed The leading plus-or-minus sign. Can be true, false, or [true, false]. +// Default is [true, false], (i.e. sign is optional). +// flags.symbol A currency symbol such as Yen "�", Pound "�", or the Euro sign "�". +// Default is "$". For more than one symbol use an array, e.g. ["$", ""], makes $ optional. +// flags.placement The symbol can come "before" the number or "after". Default is "before". +// flags.separator The character used as the thousands separator. The default is ",". +// flags.fractional The appropriate number of decimal places for fractional currency (e.g. cents) +// Can be true, false, or [true, false]. Default is [true, false], (i.e. cents are optional). +// flags.decimal The character used for the decimal point. Default is ".". + + var re = new RegExp("^" + dojo.regexp.currency(flags) + "$"); + return re.test(value); // Boolean +} + +dojo.validate.isInRange = function(/*String*/value, /*Object?*/flags){ +//summary: +// Validates whether a string denoting an integer, +// real number, or monetary value is between a max and min. +// +// value: A string +// flags: {max:Number, min:Number, decimal:String} +// flags.max A number, which the value must be less than or equal to for the validation to be true. +// flags.min A number, which the value must be greater than or equal to for the validation to be true. +// flags.decimal The character used for the decimal point. Default is ".". + + //stripping the seperator allows NaN to perform as expected, if no separator, we assume ',' + //once i18n support is ready for this, instead of assuming, we default to i18n's recommended value + value = value.replace((dojo.lang.has(flags,'separator'))?flags.separator:',',''); + if(isNaN(value)){ + return false; // Boolean + } + // assign default values to missing paramters + flags = (typeof flags == "object") ? flags : {}; + var max = (typeof flags.max == "number") ? flags.max : Infinity; + var min = (typeof flags.min == "number") ? flags.min : -Infinity; + var dec = (typeof flags.decimal == "string") ? flags.decimal : "."; + + // splice out anything not part of a number + var pattern = "[^" + dec + "\\deE+-]"; + value = value.replace(RegExp(pattern, "g"), ""); + + // trim ends of things like e, E, or the decimal character + value = value.replace(/^([+-]?)(\D*)/, "$1"); + value = value.replace(/(\D*)$/, ""); + + // replace decimal with ".". The minus sign '-' could be the decimal! + pattern = "(\\d)[" + dec + "](\\d)"; + value = value.replace(RegExp(pattern, "g"), "$1.$2"); + + value = Number(value); + if ( value < min || value > max ) { return false; } // Boolean + + return true; // Boolean +} + +dojo.validate.isNumberFormat = function(/*String*/value, /*Object?*/flags){ +// summary: +// Validates any sort of number based format +// +// description: +// Use it for phone numbers, social security numbers, zip-codes, etc. +// The value can be validated against one format or one of multiple formats. +// +// Format +// # Stands for a digit, 0-9. +// ? Stands for an optional digit, 0-9 or nothing. +// All other characters must appear literally in the expression. +// +// Example +// "(###) ###-####" -> (510) 542-9742 +// "(###) ###-#### x#???" -> (510) 542-9742 x153 +// "###-##-####" -> 506-82-1089 i.e. social security number +// "#####-####" -> 98225-1649 i.e. zip code +// +// value: A string +// flags: {format:String} +// flags.format A string or an Array of strings for multiple formats. + + var re = new RegExp("^" + dojo.regexp.numberFormat(flags) + "$", "i"); + return re.test(value); // Boolean +} + +dojo.validate.isValidLuhn = function(/*String*/value){ +//summary: Compares value against the Luhn algorithm to verify its integrity + var sum, parity, curDigit; + if(typeof value!='string'){ + value = String(value); + } + value = value.replace(/[- ]/g,''); //ignore dashes and whitespaces + parity = value.length%2; + sum=0; + for(var i=0;i9){ + curDigit-=9; + } + sum+=curDigit; + } + return !(sum%10); +} + +/** + Procedural API Description + + The main aim is to make input validation expressible in a simple format. + You define profiles which declare the required and optional fields and any constraints they might have. + The results are provided as an object that makes it easy to handle missing and invalid input. + + Usage + + var results = dojo.validate.check(form, profile); + + Profile Object + + var profile = { + // filters change the field value and are applied before validation. + trim: ["tx1", "tx2"], + uppercase: ["tx9"], + lowercase: ["tx5", "tx6", "tx7"], + ucfirst: ["tx10"], + digit: ["tx11"], + + // required input fields that are blank will be reported missing. + // required radio button groups and drop-down lists with no selection will be reported missing. + // checkbox groups and selectboxes can be required to have more than one value selected. + // List required fields by name and use this notation to require more than one value: {checkboxgroup: 2}, {selectboxname: 3}. + required: ["tx7", "tx8", "pw1", "ta1", "rb1", "rb2", "cb3", "s1", {"doubledip":2}, {"tripledip":3}], + + // dependant/conditional fields are required if the target field is present and not blank. + // At present only textbox, password, and textarea fields are supported. + dependencies: { + cc_exp: "cc_no", + cc_type: "cc_no", + }, + + // Fields can be validated using any boolean valued function. + // Use arrays to specify parameters in addition to the field value. + constraints: { + field_name1: myValidationFunction, + field_name2: dojo.validate.isInteger, + field_name3: [myValidationFunction, additional parameters], + field_name4: [dojo.validate.isValidDate, "YYYY.MM.DD"], + field_name5: [dojo.validate.isEmailAddress, false, true], + }, + + // Confirm is a sort of conditional validation. + // It associates each field in its property list with another field whose value should be equal. + // If the values are not equal, the field in the property list is reported as Invalid. Unless the target field is blank. + confirm: { + email_confirm: "email", + pw2: "pw1", + } + }; + + Results Object + + isSuccessful(): Returns true if there were no invalid or missing fields, else it returns false. + hasMissing(): Returns true if the results contain any missing fields. + getMissing(): Returns a list of required fields that have values missing. + isMissing(field): Returns true if the field is required and the value is missing. + hasInvalid(): Returns true if the results contain fields with invalid data. + getInvalid(): Returns a list of fields that have invalid values. + isInvalid(field): Returns true if the field has an invalid value. + +*/ Index: openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/validate/creditCard.js =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/validate/Attic/creditCard.js,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/validate/creditCard.js 7 Nov 2006 02:38:05 -0000 1.1 @@ -0,0 +1,90 @@ +/* + Copyright (c) 2004-2006, The Dojo Foundation + All Rights Reserved. + + Licensed under the Academic Free License version 2.1 or above OR the + modified BSD license. For more information on Dojo licensing, see: + + http://dojotoolkit.org/community/licensing.shtml +*/ + +dojo.provide('dojo.validate.creditCard'); + +dojo.require("dojo.lang.common"); +dojo.require("dojo.validate.common"); + +/* + Validates Credit Cards using account number rules in conjunction with the Luhn algorightm + + */ + +dojo.validate.isValidCreditCard = function(value,ccType){ + //checks if type matches the # scheme, and if Luhn checksum is accurate (unless its an Enroute card, the checkSum is skipped) + if(value&&ccType&&((ccType.toLowerCase()=='er'||dojo.validate.isValidLuhn(value))&&(dojo.validate.isValidCreditCardNumber(value,ccType.toLowerCase())))){ + return true; + } + return false; +} +dojo.validate.isValidCreditCardNumber = function(value,ccType) { + //only checks if the # matches the pattern for that card or any card types if none is specified + //value == CC #, white spaces and dashes are ignored + //ccType is of the values in cardinfo -- if Omitted it it returns a | delimited string of matching card types, or false if no matches found + if(typeof value!='string'){ + value = String(value); + } + value = value.replace(/[- ]/g,''); //ignore dashes and whitespaces + /* FIXME: not sure on all the abbreviations for credit cards,below is what each stands for atleast to my knowledge + mc: Mastercard + ec: Eurocard + vi: Visa + ax: American Express + dc: Diners Club + bl: Carte Blanch + di: Discover + jcb: JCB + er: Enroute + */ + var results=[]; + var cardinfo = { + 'mc':'5[1-5][0-9]{14}','ec':'5[1-5][0-9]{14}','vi':'4([0-9]{12}|[0-9]{15})', + 'ax':'3[47][0-9]{13}', 'dc':'3(0[0-5][0-9]{11}|[68][0-9]{12})', + 'bl':'3(0[0-5][0-9]{11}|[68][0-9]{12})','di':'6011[0-9]{12}', + 'jcb':'(3[0-9]{15}|(2131|1800)[0-9]{11})','er':'2(014|149)[0-9]{11}' + }; + if(ccType&&dojo.lang.has(cardinfo,ccType.toLowerCase())){ + return Boolean(value.match(cardinfo[ccType.toLowerCase()])); // boolean + }else{ + for(var p in cardinfo){ + if(value.match('^'+cardinfo[p]+'$')!=null){ + results.push(p); + } + } + return (results.length)?results.join('|'):false; // string | boolean + } +} + +dojo.validate.isValidCvv = function(value, ccType) { + if(typeof value!='string'){ + value=String(value); + } + var format; + switch (ccType.toLowerCase()){ + case 'mc': + case 'ec': + case 'vi': + case 'di': + format = '###'; + break; + case 'ax': + format = '####'; + break; + default: + return false; + } + var flags = {format:format}; + //FIXME? Why does isNumberFormat take an object for flags when its only parameter is either a string or an array inside the object? + if ((value.length == format.length)&&(dojo.validate.isNumberFormat(value, flags))){ + return true; + } + return false; +} \ No newline at end of file Index: openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/validate/datetime.js =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/validate/Attic/datetime.js,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/validate/datetime.js 7 Nov 2006 02:38:05 -0000 1.1 @@ -0,0 +1,172 @@ +/* + Copyright (c) 2004-2006, The Dojo Foundation + All Rights Reserved. + + Licensed under the Academic Free License version 2.1 or above OR the + modified BSD license. For more information on Dojo licensing, see: + + http://dojotoolkit.org/community/licensing.shtml +*/ + +dojo.provide("dojo.validate.datetime"); +dojo.require("dojo.validate.common"); + +/** + Validates a time value in any International format. + The value can be validated against one format or one of multiple formats. + + Format + h 12 hour, no zero padding. + hh 12 hour, has leading zero. + H 24 hour, no zero padding. + HH 24 hour, has leading zero. + m minutes, no zero padding. + mm minutes, has leading zero. + s seconds, no zero padding. + ss seconds, has leading zero. + All other characters must appear literally in the expression. + + Example + "h:m:s t" -> 2:5:33 PM + "HH:mm:ss" -> 14:05:33 + + @param value A string. + @param flags An object. + flags.format A string or an array of strings. Default is "h:mm:ss t". + flags.amSymbol The symbol used for AM. Default is "AM". + flags.pmSymbol The symbol used for PM. Default is "PM". + @return true or false +*/ +dojo.validate.isValidTime = function(value, flags) { + dojo.deprecated("dojo.validate.datetime", "use dojo.date.parse instead", "0.5"); + var re = new RegExp("^" + dojo.regexp.time(flags) + "$", "i"); + return re.test(value); +} + +/** + Validates 12-hour time format. + Zero-padding is not allowed for hours, required for minutes and seconds. + Seconds are optional. + + @param value A string. + @return true or false +*/ +dojo.validate.is12HourTime = function(value) { + dojo.deprecated("dojo.validate.datetime", "use dojo.date.parse instead", "0.5"); + return dojo.validate.isValidTime(value, {format: ["h:mm:ss t", "h:mm t"]}); +} + +/** + Validates 24-hour military time format. + Zero-padding is required for hours, minutes, and seconds. + Seconds are optional. + + @param value A string. + @return true or false +*/ +dojo.validate.is24HourTime = function(value) { + dojo.deprecated("dojo.validate.datetime", "use dojo.date.parse instead", "0.5"); + return dojo.validate.isValidTime(value, {format: ["HH:mm:ss", "HH:mm"]} ); +} + +/** + Returns true if the date conforms to the format given and is a valid date. Otherwise returns false. + + @param dateValue A string for the date. + @param format A string, default is "MM/DD/YYYY". + @return true or false + + Accepts any type of format, including ISO8601. + All characters in the format string are treated literally except the following tokens: + + YYYY - matches a 4 digit year + M - matches a non zero-padded month + MM - matches a zero-padded month + D - matches a non zero-padded date + DD - matches a zero-padded date + DDD - matches an ordinal date, 001-365, and 366 on leapyear + ww - matches week of year, 01-53 + d - matches day of week, 1-7 + + Examples: These are all today's date. + + Date Format + 2005-W42-3 YYYY-Www-d + 2005-292 YYYY-DDD + 20051019 YYYYMMDD + 10/19/2005 M/D/YYYY + 19.10.2005 D.M.YYYY +*/ +dojo.validate.isValidDate = function(dateValue, format) { + dojo.deprecated("dojo.validate.datetime", "use dojo.date.parse instead", "0.5"); + // Default is the American format + if (typeof format == "object" && typeof format.format == "string"){ format = format.format; } + if (typeof format != "string") { format = "MM/DD/YYYY"; } + + // Create a literal regular expression based on format + var reLiteral = format.replace(/([$^.*+?=!:|\/\\\(\)\[\]\{\}])/g, "\\$1"); + + // Convert all the tokens to RE elements + reLiteral = reLiteral.replace( "YYYY", "([0-9]{4})" ); + reLiteral = reLiteral.replace( "MM", "(0[1-9]|10|11|12)" ); + reLiteral = reLiteral.replace( "M", "([1-9]|10|11|12)" ); + reLiteral = reLiteral.replace( "DDD", "(00[1-9]|0[1-9][0-9]|[12][0-9][0-9]|3[0-5][0-9]|36[0-6])" ); + reLiteral = reLiteral.replace( "DD", "(0[1-9]|[12][0-9]|30|31)" ); + reLiteral = reLiteral.replace( "D", "([1-9]|[12][0-9]|30|31)" ); + reLiteral = reLiteral.replace( "ww", "(0[1-9]|[1-4][0-9]|5[0-3])" ); + reLiteral = reLiteral.replace( "d", "([1-7])" ); + + // Anchor pattern to begining and end of string + reLiteral = "^" + reLiteral + "$"; + + // Dynamic RE that parses the original format given + var re = new RegExp(reLiteral); + + // Test if date is in a valid format + if (!re.test(dateValue)) return false; + + // Parse date to get elements and check if date is valid + // Assume valid values for date elements not given. + var year = 0, month = 1, date = 1, dayofyear = 1, week = 1, day = 1; + + // Capture tokens + var tokens = format.match( /(YYYY|MM|M|DDD|DD|D|ww|d)/g ); + + // Capture date values + var values = re.exec(dateValue); + + // Match up tokens with date values + for (var i = 0; i < tokens.length; i++) { + switch (tokens[i]) { + case "YYYY": + year = Number(values[i+1]); break; + case "M": + case "MM": + month = Number(values[i+1]); break; + case "D": + case "DD": + date = Number(values[i+1]); break; + case "DDD": + dayofyear = Number(values[i+1]); break; + case "ww": + week = Number(values[i+1]); break; + case "d": + day = Number(values[i+1]); break; + } + } + + // Leap years are divisible by 4, but not by 100, unless by 400 + var leapyear = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0)); + + // 31st of a month with 30 days + if (date == 31 && (month == 4 || month == 6 || month == 9 || month == 11)) return false; + + // February 30th or 31st + if (date >= 30 && month == 2) return false; + + // February 29th outside a leap year + if (date == 29 && month == 2 && !leapyear) return false; + if (dayofyear == 366 && !leapyear) return false; + + return true; +} Index: openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/validate/de.js =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/validate/Attic/de.js,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/validate/de.js 7 Nov 2006 02:38:05 -0000 1.1 @@ -0,0 +1,26 @@ +/* + Copyright (c) 2004-2006, The Dojo Foundation + All Rights Reserved. + + Licensed under the Academic Free License version 2.1 or above OR the + modified BSD license. For more information on Dojo licensing, see: + + http://dojotoolkit.org/community/licensing.shtml +*/ + +dojo.provide("dojo.validate.de"); +dojo.require("dojo.validate.common"); + +dojo.validate.isGermanCurrency = function(/*String*/value) { + //summary: checks to see if 'value' is a valid representation of German currency (Euros) + var flags = { + symbol: "\u20AC", + placement: "after", + signPlacement: "begin", //TODO: this is really locale-dependent. Will get fixed in v0.5 currency rewrite. + decimal: ",", + separator: "." + }; + return dojo.validate.isCurrency(value, flags); // Boolean +} + + Index: openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/validate/jp.js =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/validate/Attic/jp.js,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/validate/jp.js 7 Nov 2006 02:38:05 -0000 1.1 @@ -0,0 +1,23 @@ +/* + Copyright (c) 2004-2006, The Dojo Foundation + All Rights Reserved. + + Licensed under the Academic Free License version 2.1 or above OR the + modified BSD license. For more information on Dojo licensing, see: + + http://dojotoolkit.org/community/licensing.shtml +*/ + +dojo.provide("dojo.validate.jp"); +dojo.require("dojo.validate.common"); + +dojo.validate.isJapaneseCurrency = function(/*String*/value) { + //summary: checks to see if 'value' is a valid representation of Japanese currency + var flags = { + symbol: "\u00a5", + fractional: false + }; + return dojo.validate.isCurrency(value, flags); // Boolean +} + + Index: openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/validate/us.js =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/validate/Attic/us.js,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/validate/us.js 7 Nov 2006 02:38:05 -0000 1.1 @@ -0,0 +1,84 @@ +/* + Copyright (c) 2004-2006, The Dojo Foundation + All Rights Reserved. + + Licensed under the Academic Free License version 2.1 or above OR the + modified BSD license. For more information on Dojo licensing, see: + + http://dojotoolkit.org/community/licensing.shtml +*/ + +dojo.provide("dojo.validate.us"); +dojo.require("dojo.validate.common"); + +dojo.validate.us.isCurrency = function(/*String*/value, /*Object?*/flags){ + // summary: Validates U.S. currency + // value: the representation to check + // flags: flags in validate.isCurrency can be applied. + return dojo.validate.isCurrency(value, flags); // Boolean +} + + +dojo.validate.us.isState = function(/*String*/value, /*Object?*/flags){ + // summary: Validates US state and territory abbreviations. + // + // value: A two character string + // flags: An object + // flags.allowTerritories Allow Guam, Puerto Rico, etc. Default is true. + // flags.allowMilitary Allow military 'states', e.g. Armed Forces Europe (AE). Default is true. + + var re = new RegExp("^" + dojo.regexp.us.state(flags) + "$", "i"); + return re.test(value); // Boolean +} + +dojo.validate.us.isPhoneNumber = function(/*String*/value){ + // summary: Validates 10 US digit phone number for several common formats + // value: The telephone number string + + var flags = { + format: [ + "###-###-####", + "(###) ###-####", + "(###) ### ####", + "###.###.####", + "###/###-####", + "### ### ####", + "###-###-#### x#???", + "(###) ###-#### x#???", + "(###) ### #### x#???", + "###.###.#### x#???", + "###/###-#### x#???", + "### ### #### x#???", + "##########" + ] + }; + + return dojo.validate.isNumberFormat(value, flags); // Boolean +} + +dojo.validate.us.isSocialSecurityNumber = function(/*String*/value){ +// summary: Validates social security number + var flags = { + format: [ + "###-##-####", + "### ## ####", + "#########" + ] + }; + + return dojo.validate.isNumberFormat(value, flags); // Boolean +} + +dojo.validate.us.isZipCode = function(/*String*/value){ +// summary: Validates U.S. zip-code + var flags = { + format: [ + "#####-####", + "##### ####", + "#########", + "#####" + ] + }; + + return dojo.validate.isNumberFormat(value, flags); // Boolean +} Index: openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/validate/web.js =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/validate/Attic/web.js,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/validate/web.js 7 Nov 2006 02:38:05 -0000 1.1 @@ -0,0 +1,95 @@ +/* + Copyright (c) 2004-2006, The Dojo Foundation + All Rights Reserved. + + Licensed under the Academic Free License version 2.1 or above OR the + modified BSD license. For more information on Dojo licensing, see: + + http://dojotoolkit.org/community/licensing.shtml +*/ + +dojo.provide("dojo.validate.web"); +dojo.require("dojo.validate.common"); + +dojo.validate.isIpAddress = function(/*String*/value, /*Object?*/flags) { + // summary: Validates an IP address + // + // description: + // Supports 5 formats for IPv4: dotted decimal, dotted hex, dotted octal, decimal and hexadecimal. + // Supports 2 formats for Ipv6. + // + // value A string. + // flags An object. All flags are boolean with default = true. + // flags.allowDottedDecimal Example, 207.142.131.235. No zero padding. + // flags.allowDottedHex Example, 0x18.0x11.0x9b.0x28. Case insensitive. Zero padding allowed. + // flags.allowDottedOctal Example, 0030.0021.0233.0050. Zero padding allowed. + // flags.allowDecimal Example, 3482223595. A decimal number between 0-4294967295. + // flags.allowHex Example, 0xCF8E83EB. Hexadecimal number between 0x0-0xFFFFFFFF. + // Case insensitive. Zero padding allowed. + // flags.allowIPv6 IPv6 address written as eight groups of four hexadecimal digits. + // flags.allowHybrid IPv6 address written as six groups of four hexadecimal digits + // followed by the usual 4 dotted decimal digit notation of IPv4. x:x:x:x:x:x:d.d.d.d + + var re = new RegExp("^" + dojo.regexp.ipAddress(flags) + "$", "i"); + return re.test(value); // Boolean +} + + +dojo.validate.isUrl = function(/*String*/value, /*Object?*/flags) { + // summary: Checks if a string could be a valid URL + // value: A string + // flags: An object + // flags.scheme Can be true, false, or [true, false]. + // This means: required, not allowed, or either. + // flags in regexp.host can be applied. + // flags in regexp.ipAddress can be applied. + // flags in regexp.tld can be applied. + + var re = new RegExp("^" + dojo.regexp.url(flags) + "$", "i"); + return re.test(value); // Boolean +} + +dojo.validate.isEmailAddress = function(/*String*/value, /*Object?*/flags) { + // summary: Checks if a string could be a valid email address + // + // value: A string + // flags: An object + // flags.allowCruft Allow address like . Default is false. + // flags in regexp.host can be applied. + // flags in regexp.ipAddress can be applied. + // flags in regexp.tld can be applied. + + var re = new RegExp("^" + dojo.regexp.emailAddress(flags) + "$", "i"); + return re.test(value); // Boolean +} + +dojo.validate.isEmailAddressList = function(/*String*/value, /*Object?*/flags) { + // summary: Checks if a string could be a valid email address list. + // + // value A string. + // flags An object. + // flags.listSeparator The character used to separate email addresses. Default is ";", ",", "\n" or " ". + // flags in regexp.emailAddress can be applied. + // flags in regexp.host can be applied. + // flags in regexp.ipAddress can be applied. + // flags in regexp.tld can be applied. + + var re = new RegExp("^" + dojo.regexp.emailAddressList(flags) + "$", "i"); + return re.test(value); // Boolean +} + +dojo.validate.getEmailAddressList = function(/*String*/value, /*Object?*/flags) { + // summary: Check if value is an email address list. If an empty list + // is returned, the value didn't pass the test or it was empty. + // + // value: A string + // flags: An object (same as dojo.validate.isEmailAddressList) + + if(!flags) { flags = {}; } + if(!flags.listSeparator) { flags.listSeparator = "\\s;,"; } + + if ( dojo.validate.isEmailAddressList(value, flags) ) { + return value.split(new RegExp("\\s*[" + flags.listSeparator + "]\\s*")); // Array + } + return []; // Array +} Index: openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/xml/Parse.js =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/xml/Attic/Parse.js,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/xml/Parse.js 7 Nov 2006 02:38:06 -0000 1.1 @@ -0,0 +1,235 @@ +/* + Copyright (c) 2004-2006, The Dojo Foundation + All Rights Reserved. + + Licensed under the Academic Free License version 2.1 or above OR the + modified BSD license. For more information on Dojo licensing, see: + + http://dojotoolkit.org/community/licensing.shtml +*/ + +dojo.provide("dojo.xml.Parse"); +dojo.require("dojo.dom"); + +//TODO: determine dependencies +// currently has dependency on dojo.xml.DomUtil nodeTypes constants... + +/* + generic class for taking a node and parsing it into an object +*/ + +// using documentFragment nomenclature to generalize in case we don't want to require passing a collection of nodes with a single parent + +dojo.xml.Parse = function(){ + + // supported dojoTagName's: + // + // => prefix:tag + // => dojo:tag + // => dojo:tag + // => dojo:type + // => prefix:type + // => dojo:type + // => dojo:type + + // get normalized (lowercase) tagName + // some browsers report tagNames in lowercase no matter what + function getTagName(node){ + return ((node)&&(node.tagName) ? node.tagName.toLowerCase() : ''); + } + + // locate dojo qualified tag name + function getDojoTagName(node){ + var tagName = getTagName(node); + if (!tagName){ + return ''; + } + // any registered tag + if((dojo.widget)&&(dojo.widget.tags[tagName])){ + return tagName; + } + // => prefix:tag + var p = tagName.indexOf(":"); + if(p>=0){ + return tagName; + } + // => dojo:tag + if(tagName.substr(0,5) == "dojo:"){ + return tagName; + } + if(dojo.render.html.capable && dojo.render.html.ie && node.scopeName != 'HTML'){ + return node.scopeName.toLowerCase() + ':' + tagName; + } + // => dojo:tag + if(tagName.substr(0,4) == "dojo"){ + // FIXME: this assumes tag names are always lower case + return "dojo:" + tagName.substring(4); + } + // => prefix:type + // => dojo:type + var djt = node.getAttribute("dojoType") || node.getAttribute("dojotype"); + if(djt){ + if (djt.indexOf(":")<0){ + djt = "dojo:"+djt; + } + return djt.toLowerCase(); + } + // => dojo:type + djt = node.getAttributeNS && node.getAttributeNS(dojo.dom.dojoml,"type"); + if(djt){ + return "dojo:" + djt.toLowerCase(); + } + // => dojo:type + try{ + // FIXME: IE really really doesn't like this, so we squelch errors for it + djt = node.getAttribute("dojo:type"); + }catch(e){ + // FIXME: log? + } + if(djt){ return "dojo:"+djt.toLowerCase(); } + // => dojo:type + if((!dj_global["djConfig"])|| (djConfig["ignoreClassNames"])){ + // FIXME: should we make this optionally enabled via djConfig? + var classes = node.className||node.getAttribute("class"); + // FIXME: following line, without check for existence of classes.indexOf + // breaks firefox 1.5's svg widgets + if((classes )&&(classes.indexOf)&&(classes.indexOf("dojo-")!=-1)){ + var aclasses = classes.split(" "); + for(var x=0, c=aclasses.length; x as nodes that should be parsed. Ignore these + if((tagName)&&(tagName.indexOf("/")==0)){ + return null; + } + + // look for a dojoml qualified name + // process dojoml only when optimizeForDojoML is true + var process = true; + if(optimizeForDojoML){ + var dojoTagName = getDojoTagName(node); + tagName = dojoTagName || tagName; + process = Boolean(dojoTagName); + } + + if(node && node.getAttribute && node.getAttribute("parseWidgets") && node.getAttribute("parseWidgets") == "false") { + return {}; + } + + parsedNodeSet[tagName] = []; + var pos = tagName.indexOf(":"); + if(pos>0){ + var ns = tagName.substring(0,pos); + parsedNodeSet["ns"] = ns; + // honor user namespace filters + if((dojo.ns)&&(!dojo.ns.allow(ns))){process=false;} + } + + if(process){ + var attributeSet = this.parseAttributes(node); + for(var attr in attributeSet){ + if((!parsedNodeSet[tagName][attr])||(typeof parsedNodeSet[tagName][attr] != "array")){ + parsedNodeSet[tagName][attr] = []; + } + parsedNodeSet[tagName][attr].push(attributeSet[attr]); + } + // FIXME: we might want to make this optional or provide cloning instead of + // referencing, but for now, we include a node reference to allow + // instantiated components to figure out their "roots" + parsedNodeSet[tagName].nodeRef = node; + parsedNodeSet.tagName = tagName; + parsedNodeSet.index = thisIdx||0; + } + + var count = 0; + for(var i = 0; i < node.childNodes.length; i++){ + var tcn = node.childNodes.item(i); + switch(tcn.nodeType){ + case dojo.dom.ELEMENT_NODE: // element nodes, call this function recursively + count++; + var ctn = getDojoTagName(tcn) || getTagName(tcn); + if(!parsedNodeSet[ctn]){ + parsedNodeSet[ctn] = []; + } + parsedNodeSet[ctn].push(this.parseElement(tcn, true, optimizeForDojoML, count)); + if( (tcn.childNodes.length == 1)&& + (tcn.childNodes.item(0).nodeType == dojo.dom.TEXT_NODE)){ + parsedNodeSet[ctn][parsedNodeSet[ctn].length-1].value = tcn.childNodes.item(0).nodeValue; + } + break; + case dojo.dom.TEXT_NODE: // if a single text node is the child, treat it as an attribute + if(node.childNodes.length == 1){ + parsedNodeSet[tagName].push({ value: node.childNodes.item(0).nodeValue }); + } + break; + default: break; + /* + case dojo.dom.ATTRIBUTE_NODE: // attribute node... not meaningful here + break; + case dojo.dom.CDATA_SECTION_NODE: // cdata section... not sure if this would ever be meaningful... might be... + break; + case dojo.dom.ENTITY_REFERENCE_NODE: // entity reference node... not meaningful here + break; + case dojo.dom.ENTITY_NODE: // entity node... not sure if this would ever be meaningful + break; + case dojo.dom.PROCESSING_INSTRUCTION_NODE: // processing instruction node... not meaningful here + break; + case dojo.dom.COMMENT_NODE: // comment node... not not sure if this would ever be meaningful + break; + case dojo.dom.DOCUMENT_NODE: // document node... not sure if this would ever be meaningful + break; + case dojo.dom.DOCUMENT_TYPE_NODE: // document type node... not meaningful here + break; + case dojo.dom.DOCUMENT_FRAGMENT_NODE: // document fragment node... not meaningful here + break; + case dojo.dom.NOTATION_NODE:// notation node... not meaningful here + break; + */ + } + } + //return (hasParentNodeSet) ? parsedNodeSet[node.tagName] : parsedNodeSet; + //if(parsedNodeSet.tagName)dojo.debug("parseElement: RETURNING NODE WITH TAGNAME "+parsedNodeSet.tagName); + return parsedNodeSet; + }; + + /* parses a set of attributes on a node into an object tree */ + this.parseAttributes = function(node){ + var parsedAttributeSet = {}; + var atts = node.attributes; + // TODO: should we allow for duplicate attributes at this point... + // would any of the relevant dom implementations even allow this? + var attnode, i=0; + while((attnode=atts[i++])){ + if((dojo.render.html.capable)&&(dojo.render.html.ie)){ + if(!attnode){ continue; } + if((typeof attnode == "object")&& + (typeof attnode.nodeValue == 'undefined')|| + (attnode.nodeValue == null)|| + (attnode.nodeValue == '')){ + continue; + } + } + + var nn = attnode.nodeName.split(":"); + nn = (nn.length == 2) ? nn[1] : attnode.nodeName; + + parsedAttributeSet[nn] = { + value: attnode.nodeValue + }; + } + return parsedAttributeSet; + }; +}; Index: openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/xml/XslTransform.js =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/xml/Attic/XslTransform.js,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/ajaxhelper/www/resources/dojo-ajax/src/xml/XslTransform.js 7 Nov 2006 02:38:06 -0000 1.1 @@ -0,0 +1,188 @@ +/* + Copyright (c) 2004-2006, The Dojo Foundation + All Rights Reserved. + + Licensed under the Academic Free License version 2.1 or above OR the + modified BSD license. For more information on Dojo licensing, see: + + http://dojotoolkit.org/community/licensing.shtml +*/ + +dojo.provide("dojo.xml.XslTransform"); + +dojo.xml.XslTransform = function(/*String*/ xsltUri) { + // summary: + // dojo.xml.XslTransform is a convenience object that takes the URI String + // of an XSL file as a constructor argument. + // After each transformation all parameters will be cleared. + + // Note this is supported by IE and Mozilla ONLY. + + dojo.debug("XslTransform is supported by Internet Explorer and Mozilla, with limited support in Opera 9 (no document function support)."); + var IS_IE = window.ActiveXObject ? true : false; + var ACTIVEX_DOMS = [ + "Msxml2.DOMDocument.5.0", + "Msxml2.DOMDocument.4.0", + "Msxml2.DOMDocument.3.0", + "MSXML2.DOMDocument", + "MSXML.DOMDocument", + "Microsoft.XMLDOM" + ]; + var ACTIVEX_FT_DOMS = [ + "Msxml2.FreeThreadedDOMDocument.5.0", + "MSXML2.FreeThreadedDOMDocument.4.0", + "MSXML2.FreeThreadedDOMDocument.3.0" + ]; + var ACTIVEX_TEMPLATES = [ + "Msxml2.XSLTemplate.5.0", + "Msxml2.XSLTemplate.4.0", + "MSXML2.XSLTemplate.3.0" + ]; + + function getActiveXImpl(activeXArray) { + for (var i=0; i < activeXArray.length; i++) { + try { + var testObj = new ActiveXObject(activeXArray[i]); + if (testObj) { + return activeXArray[i]; + } + } catch (e) {} + } + dojo.raise("Could not find an ActiveX implementation in:\n\n " + activeXArray); + } + + if (xsltUri == null || xsltUri == undefined) { + dojo.raise("You must pass the URI String for the XSL file to be used!"); + return false; + } + + var xsltDocument = null; + var xsltProcessor = null; + if (IS_IE) { + xsltDocument = new ActiveXObject(getActiveXImpl(ACTIVEX_FT_DOMS)); + xsltDocument.async = false; + } else { + xsltProcessor = new XSLTProcessor(); + xsltDocument = document.implementation.createDocument("", "", null); + xsltDocument.addEventListener("load", onXslLoad, false); + } + xsltDocument.load(xsltUri); + + if (IS_IE) { + var xslt = new ActiveXObject(getActiveXImpl(ACTIVEX_TEMPLATES)); + xslt.stylesheet = xsltDocument; + xsltProcessor = xslt.createProcessor(); + } + + function onXslLoad() { + xsltProcessor.importStylesheet(xsltDocument); + } + + function getResultDom(xmlDoc, params) { + if (IS_IE) { + addIeParams(params); + var result = getIeResultDom(xmlDoc); + removeIeParams(params); + return result; + } else { + return getMozillaResultDom(xmlDoc, params); + } + } + + function addIeParams(params) { + if (params != null) { + for (var i=0; i