/**
 * Requires Prototype
 *
 * This is a collection of animation behav
 * Written by Jonathan Hohle
 *
 */

function FadeAndSlideBlock(block_id) {
	this.animation_duration = .3;
	this.displayed = false;
	if (block_id) this.set_id(block_id);
}

FadeAndSlideBlock.prototype.set_id = function(block_id) {
	this.id = block_id;
	var block = $(this.id);
	this.displayed = (block.style.display != 'none');
}

FadeAndSlideBlock.prototype.set_duration = function(duration) {
	this.animation_duration = duration;
}

FadeAndSlideBlock.prototype.show = function() {
	var duration = this.__duration()
	new Effect.SlideDown(this.id , {duration: duration});
	new Effect.Appear(this.id, {duration: duration});
	this.displayed = true;
	return this.displayed;
}

FadeAndSlideBlock.prototype.hide = function() {
	var duration = this.__duration();
	new Effect.SlideUp(this.id, {duration: duration});
	new Effect.Fade(this.id, {duration: duration});
	this.displayed = false;
	return this.displayed;
}

FadeAndSlideBlock.prototype.toggle = function() {
	if (this.displayed) { this.hide(); }
	else { this.show(); }
	return this.displayed;
}

FadeAndSlideBlock.prototype.__duration = function() {
	return (window.keymap && keymap[16]) ?
		this.animation_duration * 4 :
		this.animation_duration;
}

//
// Fade block is similar to FadeAndSlideBlock, with
// the exception that it only fades (it doesn't slide)
//
var FadeBlock = function(block_id) {
	this.animation_duration = .3;
	this.displayed = false;
	if (block_id) this.set_id(block_id);
}

FadeBlock.prototype.set_id = FadeAndSlideBlock.prototype.set_id;
FadeBlock.prototype.set_duration = FadeAndSlideBlock.prototype.set_duration;
FadeBlock.prototype.toggle = FadeAndSlideBlock.prototype.toggle;
FadeBlock.prototype.__duration = FadeAndSlideBlock.prototype.__duration;


FadeBlock.prototype.show = function() {
	var duration = this.__duration()
	new Effect.Appear(this.id, {duration: duration});
	this.displayed = true;
	return this.displayed;
}

FadeBlock.prototype.hide = function() {
	var duration = this.__duration();
	new Effect.Fade(this.id, {duration: duration});
	this.displayed = false;
	return this.displayed;
}

//
// Only Slides
//
var SlideBlock = function(block_id) {
	this.animation_duration = .3;
	this.displayed = false;
	if (block_id) this.set_id(block_id);
}

SlideBlock.prototype.set_id = FadeAndSlideBlock.prototype.set_id;
SlideBlock.prototype.set_duration = FadeAndSlideBlock.prototype.set_duration;
SlideBlock.prototype.toggle = FadeAndSlideBlock.prototype.toggle;
SlideBlock.prototype.__duration = FadeAndSlideBlock.prototype.__duration;

SlideBlock.prototype.show = function() {
	var duration = this.__duration()
	new Effect.SlideDown(this.id, {duration: duration});
	this.displayed = true;
	return this.displayed;
}

SlideBlock.prototype.hide = function() {
	var duration = this.__duration();
	new Effect.SlideUp(this.id, {duration: duration});
	this.displayed = false;
	return this.displayed;
}

