/*
* Nav, Version 2.0
*
* @author: Tri Nguyen
* @website: http://www.midnightprojects.com
* @email: tri@midnightprojects.com
* @version: 2.0.0
* @modified: 03/19/07
*/
import mx.events.EventDispatcher;
import mx.utils.Delegate;
//--------------------------------------------
class com.midnightprojects.ui.Nav extends MovieClip {
//variables
private var _instance:Nav;
private var _curSelect:MovieClip;
private var _length:Number;
private var _id:Number;
private var _audioIn:Sound;
private var _audioOut:Sound;
private var _audioSelect:Sound;
private var navButtons:MovieClip;
private var dispatchEvent:Function;
public var addEventListener:Function;
public var removeEventListener:Function;
//--------------------------------------------
//constructor
public function Nav() {
instance = this;
EventDispatcher.initialize(this);
}
//--------------------------------------------
public function get instance():Nav {
return _instance;
}
//--------------------------------------------
public function set instance(_instance:Nav):Void {
this._instance = _instance;
}
//--------------------------------------------
public function get curSelect():MovieClip {
return _curSelect;
}
//--------------------------------------------
public function set curSelect(_curSelect:MovieClip):Void {
this._curSelect = _curSelect;
}
//--------------------------------------------
public function get length():Number {
return _length;
}
//--------------------------------------------
public function set length(_length:Number):Void {
this._length = _length;
}
//--------------------------------------------
public function get id():Number {
return _id;
}
//--------------------------------------------
public function set id(_id:Number):Void {
this._id = _id;
}
//--------------------------------------------
public function get audioIn():Sound {
return _audioIn;
}
//--------------------------------------------
public function set audioIn(_audioIn:Sound):Void {
this._audioIn = _audioIn;
}
//--------------------------------------------
public function get audioOut():Sound {
return _audioOut;
}
//--------------------------------------------
public function set audioOut(_audioOut:Sound):Void {
this._audioOut = _audioOut;
}
//--------------------------------------------
public function get audioSelect():Sound {
return _audioSelect;
}
//--------------------------------------------
public function set audioSelect(_audioSelect:Sound):Void {
this._audioSelect = _audioSelect;
}
//--------------------------------------------
public function init(o:Object):Void {
}
//--------------------------------------------
public function reset():Void {
navFun(null, "select");
for (var i = 0; i < length; i ++) {
this["a" + i].removeMovieClip();
}
}
//--------------------------------------------
public function create(o:Object):Void {
reset();
length = o.path.length;
for (var i = 0; i < length; i ++) {
var obj = navButtons.attachMovie("navButton", "a" + i, navButtons.getNextHighestDepth());
for (var j in o.path[i].attributes) {
obj[j] = o.path[i].attributes[j];
}
obj.navLabel.tField.htmlText = obj.label;
obj.navLabel.tField.autoSize = true;
MovieClipButton.enable(this, obj, navFun, false);
if (o.grid) {
obj._x = Math.floor(i % o.grid) * o.x;
obj._y = Math.floor(i / o.grid) * o.y;
}
else {
if (o.x) if (i > 0) obj._x = navButtons["a" + (i - 1)]._x + navButtons["a" + (i - 1)]._width + o.x;
if (o.y) if (i > 0) obj._y = navButtons["a" + (i - 1)]._y + navButtons["a" + (i - 1)]._height + o.y;
}
}
}
//--------------------------------------------
//nav controller
private function navFun(obj:MovieClip, cmd:String):Void {
if (curSelect != obj) {
if (cmd != "select" && cmd != "press") {
ObjCmd.create(obj, cmd);
(cmd == "in") ? audioIn.start() : audioOut.start();
}
else {
if (cmd == "select") {
ObjCmd.create(curSelect, "out");
curSelect = obj;
ObjCmd.create(curSelect, "in");
trace("selected nav label: " + obj.label);
if (obj != null) {
if (obj.active == "true") {
if (obj.target == "") {
audioSelect.start();
ObjCmd.create(curSelect, "out");
curSelect = obj;
ObjCmd.create(curSelect, "in");
id = Number(curSelect._name.slice(1));
dispatchEvent({type:"onNavSelect", obj:curSelect});
}
else {
Browser.launch(obj.URL, obj.target);
}
}
}
}
}
}
}
}