

/*
accordion function, trigged by the jQuery code below. This function will 
load the moment the user hits the page instead of waiting for it to load
fully - 'window.onload'. At the same time the jQuery.index.js will fire 
and overlay the index page till everything has loaded.
*/


function startList() {
	var found = false;
	var stretchers = document.getElementsByClassName('stretcher');
	var toggles = document.getElementsByClassName('display');
	var myAccordion = new fx.Accordion(toggles, stretchers, {
	    opacity: true, 
	    height: true, 
	    width: true, 
	    duration: 800, 
	    transition: fx.sineInOut
	});
	
	toggles.each(function(h3, i){
		var div = Element.find(h3, 'previousSibling');
		if (window.location.href.indexOf(h3.title) > 0) {
		    myAccordion.showThisHideOpen(div);
			found = true;
		}
	});
	
	//element to open on startup.
	if (!found)
	    myAccordion.showThisHideOpen(stretchers[4]);
}


/*	
load the accordion the moment the doc is ready, this method is much 
faster than onload which waits for the document to fully load before 
doing anything.

noConflict needs to be on so jQuery doesnt clash with prototype library 
as both use $() selector.
*/


var $j = jQuery.noConflict();
$j().ready(function(){
    startList();
});


/*
moo.fx, simple effects library built with prototype.js 
(http://prototype.conio.net). by Valerio Proietti (http://mad4milk.net) 
MIT-style LICENSE. for more info (http://moofx.mad4milk.net). 
Friday, February 24, 2006 v1.2.2
*/


var fx = new Object();
//base
fx.Base = function(){};
fx.Base.prototype = {
	setOptions: function(options) {
	this.options = {
		duration: 500,
		onComplete: '',
		transition: fx.sinoidal
	}
	Object.extend(this.options, options || {});
	},

	go: function() {
		this.startTime = (new Date).getTime();
		this.timer = setInterval (this.step.bind(this), 13);
	},

	step: function() {
		var time  = (new Date).getTime();
		if (time >= this.options.duration+this.startTime) {
			this.now = this.to;
			clearInterval (this.timer);
			this.timer = null;
			if (this.options.onComplete) setTimeout(this.options.onComplete.bind(this), 10);
		}
		else {
			var Tpos = (time - this.startTime) / (this.options.duration);
			this.now = this.options.transition(Tpos) * (this.to-this.from) + this.from;
		}
		this.increase();
	},

	custom: function(from, to) {
		if (this.timer != null) return;
		this.from = from;
		this.to = to;
		this.go();
	},

	hide: function() {
		this.now = 0;
		this.increase();
	},

	clearTimer: function() {
		clearInterval(this.timer);
		this.timer = null;
	}
}

//stretchers
fx.Layout = Class.create();
fx.Layout.prototype = Object.extend(new fx.Base(), {
	initialize: function(el, options) {
		this.el = $(el);
		this.el.style.overflow = "hidden";
		this.el.iniWidth = this.el.offsetWidth;
		this.el.iniHeight = this.el.offsetHeight;
		this.setOptions(options);
	}
});

fx.Height = Class.create();
Object.extend(Object.extend(fx.Height.prototype, fx.Layout.prototype), {	
	increase: function() {
		this.el.style.height = this.now + "px";
	},

	toggle: function() {
		if (this.el.offsetHeight > 0) 
		    this.custom(this.el.offsetHeight, 0);
		else 
		    this.custom(0, this.el.scrollHeight);
	}
});

fx.Width = Class.create();
Object.extend(Object.extend(fx.Width.prototype, fx.Layout.prototype), {	
	increase: function() {
		this.el.style.width = this.now + "px";
	},

	toggle: function(){
		if (this.el.offsetWidth > 0) this.custom(this.el.offsetWidth, 0);
		else this.custom(0, this.el.iniWidth);
	}
});

//fader
fx.Opacity = Class.create();
fx.Opacity.prototype = Object.extend(new fx.Base(), {
	initialize: function(el, options) {
		this.el = $(el);
		this.now = 1;
		this.increase();
		this.setOptions(options);
	},

	increase: function() {
		if (this.now == 1 && (/Firefox/.test(navigator.userAgent))) this.now = 0.9999;
		this.setOpacity(this.now);
	},
	
	setOpacity: function(opacity) {
		if (opacity == 0) this.el.style.visibility = "hidden";
		else this.el.style.visibility = "visible";
		if (window.ActiveXObject) this.el.style.filter = "alpha(opacity=" + opacity*100 + ")";
		this.el.style.opacity = opacity;
	},

	toggle: function() {
		if (this.now > 0) this.custom(1, 0);
		else this.custom(0, 1);
	}
});

//transitions
fx.sinoidal = function(pos){
	return ((-Math.cos(pos*Math.PI)/2) + 0.5);
	//this transition is from script.aculo.us
}
fx.linear = function(pos){
	return pos;
}
fx.cubic = function(pos){
	return Math.pow(pos, 3);
}
fx.circ = function(pos){
	return Math.sqrt(pos);
}
