/*
  By Hangring
  #2008.11.01#
  ---
*/
var frame;
var diagram;
Events.AttachEvent(window, 'load', function () {
	Debug.Trace = true;
	
	frame = new Frame();
	frame.Create();
	
	diagram = new Diagram();
	diagram.Frame = frame;
	
	createClassGame();
});

// Class.Game
function createClassGame () {
	var game = new Diagram.Class('Class.Game');
	diagram.AddClass(game);
	game.Width = 300;
	oNode.AddNode(game.Create());
	
	/// attribute
	// private _config
	var _config = new Diagram.Attribute('_config : Config');
	_config.Create();
	game.AddAttribute(_config);
	_config.Click = function () {
		createClassConfig(game, this);
	};
	
	// private _cookie
	var _cookie = new Diagram.Attribute('_cookie : Cookie');
	_cookie.Create();
	game.AddAttribute(_cookie);
	_cookie.Click = function () {
		createClassCookie(game, this);
	};
	
	// private _data
	var _data = new Diagram.Attribute('_data : Data');
	_data.Create();
	game.AddAttribute(_data);
	_data.Click = function () {
		createClassData(game, this);
	};
	
	// private _asset
	var _asset = new Diagram.Attribute('_asset : Asset');
	_asset.Create();
	game.AddAttribute(_asset);
	_asset.Click = function () {
		createClassAsset(game, this);
	};
	
	// private _player
	var _player = new Diagram.Attribute('_player : Player');
	_player.Create();
	game.AddAttribute(_player);
	_player.Click = function () {
		createClassPlayer(game, this);
	};
	
	game.AddAttributes([
		['_enabledAddChild : Boolean', 'get', '表示是否可添加子对象']
	]);
	
	game.AddSAttributes([
		['Self : Game', 'get', '结构框架'],
		['Frame : Object', '', '结构框架']
	]);
	
	/// function
	game.AddFunctions([
		['Game()', 'public', '构造函数'],
		['addedToStage(1) : void', 'private', ''],
		['loadResource(1) : void', '', ''],
		['loginVerify() : void', 'private', ''],
		['loginSuccess() : void', 'public', ''],
		['dataInitLoaded(1) : void', 'private', ''],
		['assetInitLoaded(1) : void', 'private', ''],
		['logout() : void', 'public', ''],
		['addChild(1) : DisplayObject', 'public', ''],
		['addChildAt(1) : DisplayObject', 'public', '']
	]);
}

// attribute or function click
function ItemClick (_class /* : Class */) {
	if (_class.Popup) {
		_class.Popup.Container.style.display =
			_class.Popup.Container.style.display == ''
			? 'none' : '';
	}
}

// Class.Config
function createClassConfig (game /* : Class */, config /* : Frame.Attribute */) {
	if (config.Popup) {
		frame.Popup.Add(config.Popup.Container, game.Level + 1);
		return;
	}
	var _config = config.Popup = new Diagram.Class('Class.Config');
	diagram.AddClass(_config);
	_config.PopupParent = config;
	_config.Closeable = true;
	_config.Level = game.Level + 1;
	_config.Width = 250;
	_config.StyleName = 'class-popup';
	
	//oNode.AddNode(_config.Create());
	frame.Popup.Add(_config.Create(), game.Level + 1);
	Global.SetPosition(_config.Container, config.Container);
	
	// popup closed to call
	_config.Container.Close = function () {
		config.PopupClose();
	};
	
	// add attribute
	_config.AddAttributes([
		['_xmlFile : String', '', 'XML配置档地址'],
		['_options : Object', 'get', '存储<option>节点的内容'],
		['_interfaces : Object', 'get', '存储<interface>节点的内容']
	]);
	
	// add function
	_config.AddFunctions([
		['Config()', 'public', '构造函数'],
		['loadConfig() : void', 'public', ''],
		['loadXML(1) : void', 'private', ''],
		['extractXML(1) : Object', 'private', ''],
		['getAssetUrl(1) : String', 'public', '获取资源地址']
	]);
}

// Class.Cookie
function createClassCookie (game /* : Class */, cookie /* : Frame.Attribute */) {
	if (cookie.Popup) {
		frame.Popup.Add(cookie.Popup.Container, game.Level + 1);
		return;
	}
	var _cookie = cookie.Popup = new Diagram.Class('Class.Cookie');
	diagram.AddClass(_cookie);
	_cookie.PopupParent = cookie;
	_cookie.Closeable = true;
	_cookie.Level = game.Level + 1;
	_cookie.Width = 250;
	_cookie.StyleName = 'class-popup';
	
	//oNode.AddNode(_cookie.Create());
	frame.Popup.Add(_cookie.Create(), game.Level + 1);
	Global.SetPosition(_cookie.Container, cookie.Container);
	
	// popup closed to call
	_cookie.Container.Close = function () {
		cookie.PopupClose();
	};
	
	// add attribute
	_cookie.AddAttributes([
		['_so : SharedObject', '', 'XML配置档地址']
	]);
	
	// add function
	_cookie.AddFunctions([
		['Cookie()', 'public', '构造函数'],
		['setCookie(2) : void', 'public', '保存本地信息'],
		['getCookie(1) : void', 'public', '获取本地信息'],
		['clearCookie() : void', 'public', '清理本地信息']
	]);
}

// Class.Resource.Data
function createClassData (game /* : Class */, data /* : Frame.Attribute */) {
	if (data.Popup) {
		frame.Popup.Add(data.Popup.Container, game.Level + 1);
		return;
	}
	var _data = data.Popup = new Diagram.Class('Class.Resource.Data');
	diagram.AddClass(_data);
	_data.PopupParent = data;
	_data.Closeable = true;
	_data.Level = game.Level + 1;
	_data.Width = 250;
	_data.StyleName = 'class-popup';
	
	//oNode.AddNode(_data.Create());
	frame.Popup.Add(_data.Create(), game.Level + 1);
	Global.SetPosition(_data.Container, data.Container);
	
	// popup closed to call
	_data.Container.Close = function () {
		data.PopupClose();
	};
}

// Class.Resource.Data
function createClassAsset (game /* : Class */, asset /* : Frame.Attribute */) {
	if (asset.Popup) {
		frame.Popup.Add(asset.Popup.Container, game.Level + 1);
		return;
	}
	var _asset = asset.Popup = new Diagram.Class('Class.Resource.Asset');
	diagram.AddClass(_asset);
	_asset.PopupParent = asset;
	_asset.Closeable = true;
	_asset.Level = game.Level + 1;
	_asset.Width = 250;
	_asset.StyleName = 'class-popup';
	
	//oNode.AddNode(_asset.Create());
	frame.Popup.Add(_asset.Create(), game.Level + 1);
	Global.SetPosition(_asset.Container, asset.Container);
	
	// popup closed to call
	_asset.Container.Close = function () {
		asset.PopupClose();
	};
}

// Class.Resource.Data
function createClassPlayer (game /* : Class */, player /* : Frame.Attribute */) {
	if (player.Popup) {
		frame.Popup.Add(player.Popup.Container, game.Level + 1);
		return;
	}
	var _player = player.Popup = new Diagram.Class('Class.Player');
	diagram.AddClass(_player);
	_player.PopupParent = player;
	_player.Closeable = true;
	_player.Level = game.Level + 1;
	_player.StyleName = 'class-popup';
	
	//oNode.AddNode(_player.Create());
	frame.Popup.Add(_player.Create(), game.Level + 1);
	Global.SetPosition(_player.Container, player.Container);
	
	// popup closed to call
	_player.Container.Close = function () {
		player.PopupClose();
	};
}