var opening = true;		// initially open; the previous state would be opening
var slide_delay = 20;		// time between animation frames in ms
var menu;					// holder reference to the menu being moved
var delta = 8;				// number of pixels to move each iteration
var menu_offsets;			// size of the menu; used to know when to stop

function make_menu(menu_name, menu_button_name) {
	menu = document.getElementById(menu_name);
	menubutton = document.getElementById(menu_button_name);
	menu_offsets = {
		min:-menu.offsetWidth,
		max:-menubutton.offsetWidth,
		current: 0
	}
	menu_offsets.current = menu_offsets.max;
	if(read_cookie(menu.id)) {
		opening = false;
		move_menu();
	}
	
	var uls = menu.getElementsByTagName("UL");
	for(var i = 0; i < uls.length; i++) {
		if(uls[i].id && read_cookie(uls[i].id)) toggle_list(uls[i].id);
	}
}

function slide_menu() {
	opening = !opening;
	if(read_cookie(menu.id)) erase_cookie(menu.id);
	else write_cookie(menu.id, "1");
	move_menu();
} 

function move_menu() {
	menu_offsets.current += (opening ? 1 : -1) * delta;
	menu.style.left = menu_offsets.current + "px";
	
	if(!opening && menu_offsets.current < menu_offsets.min) return;
	if(opening && menu_offsets.current > -delta) return;
	setTimeout(move_menu, slide_delay);
}

// toggle visibility of li elements under ul element with id = ul_id
// toggles between "" and "block"
function toggle_list(ul_id) {
	var el = document.getElementById(ul_id), cookied = false;
	
	if(el && el.tagName.toUpperCase() == "UL") {
		for(var i = 0; i < el.childNodes.length; i++) {
			if(el.childNodes[i].tagName && el.childNodes[i].tagName.toUpperCase() == "LI") {
				if(cookied == false) {
					if(el.childNodes[i].style.display.toLowerCase() != "block") write_cookie(ul_id, "1");
					else erase_cookie(ul_id);
					cookied = true;
				}
				
				if(el.childNodes[i].style.display.toLowerCase() != "block") { el.childNodes[i].style.display = "block"; }
				else { el.childNodes[i].style.display = ""; }
			}
		}
	}
}
