/**************************************************
	Author:		Jonathan Allen
	Created:	28-09-2008
	Updated:	04-12-2008
	Version:	2.1
**************************************************/


/**************************************************
	Use: add to onload event the "accordian_setup" function
	for the variable 'obj' give the menu to be worked with as
		an object.  For the 'name' variable give the ID name
		to use as a prefix for generated ID's eg:
		
		<script type='text/javascript'>
			obj = document.getElementById ('myMenu');;
			name = 'accord';
		
			accordian_setup (obj, name);
		</script>
**************************************************/




// ------------------------------------------------------------------- menu
// ----------------------------------- variable setup
var accordian_opened = new Array ();
var accordian_sizes = new Array ()





// ----------------------------------- worker functions
function accordian_setup (obj, name) {
	elms = obj.getElementsByTagName ('ul');
	for (i = 0; i < elms.length; i ++) {
		// set tags to variables
		ul = elms [i];
		a = ul.parentNode.getElementsByTagName ('a'); a = a [0];
		// setup li
		a.href = "javascript:accordian_toggle (getId ('" + name + "_child_"+ i +"'))";
		// a.onmouseover = function () { accordian_toggle (getId ( name + "_child_"+ i)); }
		addClass (ul.parentNode, 'dropout');
		// setup ul
		ul.id = name + '_child_' + i;
		accordian_sizes [ul.id] = ul.offsetHeight;
		ul.style.display = 'none';
		ul.style.overflow = 'hidden';
		id = cookie_read ('accordian_menu');
		if (getId (id)) accordian_toggle (getId (id))	;
	} // for
} // accordian_setup



function accordian_toggle (obj) {
	if (!slider_oLock && !slider_cLock) {
		var id = obj.id.split ('_'); var counter = 0;
		// loop through sliders, closing as you go providing it's not the slider we're working with
		while (true) {
			curId = id [0] + '_' + id [1] + '_';
			if (!getId (curId + counter)) break;
			if (counter != id [2]) slider_close (curId + counter);
			counter ++;
		} // while
		
		// toggle given slider
		if (obj.style.display == 'none') slider_open (obj.id);
		else {
			slider_close (obj.id);
			cookie_create ('accordian_menu', id, -1);
		} // else
	} // if
} // accordian_toggle





// -------------------------------------------------------------------  effects
// ----------------------------------- variable setup
var slider_speed = 10; // how long to open
var slider_oLock = false;
var slider_cLock = false;

// ----------------------------------- worker functions
function slider_open (id, h) {
	slider_oLock = true;
	obj = getId (id);
	obj.style.display = 'block';
		
	var max = accordian_sizes [obj.id];
	var numPx = Math.ceil (max / slider_speed);
	h = h || 0; h += numPx;

	if (h >= max) {
		obj.style.height = max + 'px';
		setOpacity (obj, 100);
		slider_oLock = false;
		cookie_create ('accordian_menu', id, 1);
	} // if
	else {
		obj.style.height = h + 'px';
		setOpacity (obj, h / max * 100);
		setTimeout ("slider_open ('" + obj.id + "', "+h+")", 40);
	} // else
} // slider_open



function slider_close (id, h) {
	slider_cLock = true;
	obj = getId (id);

	var max = accordian_sizes [obj.id];
	var numPx = Math.ceil (max / slider_speed);
	h = h || max; h -= numPx;

	if (h <= 0) {
		obj.style.display = 'none';
		slider_cLock = false;
	} // if
	else {
		obj.style.height = h + 'px';
		setOpacity (obj, h / max * 100);
		setTimeout ("slider_close ('" + obj.id + "', "+h+")", 40);
	} // else
} // slider_open

function setOpacity (obj,opacity) {
	obj.style.opacity = opacity / 100;
	obj.style.filter = "alpha(opacity="+opacity+")";
}





// ------------------------------------------------------------------- cookie handlers
function cookie_create (name,value,days) {
	if (days) {
		var date = new Date ();
		date.setTime (date.getTime () + (days * 24 * 60 * 60 * 1000));
		var expires = "; expires="+date.toGMTString ();
	} // if
	else var expires = "";
	document.cookie = name + "=" + value+expires + "; path=/";
} // cookie_create

function cookie_read (name) {
	var nameEQ = name + "=";
	var ca = document.cookie.split (';');
	for (var i = 0; i < ca.length; i ++) {
		var c = ca [i];
		while (c.charAt(0) == ' ') c = c.substring (1, c.length);
		if (c.indexOf (nameEQ) == 0)
			return c.substring (nameEQ.length, c.length);
	} // for
	return null;
} // cookie_read



function cookie_erase (name) { cookie_create (name, "", -1); } // cookie_erase
