function ml_window_menu(level,name,value,group,requires) {
	var object=document.getElementById(name)
	object.value=value
	var values=new Array;
	var im=document.getElementById('calculator_image')
	if (ml_popup_menu(level,object,value)) {
		if (im) im .style.visibility="visible"	
		var div_object=document.getElementById('level0_'+group)
		var sel_object=document.getElementById('select0_'+group)
		values=hide_window_menus(1,div_object,sel_object)
		var ready=all_set(requires)
		eval(group+"('"+values.join(':')+"',"+ready+")")
	}
}

function all_set(req) {
	var openfile=document.getElementById(".calculator_openfile")
	if (openfile) {
		if (openfile.value) return 1
	}
	var reqs=new Array;
	if (req) {
		reqs=req.split(":")
		reqs.push("analysis_types")
		requireall=reqs
	} else {
		reqs=requireall
	}
	if (reqs.length==0) reqs.push("analysis_types")
	var ret=1;
	for (var i=0; i<reqs.length; i++) {
		var sel=document.getElementById('select0_'+reqs[i])
		if (sel.value == 0) ret=0
	}
	return ret
}

function hide_window_menus(level,div,sel) {
	var response=new Array
	div.style.visibility='hidden'
	for (var i=0; i<sel.options.length; i++) {
		var value=sel.options[i].value
		if (value!=0) {
			var sub=document.getElementById("level"+level+"_"+value)
			var subsel=document.getElementById("select"+level+"_"+value)
			if (value == sel.value) {
				response.push(value)
				if (sub) {
					response.push(hide_window_menus(level+1,sub,subsel))
				}
			} else if (sub) {
				hide_window_menus(level+1,sub,subsel)
			}
		}
	}
	return (response)
}

function ml_popup_menu(level,object,selected) {


//alert("level is "+level+", object is "+object)
	var complete=0;
	for (var i=0; i<object.options.length; i++) {
		var value=object.options[i].value
		var sub=document.getElementById("level"+level+"_"+value)
		var subsel=document.getElementById("select"+level+"_"+value)
		if (sub) {
			if (value==selected) {
				sub.style.visibility='visible'
				if (subsel) { ml_popup_menu(level+1,subsel,subsel.value) }
			} else {
				sub.style.visibility='hidden'
				if (subsel) { ml_popup_menu(level+1,subsel,0) }
			}
		}
		if (value && value==selected && !sub) {
			complete=1
		}
	}
	return complete
}

function analysis_types(values,ready) {
	var disp=document.getElementById('analysis_types_display')
	if (disp)  disp.innerHTML="<span class='display_head'>Analysis:</span> "+values
	if (ready) submit_form()
}

function materials(values,ready) {
	var disp=document.getElementById('materials_display')
	if (disp) disp.innerHTML="<span class='display_head'>Material:</span> "+values
	if (ready) submit_form()
}

function shapes(values,ready) {
	var disp=document.getElementById('shapes_display')
	if (disp) disp.innerHTML="<span class='display_head'>Shape:</span> "+values
	if (ready) submit_form()
}

function calculate(values,ready) {
	if (values=='go') {
		if (ready) { submit_form() }
		else { alert("First select analysis / material / shape") }
	}
}

function submit_form() {
	var form=document.getElementById('calculator_form')
	if (form) form.submit()
}

function file(values) {
	if (values=='print') setTimeout('window.print()',250)
	if (values=='new') reset()
	if (values=='save_as_file') savedata('sonotrode_calculator.dat')
	if (values=='view_parameters') savedata('sonotrode_calculator.txt')
	if (values=='open') loaddata()
	if (values.indexOf('examples')==0) request_example(values)


}

function animation(values,ready) {
	if (ready) { submit_form() }
	else { alert("First select analysis / material / shape") }
}

function request_example(values) {
	var exinp=document.getElementById('.calculator_example')
	if (exinp) {
		exinp.value=values
		submit_form()
	}
}

function help(values,ready) {
	if (values=='about') alert("This is the PowerUltrasonics.com Sonotrode Calculator\n\nEngine Version 0.1d (24 October 2004)\n\nCalculations Version 0.1d (24 October 2004)\n\nCopyright ©2004 Chris Cheers - All rights reserved.")
	if (values=='help_page') openhelp()
	if (values=='formulae') {
		if (ready) {
			var finp=document.getElementById('.show_formulae')
			if (finp) finp.value=1
			submit_form()
		} else {
			alert("First select analysis / material / shape")
		}
	}
}

function disallowed() {
	alert("Sorry, this option is not currently available")
}

function handleUnitChange(sel) {
	var fdata=sel.name.split(".")
	var group=fdata[1]
	var name=fdata[2]
	var refsel=document.getElementById('units.'+group)
	var scale=1
	for (var i=0; i<refsel.options.length;i++) {
		fdata=refsel.options[i].value.split(" ")
		if (sel.value == fdata[1]) {
			scale=fdata[0]
			break
		}
	}
	var inp=document.getElementById(group+'.'+name)
	var hid=document.getElementById('si.'+name)
	inp.value=scale*hid.value
}

function handleInputChange(sel) {
	var fdata=sel.name.split(".")
	var group=fdata[0]
	var name=fdata[1]
	var unitsel=document.getElementById('units.'+group+'.'+name)
	var refsel=document.getElementById('units.'+group)
	var scale=1
	for (var i=0; i<refsel.options.length;i++) {
		fdata=refsel.options[i].value.split(" ")
		if (unitsel.value == fdata[1]) {
			scale=fdata[0]
			break
		}
	}
	var hid=document.getElementById('si.'+name)
	hid.value=sel.value/scale
}
function openhelp() {
  newWin=open('/calculator_help.html','helpWindow')
  setTimeout('newWin.focus()',500)
  return false
}

function reset() {
	for (var i in menus) {
		var menusel=document.getElementById('select0_'+menus[i])
//alert('menusel is '+menusel+' ('+menusel.value+')')
		menusel.value=0
	}
	submit_form()
}

function savedata(filename) {
	var page=document.getElementById('.page')
	page.value=filename
	submit_form()
	page.value=page_backup
}

function loaddata() {
	var disp=document.getElementById('analysis_types_display')
	if (disp)  disp.innerHTML='<input type="file" name=".calculator_openfile" id=".calculator_openfile"  />'

}

function toggleMenu(m) {
	document.getElementById('.page').value=page_backup
	var im=document.getElementById('calculator_image')
	for (var i in menus) {
		var menu=document.getElementById('level0_'+menus[i])
		if (menus[i] == m) {
			if (menu.style.visibility == "hidden") {
				if (im) im.style.visibility="hidden"	
				menu.style.visibility="visible"
			}
			else {
				if (im) im.style.visibility="visible"	
				hideMenus(menus[i])
			}
		} else {
			hideMenus(menus[i])
		}
	}
}

function hideMenus(m) {
	var div_object=document.getElementById('level0_'+m)
	var sel_object=document.getElementById('select0_'+m)
	hide_window_menus(1,div_object,sel_object)
}
