rsence 2.0.0.pre → 2.0.0.1.pre

Sign up to get free protection for your applications and to get access to all the features.
Files changed (80) hide show
  1. data/INSTALL.rdoc +295 -0
  2. data/LICENSE +622 -0
  3. data/README.rdoc +87 -0
  4. data/VERSION +1 -0
  5. data/bin/rsence +5 -101
  6. data/conf/config.yaml +4 -0
  7. data/conf/default_conf.yaml +6 -4
  8. data/conf/{local_conf.yaml → local_conf.yaml.devel} +2 -1
  9. data/js/comm/comm/autosync/autosync.js +0 -1
  10. data/js/comm/comm/queue/queue.js +1 -1
  11. data/js/comm/comm/urlresponder/urlresponder.js +58 -35
  12. data/js/comm/comm/values/values.js +13 -3
  13. data/js/comm/jsloader/jsloader.js +29 -12
  14. data/js/controls/button/themes/default/button_parts1-ie6.gif +0 -0
  15. data/js/controls/checkbox/themes/default/checkbox_parts1-ie6.gif +0 -0
  16. data/js/controls/datetime/timesheet/timesheet.js +2 -2
  17. data/js/controls/dialogs/sheet/themes/default/sheet_bg-ie6.gif +0 -0
  18. data/js/controls/dialogs/sheet/themes/default/sheet_parts1-ie6.gif +0 -0
  19. data/js/controls/dialogs/sheet/themes/default/sheet_parts2-ie6.gif +0 -0
  20. data/js/controls/dialogs/sheet/themes/default/sheet_warning-ie6.gif +0 -0
  21. data/js/controls/passwordcontrol/themes/default/passwordcontrol.html +1 -1
  22. data/js/controls/radiobutton/themes/default/radiobutton_parts1-ie6.gif +0 -0
  23. data/js/controls/sliders/slider/themes/default/hslider_tracks-ie6.gif +0 -0
  24. data/js/controls/sliders/slider/themes/default/slider.css +2 -0
  25. data/js/controls/sliders/slider/themes/default/slider_thumbs-ie6.gif +0 -0
  26. data/js/controls/sliders/vslider/themes/default/vslider.css +2 -0
  27. data/js/controls/sliders/vslider/themes/default/vslider_tracks-ie6.gif +0 -0
  28. data/js/controls/stepper/themes/default/stepper-ie6.gif +0 -0
  29. data/js/controls/tab/tab.js +2 -6
  30. data/js/controls/tab/themes/default/tab.css +1 -0
  31. data/js/controls/tab/themes/default/tab.html +1 -1
  32. data/js/controls/tab/themes/default/tab_border_pattern-ie6.gif +0 -0
  33. data/js/controls/tab/themes/default/tab_parts1-ie6.gif +0 -0
  34. data/js/controls/textarea/themes/default/textarea.css +21 -0
  35. data/js/controls/textarea/themes/default/textarea.html +2 -2
  36. data/js/controls/textcontrol/textcontrol.js +56 -69
  37. data/js/controls/textcontrol/themes/default/textcontrol.css +23 -20
  38. data/js/controls/textcontrol/themes/default/textcontrol.html +1 -1
  39. data/js/controls/window/themes/default/window.css +1 -0
  40. data/js/controls/window/themes/default/window_bg_active-ie6.gif +0 -0
  41. data/js/controls/window/themes/default/window_bg_inactive-ie6.gif +0 -0
  42. data/js/controls/window/themes/default/window_buttons-ie6.gif +0 -0
  43. data/js/controls/window/themes/default/window_parts1-ie6.gif +0 -0
  44. data/js/controls/window/themes/default/window_parts2-ie6.gif +0 -0
  45. data/js/controls/window/window.js +28 -7
  46. data/js/core/class/class.js +31 -30
  47. data/js/core/elem/elem.js +94 -71
  48. data/js/core/event/event.js +34 -26
  49. data/js/core/iefix/iefix.js +46 -31
  50. data/js/debugg/debugg.js +43 -0
  51. data/js/debugg/js.inc +0 -0
  52. data/js/foundation/application/application.js +3 -1
  53. data/js/foundation/control/dyncontrol/dyncontrol.js +1 -0
  54. data/js/foundation/control/eventresponder/eventresponder.js +1 -1
  55. data/js/foundation/json_renderer/json_renderer.js +1 -3
  56. data/js/foundation/system/system.js +4 -4
  57. data/js/foundation/thememanager/thememanager.js +3 -3
  58. data/js/foundation/view/view.js +71 -1
  59. data/lib/conf/argv.rb +664 -0
  60. data/lib/conf/default.rb +51 -52
  61. data/lib/daemon/daemon.rb +281 -195
  62. data/lib/plugins/plugin_plugins.rb +47 -0
  63. data/lib/plugins/pluginmanager.rb +17 -12
  64. data/lib/transporter/transporter.rb +6 -9
  65. data/plugins/client_pkg/client_pkg.rb +12 -9
  66. data/plugins/client_pkg/lib/client_pkg_build.rb +1 -1
  67. data/plugins/index_html/tmpl/index.html +3 -3
  68. data/plugins/main/main.rb +1 -0
  69. metadata +16 -14
  70. data/bin/build_client.rb +0 -254
  71. data/bin/help +0 -6
  72. data/bin/launch.rb +0 -120
  73. data/bin/rdoc.sh +0 -2
  74. data/bin/restart +0 -6
  75. data/bin/run +0 -6
  76. data/bin/run.rb +0 -6
  77. data/bin/save +0 -6
  78. data/bin/start +0 -6
  79. data/bin/status +0 -6
  80. data/bin/stop +0 -6
@@ -11,7 +11,7 @@
11
11
  <div class="textcontrol_sw"></div>
12
12
 
13
13
  <div id="label#{_ID}" title="#{this.label}" class="textcontrol_input_parent">
14
- <input type="text" class="textcontrol_input"
14
+ <input type="text" class="textcontrol_input" #{this.enabled?'':'disabled'}
15
15
  onfocus="HSystem.views[#{this.viewId}].textFocus();"
16
16
  onblur="HSystem.views[#{this.viewId}].textBlur();"
17
17
  id="value#{_ID}" value="#{this.value}" />
@@ -161,6 +161,7 @@
161
161
  cursor: se-resize;
162
162
  z-index: 10000;
163
163
  background-position: -59px -35px;
164
+ font-size: 0px;
164
165
  background-image: #{this.getCssFilePath('window_parts1.png')};
165
166
  }
166
167
 
@@ -106,6 +106,9 @@ HWindow = HDynControl.extend({
106
106
  this.resizeSE = [ 16, 16 ];
107
107
  }
108
108
  },
109
+ maxX: 'auto',
110
+ maxY: 'auto',
111
+ maxSize: 'auto',
109
112
  resizeW: 4,
110
113
  resizeE: 4,
111
114
  resizeN: 4,
@@ -153,6 +156,23 @@ HWindow = HDynControl.extend({
153
156
  return _rectRules;
154
157
  },
155
158
 
159
+ maxRect: function(){
160
+ var _rect = this.base();
161
+ if(_rect[2]<this.options.minSize[0]){
162
+ _rect[2] = this.options.minSize[0];
163
+ }
164
+ else if(_rect[2]>this.options.maxSize[0]){
165
+ _rect[2] = this.options.maxSize[0];
166
+ }
167
+ if(_rect[3]<this.options.minSize[1]){
168
+ _rect[3] = this.options.minSize[1];
169
+ }
170
+ else if(_rect[3]>this.options.maxSize[1]){
171
+ _rect[3] = this.options.maxSize[1];
172
+ }
173
+ return _rect;
174
+ },
175
+
156
176
  /** Reports to HSystem that this window has the focus and the
157
177
  * previously active window needs to blur
158
178
  **/
@@ -210,11 +230,12 @@ HWindow = HDynControl.extend({
210
230
  * button has been clicked
211
231
  **/
212
232
  windowZoom: function(){
213
- var _maxRect = HRect.nu(
233
+ var _maxSize = this.options.maxSize === 'auto' ? this.parentSize() : this.options.maxSize,
234
+ _maxRect = HRect.nu(
214
235
  this.options.minX,
215
236
  this.options.minY,
216
- this.options.maxSize[0],
217
- this.options.maxSize[1]
237
+ _maxSize[0],
238
+ _maxSize[1]
218
239
  ),
219
240
  _fitsRect = HRect.nu( this.rect ),
220
241
  i = 0,
@@ -233,14 +254,14 @@ HWindow = HDynControl.extend({
233
254
  _fitsRect.setHeight(_bottom);
234
255
  }
235
256
  }
236
- if(_fitsRect.width > this.options.maxSize[0]){
237
- _fitsRect.setWidth( this.options.maxSize[0] );
257
+ if(_fitsRect.width > _maxSize[0]){
258
+ _fitsRect.setWidth( _maxSize[0] );
238
259
  }
239
260
  else if(_fitsRect.width < this.options.minSize[0]){
240
261
  _fitsRect.setWidth( this.options.minSize[0] );
241
262
  }
242
- if(_fitsRect.height > this.options.maxSize[1]){
243
- _fitsRect.setHeight( this.options.maxSize[1] );
263
+ if(_fitsRect.height > _maxSize[1]){
264
+ _fitsRect.setHeight( _maxSize[1] );
244
265
  }
245
266
  else if(_fitsRect.height < this.options.minSize[1]){
246
267
  _fitsRect.setHeight( this.options.minSize[1] );
@@ -68,21 +68,22 @@ HClass.prototype = {
68
68
 
69
69
  /* The property copying method. */
70
70
  extend: function(_source, _value) {
71
- var _extend = HClass.prototype.extend;
71
+ var _extend = HClass.prototype.extend,
72
+ _ancestor, _method, _previous, _returnValue, i, _name, _prototype, _protected;
72
73
  if (arguments.length === 2) {
73
- var _ancestor = this[_source];
74
+ _ancestor = this[_source];
74
75
  // only methods are inherited
75
76
  if ((_ancestor instanceof Function) && (_value instanceof Function) &&
76
77
  _ancestor.valueOf() !== _value.valueOf() && (/\bbase\b/).test(_value)) {
77
- var _method = _value;
78
+ _method = _value;
78
79
  _value = function() {
79
80
  // saves the this.base that is the this.base method of this child
80
- var _previous = this.base;
81
+ _previous = this.base;
81
82
  // copies previous this.base from the direction from HClass
82
83
  this.base = _ancestor;
83
84
  // current class's method is called
84
85
  // now inside the function when called this.base points to parent method
85
- var _returnValue = _method.apply(this, arguments);
86
+ _returnValue = _method.apply(this, arguments);
86
87
  // then because event this function can be called from child method
87
88
  // resets the base to as is was before calling this function
88
89
  this.base = _previous;
@@ -98,19 +99,19 @@ HClass.prototype = {
98
99
  return this[_source] = _value;
99
100
  // this is called when called by HClass.extend
100
101
  } else if (_source) {
101
- var _prototype = {toSource: null};
102
- var _protected = ["toString", "valueOf"];
102
+ _prototype = {toSource: null};
103
+ _protected = ["toString", "valueOf"];
103
104
  // we want default constructor function
104
105
  if (HClass._prototyping) {
105
106
  // 3. index
106
107
  _protected.push("constructor");
107
108
  }
108
- for (var i = 0; (_name = _protected[i]); i++) {
109
+ for (i = 0; (_name = _protected[i]); i++) {
109
110
  if (_source[_name] !== _prototype[_name]) {
110
111
  _extend.call(this, _name, _source[_name]);
111
112
  }
112
113
  }
113
- for (var _name in _source) {
114
+ for (_name in _source) {
114
115
  if (!_prototype[_name]) {
115
116
  _extend.call(this, _name, _source[_name]);
116
117
  }
@@ -186,7 +187,8 @@ HClass.prototype = {
186
187
  **/
187
188
  HClass.extend = function(_instance, _static) {
188
189
  // reference to HClass's prototype extend method (HClass's class structure extend method)
189
- var _extend = HClass.prototype.extend;
190
+ var _extend = HClass.prototype.extend,
191
+ _prototype, _constructor, _klass, _object;
190
192
  // if _instance is undefined,null,"" etc. creates object so that code below works
191
193
  if (!_instance) {
192
194
  _instance = {};
@@ -194,15 +196,15 @@ HClass.extend = function(_instance, _static) {
194
196
  HClass._prototyping = true;
195
197
  // this is base for single instance or prototype (class structure) for object that are created
196
198
  // from this class
197
- var _prototype = new this;
199
+ _prototype = new this;
198
200
  // copies properties and methods from _instance to _prototype (class structure)
199
201
  _extend.call(_prototype, _instance);
200
202
  // this constructor came from _instance
201
- var _constructor = _prototype.constructor;
203
+ _constructor = _prototype.constructor;
202
204
  _prototype.constructor = this;
203
205
  delete HClass._prototyping;
204
206
 
205
- var _klass = function() {
207
+ _klass = function() {
206
208
  if (!HClass._prototyping) {
207
209
  _constructor.apply(this, arguments);
208
210
  }
@@ -224,7 +226,7 @@ HClass.extend = function(_instance, _static) {
224
226
  _extend.call(_klass, _static);
225
227
  // if _constructor is marked as null returns the created instance (that is also class structure for
226
228
  // instances if class is returned
227
- var _object = (_constructor !== null) ? _klass : _prototype;
229
+ _object = (_constructor !== null) ? _klass : _prototype;
228
230
  if (_object.init instanceof Function) {
229
231
  _object.init();
230
232
  }
@@ -279,23 +281,22 @@ var Base = HClass;
279
281
 
280
282
  // Array fix
281
283
  if ([]['indexOf']===undefined) {
282
- Object.extend = function(destination, source) {
283
- for (property in source) {
284
- destination[property] = source[property];
285
- }
286
- return destination;
287
- };
288
- Object.extend(Array.prototype, {
289
- indexOf: function(_anObject){
290
- var i = 0, l = this.length;
291
- for (; i < l; i++) {
292
- if (this[i] === _anObject) {
293
- return i;
294
- }
284
+ // Object.extend = function(_destination, _source) {
285
+ // for (var _property in _source) {
286
+ // _destination[_property] = _source[_property];
287
+ // }
288
+ // return _destination;
289
+ // };
290
+ // Object.extend(Array.prototype, {
291
+ Array.prototype.indexOf = function(_anObject){
292
+ var i = 0, l = this.length;
293
+ for (; i < l; i++) {
294
+ if (this[i] === _anObject) {
295
+ return i;
295
296
  }
296
- return -1;
297
297
  }
298
- });
298
+ return -1;
299
+ };
299
300
  }
300
301
 
301
302
 
@@ -304,7 +305,7 @@ try {
304
305
 
305
306
  // console.log surrogate for browsers without a console
306
307
  if(window['console']===undefined){
307
- console = {
308
+ window.console = {
308
309
  log: function(){
309
310
  }
310
311
  };
data/js/core/elem/elem.js CHANGED
@@ -195,8 +195,7 @@ ELEM = {
195
195
 
196
196
  // deprecated; backwards-compatibility
197
197
  _replace: function(_id, _elem) {
198
- var _this = ELEM;
199
- _this._elements[_id] = _elem;
198
+ ELEM._elements[_id] = _elem;
200
199
  },
201
200
 
202
201
  /** = Description
@@ -374,7 +373,7 @@ ELEM = {
374
373
  h = _elem.offsetHeight,
375
374
  _parent = _elem.parentNode;
376
375
  while (_parent && _parent.nodeName.toLowerCase() !== 'body') {
377
- if (!_this._is_ie) {
376
+ if (!BROWSER_TYPE.ie) {
378
377
  _parentOverflow = document.defaultView.getComputedStyle(
379
378
  _parent, null
380
379
  ).getPropertyValue('overflow');
@@ -505,17 +504,17 @@ ELEM = {
505
504
  **/
506
505
  setOpacity: function(_id, _opacity) {
507
506
  var _this = ELEM;
508
- if (_opacity === 1 && _this._is_ie6) {
507
+ if (_opacity === 1 && BROWSER_TYPE.ie6) {
509
508
  _this._elements[_id].style.setAttribute('filter', _this.getStyle(_id, 'filter', true).replace(/alpha([^)]*)/gi, ''));
510
509
  }
511
510
  else {
512
511
  if (_opacity < 0.01) {
513
512
  _opacity = 0;
514
513
  }
515
- if (_this._is_ie6) {
514
+ if (BROWSER_TYPE.ie6) {
516
515
  _this._elements[_id].style.setAttribute('filter', _this.getStyle(_id, 'filter', true).replace(/alpha([^)]*)/gi, '') + 'alpha(opacity=' + _opacity * 100 + ')');
517
516
  }
518
- else if (_this._is_ie) {
517
+ else if (BROWSER_TYPE.ie) {
519
518
  (_this._elements[_id].style.setAttribute('opacity', _opacity));
520
519
  }
521
520
  else {
@@ -664,7 +663,7 @@ ELEM = {
664
663
  flushLoop: function(_delay) {
665
664
  var _this = ELEM;
666
665
  _this._flushLoopCount++;
667
- if (_this._is_ie6 && (_this._flushLoopCount % 5 === 0) && _this._ieFixesNeeded) {
666
+ if (BROWSER_TYPE.ie6 && /* (_this._flushLoopCount % 5 === 0) && */ _this._ieFixesNeeded) {
668
667
  //window.status = 'traversetree0:'+_this._flushLoopCount;
669
668
  iefix._traverseTree();
670
669
  _this._ieFixesNeeded = false;
@@ -681,7 +680,7 @@ ELEM = {
681
680
  } else {
682
681
  if (!_this._needFlush) {
683
682
  // goto sleep mode
684
- if (_this._is_ie6 && _this._ieFixesNeeded) {
683
+ if (BROWSER_TYPE.ie6 && _this._ieFixesNeeded) {
685
684
  //window.status = 'traversetree1:'+_this._flushLoopCount;
686
685
  iefix._traverseTree();
687
686
  _this._ieFixesNeeded = false;
@@ -961,7 +960,7 @@ ELEM = {
961
960
  _this.setOpacity(_id, _value);
962
961
  }
963
962
  else {
964
- if( _this._is_ie ) {
963
+ if( BROWSER_TYPE.ie ) {
965
964
  var _camelKey = _key.replace(
966
965
  /((-)([a-z])(\w))/g,
967
966
  function($0, $1, $2, $3, $4) {
@@ -974,7 +973,7 @@ ELEM = {
974
973
  _elems[_id].style.setProperty(_key, _cached[_key], '');
975
974
  }
976
975
  }
977
- if (_this._is_ie6) {
976
+ if (BROWSER_TYPE.ie6) {
978
977
  if (iefix._traverseStyleProperties.indexOf(_key) !== -1) {
979
978
  _this._ieFixesNeeded = true;
980
979
  }
@@ -1181,7 +1180,7 @@ ELEM = {
1181
1180
  _this.setOpacity(_id, _cached[_key]);
1182
1181
  }
1183
1182
  else {
1184
- if (_this._is_ie6) {
1183
+ if (BROWSER_TYPE.ie6) {
1185
1184
  if (iefix._traverseStyleProperties.indexOf(_key) !== -1) {
1186
1185
  _this._ieFixesNeeded = true;
1187
1186
  }
@@ -1208,34 +1207,61 @@ ELEM = {
1208
1207
 
1209
1208
  /* The ELEM "post-constructor" */
1210
1209
  _init: function() {
1211
- var _this = ELEM,
1212
- _cmd,
1213
- _type,
1214
- _cmdResult;
1215
- if (_this._is_ie) {
1216
- ELEM.getStyle = _this._getStyleIE;
1210
+
1211
+ var _this = ELEM;
1212
+
1213
+ if (BROWSER_TYPE.ie6) {
1214
+ _this.getStyle = _this._getStyleIE;
1217
1215
  }
1218
- if (_this._is_ie) {
1219
- ELEM._flushStyleCache = _this._flushStyleCacheIE;
1216
+ if (BROWSER_TYPE.ie) {
1217
+ _this._flushStyleCache = _this._flushStyleCacheIE;
1220
1218
  }
1221
1219
 
1222
- _this.bind(document.body);
1220
+ if(!_this['_timer']){
1221
+ _this.bind(document.body);
1222
+ }
1223
1223
 
1224
- // creates an 'trash' for div elements
1225
1224
  if (_this._enableRecycler) {
1226
1225
  _this._trashId = _this.make(0, 'div');
1227
1226
  _this.setCSS(_this._trashId, "display:none;visibility:hidden;");
1228
1227
  _this.setAttr(_this._trashId, 'id', 'trashcan_' + _this._trashId);
1229
1228
  }
1230
1229
 
1231
- _this._timer = setTimeout( function(){ ELEM.flushLoop(ELEM._minDelay); }, _this._minDelay);
1230
+ if(BROWSER_TYPE.symbian){
1231
+ var TestClass = HClass.extend({
1232
+ test: true,
1233
+ constructor: null
1234
+ });
1235
+ // Symbian dies in the loop when loading itself cached on reload, restart loop by re-calling this function in 1 second.
1236
+ if(!TestClass.test){
1237
+ var _gotoOpera = confirm('Your Web Browser fails. Please restart the S60 Web Browser or install a better browser.\nDo you want to download and install Opera Mobile now?');
1238
+ if(_gotoOpera){
1239
+ location.href = 'http://www.opera.com/download/get.pl?sub=++++&id=32792&location=270&nothanks=yes';
1240
+ }
1241
+ // Can't do anything wightout proper JS support.
1242
+ return;
1243
+ }
1244
+ }
1232
1245
 
1233
- if (!_this._domLoadQueue) {
1234
- return;
1246
+ _this._flushDomLoadQueueBusy = false;
1247
+ while(!ELEM._initDone){
1248
+ ELEM._flushDomLoadQueue();
1235
1249
  }
1250
+ _this._timer = setTimeout( function(){ if(!ELEM._flushDomLoadQueueBusy){ELEM.flushLoop(ELEM._minDelay); }}, ELEM._minDelay );
1251
+ // _this._flushDomLoadQueueTimer = setInterval( function(){ELEM._flushDomLoadQueue();}, 10 );
1236
1252
 
1237
- while (_this._domLoadQueue.length !== 0) {
1238
- _cmd = _this._domLoadQueue.shift();
1253
+ // alert(_this._minDelay);
1254
+ },
1255
+
1256
+ _flushDomLoadQueue: function(){
1257
+ var _cmd,
1258
+ _type,
1259
+ _cmdResult;
1260
+ if(ELEM._domLoadQueue.length === 0){
1261
+ ELEM._initDone = true;
1262
+ }
1263
+ else {
1264
+ _cmd = ELEM._domLoadQueue.shift();
1239
1265
  _type = (typeof _cmd);
1240
1266
  if (_type === 'function') {
1241
1267
  _cmd.call();
@@ -1243,58 +1269,45 @@ ELEM = {
1243
1269
  else if (_type === 'string') {
1244
1270
  _cmdResult = eval(_cmd);
1245
1271
  if (typeof _cmdResult === 'string') {
1246
- _this._domLoadQueue.push(_cmdResult);
1272
+ ELEM._domLoadQueue.push(_cmdResult);
1247
1273
  }
1248
1274
  }
1249
1275
  }
1250
- _this._initDone = true;
1251
1276
  },
1252
1277
 
1253
1278
  /* Checks browser versions and starts the document load check */
1254
1279
  _warmup: function() {
1255
1280
  var _this = ELEM,
1256
1281
  _ua = navigator.userAgent,
1257
- _isIE = (document.all && _ua.indexOf("Opera") === -1),
1258
- _browserTypesTable = [
1259
- [ 'opera', '_is_opera', _ua.indexOf("Opera") !== -1 ],
1260
- [ 'safari', '_is_safari', _ua.indexOf("KHTML") !== -1 ],
1261
- [ 'symbian', '_is_symbian', _ua.indexOf("SymbianOS") !== -1 ],
1262
- [ 'chrome', '_is_chrome', _ua.indexOf("Chrome") !== -1 ],
1263
- [ 'ie', '_is_ie', _isIE ],
1264
- [ 'ie6', '_is_ie6', _isIE && _ua.indexOf("MSIE 6") !== -1 ],
1265
- [ 'ie7', '_is_ie7', _isIE && _ua.indexOf("MSIE 7") !== -1 ],
1266
- [ 'ie8', '_is_ie8', _isIE && _ua.indexOf("MSIE 8") !== -1 ],
1267
- [ 'firefox', '_is_ff', _ua.indexOf("Firefox") !== -1 ],
1268
- [ 'firefox2', '_is_ff2', _ua.indexOf("Firefox/2.") !== -1 ],
1269
- [ 'firefox3', '_is_ff3', _ua.indexOf("Firefox/3.") !== -1 ]
1270
- ],
1271
- i = 0,
1272
- _typeKeyGlobal,
1273
- _typeKeyLocal,
1274
- _typeBool;
1275
- for( ; i < _browserTypesTable.length; i++ ){
1276
- _typeKeyGlobal = _browserTypesTable[i][0];
1277
- _typeKeyLocal = _browserTypesTable[i][1];
1278
- _typeBool = _browserTypesTable[i][2];
1279
- BROWSER_TYPE[_typeKeyGlobal] = _typeBool;
1280
- _this[_typeKeyLocal] = _typeBool;
1281
- }
1282
+ _isIE = (document.all && (_ua.indexOf("Opera") === -1)),
1283
+ _browserType = BROWSER_TYPE;
1284
+ _browserType.opera = _ua.indexOf("Opera") !== -1;
1285
+ _browserType.safari = _ua.indexOf("KHTML") !== -1;
1286
+ _browserType.symbian = _ua.indexOf("SymbianOS") !== -1;
1287
+ _browserType.chrome = _ua.indexOf("Chrome") !== -1;
1288
+ _browserType.ie = _isIE;
1289
+ _browserType.ie6 = _isIE && (_ua.indexOf("MSIE 6") !== -1);
1290
+ _browserType.ie7 = _isIE && (_ua.indexOf("MSIE 7") !== -1);
1291
+ _browserType.ie8 = _isIE && (_ua.indexOf("MSIE 8") !== -1);
1292
+ _browserType.firefox = _ua.indexOf("Firefox") !== -1;
1293
+ _browserType.firefox2 = _ua.indexOf("Firefox/2.") !== -1;
1294
+ _browserType.firefox3 = _ua.indexOf("Firefox/3.") !== -1;
1282
1295
  _this._domWaiter();
1283
1296
  },
1284
1297
 
1285
1298
  /* Adds commands to be run when the document load check turns true */
1286
1299
  _domLoader: function(_cmd) {
1287
- var _this = ELEM,
1288
- _type = (typeof _cmd);
1289
- if (_this._initDone === true) {
1300
+ var _type = (typeof _cmd);
1301
+ if (ELEM._initDone === true) {
1290
1302
  if( _type === 'string' ) {
1291
1303
  eval(_cmd);
1292
1304
  }
1293
1305
  else if (_type === 'function'){
1294
1306
  _cmd.call();
1295
1307
  }
1296
- } else {
1297
- _this._domLoadQueue.push(_cmd);
1308
+ }
1309
+ else {
1310
+ ELEM._domLoadQueue.push(_cmd);
1298
1311
  }
1299
1312
  },
1300
1313
 
@@ -1304,7 +1317,7 @@ ELEM = {
1304
1317
  _this = ELEM;
1305
1318
  // A hack for ie (ripped from DomLoaded.js)
1306
1319
  // http://www.cherny.com/demos/onload/domloaded.js
1307
- if (_this._is_ie) {
1320
+ if (BROWSER_TYPE.ie) {
1308
1321
  var _ie_proto = "javascript:void(0)";
1309
1322
  if (location.protocol === "https:") {
1310
1323
  _ie_proto = "src=//0";
@@ -1312,12 +1325,10 @@ ELEM = {
1312
1325
  document.write("<scr" + "ipt id=__ie_onload defer src=" + _ie_proto + "></scr" + "ipt>");
1313
1326
  var _ie_script = document.getElementById("__ie_onload");
1314
1327
  _ie_script.onreadystatechange = function() {
1315
- if (this.readyState === "complete") {
1328
+ if ((this.readyState === "complete") && true) {
1329
+ clearTimeout(ELEM._domLoadTimer);
1316
1330
  ELEM._domLoadStatus = true;
1317
1331
  ELEM._init();
1318
- delete ELEM._domLoadQueue;
1319
- clearTimeout(ELEM._domLoadTimer);
1320
- delete ELEM._domLoadTimer;
1321
1332
  }
1322
1333
  };
1323
1334
  // the event will trigger on ie, so we don't have to keep on polling:
@@ -1325,8 +1336,9 @@ ELEM = {
1325
1336
  }
1326
1337
 
1327
1338
  // Safari / KHTML readyness detection:
1328
- else if ((/KHTML|WebKit/i.test(navigator.userAgent)) &&
1329
- (/loaded|complete/.test(document.readyState))) {
1339
+ else if (BROWSER_TYPE.safari && document.readyState === 'complete'){
1340
+ // (/loaded|complete/.test(document.readyState))) {
1341
+ // (/loaded|complete/.test(document.readyState))) {
1330
1342
  _this._domLoadStatus = true;
1331
1343
  }
1332
1344
 
@@ -1335,13 +1347,24 @@ ELEM = {
1335
1347
  _this._domLoadStatus = true;
1336
1348
  }
1337
1349
 
1338
- if (!_this._domLoadStatus) {
1339
- _this._domLoadTimer = setTimeout('ELEM._domWaiter()', ELEMTickerInterval * 10);
1340
- } else {
1341
- _this._init();
1342
- delete _this._domLoadQueue;
1350
+ if (_this._domLoadStatus) {
1343
1351
  clearTimeout(_this._domLoadTimer);
1344
- delete _this._domLoadTimer;
1352
+ if(BROWSER_TYPE.symbian){
1353
+ // document.body.innerHTML produces beyond-wtf "fastinnerhtml!", maybe they "fixed" an unit test?
1354
+ // see: http://trac.webkit.org/browser/S60/trunk/WebCore/khtml/html/html_elementimpl.cpp#L750
1355
+ //document.body.innerHTML += '';
1356
+
1357
+ // This check ensures we are use actually testing the beyond buggy S60 Web Browser.
1358
+ // Better versions are handled like regular safari/webkit/chrome/khtml
1359
+ BROWSER_TYPE.symbian = document.body.innerHTML === "fastinnerhtml!";
1360
+ // var _timer = setTimeout(_this._init, 5000);
1361
+ }
1362
+ // else {
1363
+ _this._init();
1364
+ // }
1365
+ }
1366
+ else {
1367
+ _this._domLoadTimer = setTimeout('ELEM._domWaiter()', ELEMTickerInterval * 10);
1345
1368
  }
1346
1369
  }
1347
1370
  };