/**
 *
 * @auther Adam Brill adam@solutionset.com
 * @date 20070122
 *
 * @see prototype.js v1.6
 * @see SS.Base.js for v1.6
 */

SS.ZIndexHandler = Class.create(SS.Base, {
	/**
	 * Object used to store settings. Extends the parent class settings
	 * @var Object
	 */
	s: {
		zIndex: 0
	},
	
	/**
	 * Object used to store nodes. Extends the parent class nodes
	 * @var Object
	 */
	n: {
		element: null
	},
	
	/**
	 * @param Function $super
	 * @param DOM Element element
	 * @param object options
	 * @return void
	 */
	initialize: function($super, element, options) {
		$super(options);
		SS.ZIndexHandler.instances.push(this);
		
		this.n.element = $(element);
		
		this.s.zIndex = parseInt(this.n.element.getStyle('zIndex'));
		if (!Object.isNumeric(this.s.zIndex)) {
			this.s.zIndex = 0;
		}
		
		this._captureEvents();
		
		this.setZIndex();
	},
	
	/**
	 * @param void
	 * @return void
	 */
	onClickElement: function() {
		this.setZIndex();
	},
	
	/**
	 * @param void
	 * @return void
	 */
	setZIndex: function() {
		var highestZIndex = this.getHighestZIndex();
		if (highestZIndex >= this.s.zIndex) {
			this.s.zIndex = highestZIndex+1;
			this.n.element.setStyle({
				zIndex: highestZIndex+1
			});
		}
	},
	
	/**
	 * @param void
	 * @return void
	 */
	getHighestZIndex: function() {
		return SS.ZIndexHandler.instances.max(function(instance) {
			return (instance === this) ? 0 : instance.s.zIndex;
		}.bind(this));
	},
	
	/**
	 * @param void
	 * @return void
	 */
	_captureEvents: function() {
		this.n.element.observe('click', this.onClickElement.bindAsEventListener(this));
	}
});

Object.extend(SS.ZIndexHandler, {
	/**
	 * Array used to store all the instances of this Class
	 * @var Array
	 */
	instances: []
});

