var _Obj = new Array, _ObjCounter = 0, _OnLoad = new Array;

function _BrowserVersion() {
	var b=navigator.appName;
	if (b.indexOf('Netscape')!=-1) this.b="ns";
	else if ((b=="Opera") || (navigator.userAgent.indexOf("Opera")>0)) this.b = "opera";
	else if (b=="Microsoft Internet Explorer") this.b="ie";
	if (!b) alert('Unidentified browser.\nThis browser is not supported,');
	this.version=navigator.appVersion;
	this.v=parseInt(this.version, 10);
	this.ns=(this.b=="ns" && this.v>=4);
	this.ns4=(this.b=="ns" && this.v==4);
	this.ns6=(this.b=="ns" && this.v==5);
	this.ie=(this.b=="ie" && this.v>=4);
	this.ie4=(this.version.indexOf('MSIE 4')>0);
	this.ie5=(this.version.indexOf('MSIE 5')>0);
	this.ie55=(this.version.indexOf('MSIE 5.5')>0);
	this.ie6=(this.version.indexOf('MSIE 6.0')>0);
	this.opera=(this.b=="opera");
	this.dom=(document.createElement && document.appendChild && document.getElementsByTagName)?true:false;
	this.def=(this.ie||this.dom); // most used browsers, for faster if loops
	var ua=navigator.userAgent.toLowerCase();
	if (ua.indexOf("win")>-1) this.platform="win32";
	else if (ua.indexOf("mac")>-1) this.platform="mac";
	else this.platform="other";
}

var is = new _BrowserVersion();


function _InitObj(obj) {
   if (!obj.style) obj.style = obj;
   obj.String = '_Obj["'+obj.id+'"]';
   _Obj[obj.id] = obj;
}

function Object(o, document_obj) {
   if (!o) return null;
   if (o.String)  return o;
   var obj = _Obj[o];
   if (!obj) {
      var doc = document_obj || document;
      obj = doc.getElementById 
          ? doc.getElementById(o)
          : doc.all 
            ? doc.all[o]
            : obj;
      if (obj) {
         _InitObj(obj);
      }
   }

   return obj;
}

function CreateChild(parent,id) {
   parent = Object(parent);
   var obj = document.createElement('DIV');
   if (!parent) parent = document.body;
   if (!id) id = '_Object'+ ++_ObjCounter;
   obj.id = id;
   parent.appendChild(obj);
   obj._Parent = parent;
   _InitObj(obj);
   SetAttribute(obj, 'position', 'absolute');
   return obj;
}

function RemoveObject(obj) {
   obj = Object(obj);
   obj._Parent.removeChild(obj);
}

function GetLeft(obj) { obj = Object(obj); return obj.offsetLeft; }

function GetTop(obj) { obj = Object(obj); return obj.offsetTop; }

function GetWidth(obj) { obj = Object(obj); return obj.offsetWidth; }

function GetHeight(obj) { obj = Object(obj); return obj.offsetHeight; }

function GetBottom(obj) { obj = Object(obj); return GetTop(obj) + GetHeight(obj); }

//function GetHTML(obj) { obj = Object(obj); return obj.innerHTML; }
//function SetHTML(obj, html) { obj = Object(obj); obj.innerHTML = html; }

function SetAttribute(obj, attr, value) {
   obj = new Object(obj);
   switch (attr) {
      case 'html': obj.innerHTML = value; break;
      case 'class': obj.className = value; break;
      default: eval ('obj.style.' + attr + '=value');
   }
}

function GetAttribute(obj, attr) {
   obj = Object(obj);
   switch (attr) {
      case 'html': return obj.innerHTML;
      case 'class': return obj.className;
      case 'left': return obj.offsetLeft;
      case 'top': return obj.offsetTop;
      case 'width': return obj.offsetWidth;
      case 'height': return obj.offsetHeight;
      default: return eval ('obj.style.' + attr);
   }
}

function SetAttributes() {
   for(var i=1; i<arguments.length; i+=2) {
     SetAttribute(arguments[0], arguments[i], arguments[i+1]);
   }
}

function Show() {
   for(var i=0; i<arguments.length; i++) {
      SetAttribute(arguments[i], 'visibility', 'visible');
   }
}

function Hide() {
   for(var i=0; i<arguments.length; i++) {
      SetAttribute(arguments[i], 'visibility', 'hidden');
   }
}

function _EventHandler(ev) {
  ev = ev ? ev : event;
  ev.X = ev.offsetX ? ev.offsetX : ev.layerX;
  ev.Y = ev.offsetY ? ev.offsetY : ev.layerY;
  ev.X = ev.X || 0;
  ev.Y = ev.Y || 0;
  this._HandlerTmp = this._Handler[ev.type];
  retval = this._HandlerTmp(ev);
  return retval;
}

function SetHandler(obj, type, handler) {
   obj = Object(obj);

   if (!obj._EventListener) {
      obj._EventHandler = _EventHandler;
      obj._EventListener = function(ev){obj._EventHandler(ev)};
   }
   
   var wrapper = null;
   
   if (handler) {
      if (!obj._Handler) {
         obj._Handler = new Array;
      }
      obj._Handler[type] = handler;
      wrapper = obj._EventListener;
   }
   if (obj.addEventListener) {
     obj.removeEventListener(type, obj._EventListener, false);
     if (wrapper) obj.addEventListener(type, obj._EventListener, false);
   }
   else if (obj.attachEvent) {
     obj.detachEvent('on' + type, obj._EventListener);
     if (wrapper) obj.attachEvent('on' + type, obj._EventListener);
   }
   else {
     eval ('obj.on'+type+'=' + wrapper);
   }
}
