	accordions = {
		prev: null,
		current: new Object,
		isWorking: false,
		events: new Array,
		
		init: function(objs)
			{
			for (i=0; i<objs.length; i++)
				{
				if (objs[i])
					{
					objs[i].onclick = function(event) { accordions.open(event,this); return false }
					if ($(objs[i].id+'_content')) $(objs[i].id+'_content').onclick = function(event) { event = event || window.event; event.cancelBubble = true; }
					}
				}
			},

		addHandler: function(obj,e,listener)
			{
			newEvent = new Object;
			newEvent.obj = obj;
			newEvent.e = e;
			newEvent.listener = listener;

			this.events.push(newEvent);
			return this.events.length-1;
			},

		removeHandler: function(objID)
			{
			this.events.splice(objID,1);
			},

		open: function(event,obj)
			{
			
			if (obj.className == 'step active') return false;
			
			elemId = obj.id+'_content';
			$(elemId).style.display = 'block';
			
			$(obj.id+'_close').style.display = 'none';
			$(obj.id+'_open').style.display = 'block';
			
			if (this.isWorking) return false;
			else this.isWorking = true;
			
			obj.className = 'step active';

			event = event || window.event;
			if (event.target) try { event.srcElement = event.target; } catch(e) {}

			if (accordions.prev)
			  	{
			  	$(prevMenu+'_close').style.display = 'block';
				$(prevMenu+'_open').style.display = 'none';
			  	prevElement = accordions.current;
			  	accordions.prev = accordions.current;
				if (accordions.prev.id.replace('_content','') != obj.id || accordions.current.opened)
					{
					boh = prevElement.id.replace('_content','');
					$(boh).className = 'step';
					accordions.prev.sh = accordions.prev.offsetWidth;
					accordions.prev.h = 0;
					accordions.prev.t = 0;
					if (accordions.prev != $('frame_content'))
						accordions.prev.timer = setInterval('accordions.movement(accordions.prev, Back.easeIn, 40, 0)', 30);
					else
						accordions.prev.timer = setInterval('accordions.movement(accordions.prev, Back.easeIn, 0, 50)', 30);
					}
				else
					{
					accordions.prev = obj;
					}
			  	}
			else
			  	{
			  	accordions.prev = obj;
			  	}

			accordions.current = $(obj.id+'_content');

			if (accordions.current == accordions.prev && accordions.current.opened)
			  	{
			  	return false;
			  	}

			if (!accordions.current.h)
				{
				accordions.current.style.width = '100%';
				accordions.current.style.visibility = 'hidden';
				accordions.current.h = accordions.current.offsetWidth;
				accordions.current.style.width = '0';
				accordions.current.sh = accordions.current.offsetWidth;
				accordions.current.style.visibility = 'visible';
				}
			accordions.current.t = 0;

			if (accordions.current != $('frame_content'))
				{
				accordions.current.timer = setInterval('accordions.movement(accordions.current, Back.easeOut, 0, 40)', 30);
				}
			else
				accordions.current.timer = setInterval('accordions.movement(accordions.current, Back.easeOut, 0, 0)', 30);
				prevMenu = obj.id;
			},

		movement: function(obj, f, pbs, pb)
			{
			obj.t++;
			h = parseInt(f(obj.t, obj.sh - pbs, obj.h - obj.sh + pb, 30));
			if (h < 0) h = 0;
			obj.style.width = h + 'px';
			if (obj.t >= 30)
				{
				clearInterval(obj.timer)
				if (obj != accordions.prev)
					{
					obj.style.width = '100%';
//					obj.childNodes[1].style.width = '100%';
					obj.opened = true;
					for (i=0; i<this.events.length; i++)
						{
						if (obj.id.replace('_content','') == this.events[i].obj.id && this.events[i].e == 'open')
							this.events[i].listener($(obj.id.replace('_content','')));
						}
					}
				else
					{
					if (obj != $('frame_content'))
					obj.style.width = '0';
//					obj.childNodes[1].style.width = '500px';
					obj.style.display = 'none';
					obj.opened = false;
					for (i=0; i<this.events.length; i++)
						{
						if (obj.id.replace('_content','') == this.events[i].obj.id && this.events[i].e == 'close')
							this.events[i].listener($(obj.id.replace('_content','')));
						}
					}
				obj.t = 0;
				this.isWorking = false;
				}
			}
	}
	
	var Back = {
	easeIn: function (t, b, c, d, s)
		{
		if (s == undefined) s = 1.70158;
		return c*(t/=d)*t*((s+1)*t - s) + b;
		},
		
	easeOut: function (t, b, c, d, s)
		{
		if (s == undefined) s = 1.70158;
		return c*((t=t/d-1)*t*((s+1)*t + s) + 1) + b;
		},
		
	easeInOut: function (t, b, c, d, s)
		{
		if (s == undefined) s = 1.70158; 
		if ((t/=d/2) < 1) return c/2*(t*t*(((s*=(1.525))+1)*t - s)) + b;
		return c/2*((t-=2)*t*(((s*=(1.525))+1)*t + s) + 2) + b;
		}
	}
	
	Linear = function (t, b, c, d) {
			return c*t/d + b;
	}
