Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse code

More IE9 fixes from Hironobu Koura

  • Loading branch information...
commit 3cb9f1a0c6ea2c4f9ac5aa3876bdfdf3b9e1f5c7 1 parent a10904d
Sebastiaan Deckers authored February 27, 2011
100  Client/js/chat-container.js
@@ -56,20 +56,20 @@ function Begin ()
56 56
 
57 57
 	/* Restore the size of the input area
58 58
 	 */
59  
-	document.getElementById( 'send-text' ).parentNode.parentNode.height = isNaN( parseInt( external.globals( 'cfg' )( 'textinputheight' ), 10 ) ) ? 60 : Math.max( 60, parseInt( external.globals( 'cfg' )( 'textinputheight' ), 10 ) );
  59
+	document.getElementById( 'send-text' ).parentNode.parentNode.height = isNaN( parseInt( external.globals( 'cfg' ).Item( 'textinputheight' ), 10 ) ) ? 60 : Math.max( 60, parseInt( external.globals( 'cfg' ).Item( 'textinputheight' ), 10 ) );
60 60
 
61 61
 	/* Load pending trackers
62 62
 	 */
63 63
 	var TrackerNames = ( new VBArray( SessionPool.TrackersLoading.Keys() ) ).toArray().sort();
64  
-	if ( external.globals( 'cfg' )( 'tabbedchat' ).toString() == 'true' )
  64
+	if ( external.globals( 'cfg' ).Item( 'tabbedchat' ).toString() == 'true' )
65 65
 		for ( var i = SessionPool.TrackersLoading.Count - SessionPool.ContainersLoading.Count - 1; i >= 0; i-- )
66 66
 		{
67  
-			var Address = SessionPool.TrackersLoading( TrackerNames[i] );
  67
+			var Address = SessionPool.TrackersLoading.Item( TrackerNames[i] );
68 68
 			gContainer.CreateTracker( Address );
69 69
 		}
70 70
 	else
71 71
 	{
72  
-		var Address = SessionPool.TrackersLoading( TrackerNames[ SessionPool.ContainersLoading.Count ] );
  72
+		var Address = SessionPool.TrackersLoading.Item( TrackerNames[ SessionPool.ContainersLoading.Count ] );
73 73
 		gContainer.CreateTracker( Address );
74 74
 	}
75 75
 }
@@ -98,7 +98,7 @@ function End ()
98 98
 function Close ()
99 99
 {
100 100
 	if ( gContainer.Trackers.Count == 1 )
101  
-		gContainer.Trackers( gContainer.ActiveTrackerAddress ).Close();
  101
+		gContainer.Trackers.Item( gContainer.ActiveTrackerAddress ).Close();
102 102
 	else if ( ! gContainer.Trackers.Count || external.wnd.messageBox( true, external.globals( 'Translator' ).Translate( 'chat-container', 'close_many_tabs' ), external.globals( 'softwarename' ), 4 | 48 ) == 6 )
103 103
 		external.wnd.close();
104 104
 }
@@ -134,7 +134,7 @@ function SessionContainer ( SessionPool )
134 134
 		var BackgroundPath = external.globals( 'usersdir' ) + 'Backgrounds\\' + Tracker.Background + '\\index.html';
135 135
 		if ( ! external.FileExists( BackgroundPath ) )
136 136
 		{
137  
-			external.globals( 'cfg' )( 'background' ) = '';
  137
+			external.globals( 'cfg' ).Item( 'background' ) = '';
138 138
 			Tracker.Background = '';
139 139
 			BackgroundPath = 'chat-messages.html';
140 140
 		}
@@ -181,7 +181,7 @@ function SessionContainer ( SessionPool )
181 181
 
182 182
 		var TrackerNames = ( new VBArray( this.Trackers.Keys() ) ).toArray();
183 183
 		for ( var i = 0; i < TrackerNames.length; ++i )
184  
-			this.Trackers( TrackerNames[i] ).Clear();
  184
+			this.Trackers.Item( TrackerNames[i] ).Clear();
185 185
 	}
186 186
 
187 187
 	/* Reload the user interface translation
@@ -192,8 +192,8 @@ function SessionContainer ( SessionPool )
192 192
 		MenuBarUpdate();
193 193
 		if ( this.Trackers.Exists( this.ActiveTrackerAddress ) )
194 194
 		{
195  
-			this.Trackers( this.ActiveTrackerAddress ).DrawContainerInfo();
196  
-			this.Trackers( this.ActiveTrackerAddress ).DrawTyping();
  195
+			this.Trackers.Item( this.ActiveTrackerAddress ).DrawContainerInfo();
  196
+			this.Trackers.Item( this.ActiveTrackerAddress ).DrawTyping();
197 197
 		}
198 198
 	}
199 199
 
@@ -230,7 +230,7 @@ function SessionContainer ( SessionPool )
230 230
 	 */
231 231
 	function PurgeHistory ( Address )
232 232
 	{
233  
-		var FilePath = external.globals( 'usersdir' ) + 'Profiles\\' + external.globals( 'cfg' )( 'username' ) + '@' + external.globals( 'cfg' )( 'server' ) + '\\Message Cache\\' + ( new MD5() ).digest( Address.ShortAddress() ) + '.buffer';
  233
+		var FilePath = external.globals( 'usersdir' ) + 'Profiles\\' + external.globals( 'cfg' ).Item( 'username' ) + '@' + external.globals( 'cfg' ).Item( 'server' ) + '\\Message Cache\\' + ( new MD5() ).digest( Address.ShortAddress() ) + '.buffer';
234 234
 		if ( external.FileExists( FilePath ) )
235 235
 			external.File( FilePath ).Delete();
236 236
 		external.File( FilePath ).Close();
@@ -244,7 +244,7 @@ function SessionTracker ( Address )
244 244
 	this.Address = Address;
245 245
 	this.Avatar = '';
246 246
 	this.AvatarPath = '';
247  
-	this.Background = external.globals( 'cfg' )( 'background' );
  247
+	this.Background = external.globals( 'cfg' ).Item( 'background' );
248 248
 	this.BackgroundLoading = false;
249 249
 	this.ChatState = '';
250 250
 	this.Container = null;
@@ -406,8 +406,8 @@ function SessionTracker ( Address )
406 406
 	{
407 407
 		/* Play sound
408 408
 		 */
409  
-		if ( ( ! external.wnd.isActive() || ! this.IsActive ) && external.globals( 'cfg' )( 'soundmessage' ).toString() == 'true' && ( external.globals( 'cfg' )( 'lastmode' ) < 2 || external.globals( 'cfg' )( 'lastmode' ) == 5 ) )
410  
-			external.wnd.params[0].sound_play( external.globals( 'cfg' )( 'soundmessagefile' ), false );
  409
+		if ( ( ! external.wnd.isActive() || ! this.IsActive ) && external.globals( 'cfg' ).Item( 'soundmessage' ).toString() == 'true' && ( external.globals( 'cfg' ).Item( 'lastmode' ) < 2 || external.globals( 'cfg' ).Item( 'lastmode' ) == 5 ) )
  410
+			external.wnd.params[0].sound_play( external.globals( 'cfg' ).Item( 'soundmessagefile' ), false );
411 411
 		/* Flash window
412 412
 		 */
413 413
 		if ( ! external.wnd.isActive() )
@@ -507,7 +507,7 @@ function SessionTracker ( Address )
507 507
 		var ShortAddress = this.Address.ShortAddress();
508 508
 		if ( external.globals( 'ClientRoster' ).Items.Exists( ShortAddress ) )
509 509
 		{
510  
-			var RosterItem = external.globals( 'ClientRoster' ).Items( ShortAddress );
  510
+			var RosterItem = external.globals( 'ClientRoster' ).Items.Item( ShortAddress );
511 511
 			this.Name = RosterItem.Name;
512 512
 			/* Get the resource that sent the last message
513 513
 			 */
@@ -519,7 +519,7 @@ function SessionTracker ( Address )
519 519
 					this.HookIQ = null;
520 520
 				}
521 521
 				this.LastOnline = '';
522  
-				var RosterResource = RosterItem.Resources( this.Address.Resource );
  522
+				var RosterResource = RosterItem.Resources.Item( this.Address.Resource );
523 523
 				this.Show = RosterResource.Show;
524 524
 				this.Avatar = RosterResource.Avatar.length ? RosterResource.Avatar : 'unknown-soldier.gif';
525 525
 				this.Status = RosterResource.Status;
@@ -538,7 +538,7 @@ function SessionTracker ( Address )
538 538
 				var ResourceNames = ( new VBArray( RosterItem.Resources.Keys() ) ).toArray();
539 539
 				for ( var i = 0; i < ResourceNames.length; ++i )
540 540
 				{
541  
-					var RosterResource = RosterItem.Resources( ResourceNames[i] );
  541
+					var RosterResource = RosterItem.Resources.Item( ResourceNames[i] );
542 542
 					if ( RosterResource.Priority > Priority )
543 543
 					{
544 544
 						this.Address.Resource = RosterResource.ResourceName;
@@ -588,7 +588,7 @@ function SessionTracker ( Address )
588 588
 			var ServiceAddresses = ( new VBArray( external.globals( 'ClientServices' ).Services.Keys() ) ).toArray();
589 589
 			for ( var i = 0; i < ServiceAddresses.length; ++i )
590 590
 				if ( ShortAddress == ServiceAddresses[i] )
591  
-					this.Name = external.globals( 'ClientServices' ).Services( ServiceAddresses[i] ).Name;
  591
+					this.Name = external.globals( 'ClientServices' ).Services.Item( ServiceAddresses[i] ).Name;
592 592
 		}
593 593
 
594 594
 		/* Retrieve last online time
@@ -762,7 +762,7 @@ function SessionTracker ( Address )
762 762
 			});
763 763
 
764 764
 			this.Container.HTMLTabBar.insertAdjacentElement( 'beforeEnd', this.HTMLButton );
765  
-			if ( external.globals( 'cfg' )( 'tabbedchat' ).toString() != 'true' )
  765
+			if ( external.globals( 'cfg' ).Item( 'tabbedchat' ).toString() != 'true' )
766 766
 				this.Container.HTMLTabBar.style.display = this.Container.HTMLTabBar.childNodes.length ? 'inline' : 'none';
767 767
 		}
768 768
 	}
@@ -776,7 +776,7 @@ function SessionTracker ( Address )
776 776
 			this.Clear();
777 777
 			var TrackerNames = ( new VBArray( this.Container.Trackers.Keys() ) ).toArray();
778 778
 			if ( TrackerNames.length )
779  
-				this.Container.Trackers( TrackerNames[ TrackerNames.length - 1 ] ).Activate( true );
  779
+				this.Container.Trackers.Item( TrackerNames[ TrackerNames.length - 1 ] ).Activate( true );
780 780
 			else
781 781
 				setTimeout( 'external.wnd.close()', 0 );
782 782
 		}
@@ -807,7 +807,7 @@ function SessionTracker ( Address )
807 807
 		this.HTMLArea.src = 'about:blank';
808 808
 		this.HTMLArea.removeNode( true );
809 809
 		this.HTMLButton.removeNode( true );
810  
-		if ( external.globals( 'cfg' )( 'tabbedchat' ).toString() != 'true' )
  810
+		if ( external.globals( 'cfg' ).Item( 'tabbedchat' ).toString() != 'true' )
811 811
 			this.Container.HTMLTabBar.style.display = this.Container.HTMLTabBar.childNodes.length ? 'inline' : 'none';
812 812
 	}
813 813
 
@@ -902,7 +902,7 @@ function SessionTracker ( Address )
902 902
 			 /* Deactivate old tab
903 903
 			  */
904 904
 			if ( this.Container.Trackers.Exists( this.Container.ActiveTrackerAddress ) )
905  
-				this.Container.Trackers( this.Container.ActiveTrackerAddress ).Deactivate();
  905
+				this.Container.Trackers.Item( this.Container.ActiveTrackerAddress ).Deactivate();
906 906
 
907 907
 			/* Activate new tab
908 908
 			 */
@@ -943,7 +943,7 @@ function SessionTracker ( Address )
943 943
  */
944 944
 function SendMessage ()
945 945
 {
946  
-	var Tracker = gContainer.Trackers( gContainer.ActiveTrackerAddress );
  946
+	var Tracker = gContainer.Trackers.Item( gContainer.ActiveTrackerAddress );
947 947
 
948 948
 	var dom = new ActiveXObject( 'Msxml2.DOMDocument' );
949 949
 	if ( Tracker.WantsComposing && ! Tracker.ChatState )
@@ -951,12 +951,12 @@ function SendMessage ()
951 951
 	else
952 952
 		dom.loadXML( '<message type="chat"><body/><html><body/></html><x xmlns="jisp:x:jep-0038"><name/></x><active xmlns="http://jabber.org/protocol/chatstates"/></message>' );
953 953
 
954  
-	dom.selectSingleNode( '/message/x[@xmlns="jisp:x:jep-0038"]/name' ).text = external.globals( 'cfg' )( 'emoticonset' );
  954
+	dom.selectSingleNode( '/message/x[@xmlns="jisp:x:jep-0038"]/name' ).text = external.globals( 'cfg' ).Item( 'emoticonset' );
955 955
 	dom.documentElement.firstChild.text = document.getElementById( 'send-text' ).value;
956 956
 	dom.documentElement.setAttribute( 'xml:lang', external.globals( 'language' ) );
957 957
 	dom.documentElement.setAttribute( 'id', 'sd' + ( ++external.globals( 'uniqueid' ) ) );
958 958
 	dom.documentElement.setAttribute( 'to', Tracker.Address.LongAddress() );
959  
-	dom.documentElement.setAttribute( 'from', external.globals( 'cfg' )( 'username' ) + '@' + external.globals( 'cfg' )( 'server' ) + '/' + external.globals( 'cfg' )( 'resource' ) );
  959
+	dom.documentElement.setAttribute( 'from', external.globals( 'cfg' ).Item( 'username' ) + '@' + external.globals( 'cfg' ).Item( 'server' ) + '/' + external.globals( 'cfg' ).Item( 'resource' ) );
960 960
 
961 961
 	var HTMLBody = dom.documentElement.selectSingleNode( '/message/html/body' );
962 962
 	var TextLines = document.getElementById( 'send-text' ).value.split( '\n' );
@@ -1017,7 +1017,7 @@ function SendMessage ()
1017 1017
  */
1018 1018
 function Typing ()
1019 1019
 {
1020  
-	var Tracker = gContainer.Trackers( gContainer.ActiveTrackerAddress );
  1020
+	var Tracker = gContainer.Trackers.Item( gContainer.ActiveTrackerAddress );
1021 1021
 
1022 1022
 	if ( Tracker.TypingTimeout )
1023 1023
 		clearTimeout( Tracker.TypingTimeout );
@@ -1058,7 +1058,7 @@ function Typing ()
1058 1058
  */
1059 1059
 function StopTyping ()
1060 1060
 {
1061  
-	var Tracker = gContainer.Trackers( gContainer.ActiveTrackerAddress );
  1061
+	var Tracker = gContainer.Trackers.Item( gContainer.ActiveTrackerAddress );
1062 1062
 
1063 1063
 	Tracker.TypingTimeout = null;
1064 1064
 
@@ -1116,7 +1116,7 @@ function MenuBarUpdate ( section )
1116 1116
 		var IsBlocked = external.globals( 'block' ).Exists( gContainer.ActiveTrackerAddress );
1117 1117
 		var IsOnline = gContainer.ActiveTrackerAddress.length
1118 1118
 			&& external.globals( 'ClientRoster' ).Items.Exists( gContainer.ActiveTrackerAddress )
1119  
-			&& external.globals( 'ClientRoster' ).Items( gContainer.ActiveTrackerAddress ).Resources.Count;
  1119
+			&& external.globals( 'ClientRoster' ).Items.Item( gContainer.ActiveTrackerAddress ).Resources.Count;
1120 1120
 
1121 1121
 		var contact = external.newPopupMenu;
1122 1122
 		contact.AddItem( Connected && ! InRoster, false, false, false, 0, external.globals( 'Translator' ).Translate( 'chat-container', 'menu_axn_add' ), 200 );
@@ -1184,8 +1184,8 @@ function MenuBarSelect ( id )
1184 1184
 	switch ( id )
1185 1185
 	{
1186 1186
 		case 10: // received files
1187  
-			if ( external.Directory.Exists( external.globals( 'cfg' )( 'downloaddir' ) + '\\' ) )
1188  
-				external.shellExec( 'open', external.globals( 'cfg' )( 'downloaddir' ) + '\\', '', '', 1 );
  1187
+			if ( external.Directory.Exists( external.globals( 'cfg' ).Item( 'downloaddir' ) + '\\' ) )
  1188
+				external.shellExec( 'open', external.globals( 'cfg' ).Item( 'downloaddir' ) + '\\', '', '', 1 );
1189 1189
 			else
1190 1190
 				external.wnd.messageBox( true, external.globals( 'Translator' ).Translate( 'main', 'msg_received_files' ), external.globals( 'softwarename' ), 0 | 48 );
1191 1191
 			break;
@@ -1193,7 +1193,7 @@ function MenuBarSelect ( id )
1193 1193
 			external.wnd.params[0].dial_history( gContainer.ActiveTrackerAddress );
1194 1194
 			break;
1195 1195
 		case 12: //	close
1196  
-			gContainer.Trackers( gContainer.ActiveTrackerAddress ).Close();
  1196
+			gContainer.Trackers.Item( gContainer.ActiveTrackerAddress ).Close();
1197 1197
 			break;
1198 1198
 
1199 1199
 		case 200: // add to list
@@ -1205,16 +1205,16 @@ function MenuBarSelect ( id )
1205 1205
 			external.wnd.messageBox( false, external.globals( 'Translator' ).Translate( 'main', 'msg_cl_adding', [ gContainer.ActiveTrackerAddress ] ), external.globals( 'softwarename' ), 0 | 64 );
1206 1206
 			break;
1207 1207
 		case 201: // rename
1208  
-			external.globals( 'ClientRoster' ).Items( gContainer.ActiveTrackerAddress ).ChangeName();
  1208
+			external.globals( 'ClientRoster' ).Items.Item( gContainer.ActiveTrackerAddress ).ChangeName();
1209 1209
 			break;
1210 1210
 		case 202: // block
1211 1211
 			external.wnd.params[0].dial_block( gContainer.ActiveTrackerAddress );
1212 1212
 			break;
1213 1213
 		case 22: // view profile
1214  
-			external.wnd.params[0].dial_userinfo( gContainer.Trackers( gContainer.ActiveTrackerAddress ).Address );
  1214
+			external.wnd.params[0].dial_userinfo( gContainer.Trackers.Item( gContainer.ActiveTrackerAddress ).Address );
1215 1215
 			break;
1216 1216
 //		case 23: // send file
1217  
-//			external.wnd.params[0].dial_file( gContainer.Trackers( gContainer.ActiveTrackerAddress ).Address );
  1217
+//			external.wnd.params[0].dial_file( gContainer.Trackers.Item( gContainer.ActiveTrackerAddress ).Address );
1218 1218
 //			break;
1219 1219
 
1220 1220
 		case 30: // font
@@ -1228,20 +1228,20 @@ function MenuBarSelect ( id )
1228 1228
 					external.windows( windownames[i] ).setAOT( cfg( 'aotchat' ) );
1229 1229
 			var ContainerNames = ( new VBArray( external.globals( 'ChatSessionPool' ).Containers.Keys() ) ).toArray();
1230 1230
 			for ( var i = 0; i < ContainerNames.length; ++i )
1231  
-				external.globals( 'ChatSessionPool' ).Containers( ContainerNames[i] ).MenuBarUpdate( 'tools' );
  1231
+				external.globals( 'ChatSessionPool' ).Containers.Item( ContainerNames[i] ).MenuBarUpdate( 'tools' );
1232 1232
 			break;
1233 1233
 		case 33: // multiple tabs
1234 1234
 			cfg( 'tabbedchat' ) = ! ( cfg( 'tabbedchat' ).toString() == 'true' );
1235 1235
 			var ContainerNames = ( new VBArray( external.globals( 'ChatSessionPool' ).Containers.Keys() ) ).toArray();
1236 1236
 			for ( var i = 0; i < ContainerNames.length; ++i )
1237  
-				with ( external.globals( 'ChatSessionPool' ).Containers( ContainerNames[i] ) )
  1237
+				with ( external.globals( 'ChatSessionPool' ).Containers.Item( ContainerNames[i] ) )
1238 1238
 				{
1239 1239
 					MenuBarUpdate( 'tools' );
1240 1240
 					HTMLTabBar.style.display = HTMLTabBar.childNodes.length || cfg( 'tabbedchat' ) ? 'inline' : 'none';
1241 1241
 				}
1242 1242
 			ContainerNames = ( new VBArray( external.globals( 'ConferenceSessionPool' ).Containers.Keys() ) ).toArray();
1243 1243
 			for ( var i = 0; i < ContainerNames.length; ++i )
1244  
-				with ( external.globals( 'ConferenceSessionPool' ).Containers( ContainerNames[i] ) )
  1244
+				with ( external.globals( 'ConferenceSessionPool' ).Containers.Item( ContainerNames[i] ) )
1245 1245
 				{
1246 1246
 					MenuBarUpdate( 'tools' );
1247 1247
 					HTMLTabBar.style.display = HTMLTabBar.childNodes.length || cfg( 'tabbedchat' ) ? 'inline' : 'none';
@@ -1251,10 +1251,10 @@ function MenuBarSelect ( id )
1251 1251
 			cfg( 'emoticon' ) = ! ( cfg( 'emoticon' ).toString() == 'true' );
1252 1252
 			var ContainerNames = ( new VBArray( external.globals( 'ChatSessionPool' ).Containers.Keys() ) ).toArray();
1253 1253
 			for ( var i = 0; i < ContainerNames.length; ++i )
1254  
-				external.globals( 'ChatSessionPool' ).Containers( ContainerNames[i] ).MenuBarUpdate( 'tools' );
  1254
+				external.globals( 'ChatSessionPool' ).Containers.Item( ContainerNames[i] ).MenuBarUpdate( 'tools' );
1255 1255
 			ContainerNames = ( new VBArray( external.globals( 'ConferenceSessionPool' ).Containers.Keys() ) ).toArray();
1256 1256
 			for ( var i = 0; i < ContainerNames.length; ++i )
1257  
-				external.globals( 'ConferenceSessionPool' ).Containers( ContainerNames[i] ).MenuBarUpdate( 'tools' );
  1257
+				external.globals( 'ConferenceSessionPool' ).Containers.Item( ContainerNames[i] ).MenuBarUpdate( 'tools' );
1258 1258
 			break;
1259 1259
 		case 35: // settings
1260 1260
 			external.wnd.params[0].dial_preferences( '' );
@@ -1288,7 +1288,7 @@ function MenuBarSelect ( id )
1288 1288
  */
1289 1289
 function AvatarZoom ()
1290 1290
 {
1291  
-	if ( gContainer.Trackers( gContainer.ActiveTrackerAddress ).Avatar.length == 40 && event.button == 1 )
  1291
+	if ( gContainer.Trackers.Item( gContainer.ActiveTrackerAddress ).Avatar.length == 40 && event.button == 1 )
1292 1292
 	{
1293 1293
 		var W = 112;
1294 1294
 		var H = 112;
@@ -1315,7 +1315,7 @@ function AvatarZoom ()
1315 1315
 			height = '100%';
1316 1316
 			border = '1x solid threeddarkshadow';
1317 1317
 			background = 'window no-repeat center center';
1318  
-			backgroundImage = 'url( ' + gContainer.Trackers( gContainer.ActiveTrackerAddress ).AvatarPath + gContainer.Trackers( gContainer.ActiveTrackerAddress ).Avatar + ')';
  1318
+			backgroundImage = 'url( ' + gContainer.Trackers.Item( gContainer.ActiveTrackerAddress ).AvatarPath + gContainer.Trackers.Item( gContainer.ActiveTrackerAddress ).Avatar + ')';
1319 1319
 		}
1320 1320
 		Popup.document.Popup = Popup;
1321 1321
 		Popup.document.body.insertAdjacentElement( 'beforeEnd', Picture );
@@ -1329,7 +1329,7 @@ function LastOnline ( IQ )
1329 1329
 {
1330 1330
 	if ( gContainer.Trackers.Exists( IQ.FromAddress.ShortAddress() ) )
1331 1331
 	{
1332  
-		var Tracker = gContainer.Trackers( IQ.FromAddress.ShortAddress() );
  1332
+		var Tracker = gContainer.Trackers.Item( IQ.FromAddress.ShortAddress() );
1333 1333
 		if ( Tracker.HookIQ )
1334 1334
 		{
1335 1335
 			Tracker.HookIQ.Destroy();
@@ -1359,13 +1359,13 @@ function LastOnline ( IQ )
1359 1359
  */
1360 1360
 function MouseMenu ()
1361 1361
 {
1362  
-	var Tracker = gContainer.Trackers( gContainer.ActiveTrackerAddress );
  1362
+	var Tracker = gContainer.Trackers.Item( gContainer.ActiveTrackerAddress );
1363 1363
 	var ShortAddress = gContainer.ActiveTrackerAddress;
1364 1364
 	var Resource = Tracker.Address.Resource;
1365 1365
 	var Connected = external.globals( 'XMPPConnected' );
1366  
-	var Online = external.globals( 'ClientRoster' ).Items.Exists( ShortAddress ) && external.globals( 'ClientRoster' ).Items( ShortAddress ).Resources.Count;
  1366
+	var Online = external.globals( 'ClientRoster' ).Items.Exists( ShortAddress ) && external.globals( 'ClientRoster' ).Items.Item( ShortAddress ).Resources.Count;
1367 1367
 	var InRoster = external.globals( 'ClientRoster' ).Items.Exists( gContainer.ActiveTrackerAddress );
1368  
-	var IsMe = gContainer.ActiveTrackerAddress == external.globals( 'cfg' )( 'username' ) + '@' + external.globals( 'cfg' )( 'server' );
  1368
+	var IsMe = gContainer.ActiveTrackerAddress == external.globals( 'cfg' ).Item( 'username' ) + '@' + external.globals( 'cfg' ).Item( 'server' );
1369 1369
 	var Blocked = external.globals( 'block' ).Exists( ShortAddress ) && ! IsMe;
1370 1370
 
1371 1371
 	var Menu = external.newPopupMenu;
@@ -1384,14 +1384,14 @@ function MouseMenu ()
1384 1384
 	var pluginname = new Array();
1385 1385
 	var keys = ( new VBArray( external.globals( 'ClientPluginContainer' ).Plugins.Keys() ) ).toArray();
1386 1386
 	for ( var i = 0; i < keys.length; ++i )
1387  
-		if ( external.globals( 'ClientPluginContainer' ).Plugins( keys[i] ).Menus.Exists( 'roster' ) )
  1387
+		if ( external.globals( 'ClientPluginContainer' ).Plugins.Item( keys[i] ).Menus.Exists( 'roster' ) )
1388 1388
 		{
1389  
-			var pluginoptions = external.globals( 'ClientPluginContainer' ).Plugins( keys[i] ).Menus( 'roster' );
  1389
+			var pluginoptions = external.globals( 'ClientPluginContainer' ).Plugins.Item( keys[i] ).Menus.Item( 'roster' );
1390 1390
 			for ( var j = 0; j < pluginoptions.length; ++j )
1391 1391
 			{
1392 1392
 				Menu.AddItem( pluginoptions[j].OnlineOnly ? Online : true, false, false, false, 0, pluginoptions[j].Text, 1000 + plugindata.length );
1393 1393
 				plugindata.push( pluginoptions[j] );
1394  
-				pluginname.push( external.globals( 'ClientPluginContainer' ).Plugins( keys[i] ) );
  1394
+				pluginname.push( external.globals( 'ClientPluginContainer' ).Plugins.Item( keys[i] ) );
1395 1395
 			}
1396 1396
 		}
1397 1397
 
@@ -1424,7 +1424,7 @@ function MouseMenu ()
1424 1424
 			external.wnd.messageBox( false, external.globals( 'Translator' ).Translate( 'main', 'msg_cl_adding', [ gContainer.ActiveTrackerAddress ] ), external.globals( 'softwarename' ), 0 | 64 );
1425 1425
 		break;
1426 1426
 		case 4:
1427  
-			external.wnd.params[0].external.globals( 'ClientRoster' ).Items( ShortAddress ).ChangeName();
  1427
+			external.wnd.params[0].external.globals( 'ClientRoster' ).Items.Item( ShortAddress ).ChangeName();
1428 1428
 		break;
1429 1429
 		case 5:
1430 1430
 			external.wnd.params[0].dial_block( ShortAddress );
@@ -1440,7 +1440,7 @@ function MouseMenu ()
1440 1440
 			if ( Menu.Choice > 200 && Menu.Choice - 201 < rooms.length )
1441 1441
 			{
1442 1442
 				if ( external.globals( 'ConferenceSessionPool' ).Trackers.Exists( rooms[ Menu.Choice - 201 ] ) )
1443  
-					external.wnd.params[0].dial_conference_invite( external.globals( 'ConferenceSessionPool' ).Trackers( rooms[ Menu.Choice - 201 ] ), ShortAddress, '' );
  1443
+					external.wnd.params[0].dial_conference_invite( external.globals( 'ConferenceSessionPool' ).Trackers.Item( rooms[ Menu.Choice - 201 ] ), ShortAddress, '' );
1444 1444
 			}
1445 1445
 			else if ( Menu.Choice >= 1000 && Menu.Choice - 1001 < plugindata.length )
1446 1446
 			{
@@ -1476,7 +1476,7 @@ function TabAddActivate ()
1476 1476
 	/* Hide chat
1477 1477
 	 */
1478 1478
 	if ( gContainer.Trackers.Exists( gContainer.ActiveTrackerAddress ) )
1479  
-		gContainer.Trackers( gContainer.ActiveTrackerAddress ).Deactivate();
  1479
+		gContainer.Trackers.Item( gContainer.ActiveTrackerAddress ).Deactivate();
1480 1480
 	document.getElementById( 'mode-indicator' ).style.display = 'none';
1481 1481
 	document.getElementById( 'user-typing-area' ).style.display = 'none';
1482 1482
 	document.getElementById( 'conversation' ).style.display = 'none';
10  Client/js/chat-messages.js
@@ -48,8 +48,8 @@ function onHistory ( Messages )
48 48
 	for ( var i = 0; i < Messages.length; ++i )
49 49
 	{
50 50
 		var Message = Messages[i];
51  
-		var Direction = Message.From == external.globals( 'cfg' )( 'username' ) + '@' + external.globals( 'cfg' )( 'server' ) ? 'send' : 'recv';
52  
-		var SenderName = Direction == 'send' ? external.globals( 'cfg' )( 'nick' ) : SessionTracker.Name;
  51
+		var Direction = Message.From == external.globals( 'cfg' ).Item( 'username' ) + '@' + external.globals( 'cfg' ).Item( 'server' ) ? 'send' : 'recv';
  52
+		var SenderName = Direction == 'send' ? external.globals( 'cfg' ).Item( 'nick' ) : SessionTracker.Name;
53 53
 		var MessageTime = Message.Time.getHours() + ':' + ( Message.Time.getMinutes() < 10 ? '0' : '' ) + Message.Time.getMinutes();
54 54
 
55 55
 		/* Insert date
@@ -103,8 +103,8 @@ function onHistory ( Messages )
103 103
  */
104 104
 function onMessage ( Message )
105 105
 {
106  
-	var Direction = Message.FromAddress.ShortAddress() == external.globals( 'cfg' )( 'username' ) + '@' + external.globals( 'cfg' )( 'server' ) ? 'send' : 'recv';
107  
-	var SenderName = SessionTracker.Occupants ? Message.FromAddress.Resource : ( Direction == 'send' ? external.globals( 'cfg' )( 'nick' ) : SessionTracker.Name );
  106
+	var Direction = Message.FromAddress.ShortAddress() == external.globals( 'cfg' ).Item( 'username' ) + '@' + external.globals( 'cfg' ).Item( 'server' ) ? 'send' : 'recv';
  107
+	var SenderName = SessionTracker.Occupants ? Message.FromAddress.Resource : ( Direction == 'send' ? external.globals( 'cfg' ).Item( 'nick' ) : SessionTracker.Name );
108 108
 	var MessageTime = Message.Time.getHours() + ':' + ( Message.Time.getMinutes() < 10 ? '0' : '' ) + Message.Time.getMinutes();
109 109
 
110 110
 	/* Insert date
@@ -178,7 +178,7 @@ if ( SessionTracker.Occupants )
178 178
 else
179 179
 {
180 180
 	if ( Direction == 'send' )
181  
-		SenderAvatar = external.globals( 'cfg' )( 'avatar' );
  181
+		SenderAvatar = external.globals( 'cfg' ).Item( 'avatar' );
182 182
 	else
183 183
 		SenderAvatar = SessionTracker.Avatar;
184 184
 }
158  Client/js/conference-container.js
@@ -55,13 +55,13 @@ function Begin ()
55 55
 
56 56
 	/* Restore the size of the input area
57 57
 	 */
58  
-	document.getElementById( 'send-text' ).parentNode.parentNode.height = isNaN( parseInt( external.globals( 'cfg' )( 'textinputheight' ), 10 ) ) ? 60 : Math.max( 60, parseInt( external.globals( 'cfg' )( 'textinputheight' ), 10 ) );
  58
+	document.getElementById( 'send-text' ).parentNode.parentNode.height = isNaN( parseInt( external.globals( 'cfg' ).Item( 'textinputheight' ), 10 ) ) ? 60 : Math.max( 60, parseInt( external.globals( 'cfg' ).Item( 'textinputheight' ), 10 ) );
59 59
 
60 60
 	/* Load all pending trackers
61 61
 	 */
62 62
 	var TrackerNames = ( new VBArray( SessionPool.TrackersLoading.Keys() ) ).toArray();
63 63
 	for ( var i = SessionPool.TrackersLoading.Count - SessionPool.ContainersLoading.Count - 1; i >= 0; i-- )
64  
-		gContainer.CreateTracker( SessionPool.TrackersLoading( TrackerNames[i] ) );
  64
+		gContainer.CreateTracker( SessionPool.TrackersLoading.Item( TrackerNames[i] ) );
65 65
 }
66 66
 
67 67
 function End ()
@@ -118,7 +118,7 @@ function SessionContainer ( SessionPool )
118 118
 			BackgroundPath += 'index.html';
119 119
 		else
120 120
 		{
121  
-			external.globals( 'cfg' )( 'background' ) = '';
  121
+			external.globals( 'cfg' ).Item( 'background' ) = '';
122 122
 			Tracker.Background = '';
123 123
 			BackgroundPath = 'chat-messages.html';
124 124
 		}
@@ -150,7 +150,7 @@ function SessionContainer ( SessionPool )
150 150
 
151 151
 		/* Join the conference by sending initial presence
152 152
 		 */
153  
-		Tracker.SendPresence( external.globals( 'cfg' )( 'lastmode' ), external.globals( 'cfg' )( 'lastmsg' ) );
  153
+		Tracker.SendPresence( external.globals( 'cfg' ).Item( 'lastmode' ), external.globals( 'cfg' ).Item( 'lastmsg' ) );
154 154
 	}
155 155
 
156 156
 	/* Get out of the session pool and remove all trackers from this container
@@ -161,7 +161,7 @@ function SessionContainer ( SessionPool )
161 161
 
162 162
 		var TrackerNames = ( new VBArray( this.Trackers.Keys() ) ).toArray();
163 163
 		for ( var i = 0; i < TrackerNames.length; ++i )
164  
-			this.Trackers( TrackerNames[i] ).Clear();
  164
+			this.Trackers.Item( TrackerNames[i] ).Clear();
165 165
 	}
166 166
 
167 167
 	/* Reload the user interface translation
@@ -172,8 +172,8 @@ function SessionContainer ( SessionPool )
172 172
 		MenuBarUpdate();
173 173
 		if ( this.Trackers.Exists( this.ActiveTrackerAddress ) )
174 174
 		{
175  
-			this.Trackers( this.ActiveTrackerAddress ).DrawContainerInfo();
176  
-			this.Trackers( this.ActiveTrackerAddress ).RefreshOccupants();
  175
+			this.Trackers.Item( this.ActiveTrackerAddress ).DrawContainerInfo();
  176
+			this.Trackers.Item( this.ActiveTrackerAddress ).RefreshOccupants();
177 177
 		}
178 178
 	}
179 179
 
@@ -193,7 +193,7 @@ function SessionContainer ( SessionPool )
193 193
 			textDecorationLineThrough = cfg( 'user_dialog_strike' ).toString() == 'true';
194 194
 			textDecorationUnderline = cfg( 'user_dialog_underline' ).toString() == 'true';
195 195
 		}
196  
-		if ( external.globals( 'XMPPConnected' ) && this.Trackers.Exists( this.ActiveTrackerAddress ) && this.Trackers( this.ActiveTrackerAddress ).Occupants.Exists( this.Trackers( this.ActiveTrackerAddress ).Address.Resource ) )
  196
+		if ( external.globals( 'XMPPConnected' ) && this.Trackers.Exists( this.ActiveTrackerAddress ) && this.Trackers.Item( this.ActiveTrackerAddress ).Occupants.Exists( this.Trackers.Item( this.ActiveTrackerAddress ).Address.Resource ) )
197 197
 		{
198 198
 			document.getElementById( 'send-text' ).disabled = false;
199 199
 			document.getElementById( 'btn-send' ).disabled = ( /^\s*$/ ).test( document.getElementById( 'send-text' ).value );
@@ -212,7 +212,7 @@ function SessionTracker ( Address )
212 212
 {
213 213
 	this.Address = Address;
214 214
 	this.Autoconnect = true;
215  
-	this.Background = external.globals( 'cfg' )( 'background' );
  215
+	this.Background = external.globals( 'cfg' ).Item( 'background' );
216 216
 	this.Container = null;
217 217
 	this.HookIQ = null;
218 218
 	this.HTMLArea = false;
@@ -251,10 +251,10 @@ function SessionTracker ( Address )
251 251
 
252 252
 	/* Default user name
253 253
 	 */
254  
-	if ( ! external.globals( 'cfg' )( 'conferencenick' ).length )
255  
-		external.globals( 'cfg' )( 'conferencenick' ) = external.globals( 'cfg' )( 'nick' );
  254
+	if ( ! external.globals( 'cfg' ).Item( 'conferencenick' ).length )
  255
+		external.globals( 'cfg' ).Item( 'conferencenick' ) = external.globals( 'cfg' ).Item( 'nick' );
256 256
 	if ( ! this.Address.Resource.length )
257  
-		this.Address.Resource = external.globals( 'cfg' )( 'conferencenick' );
  257
+		this.Address.Resource = external.globals( 'cfg' ).Item( 'conferencenick' );
258 258
 
259 259
 	/* Handle events from the SessionPool
260 260
 	 */
@@ -329,7 +329,7 @@ function SessionTracker ( Address )
329 329
 
330 330
 						var MessageDom = new ActiveXObject( 'Msxml2.DOMDocument' );
331 331
 						MessageDom.loadXML( '<message><error/></message>' );
332  
-						MessageDom.documentElement.setAttribute( 'to', external.globals( 'cfg' )( 'username' ) + '@' + external.globals( 'cfg' )( 'server' ) + '/' + external.globals( 'cfg' )( 'resource' ) );
  332
+						MessageDom.documentElement.setAttribute( 'to', external.globals( 'cfg' ).Item( 'username' ) + '@' + external.globals( 'cfg' ).Item( 'server' ) + '/' + external.globals( 'cfg' ).Item( 'resource' ) );
333 333
 						MessageDom.documentElement.setAttribute( 'from', this.Address.ShortAddress() );
334 334
 						MessageDom.documentElement.setAttribute( 'type', 'error' );
335 335
 						MessageDom.documentElement.firstChild.setAttribute( 'code', ErrorCode );
@@ -361,9 +361,9 @@ function SessionTracker ( Address )
361 361
 						{
362 362
 							Actor = Actor.getAttribute( 'jid' ).toLowerCase();
363 363
 							if ( external.globals( 'ClientRoster' ).Items.Exists( Actor ) )
364  
-								Actor = external.globals( 'ClientRoster' ).Items( Actor ).Name;
365  
-							else if ( Actor == external.globals( 'cfg' )( 'username' ) + '@' + external.globals( 'cfg' )( 'server' ) )
366  
-								Actor = external.globals( 'cfg' )( 'nick' );
  364
+								Actor = external.globals( 'ClientRoster' ).Items.Item( Actor ).Name;
  365
+							else if ( Actor == external.globals( 'cfg' ).Item( 'username' ) + '@' + external.globals( 'cfg' ).Item( 'server' ) )
  366
+								Actor = external.globals( 'cfg' ).Item( 'nick' );
367 367
 							ServerMessage( this, external.globals( 'Translator' ).Translate( 'conference-container', 'banned-by', [ Event.Payload.FromAddress.Resource, Actor ] ) );
368 368
 						}
369 369
 						else
@@ -390,9 +390,9 @@ function SessionTracker ( Address )
390 390
 						{
391 391
 							Actor = Actor.getAttribute( 'jid' ).toLowerCase();
392 392
 							if ( external.globals( 'ClientRoster' ).Items.Exists( Actor ) )
393  
-								Actor = external.globals( 'ClientRoster' ).Items( Actor ).Name;
394  
-							else if ( Actor == external.globals( 'cfg' )( 'username' ) + '@' + external.globals( 'cfg' )( 'server' ) )
395  
-								Actor = external.globals( 'cfg' )( 'nick' );
  393
+								Actor = external.globals( 'ClientRoster' ).Items.Item( Actor ).Name;
  394
+							else if ( Actor == external.globals( 'cfg' ).Item( 'username' ) + '@' + external.globals( 'cfg' ).Item( 'server' ) )
  395
+								Actor = external.globals( 'cfg' ).Item( 'nick' );
396 396
 							ServerMessage( this, external.globals( 'Translator' ).Translate( 'conference-container', 'kicked-by', [ Event.Payload.FromAddress.Resource, Actor ] ) );
397 397
 						}
398 398
 						else
@@ -405,7 +405,7 @@ function SessionTracker ( Address )
405 405
 
406 406
 					/* Clear occupant
407 407
 					 */
408  
-					this.Occupants( Event.Payload.FromAddress.Resource ).Clear();
  408
+					this.Occupants.Item( Event.Payload.FromAddress.Resource ).Clear();
409 409
 					this.Occupants.Remove( Event.Payload.FromAddress.Resource );
410 410
 				}
411 411
 			}
@@ -413,7 +413,7 @@ function SessionTracker ( Address )
413 413
 			 */
414 414
 			else if ( this.Occupants.Exists( Event.Payload.FromAddress.Resource ) )
415 415
 			{
416  
-				this.Occupants( Event.Payload.FromAddress.Resource ).Update( Event.Payload );
  416
+				this.Occupants.Item( Event.Payload.FromAddress.Resource ).Update( Event.Payload );
417 417
 			}
418 418
 			/* Add
419 419
 			 */
@@ -438,7 +438,7 @@ function SessionTracker ( Address )
438 438
 					this.Autoconnect = false;
439 439
 					var OccupantNames = ( new VBArray( this.Occupants.Keys() ) ).toArray();
440 440
 					for ( var i = 0; i < OccupantNames.length; ++i )
441  
-						this.Occupants( OccupantNames[i] ).Clear();
  441
+						this.Occupants.Item( OccupantNames[i] ).Clear();
442 442
 					this.Occupants.RemoveAll();
443 443
 					ServerMessage( this, external.globals( 'Translator' ).Translate( 'conference-container', 'disconnected' ) );
444 444
 				}
@@ -474,8 +474,8 @@ function SessionTracker ( Address )
474 474
 	{
475 475
 		/* Play sound
476 476
 		 */
477  
-		if ( ( ! external.wnd.isActive() || ! this.IsActive ) && external.globals( 'cfg' )( 'soundmessage' ).toString() == 'true' && ( external.globals( 'cfg' )( 'lastmode' ) < 2 || external.globals( 'cfg' )( 'lastmode' ) == 5 ) )
478  
-			external.wnd.params[0].sound_play( external.globals( 'cfg' )( 'soundmessagefile' ), false );
  477
+		if ( ( ! external.wnd.isActive() || ! this.IsActive ) && external.globals( 'cfg' ).Item( 'soundmessage' ).toString() == 'true' && ( external.globals( 'cfg' ).Item( 'lastmode' ) < 2 || external.globals( 'cfg' ).Item( 'lastmode' ) == 5 ) )
  478
+			external.wnd.params[0].sound_play( external.globals( 'cfg' ).Item( 'soundmessagefile' ), false );
479 479
 		/* Flash window
480 480
 		 */
481 481
 		if ( ! external.wnd.isActive() )
@@ -665,7 +665,7 @@ function SessionTracker ( Address )
665 665
 			});
666 666
 
667 667
 			this.Container.HTMLTabBar.insertAdjacentElement( 'beforeEnd', this.HTMLButton );
668  
-			if ( external.globals( 'cfg' )( 'tabbedchat' ).toString() != 'true' )
  668
+			if ( external.globals( 'cfg' ).Item( 'tabbedchat' ).toString() != 'true' )
669 669
 				this.Container.HTMLTabBar.style.display = this.Container.HTMLTabBar.childNodes.length ? 'inline' : 'none';
670 670
 		}
671 671
 	}
@@ -677,7 +677,7 @@ function SessionTracker ( Address )
677 677
 		this.Clear();
678 678
 		var TrackerNames = ( new VBArray( this.Container.Trackers.Keys() ) ).toArray();
679 679
 		if ( TrackerNames.length )
680  
-			this.Container.Trackers( TrackerNames[ TrackerNames.length - 1 ] ).Activate();
  680
+			this.Container.Trackers.Item( TrackerNames[ TrackerNames.length - 1 ] ).Activate();
681 681
 		else
682 682
 			setTimeout( 'external.wnd.close()', 0 );
683 683
 	}
@@ -718,7 +718,7 @@ function SessionTracker ( Address )
718 718
 
719 719
 		var OccupantNames = ( new VBArray( this.Occupants.Keys() ) ).toArray();
720 720
 		for ( var i = 0; i < OccupantNames.length; ++i )
721  
-			this.Occupants( OccupantNames[i] ).Clear();
  721
+			this.Occupants.Item( OccupantNames[i] ).Clear();
722 722
 
723 723
 		this.Container.SessionPool.DeleteTracker( this );
724 724
 		this.Container.Trackers.Remove( this.Address.ShortAddress() );
@@ -731,7 +731,7 @@ function SessionTracker ( Address )
731 731
 		this.HTMLModerators.removeNode( true );
732 732
 		this.HTMLParticipants.removeNode( true );
733 733
 		this.Occupants.RemoveAll();
734  
-		if ( external.globals( 'cfg' )( 'tabbedchat' ).toString() != 'true' )
  734
+		if ( external.globals( 'cfg' ).Item( 'tabbedchat' ).toString() != 'true' )
735 735
 			this.Container.HTMLTabBar.style.display = this.Container.HTMLTabBar.childNodes.length > 1 ? 'inline' : 'none';
736 736
 	}
737 737
 
@@ -767,7 +767,7 @@ function SessionTracker ( Address )
767 767
 			/* Deactivate old tab
768 768
 			 */
769 769
 			if ( this.Container.Trackers.Exists( this.Container.ActiveTrackerAddress ) )
770  
-				this.Container.Trackers( this.Container.ActiveTrackerAddress ).Deactivate();
  770
+				this.Container.Trackers.Item( this.Container.ActiveTrackerAddress ).Deactivate();
771 771
 
772 772
 			/* Activate new tab
773 773
 			 */
@@ -819,7 +819,7 @@ function SessionTracker ( Address )
819 819
 
820 820
 			var dom = new ActiveXObject( 'Msxml2.DOMDocument' );
821 821
 			dom.loadXML( '<presence><x xmlns="jabber:x:avatar"><hash/></x></presence>' );
822  
-			dom.selectSingleNode( '/presence/x/hash' ).text = external.globals( 'cfg' )( 'avatar' );
  822
+			dom.selectSingleNode( '/presence/x/hash' ).text = external.globals( 'cfg' ).Item( 'avatar' );
823 823
 			dom.documentElement.setAttribute( 'to', this.Address.LongAddress() );
824 824
 
825 825
 			/* Entering conference
@@ -875,9 +875,9 @@ function SessionTracker ( Address )
875 875
 	{
876 876
 		if ( external.globals( 'ClientRoster' ).Groups.Exists( group ) )
877 877
 		{
878  
-			var jids = ( new VBArray( external.globals( 'ClientRoster' ).Groups( group ).Items.Keys() ) ).toArray();
  878
+			var jids = ( new VBArray( external.globals( 'ClientRoster' ).Groups.Item( group ).Items.Keys() ) ).toArray();
879 879
 			for ( var i in jids )
880  
-				if ( external.globals( 'ClientRoster' ).Items( jids[i] ).Resources.Count > 0 )
  880
+				if ( external.globals( 'ClientRoster' ).Items.Item( jids[i] ).Resources.Count > 0 )
881 881
 					addresses.push( jids[i] );
882 882
 		}
883 883
 		for ( var i in addresses )
@@ -899,7 +899,7 @@ function SessionTracker ( Address )
899 899
 	{
900 900
 		var OccupantNames = ( new VBArray( this.Occupants.Keys() ) ).toArray();
901 901
 		for ( var i = 0; i < OccupantNames.length; ++i )
902  
-			this.Occupants( OccupantNames[i] ).Update();
  902
+			this.Occupants.Item( OccupantNames[i] ).Update();
903 903
 	}
904 904
 }
905 905
 
@@ -958,7 +958,7 @@ function ConferenceParticipant ( Tracker, Presence )
958 958
 			var Element = event.srcElement;
959 959
 			while ( Element.tagName != 'NOBR' )
960 960
 				Element = Element.parentNode;
961  
-			var Occupant = gContainer.Trackers( gContainer.ActiveTrackerAddress ).Occupants( Element.children(1).innerText );
  961
+			var Occupant = gContainer.Trackers.Item( gContainer.ActiveTrackerAddress ).Occupants.Item( Element.children(1).innerText );
962 962
 			if ( Occupant.Address.length )
963 963
 				external.wnd.params[0].dial_chat( Occupant.Address );
964 964
 			else
@@ -976,9 +976,9 @@ function ConferenceParticipant ( Tracker, Presence )
976 976
 			var Element = event.srcElement;
977 977
 			while ( Element.tagName != 'NOBR' )
978 978
 				Element = Element.parentNode;
979  
-			var Tracker = gContainer.Trackers( gContainer.ActiveTrackerAddress );
  979
+			var Tracker = gContainer.Trackers.Item( gContainer.ActiveTrackerAddress );
980 980
 			var Name = Element.children(1).innerText;
981  
-			var Occupant = Tracker.Occupants( Name );
  981
+			var Occupant = Tracker.Occupants.Item( Name );
982 982
 			OccupantContextMenu( Occupant, event.screenX, event.screenY );
983 983
 		}
984 984
 	);
@@ -1142,10 +1142,10 @@ function ConferenceParticipant ( Tracker, Presence )
1142 1142
 			this.Status = external.globals( 'Translator' ).Translate( 'main', 'cl_status_empty' );
1143 1143
 
1144 1144
 		this.HTMLElement.title = this.Name + '\n' + ( this.Address.length ? this.Address + '\n' : '' ) + this.Status;
1145  
-		this.HTMLElement.style.paddingBottom = external.globals( 'cfg' )( 'contactlistdisplay' ) == 'detailed' ? '' : '5px';
1146  
-		Children.item(0).height = Children.item(0).width = external.globals( 'cfg' )( 'contactlistdisplay' ) == 'detailed' ? 24 : 16;
1147  
-		Children.item(1).style.fontWeight = external.globals( 'cfg' )( 'contactlistdisplay' ) == 'detailed' ? '' : 'normal';
1148  
-		Children.item(3).style.display = external.globals( 'cfg' )( 'contactlistdisplay' ) == 'detailed' ? '' : 'none';
  1145
+		this.HTMLElement.style.paddingBottom = external.globals( 'cfg' ).Item( 'contactlistdisplay' ) == 'detailed' ? '' : '5px';
  1146
+		Children.item(0).height = Children.item(0).width = external.globals( 'cfg' ).Item( 'contactlistdisplay' ) == 'detailed' ? 24 : 16;
  1147
+		Children.item(1).style.fontWeight = external.globals( 'cfg' ).Item( 'contactlistdisplay' ) == 'detailed' ? '' : 'normal';
  1148
+		Children.item(3).style.display = external.globals( 'cfg' ).Item( 'contactlistdisplay' ) == 'detailed' ? '' : 'none';
1149 1149
 
1150 1150
 		if ( this.Avatar.length )
1151 1151
 			Children.item(0).src = external.globals( 'usersdir' ) + 'Avatars\\' + this.Avatar;
@@ -1184,10 +1184,10 @@ function ReceiveAvatar ( iq )
1184 1184
 		var ShortAddress = iq.FromAddress.ShortAddress();
1185 1185
 		if ( gContainer.Trackers.Exists( ShortAddress ) )
1186 1186
 		{
1187  
-			var Tracker = gContainer.Trackers( ShortAddress );
  1187
+			var Tracker = gContainer.Trackers.Item( ShortAddress );
1188 1188
 			if ( Tracker.Occupants.Exists( iq.FromAddress.Resource ) )
1189 1189
 			{
1190  
-				var Occupant = Tracker.Occupants( iq.FromAddress.Resource );
  1190
+				var Occupant = Tracker.Occupants.Item( iq.FromAddress.Resource );
1191 1191
 				if ( Occupant.Avatar.length == 40 && ! external.FileExists( external.globals( 'usersdir' ) + 'Avatars\\' + Occupant.Avatar ) )
1192 1192
 				{
1193 1193
 					Occupant.AvatarHook.Destroy();
@@ -1204,19 +1204,19 @@ function ReceiveAvatar ( iq )
1204 1204
  */
1205 1205
 function SendMessage ()
1206 1206
 {
1207  
-	var Tracker = gContainer.Trackers( gContainer.ActiveTrackerAddress );
  1207
+	var Tracker = gContainer.Trackers.Item( gContainer.ActiveTrackerAddress );
1208 1208
 	var Input = document.getElementById( 'send-text' ).value;
1209 1209
 
1210 1210
 	/* Change nickname
1211 1211
 	 */
1212 1212
 	if ( Input.match( /\/name \S/ ) )
1213 1213
 	{
1214  
-		external.globals( 'cfg' )( 'conferencenick' ) = Input.substr( 6 );
  1214
+		external.globals( 'cfg' ).Item( 'conferencenick' ) = Input.substr( 6 );
1215 1215
 		var TrackerNames = ( new VBArray( external.globals( 'ConferenceSessionPool' ).Trackers.Keys() ) ).toArray();
1216 1216
 		for ( var i = 0; i < TrackerNames.length; ++i )
1217 1217
 		{
1218  
-			external.globals( 'ConferenceSessionPool' ).Trackers( TrackerNames[i] ).Address.Resource = external.globals( 'cfg' )( 'conferencenick' );
1219  
-			external.globals( 'ConferenceSessionPool' ).Trackers( TrackerNames[i] ).SendPresence( external.globals( 'cfg' )( 'lastmode' ), external.globals( 'cfg' )( 'lastmsg' ) );
  1218
+			external.globals( 'ConferenceSessionPool' ).Trackers.Item( TrackerNames[i] ).Address.Resource = external.globals( 'cfg' ).Item( 'conferencenick' );
  1219
+			external.globals( 'ConferenceSessionPool' ).Trackers.Item( TrackerNames[i] ).SendPresence( external.globals( 'cfg' ).Item( 'lastmode' ), external.globals( 'cfg' ).Item( 'lastmsg' ) );
1220 1220
 		}
1221 1221
 	}
1222 1222
 
@@ -1227,8 +1227,8 @@ function SendMessage ()
1227 1227
 		var dom = new ActiveXObject( 'Msxml2.DOMDocument' );
1228 1228
 		dom.loadXML( '<message><body/><html><body/></html><x xmlns="jisp:x:jep-0038"><name/></x></message>' );
1229 1229
 		dom.documentElement.setAttribute( 'xml:lang', external.globals( 'language' ) );
1230  
-		dom.documentElement.setAttribute( 'from', external.globals( 'cfg' )( 'username' ) + '@' + external.globals( 'cfg' )( 'server' ) + '/' + external.globals( 'cfg' )( 'resource' ) );
1231  
-		dom.selectSingleNode( '/message/x[@xmlns="jisp:x:jep-0038"]/name' ).text = external.globals( 'cfg' )( 'emoticonset' );
  1230
+		dom.documentElement.setAttribute( 'from', external.globals( 'cfg' ).Item( 'username' ) + '@' + external.globals( 'cfg' ).Item( 'server' ) + '/' + external.globals( 'cfg' ).Item( 'resource' ) );
  1231
+		dom.selectSingleNode( '/message/x[@xmlns="jisp:x:jep-0038"]/name' ).text = external.globals( 'cfg' ).Item( 'emoticonset' );
1232 1232
 
1233 1233
 		if ( Input.match( /^\/([^\:]+)\: \S/ ) && Tracker.Occupants.Exists( RegExp.$1 ) )
1234 1234
 		{
@@ -1402,11 +1402,11 @@ function MenuBarUpdate ( section )
1402 1402
 	{
1403 1403
 		external.wnd.menuBar.RemItem( 2 );
1404 1404
 
1405  
-		var Tracker = gContainer.Trackers.Exists( gContainer.ActiveTrackerAddress ) ? gContainer.Trackers( gContainer.ActiveTrackerAddress ) : false;
  1405
+		var Tracker = gContainer.Trackers.Exists( gContainer.ActiveTrackerAddress ) ? gContainer.Trackers.Item( gContainer.ActiveTrackerAddress ) : false;
1406 1406
 		var Connected = Tracker && Tracker.Occupants.Exists( Tracker.Address.Resource );
1407 1407
 		var CanLogin = ! Connected && ( Tracker && Tracker.Autoconnect );
1408 1408
 
1409  
-		var User = Connected ? Tracker.Occupants( Tracker.Address.Resource ) : false;
  1409
+		var User = Connected ? Tracker.Occupants.Item( Tracker.Address.Resource ) : false;
1410 1410
 		var Owner = User && User.Affiliation == 'owner';
1411 1411
 		var Admin = User && ( User.Affiliation == 'admin' || Owner );
1412 1412
 		var Moderator = User && User.Role == 'moderator';
@@ -1437,7 +1437,7 @@ function MenuBarUpdate ( section )
1437 1437
 		var dom = new ActiveXObject( 'MSXML2.DOMDocument' );
1438 1438
 		dom.async = false;
1439 1439
 		dom.resolveExternals = false;
1440  
-		dom.load( external.globals( 'usersdir' ) + 'Profiles\\' + external.globals( 'cfg' )( 'username' ) + '@' + external.globals( 'cfg' )( 'server' ) + '\\bookmarks.xml' );
  1440
+		dom.load( external.globals( 'usersdir' ) + 'Profiles\\' + external.globals( 'cfg' ).Item( 'username' ) + '@' + external.globals( 'cfg' ).Item( 'server' ) + '\\bookmarks.xml' );
1441 1441
 		if ( dom.documentElement )
1442 1442
 		{
1443 1443
 			var BookmarkNodes = dom.documentElement.selectNodes( '/bookmarks/room[@address]' );
@@ -1500,30 +1500,30 @@ function MenuBarSelect ( id )
1500 1500
 	switch ( id )
1501 1501
 	{
1502 1502
 		case 10: //	close
1503  
-			gContainer.Trackers( gContainer.ActiveTrackerAddress ).Close();
  1503
+			gContainer.Trackers.Item( gContainer.ActiveTrackerAddress ).Close();
1504 1504
 			break;
1505 1505
 
1506 1506
 		case 20: // connect with different name
1507  
-			dial_conference_connect_name( gContainer.Trackers( gContainer.ActiveTrackerAddress ) );
  1507
+			dial_conference_connect_name( gContainer.Trackers.Item( gContainer.ActiveTrackerAddress ) );
1508 1508
 			break;
1509 1509
 		case 21: // connect with different password
1510  
-			dial_conference_connect_password( gContainer.Trackers( gContainer.ActiveTrackerAddress ) );
  1510
+			dial_conference_connect_password( gContainer.Trackers.Item( gContainer.ActiveTrackerAddress ) );
1511 1511
 			break;
1512 1512
 		case 22: // subject
1513  
-			dial_conference_subject( gContainer.Trackers( gContainer.ActiveTrackerAddress ) );
  1513
+			dial_conference_subject( gContainer.Trackers.Item( gContainer.ActiveTrackerAddress ) );
1514 1514
 			break;
1515 1515
 		case 23: // configure
1516  
-			dial_conference_configuration( gContainer.Trackers( gContainer.ActiveTrackerAddress ) );
  1516
+			dial_conference_configuration( gContainer.Trackers.Item( gContainer.ActiveTrackerAddress ) );
1517 1517
 			break;
1518 1518
 		case 24: // destroy
1519  
-			dial_conference_destroy( gContainer.Trackers( gContainer.ActiveTrackerAddress ) );
  1519
+			dial_conference_destroy( gContainer.Trackers.Item( gContainer.ActiveTrackerAddress ) );
1520 1520
 			break;
1521 1521
 		case 25: // invite
1522  
-			external.wnd.params[0].dial_conference_invite( gContainer.Trackers( gContainer.ActiveTrackerAddress ), '', '' );
  1522
+			external.wnd.params[0].dial_conference_invite( gContainer.Trackers.Item( gContainer.ActiveTrackerAddress ), '', '' );
1523 1523
 			break;
1524 1524
 
1525 1525
 		case 30: // bookmark this room
1526  
-			var Password = gContainer.Trackers( gContainer.ActiveTrackerAddress ).Password;
  1526
+			var Password = gContainer.Trackers.Item( gContainer.ActiveTrackerAddress ).Password;
1527 1527
 			external.wnd.params[0].dial_bookmarks_add( gContainer.ActiveTrackerAddress, Password );
1528 1528
 			break;
1529 1529
 		case 31: // manage bookmarks
@@ -1540,14 +1540,14 @@ function MenuBarSelect ( id )
1540 1540
 			cfg( 'tabbedchat' ) = ! ( cfg( 'tabbedchat' ).toString() == 'true' );
1541 1541
 			var ContainerNames = ( new VBArray( external.globals( 'ChatSessionPool' ).Containers.Keys() ) ).toArray();
1542 1542
 			for ( var i = 0; i < ContainerNames.length; ++i )
1543  
-				with ( external.globals( 'ChatSessionPool' ).Containers( ContainerNames[i] ) )
  1543
+				with ( external.globals( 'ChatSessionPool' ).Containers.Item( ContainerNames[i] ) )
1544 1544
 				{
1545 1545
 					MenuBarUpdate( 'tools' );
1546 1546
 					HTMLTabBar.style.display = HTMLTabBar.childNodes.length > 1 || cfg( 'tabbedchat' ) ? 'inline' : 'none';
1547 1547
 				}
1548 1548
 			ContainerNames = ( new VBArray( external.globals( 'ConferenceSessionPool' ).Containers.Keys() ) ).toArray();
1549 1549
 			for ( var i = 0; i < ContainerNames.length; ++i )
1550  
-				with ( external.globals( 'ConferenceSessionPool' ).Containers( ContainerNames[i] ) )
  1550
+				with ( external.globals( 'ConferenceSessionPool' ).Containers.Item( ContainerNames[i] ) )
1551 1551
 				{
1552 1552
 					MenuBarUpdate( 'tools' );
1553 1553
 					HTMLTabBar.style.display = HTMLTabBar.childNodes.length > 1 || cfg( 'tabbedchat' ) ? 'inline' : 'none';
@@ -1557,10 +1557,10 @@ function MenuBarSelect ( id )
1557 1557
 			cfg( 'emoticon' ) = ! ( cfg( 'emoticon' ).toString() == 'true' );
1558 1558
 			var ContainerNames = ( new VBArray( external.globals( 'ChatSessionPool' ).Containers.Keys() ) ).toArray();
1559 1559
 			for ( var i = 0; i < ContainerNames.length; ++i )
1560  
-				external.globals( 'ChatSessionPool' ).Containers( ContainerNames[i] ).MenuBarUpdate( 'tools' );
  1560
+				external.globals( 'ChatSessionPool' ).Containers.Item( ContainerNames[i] ).MenuBarUpdate( 'tools' );
1561 1561
 			ContainerNames = ( new VBArray( external.globals( 'ConferenceSessionPool' ).Containers.Keys() ) ).toArray();
1562 1562
 			for ( var i = 0; i < ContainerNames.length; ++i )
1563  
-				external.globals( 'ConferenceSessionPool' ).Containers( ContainerNames[i] ).MenuBarUpdate( 'tools' );
  1563
+				external.globals( 'ConferenceSessionPool' ).Containers.Item( ContainerNames[i] ).MenuBarUpdate( 'tools' );
1564 1564
 			break;
1565 1565
 		case 44: // settings
1566 1566
 			external.wnd.params[0].dial_preferences( '' );
@@ -1590,7 +1590,7 @@ function MenuBarSelect ( id )
1590 1590
 				var dom = new ActiveXObject( 'MSXML2.DOMDocument' );
1591 1591
 				dom.async = false;
1592 1592
 				dom.resolveExternals = false;
1593  
-				dom.load( external.globals( 'usersdir' ) + 'Profiles\\' + external.globals( 'cfg' )( 'username' ) + '@' + external.globals( 'cfg' )( 'server' ) + '\\bookmarks.xml' );
  1593
+				dom.load( external.globals( 'usersdir' ) + 'Profiles\\' + external.globals( 'cfg' ).Item( 'username' ) + '@' + external.globals( 'cfg' ).Item( 'server' ) + '\\bookmarks.xml' );
1594 1594
 				if ( dom.documentElement )
1595 1595
 				{
1596 1596
 					var BookmarkNodes = dom.documentElement.selectNodes( '/bookmarks/room[@address]' );
@@ -1620,7 +1620,7 @@ function OccupantsContextMenu ()
1620 1620
 	Display.AddItem( true, false, ViewSize, false, 0, external.globals( 'Translator' ).Translate( 'main', 'menu_tool_detailed' ), 30 );
1621 1621
 	Display.AddItem( true, false, ! ViewSize, false, 0, external.globals( 'Translator' ).Translate( 'main', 'menu_tool_compact' ), 31 );
1622 1622
 
1623  
-	var Tracker = gContainer.Trackers.Exists( gContainer.ActiveTrackerAddress ) ? gContainer.Trackers( gContainer.ActiveTrackerAddress ) : false;
  1623
+	var Tracker = gContainer.Trackers.Exists( gContainer.ActiveTrackerAddress ) ? gContainer.Trackers.Item( gContainer.ActiveTrackerAddress ) : false;
1624 1624
 	var Connected = Tracker && Tracker.Occupants.Exists( Tracker.Address.Resource );
1625 1625
 
1626 1626
 	var Menu = external.newPopupMenu;
@@ -1632,7 +1632,7 @@ function OccupantsContextMenu ()
1632 1632
 	switch ( Menu.Choice )
1633 1633
 	{
1634 1634
 		case 1: // invite
1635  
-			external.wnd.params[0].dial_conference_invite( gContainer.Trackers( gContainer.ActiveTrackerAddress ), '', '' );
  1635
+			external.wnd.params[0].dial_conference_invite( gContainer.Trackers.Item( gContainer.ActiveTrackerAddress ), '', '' );
1636 1636
 		break;
1637 1637
 		case 30: // detailed
1638 1638
 			if ( cfg( 'contactlistdisplay' ) == 'compact' )
@@ -1640,7 +1640,7 @@ function OccupantsContextMenu ()
1640 1640
 				cfg( 'contactlistdisplay' ) = 'detailed';
1641 1641
 				var TrackerNames = ( new VBArray( external.globals( 'ConferenceSessionPool' ).Trackers.Keys() ) ).toArray();
1642 1642
 				for ( var i = 0; i < TrackerNames.length; ++i )
1643  
-					external.globals( 'ConferenceSessionPool' ).Trackers( TrackerNames[i] ).RefreshOccupants();
  1643
+					external.globals( 'ConferenceSessionPool' ).Trackers.Item( TrackerNames[i] ).RefreshOccupants();
1644 1644
 				external.globals( 'ClientRoster' ).RefreshAll();
1645 1645
 			}
1646 1646
 			external.wnd.params[0].MenuBarUpdate( 'tools' );
@@ -1651,7 +1651,7 @@ function OccupantsContextMenu ()
1651 1651
 				cfg( 'contactlistdisplay' ) = 'compact';
1652 1652
 				var TrackerNames = ( new VBArray( external.globals( 'ConferenceSessionPool' ).Trackers.Keys() ) ).toArray();
1653 1653
 				for ( var i = 0; i < TrackerNames.length; ++i )
1654  
-					external.globals( 'ConferenceSessionPool' ).Trackers( TrackerNames[i] ).RefreshOccupants();
  1654
+					external.globals( 'ConferenceSessionPool' ).Trackers.Item( TrackerNames[i] ).RefreshOccupants();
1655 1655
 				external.globals( 'ClientRoster' ).RefreshAll();
1656 1656
 			}
1657 1657
 			external.wnd.params[0].MenuBarUpdate( 'tools' );
@@ -1668,9 +1668,9 @@ function OccupantContextMenu ( Occupant, MenuX, MenuY )
1668 1668
 	var Tracker = Occupant.Tracker;
1669 1669
 	var Address = new XMPPAddress( Occupant.Address );
1670 1670
 	var ShortAddress = Address.ShortAddress();
1671  
-	var CanAdd = ShortAddress.length && ! external.globals( 'ClientRoster' ).Items.Exists( ShortAddress ) && ShortAddress != external.globals( 'cfg' )( 'username' ) + '@' + external.globals( 'cfg' )( 'server' );
  1671
+	var CanAdd = ShortAddress.length && ! external.globals( 'ClientRoster' ).Items.Exists( ShortAddress ) && ShortAddress != external.globals( 'cfg' ).Item( 'username' ) + '@' + external.globals( 'cfg' ).Item( 'server' );
1672 1672
 
1673  
-	var LocalOccupant = Tracker.Occupants( Tracker.Address.Resource );
  1673
+	var LocalOccupant = Tracker.Occupants.Item( Tracker.Address.Resource );
1674 1674
 	var LocalOwner = LocalOccupant && LocalOccupant.Affiliation == 'owner';
1675 1675
 	var LocalAdmin = LocalOccupant && ( LocalOccupant.Affiliation == 'admin' || LocalOwner );
1676 1676
 	var LocalModerator = LocalOccupant && LocalOccupant.Role == 'moderator';
@@ -1779,7 +1779,7 @@ function ReceiveKicked ( iq )
1779 1779
 
1780 1780
 		var MessageDom = new ActiveXObject( 'Msxml2.DOMDocument' );
1781 1781
 		MessageDom.loadXML( '<message type="error"><error code="0"/></message>' );
1782  
-		MessageDom.documentElement.setAttribute( 'to', external.globals( 'cfg' )( 'username' ) + '@' + external.globals( 'cfg' )( 'server' ) + '/' + external.globals( 'cfg' )( 'resource' ) );
  1782
+		MessageDom.documentElement.setAttribute( 'to', external.globals( 'cfg' ).Item( 'username' ) + '@' + external.globals( 'cfg' ).Item( 'server' ) + '/' + external.globals( 'cfg' ).Item( 'resource' ) );
1783 1783
 		MessageDom.documentElement.setAttribute( 'from', iq.FromAddress.ShortAddress() );
1784 1784
 		MessageDom.documentElement.firstChild.text = external.globals( 'Translator' ).Translate( 'conference-container', 'kick-error', [ ErrorDescription ] );
1785 1785
 
@@ -1811,7 +1811,7 @@ function ReceiveBanned ( iq )
1811 1811
 
1812 1812
 		var MessageDom = new ActiveXObject( 'Msxml2.DOMDocument' );
1813 1813
 		MessageDom.loadXML( '<message type="error"><error code="0"/></message>' );
1814  
-		MessageDom.documentElement.setAttribute( 'to', external.globals( 'cfg' )( 'username' ) + '@' + external.globals( 'cfg' )( 'server' ) + '/' + external.globals( 'cfg' )( 'resource' ) );
  1814
+		MessageDom.documentElement.setAttribute( 'to', external.globals( 'cfg' ).Item( 'username' ) + '@' + external.globals( 'cfg' ).Item( 'server' ) + '/' + external.globals( 'cfg' ).Item( 'resource' ) );
1815 1815
 		MessageDom.documentElement.setAttribute( 'from', iq.FromAddress.ShortAddress() );
1816 1816
 		MessageDom.documentElement.firstChild.text = external.globals( 'Translator' ).Translate( 'conference-container', 'ban-error', [ ErrorDescription ] );
1817 1817
 
@@ -1828,7 +1828,7 @@ function ServerMessage ( Tracker, MessageText )
1828 1828
 	var MessageDom = new ActiveXObject( 'Msxml2.DOMDocument' );
1829 1829
 	MessageDom.loadXML( '<message><body/></message>' );
1830 1830
 	MessageDom.documentElement.setAttribute( 'xml:lang', external.globals( 'language' ) );
1831  
-	MessageDom.documentElement.setAttribute( 'to', external.globals( 'cfg' )( 'username' ) + '@' + external.globals( 'cfg' )( 'server' ) + '/' + external.globals( 'cfg' )( 'resource' ) );
  1831
+	MessageDom.documentElement.setAttribute( 'to', external.globals( 'cfg' ).Item( 'username' ) + '@' + external.globals( 'cfg' ).Item( 'server' ) + '/' + external.globals( 'cfg' ).Item( 'resource' ) );
1832 1832
 	MessageDom.documentElement.setAttribute( 'from', Tracker.Address.ShortAddress() );
1833 1833
 	MessageDom.documentElement.setAttribute( 'type', 'groupchat' );
1834 1834
 	MessageDom.documentElement.firstChild.text = MessageText;
@@ -1842,9 +1842,9 @@ function ServerMessage ( Tracker, MessageText )
1842 1842
  */
1843 1843
 function MouseMenu ()
1844 1844
 {
1845  
-	var Tracker = gContainer.Trackers.Exists( gContainer.ActiveTrackerAddress ) ? gContainer.Trackers( gContainer.ActiveTrackerAddress ) : false;
  1845
+	var Tracker = gContainer.Trackers.Exists( gContainer.ActiveTrackerAddress ) ? gContainer.Trackers.Item( gContainer.ActiveTrackerAddress ) : false;
1846 1846
 	var Connected = Tracker && Tracker.Occupants.Exists( Tracker.Address.Resource );
1847  
-	var User = Connected ? Tracker.Occupants( Tracker.Address.Resource ) : false;
  1847
+	var User = Connected ? Tracker.Occupants.Item( Tracker.Address.Resource ) : false;
1848 1848
 	var Owner = User && User.Affiliation == 'owner';
1849 1849
 	var Admin = User && ( User.Affiliation == 'admin' || Owner );
1850 1850
 	var Moderator = User && User.Role == 'moderator';
@@ -1865,16 +1865,16 @@ function MouseMenu ()
1865 1865
 	switch ( menu.Choice )
1866 1866
 	{
1867 1867
 		case 1: // subject
1868  
-			dial_conference_subject( gContainer.Trackers( gContainer.ActiveTrackerAddress ) );
  1868
+			dial_conference_subject( gContainer.Trackers.Item( gContainer.ActiveTrackerAddress ) );
1869 1869
 			break;
1870 1870
 		case 2: // configure
1871  
-			dial_conference_configuration( gContainer.Trackers( gContainer.ActiveTrackerAddress ) );
  1871
+			dial_conference_configuration( gContainer.Trackers.Item( gContainer.ActiveTrackerAddress ) );
1872 1872
 			break;
1873 1873
 		case 3: // destroy
1874  
-			dial_conference_destroy( gContainer.Trackers( gContainer.ActiveTrackerAddress ) );
  1874
+			dial_conference_destroy( gContainer.Trackers.Item( gContainer.ActiveTrackerAddress ) );
1875 1875
 			break;
1876 1876
 		case 4: // bookmark this room
1877  
-			var Password = gContainer.Trackers( gContainer.ActiveTrackerAddress ).Password;
  1877
+			var Password = gContainer.Trackers.Item( gContainer.ActiveTrackerAddress ).Password;
1878 1878
 			external.wnd.params[0].dial_bookmarks_add( gContainer.ActiveTrackerAddress, Password );
1879 1879
 			break;
1880 1880
 		case 5: // manage bookmarks

0 notes on commit 3cb9f1a

Please sign in to comment.
Something went wrong with that request. Please try again.