CMS.Explorer.Object = CMS.Widget.extend( {
	_id: 0,
	_name: '',
	_iconsrc: '',
	_haschild: false,
	
	_selected: false,
	
	_parent: null,
	_children: [],
	
	_li: null,
	_bar: null,
	_toggle: null,
	_handle: null,
	_icon: null,
	_title: null,
	_objects: null,
	_expanded: false,
	_loaded: false,
	
	construct: function(parent,id,name,icon,haschild) {
		this._parent = parent;
		this._id = id;
		this._name = name;
		this._iconsrc = icon;
		this._haschild = haschild;
		
		this._li = document.createElement('li');
		this._bar = document.createElement('div');
		this._toggle = document.createElement('div');
		this._handle = document.createElement('span');
		this._icon = document.createElement('img');
		this._title = document.createElement('span');
		this._objects = document.createElement('ul');
		
		addClass(this._li, 'CMS_Explorer_Object');
		addClass(this._bar, 'Bar');
		addClass(this._toggle, 'Toggle');
		addClass(this._handle, 'Handle');
		addClass(this._icon, 'Icon');
		addClass(this._title, 'Title');
		addClass(this._objects, 'Objects');

		if (this._haschild) {
			addClass(this._toggle, 'Plus');
		}

		this._li.appendChild(this._bar);
		this._bar.appendChild(this._toggle);
		this._bar.appendChild(this._handle);
		this._handle.appendChild(this._icon);
		this._handle.appendChild(this._title);
		
		this._icon.src = this._iconsrc;
		this._title.appendChild(document.createTextNode(this._name));
	
		var _this = this;
		addEvent(this._toggle, 'click', function() { _this.toggle(); }, true);
		addEvent(this._handle, 'click', function() { _this.toggleSelect(_this); }, true);
		addEvent(this._handle, 'dblclick', function() { _this.selectOnly(_this); _this.handleOk(); return false; }, false);
	},
	
	getElement: function() {
		return this._li;
	},
	
	toggle: function() {
		if (this._haschild) {
			if (this._expanded) {
				this._expanded = false;
				changeClass(this._toggle,'Min','Plus');
				this.collapse();
			} else {
				this._expanded = true;
				changeClass(this._toggle,'Plus','Min');
				this.expand();
			}
		}
	},
	
	toggleSelect: function(obj) {
		return this._parent.toggleSelect(obj);
	},

	selectOnly: function(obj) {
		return this._parent.selectOnly(obj);
	},
	
	select: function() {
		this._selected = true;
		addClass(this._handle,'Selected');
	},
	
	unselect: function() {
		this._selected = false;
		remClass(this._handle,'Selected');
	},
		
	expand: function() {
		var child;
		var obj;
		
		if (!this._loaded) {
			callCMS(
				this._id,
				this,
				function(r) {
					for ( var i = 0; i < r.length; i++ )
					{
						child = r[i];
						obj = new CMS.Explorer.Object(this,child.id,child.name,child.icon,child.childrenCount>0);
						this._children[this._children.length] = obj;
						this._objects.appendChild(obj.getElement());
						
						this._loaded = true;						
					}
				},
				'getChildren');
		}
		
		this._li.appendChild(this._objects);
	},
	
	collapse: function() {
		this._li.removeChild(this._objects);
	},
	
	handleOk: function() {
		return this._parent.handleOk();
	},
	
	handleCancel: function() {
		return this._parent.handleCancel();
	}
} );