// JavaScript Document

if ( ! window.Prototype )
	throw new Exception('Can\'t work without prototype');

if ( ! window.BrowserDetect )
	throw new Exception('Can\'t work without BrowserDetect');

if ( ! window.hensam )
	var hensam = { Snippets : { } };
else if ( ! (hensam.Snippets ) )
	hensam.Snippets = {  } ;
	
hensam.Snippets.EqualHeightColumns = Class.create({
	
	contentColumn : null,
	otherColumns : null,
	othersRegistered : false,
	fromResize : false,
	
	resizeHandler : function() {
		this.fromResize = true;
		window.setTimeout(this.expandShadows.bindAsEventListener(this), 50);
	},
	
	registerResizing : function(element) {
		element = $(element);
		element.observe('click', this.resizeHandler.bindAsEventListener(this));
	},
	
	expandShadows : function() {
		
		var contentIsHighest = true;
		var highestHeight = 0;
		
		this.contentColumn = $(this.contentColumn);
		if ( ! this.contentColumn )
			return;
			
		highestHeight = this.contentColumn.getHeight();
		
		var cntOtherCols = this.otherColumns.length;
		if ( cntOtherCols <= 0 )
			return;
			
		if ( ! this.fromResize )
		{
			for ( i = 0; i < cntOtherCols; i++ )
			{
				this.otherColumns[i] = $(this.otherColumns[i]);
				if ( highestHeight < this.otherColumns[i].getHeight() )
				{
					highestHeight = this.otherColumns[i].getHeight();
					contentIsHighest = false;
				}
			}
		}
		this.fromResize = false;
		highestHeight += 'px';
		
		for ( i = 0; i < cntOtherCols; i++ )
		{
			this.otherColumns[i].setStyle({ height : highestHeight });
		}
		
		if ( ! contentIsHighest )
		{
			this.contentColumn.setStyle({ height : highestHeight });
		}
		
		if ( ! this.othersRegistered )
		{
			$$('.show').each(this.registerResizing.bindAsEventListener(this));
			$$('.hide').each(this.registerResizing.bindAsEventListener(this));
		}
	},
	
	initialize : function(contentColumn, otherColumns)	{
		if ( 'Explorer' == BrowserDetect.browser && BrowserDetect.version <= 6) 
		{
			this.contentColumn = contentColumn || null;
			this.otherColumns = otherColumns || null;
			if ( ! (this.contentColumn && this.otherColumns ) )
			{
				throw new Exception('got no columns defined through initializer!');
			}
			Event.observe(document, 'dom:loaded', this.expandShadows.bindAsEventListener(this));
		}
	}
});

window.EqualHeight = new hensam.Snippets.EqualHeightColumns('content', ['left_shadow', 'right_shadow']);
