var Toggler = Class.create(
{
	initialize: function(settings)
	{
		var self = this;
		$(settings.sitemapId).setStyle({height: 'auto', opacity: '0.0'});
		var expandToHeight = eval($(settings.sitemapInnerId).getHeight());
		if(window.attachEvent)
			expandToHeight += settings.IETweakHeight;
		expandToHeight += 'px';
		$(settings.sitemapId).setStyle({height: '0', opacity: '1.0'});
		$$('#sitemap .sIFR-replaced').each(function(heading)
		{
			$(heading).setStyle({display: 'none'});
		});
		
		var togglers = $$('.' + settings.toggleClassName);
		this.sitemapExpanded = false;
		
		togglers.each(function(toggler)
		{
			Event.observe(toggler, 'click', function()
			{
				if(Effect.Queues.get('sitemap')[0])
				{
					Effect.Queues.get('sitemap').each(function(fx){
						fx.cancel();
					});
				}
				
				if (self.sitemapExpanded == false) {
					new Effect.Morph($(settings.sitemapId), {
						style: {
							height: expandToHeight
						},
						duration: settings.expandSpeed,
						beforeStart: function(){
							togglers.each(function(toggler)
							{
								$(toggler).addClassName('active');
							});
							if($$('.so-flash')[0])
							{
								$$('.so-flash').each(function(flash)
								{
									$(flash).firstDescendant().setStyle({visibility:'hidden'});
								});
							}
						},
						afterFinish: function(){
							self.sitemapExpanded = true;
							$$('#sitemap .sIFR-replaced').each(function(heading)
							{
								$(heading).setStyle({display: 'block'});
							});
						},
						queue: {
							position: 'end',
							scope: 'sitemap',
							limit: 2
						}
					});
				}
				else if(self.sitemapExpanded == true)
				{
					new Effect.Morph($(settings.sitemapId), {
						style: {
							height: '1px'
						},
						duration: settings.collapseSpeed,
						afterFinish: function(){
							self.sitemapExpanded = false;
							$$('#sitemap .sIFR-replaced').each(function(heading)
							{
								$(heading).setStyle({display: 'none'});
							});
							$(settings.sitemapId).setStyle({height:'0'});
							togglers.each(function(toggler)
							{
								$(toggler).removeClassName('active');
							});
							if($$('.so-flash')[0])
							{
								$$('.so-flash').each(function(flash)
								{
									$(flash).firstDescendant().setStyle({visibility:'visible'});
								});
							}
						},
						queue: {
							position: 'end',
							scope: 'sitemap',
							limit: 2
						}
					});
				}
			});
		});
	}
});

Event.observe(window, 'load', function()
{
	if($$('.toggle-sitemap')[0] && $('sitemap'))
	{
		new Toggler(
		{
			toggleClassName: 'toggle-sitemap',
			sitemapId: 'sitemap',
			sitemapInnerId: 'sitemap-inner',
			expandSpeed: 0.5,
			collapseSpeed: 0.3,
			IETweakHeight: 0
		});
	}
});