
// CLASS
Trb.Web.LayerManager = function (parent, id) {
	Trb.Web.LayerManager.superclass.constructor.call(this, parent, id);
	
	Trb.Web.LayerManager.instances[id] = this;

	//	vd(this._load()[0]);
};
// Form extends Component.  Must be done immediately after the Form constructor 
YAHOO.lang.extend(Trb.Web.LayerManager, Trb.Web.Input);

Trb.Web.LayerManager.instances = {}


Trb.Web.LayerManager.prototype.register = function(c) {
		var cid = Trb.Util.idOf(c);
		var c = _c(cid);
		
		if (!this.contains(cid)) {
			var items = this._load();
			var zIndex = parseInt( YAHOO.util.Dom.getStyle(cid, "z-index"));
			var item = {};
			item['id'] = cid;
			item['zIndex'] = zIndex;
			item[items.length] = item;
		}
		this._store(items);
}

Trb.Web.LayerManager.prototype.remove = function(c) {
		var cid = Trb.Util.idOf(c);
		var c = _c(cid);
		
		if (!this.contains(cid)) {
			var items = this._load();
			var zIndex = parseInt( YAHOO.util.Dom.getStyle(cid, "z-index"));
			var item = {};
			item['id'] = cid;
			item['zIndex'] = zIndex;
			item[items.length] = item;
		}
		this._store(items);
}




Trb.Web.LayerManager.prototype.bringToTop = function(c, absolute) {
//		debug('TO TOP');	
		var cid = Trb.Util.idOf(c);
		var item = this.getItem(cid);
		
		var highestZindex = Trb.Web.LayerManager.getGlobalHighestZindex();
		if (highestZindex <= 0) {
			highestZindex = Trb.Util.getHighestZindex();
		}
//		debug(highestZindex);
		item['zIndex'] = highestZindex + 10;
		item['absolute'] = Trb.Util.toBool(absolute);
		this._storeItem(item);
		this.stack();
}



Trb.Web.LayerManager.prototype.contains = function(c) {
	var cid = Trb.Util.idOf(c);
	var items = this._load();
	for (var index in items) {
		var item = items[index];
		if (item['id'] == cid)
			return true;
	}
}


Trb.Web.LayerManager.prototype.getItem = function(c) {
	var cid = Trb.Util.idOf(c);
	
	var items = this._load();
	for (var index in items) {
		var item = items[index];
		if (item['id'] == cid)
			return item;
	}
}


Trb.Web.LayerManager.prototype._storeItem = function(item) {
	var items = this._load();
	for (index in items) {
		var v = items[index];
		if (v['id'] == item['id']) {
			items[index] = item;
		}
	}
	this._store(items);	
}


Trb.Web.LayerManager.prototype.getHighestZindex = function() {
	var maxIndex = 0;
	var items = this._load();
	for (var index in items) {
		var item = items[index];
		if (item['zIndex'] > maxIndex) 
			maxIndex = item['zIndex'];
	}
	return maxIndex;	
}

Trb.Web.LayerManager.getGlobalHighestZindex = function() {
	var maxIndex = 0;
	for (var index in Trb.Web.LayerManager.instances) {
		var layerManager = Trb.Web.LayerManager.instances[index];
		var currMaxIndex = layerManager.getHighestZindex();
		if (currMaxIndex > maxIndex) {
			maxIndex = currMaxIndex;
		}		
	}
	return maxIndex;
}







/**
 * TODO
 */ 
Trb.Web.Component.prototype.stack = function() {
//	return false;
//	debug('STACK');
	var items = this._load();
	
	for (var index in items) {
		var item = items[index];
		var c = _c(item['id']);
		if (YAHOO.lang.isObject(c)) {
			YAHOO.util.Dom.setStyle(item['id'], "z-index", item['zIndex'] );
//			debug(item['id'] + ' stacked ' + item['zIndex']);
		}
	}
	
	// find absolute
	for (var index in items) {
		var item = items[index];

		var c = _c(item['id']);
		if (YAHOO.lang.isObject(c) && item['absolute'] == true) {
			var zIndex = Trb.Util.getHighestZindex() + 10;
			YAHOO.util.Dom.setStyle(item['id'], "z-index", zIndex );
//			debug(item['id'] + ' stacked absolute' + zIndex);
		}
	}	
}


Trb.Web.Component.prototype._load = function() {
	return YAHOO.lang.JSON.parse(this.getValue());
}

Trb.Web.Component.prototype._store = function(items) {
	var str = YAHOO.lang.JSON.stringify( items );
	this.setValue( str );
}



