LWWidget.Data.Loader = Base.Comp.inherits({ constructor: function (login, password) { this.base(); this.addEvent('CommError'); this.addEvent('FatalError'); this.addEvent('Kick'); this.addEvent('Load'); this.addEvent('LoginFailure'); this.addEvent('Maintenance'); this.addSlot('loaderDestroyed'); this.addSlot('dataReceived'); this.loader = new Base.XMLLoader('', true); this.loader.bindEvent('Destroy', 'loaderDestroyed', this); this.loader.bindEvent('NetworkError', 'onCommError', this); this.loader.bindEvent('ServerError', 'onCommError', this); this.loader.bindEvent('Timeout', 'onCommError', this); this.loader.bindEvent('Unsupported', 'onCommError', this); this.loader.bindEvent('Aborted', 'onCommError', this); this.loader.bindEvent('Loaded', 'dataReceived', this); this.params = new Base.Util.Hashtable(); this.params.put('__s', '1'); this.params.put('__l', login); this.params.put('__p', password); }, destroy: function () { if (this.loader) { this.loader.destroy(); } this.base(); }, load: function (from) { if (this.loader.isLoading) { return false; } this.loader.changeParameters(LWWidget.base + '/index.php/' + from + '.xml'); this.loader.load(this.params); }, loaderDestroyed: function () { this.loader = null; }, dataReceived: function (data) { var _xml = Base.Util.parseXML(data); if (!_xml) { this.onCommError(); return; } var _doc = _xml.documentElement; if (_doc.nodeName == 'Maintenance') { var _r, _u, _c; _r = LWWidget.Data.Loader.getXMLText(_doc, 'Reason'); _u = LWWidget.Data.Loader.getXMLText(_doc, 'Until'); _c = LWWidget.Data.Loader.getXMLText(_doc, 'Current'); this.onMaintenance(_r, _u, _c); } else if (_doc.nodeName == 'FatalError') { this.onFatalError(_doc.getAttribute('code'), LWWidget.Data.Loader.getXMLText(_doc, 'Text')); } else if (_doc.nodeName == 'Kicked') { this.onKick(LWWidget.Data.Loader.getXMLText(_doc, 'Reason')); } else if (_doc.nodeName == 'Failed') { this.onLoginFailure(_doc.getAttribute('code')); } else { var _data = LWWidget.Data.Loader.parse(_doc); if (_data) { this.onLoad(_data); } else { this.onCommError(); } } } }, { getXMLText: function (node, name) { var _t = ''; for (var i=0;i<node.childNodes.length;i++) { var _c = node.childNodes[i]; if (_c.nodeType == 1 && _c.nodeName == name) { _t += _c.childNodes[0].nodeValue; } } return _t; }, parse: function (xmlNode) { if (xmlNode.nodeType != 1 || xmlNode.nodeName != 'Node') { return null; } var _in = (xmlNode.getAttribute('node') == '1'), _n; if (_in) { _n = new LWWidget.Data.Node(xmlNode.getAttribute('name')); } else { _n = new LWWidget.Data.Leaf(xmlNode.getAttribute('name'), LWWidget.Data.Loader.getXMLText(xmlNode, 'Text')); } for (var i=0;i<xmlNode.childNodes.length;i++) { var _c = xmlNode.childNodes[i]; if (_c.nodeType != 1) { continue; } if (_c.nodeName == 'Attr') { var _t; if (_c.childNodes.length) { _t = _c.childNodes[0].nodeValue; } else { _t = ''; } _n.setAttribute(_c.getAttribute('name'), _t); } else if (_c.nodeName == 'Node' && _in) { _n.addChild(this.parse(_c)); } } return _n; } });