var toggleData;
var toggleEffectPlaying = false;
var isInstantSwitch = false;

switchTo = function(id, instantSwitch) {
	if (toggleEffectPlaying) {
		return;
	} else {
		toggleEffectPlaying = true;
	}
	isInstantSwitch = instantSwitch;
	var element = $(id);
	if(element != null && toggleData[0] != element) {
		//push the selected element to the head of the toggle data
		toggleData[1] = toggleData[0];
		toggleData[0] = element;

		//switching the display!
		new Effect.Opacity(toggleData[1], {from: 1.0, to: 0.0, duration: (isInstantSwitch ? 0 : 0.5), afterFinish: function(object) {step2(toggleData[0]);}});
	} else {
		toggleEffectPlaying = false;
	}
}

step2 = function(element) {
	var trigger = $(toggleData[1].id + '-trigger');
	trigger.removeClassName('active');
	trigger = $(toggleData[0].id + '-trigger');
	trigger.addClassName('active');
	if (!element.visible()) {
		element.setOpacity(0);
		element.setStyle({display: 'block'});
	}
	$(toggleData[1].id).setStyle({display: 'none'});
	new Effect.Opacity(element, {from: 0.0, to: 1.0, duration: (isInstantSwitch ? 0 : 0.5), afterFinish: function(object) {switchComplete();}});
}

switchComplete = function() {
	isInstantSwitch = false;
	toggleEffectPlaying = false;
}