var Spoiler = {
	timer: 0,
	setOption: function(options) {
		var newOptions = Object.extend(options||{}, arguments[1]||{});
		return newOptions;
	},
	start: function() {
		$$('a.spoiler-tgl').each(function(tgl){
			var el = tgl.id.replace('_tgl', '');
			el = $(el);
			var opt = tgl.getAttribute('rev').split('||');
			tgl.onclick = function(){Spoiler.plugin(el, tgl, opt); return false;};	
			if(el.style.display != 'none') {
				var hider = function(){Spoiler.plugin(el, tgl, opt)};
				this.timer += 60;
				hider.delay(this.timer);
			}
		}, this);
	},
	set: function(el,h,o){
		if(h) el.setStyle('height', 0);
		if(o) el.setOpacity(0);
		this.showhide(el);
	},
	reset: function(el,h,d){
		if(d !== 'no') this.showhide(el);
		if(h) el.setStyle('height', '');
		el.style.visibility = '';
		el.style.overflow = '';
		if (window.ActiveXObject) el.style.filter = '';
		else el.style.opacity = '';
	},
	showhide: function(el){
		if(el.getStyle('display') != 'none') el.setStyle('display', 'none');
		else el.setStyle('display', '');
	},
	//Effects
	Simple: function(el){
		el = $(el);
		return this.showhide(el);
	},
	Appear: function(el){
		el = $(el);
		var options = this.setOption({onComplete: (function(){this.reset(el,false,'no')}).bind(this)}, arguments[1]||{});
		this.set(el, false, true);
		new fx.Opacity(el, options).custom(0,1);
	},
	Fade: function(el){
		el = $(el);
		var options = this.setOption({onComplete: (function() {this.reset(el)}).bind(this)}, arguments[1]||{});
		new fx.Opacity(el, options).custom(1,0);
	},
	SlideDown: function(el){
		var slider = new Fx.Slide(el, {onComplete: (function(){el.parentNode.replaceWith(el);}).bind(this)});
		el.style.display = '';
		slider.hide();
		var startPosition = [el.scrollHeight, '0'];
		var endPosition = ['0', -el.scrollHeight];
		slider.custom(endPosition, startPosition);
	},
	SlideUp: function(el){
		el = $(el);
		var slider = new Fx.Slide(el, {onComplete: (function(){el.style.display = 'none';el.parentNode.replaceWith(el);}).bind(this)});
		var startPosition = [el.scrollHeight, '0'];
		var endPosition = ['0', -el.scrollHeight];
		slider.show();
		slider.custom(startPosition, endPosition);
	},
	BackDown: function(el){
		el = $(el);
		this.set(el, true);
		var options = this.setOption({transition: Fx.Transitions.backOut, onComplete: (function(){this.reset(el,true,'no')}).bind(this)}, arguments[1]||{});
		new fx.Height(el, options).custom(0, el.scrollHeight);
	},
	BackUp: function(el){
		el = $(el);
		var options = this.setOption({transition: Fx.Transitions.backIn, onComplete: (function() {this.reset(el,true)}).bind(this)}, arguments[1]||{});
		new fx.Height(el, options).custom(el.offsetHeight, 0);
	},
	PhaseIn: function(el){
		el = $(el);
		var options = this.setOption(arguments[1]||{});
		this.set(el,true, true);
		var H = new fx.Height(el, options);
		H.options.transition = fx.Transitions.backOut;
		H.options.onComplete = (function(){this.reset(el,true,'no')}).bind(this);
		H.custom(0, el.scrollHeight);
		new fx.Opacity(el, options).custom(0,1)
	},
	PhaseOut: function(el){
		el = $(el);
		var options = this.setOption({transition: Fx.Transitions.backIn}, arguments[1]||{});
		new fx.Opacity(el, options).custom(1,0);
		var H = new fx.Height(el, options);
		H.options.transition = fx.Transitions.backIn;
		H.options.onComplete = (function() {this.reset(el,true)}).bind(this);
		H.custom(el.offsetHeight, 0);
	},
	PAIR: {
	'slide': ['SlideDown','SlideUp'],
	'blind': ['BackDown','BackUp'],
	'appear': ['Appear','Fade'],
	'phase': ['PhaseIn','PhaseOut'],
	'simple': ['Simple','Simple'],
	'apblind': ['Appear','BackUp']
	},
	toggle: function(el, effect) {
	el = $(el);
	effect = (effect || 'appear').toLowerCase();
	Spoiler[(el.style.display != 'none')?Spoiler.PAIR[effect][1]:Spoiler.PAIR[effect][0]](el, arguments[2]||{});
	},
	Collapse: function(el, effect, me) {
		el = $(el);
		Spoiler.toggle(el, effect, arguments[3] || {});
		$(me).toggleClassName("collapsed");
	},
	plugin: function(el, tid, opt){
		if (el.style.display != 'none') {
			tid.innerHTML = opt[1];
		} else {
			tid.innerHTML = opt[2];
		}
		tid.toggleClassName("collapsed");
		Spoiler.toggle(el, opt[0], {duration: parseInt(opt[3])});
	}
};

window.addEvent('load', function(){Spoiler.start();});
