эта... там разбираться - очень долго и скучно, и не интересно....
Вот нарыл из своих старых экспериментов, в принципе все работало без глюков даже вроде... К сожалению там в коде будет немного лишнего и почти никаких каментов, ну так сложилось, если будешь пользовать - спрашивай тут.
класс для загрузки ХМЛя и частичной разборки

Код:
/**
* This class loads XML.
* It has these methods:
* get_length() - returns the number of the childnodes in the root node.
* get_anyVal() - returns a value of the attribute at the specified node
* get_node() - returns an XML produced by parsing specific childnode of the loaded XML.
*/
class XMLLoader extends XML {
var watchedNode:XML;
function XMLLoader(_str:String) {
this.ignoreWhite = true;
watchedNode = this;
this.onLoad = function(ok:Boolean) {
if (ok) {
overLoad();
}
};
this.load(_str);
}
public function overLoad(){};
public function get_val(_str:String, nd:Number):String {
return watchedNode.childNodes[0].childNodes[nd].attributes[_str];
}
public function get_length():Number {
return watchedNode.childNodes[0].childNodes.length;
}
public function get_node(n:Number):XML {
var tmp_xml:XML = new XML();
var found:Boolean = false;
tmp_xml.parseXML(watchedNode.toString());
for (var i = 0; i<tmp_xml.childNodes[0].childNodes.length; i++) {
if (tmp_xml.childNodes[0].childNodes[i].attributes.name == n.toString()) {
tmp_xml.parseXML(tmp_xml.childNodes[0].childNodes[i]);
found = true;
break;
}
}
if (!found) {
tmp_xml = null;
}
return tmp_xml;
}
public function get_anyVal(_str:String, _arr:Array):String {
var tmp_xml:XML = new XML(this.watchedNode.childNodes[0].toString());
var tmp_nd:XMLNode = tmp_xml;
var tmp_str:String = "";
for (var i:Number = 0; i<_arr.length; i++) {
if (tmp_nd.childNodes[_arr[i]] != null) {
tmp_nd = tmp_nd.childNodes[_arr[i]];
}
}
tmp_str = tmp_nd.attributes[_str];
return tmp_str;
}
}
Это вообще страшно... но, опять же, чем богаты, тем и рады
Этот класс загружает картинки

Код:
/**
* This class loads pictures.
*/
import mx.events.EventDispatcher;
class PicLoader extends MovieClipLoader {
var l_obj:Object = {};
function PicLoader(mc:MovieClip, _str:String, dim:Object) {
var tgt:MovieClip = mc;
var w:Number = mc._width;
var h:Number = mc._height;
var d:Object = dim;
this.l_obj = {tgt:this};
EventDispatcher.initialize(this.l_obj);
this.l_obj.onLoadComplete = function(mc:MovieClip) {
var dd:Object = d;
var lo:Object = this;
mc._done = false;
mc.onEnterFrame = function() {
mc._height = dd.h;
mc._width = dd.w;
if (mc._height != 0 && mc._width == dd.w) {
mc._done = true;
}
if (mc._done) {
this._parent.onResized();
this.dispatchEvent({type:this.event});
delete this.onEnterFrame;
}
};
};
l_obj.onDone = this.onDone;
this.addListener(this.l_obj);
this.loadClip(_str, tgt);
}
function onDone() {
}
}
класс слайдера для показа превьюшек
_root._gp._ug - путь к объекту галлереи, знаю, что криво, но уж как получилось =)

Код:
/**
* This class is a part of the slideshow (pictures gallery)
* it creates a bar with prewievs
* It has the following methods:
* slide() - moves the previews to the left/right
* freez() - stops moving previews
* onSliderLoad() - returns an array of the properties of the first loaded preview
*/
class USlider extends MovieClip {
var Ubody:MovieClip;
var Umask:MovieClip;
var Uholder:MovieClip;
var x_loader:XMLLoader;
var p_loader:PicLoader;
var finished:Boolean = false;
var fstNode:Number = -1;
function USlider(mc:MovieClip, coord:Object, nd:Number) {
this.Ubody = mc.attachMovie("rect", "Ubody", mc.getNextHighestDepth());
this.Ubody._width = coord.W;
this.Ubody._height = coord.H;
this.Ubody._alpha = 0;
this.Uholder = mc.createEmptyMovieClip("Uholder", mc.getNextHighestDepth());
with (this.Uholder) {
beginFill(0xffffff, 1);
moveTo(0, 0);
lineTo(coord.W, 0);
lineTo(coord.W, coord.H);
lineTo(0, coord.H);
lineTo(0, 0);
endFill();
}
this.Umask = mc.createEmptyMovieClip("Umask", mc.getNextHighestDepth());
with (this.Umask) {
beginFill(0xffffff, 1);
moveTo(0, 0);
lineTo(coord.W, 0);
lineTo(coord.W, coord.H);
lineTo(0, coord.H);
lineTo(0, 0);
endFill();
}
this.Uholder.setMask(this.Umask);
x_loader = new XMLLoader("xmldata/en_image.xml");
var tgt:MovieClip = this.Uholder;
tgt.fn = this.fstNode;
tgt._hd = "$";
tgt._ds = "$";
tgt.fd = this.finished;
var n:Number = nd;
x_loader.overLoad = function() {
var _xml:XML = this.get_node(n);
var ld:Number = 0;
var i:Number = 1;
var vn:XMLLoader = this;
tgt.onEnterFrame = function() {
if (ld<i) {
var w_xml:XMLNode = _xml.childNodes[0].childNodes[ld];
var nm:String = w_xml.attributes["name"];
var hd:String = w_xml.attributes["heading"];
var ds:String = w_xml.attributes["des"];
var preview:MovieClip = tgt.attachMovie("rect", "rect"+i, tgt.getNextHighestDepth(), {_x:ld*75+2.5, _y:2.5});
preview._width = 70;
preview._height = 70;
var p_loader = new PicLoader(preview, "album/"+nd+"/small/"+nm+".jpg", {h:preview._height, w:preview._width});
ld++;
}
p_loader.onLoadComplete = function(mc:MovieClip) {
(tgt._width);
mc._parent.fn == -1 ? mc._parent.fn=Number(nm) : "";
mc._parent._hd == "$" ? mc._parent._hd=hd : "";
mc._parent._ds == "$" ? mc._parent._ds=ds : "";
mc._nm = nm;
mc._hd = hd;
mc._ds = ds;
mc._n = n;
_root._gp._ug.updPreText(i, _xml.childNodes[0].childNodes.length);
i++;
mc.onRelease = function() {
_root._gp._ug.changePict(this._nm, this._n, [this._hd, this._ds]);
};
};
if (ld>=_xml.childNodes[0].childNodes.length) {
this.fd = true;
delete this.onEnterFrame;
}
};
};
}
function slide(dir:Boolean):Void {
var step = 6;
if (dir) {
this.Uholder.onEnterFrame = function() {
this._x += step;
if (this._x>0) {
this._x = 0;
delete this.onEnterFrame;
}
};
} else {
this.Uholder.onEnterFrame = function() {
this._x -= step;
if (this._x+this._width<this._parent.Umask._width-2.5) {
this._x = this._parent.Umask._width-this._width-2.5;
delete this.onEnterFrame;
}
};
}
}
function freez():Void {
delete this.Uholder.onEnterFrame;
}
function onSliderLoad():Array {
if (this.Uholder.fd) {
return [this.Uholder.fn, this.Uholder._hd, this.Uholder._ds];
} else {
return [-1, "$", "$"];
}
}
}