var SliderHeight, SliderPitch, SliderBeat, SliderTempo, SliderDuration;


function init() {

	var sect_close = 0;
	if (document.getElementById('section_instrumentation')) {
		if (document.getElementById('section_instrumentation').style.display == '') {
			document.getElementById('section_instrumentation').style.display = 'none';
			sect_close = 1;
		}
	}

// Default values for various parameters
	var exit = initVals();

	var default_vals = new Array();
	default_vals = getDefaultVals();

	if (default_vals['play_choice'] == 1) {
		playChoice('ChoiceSelection');
	}

// Slider for Height
	SliderHeight = new Bs_Slider();
	SliderHeight.attachOnChange(sliderChange_height);
	SliderHeight.attachOnSlideEnd(sliderSlideEnd_height);
	SliderHeight.attachOnInputChange(sliderSlideEnd_height);
	SliderHeight.width = 150;
	SliderHeight.height = 19;
	SliderHeight.minVal = 5;
	SliderHeight.maxVal = 25;
	SliderHeight.valueDefault = default_vals['height'] || SliderHeight.minVal;
	SliderHeight.valueInterval = 1;
	SliderHeight.imgDir = '/common/javascript/slider/img/';
	SliderHeight.setBackgroundImage('aluminumalloyvolcanic/horizontal_background.gif', 'repeat-x');
	SliderHeight.setSliderIcon('opera7/horizontal_knob.gif', 10, 17);
	SliderHeight.useInputField = 1;
	SliderHeight.styleValueTextClass = 'sliderInput2';
	SliderHeight.draw('slider_height');
	document.getElementById('value_height').value = SliderHeight.valueDefault;

// Slider for Pitch
	SliderPitch = new Bs_Slider();
	SliderPitch.attachOnChange(sliderChange_pitch);
	SliderPitch.attachOnSlideEnd(sliderSlideEnd_pitch);
	SliderPitch.attachOnInputChange(sliderSlideEnd_pitch);
	SliderPitch.width = 200;
	SliderPitch.height = 19;
	SliderPitch.minVal = 24;
	SliderPitch.maxVal = 72;
	SliderPitch.valueDefault = default_vals['pitch'] || SliderPitch.minVal;
	SliderPitch.valueInterval = 1;
	SliderPitch.imgDir = '/common/javascript/slider/img/';
	SliderPitch.setBackgroundImage('aluminumalloyvolcanic/horizontal_background.gif', 'repeat-x');
	SliderPitch.setSliderIcon('opera7/horizontal_knob.gif', 10, 17);
	SliderPitch.useInputField = 2;
	SliderPitch.styleValueFieldClass = 'sliderInput';
	SliderPitch.draw('slider_pitch');
	document.getElementById('value_pitch').value = SliderPitch.valueDefault;

// Slider for Notes Per Beat
	SliderBeat = new Bs_Slider();
	SliderBeat.attachOnChange(sliderChange_notesperbeat);
	SliderBeat.attachOnSlideEnd(sliderSlideEnd_notesperbeat);
	SliderBeat.attachOnInputChange(sliderSlideEnd_notesperbeat);
	SliderBeat.width = 200;
	SliderBeat.height = 19;
	SliderBeat.minVal = 1;
	SliderBeat.maxVal = 16;
	SliderBeat.valueDefault = default_vals['notesperbeat'] || SliderBeat.minVal;
	SliderBeat.valueInterval = 1;
	SliderBeat.imgDir = '/common/javascript/slider/img/';
	SliderBeat.setBackgroundImage('aluminumalloyvolcanic/horizontal_background.gif', 'repeat-x');
	SliderBeat.setSliderIcon('opera7/horizontal_knob.gif', 10, 17);
	SliderBeat.useInputField = 2;
	SliderBeat.styleValueFieldClass = 'sliderInput';
	SliderBeat.draw('slider_notesperbeat');
	document.getElementById('value_notesperbeat').value = SliderBeat.valueDefault;

// Slider for Tempo
	SliderTempo = new Bs_Slider();
	SliderTempo.attachOnChange(sliderChange_tempo);
	SliderTempo.attachOnSlideEnd(sliderSlideEnd_tempo);
	SliderTempo.attachOnInputChange(sliderSlideEnd_tempo);
	SliderTempo.width = 200;
	SliderTempo.height = 19;
	SliderTempo.minVal = 4;
	SliderTempo.maxVal = 208;
	SliderTempo.valueDefault = default_vals['tempo'] || SliderTempo.minVal;
	SliderTempo.valueInterval = 1;
	SliderTempo.imgDir = '/common/javascript/slider/img/';
	SliderTempo.setBackgroundImage('aluminumalloyvolcanic/horizontal_background.gif', 'repeat-x');
	SliderTempo.setSliderIcon('opera7/horizontal_knob.gif', 10, 17);
	SliderTempo.useInputField = 2;
	SliderTempo.styleValueFieldClass = 'sliderInput';
	SliderTempo.draw('slider_tempo');
	document.getElementById('value_tempo').value = SliderTempo.valueDefault;

// Slider for Duration
	SliderDuration = new Bs_Slider();
	SliderDuration.attachOnChange(sliderChange_duration);
	SliderDuration.attachOnSlideEnd(sliderSlideEnd_duration);
	SliderDuration.attachOnInputChange(sliderSlideEnd_duration);
	SliderDuration.width = 200;
	SliderDuration.height = 19;
	SliderDuration.minVal = 0.2;
	SliderDuration.maxVal = 300;
	SliderDuration.valueDefault = default_vals['duration'] || SliderDuration.minVal;
	SliderDuration.valueInterval = 0.2;
	SliderDuration.imgDir = '/common/javascript/slider/img/';
	SliderDuration.setBackgroundImage('aluminumalloyvolcanic/horizontal_background.gif', 'repeat-x');
	SliderDuration.setSliderIcon('opera7/horizontal_knob.gif', 10, 17);
	SliderDuration.useInputField = 2;
	SliderDuration.styleValueFieldClass = 'sliderInput';
	SliderDuration.draw('slider_duration');
	document.getElementById('value_duration').value = SliderDuration.valueDefault;

// Adjust parameter values
	document.getElementById('value_genre').value = default_vals['genre'];
	var selected_genre = getGenreNameByValue(default_vals['genre']);
	for (var i in genres) {
		if (i != 0) {
			var this_genre = getGenreNameByValue(i);
			var this_src = new String();
			if (document.getElementById(this_genre)) {
				this_src = document.getElementById(this_genre).src;
				if (this_genre != selected_genre)	{ highlightButton(this_genre, 'off'); }
				else					{ highlightButton(this_genre, 'on'); }
			}
		}
	}
	if (default_vals['cyclic'] == 0)	{ document.getElementById('value_cyclic').checked = false; }
	else					{ document.getElementById('value_cyclic').checked = true; }
	document.getElementById('value_rule').value = default_vals['rule'];
	document.getElementById('value_ruletype').value = default_vals['ruletype'];
	document.getElementById('value_ruletype_select').options[getRuletypeIndexByValue(default_vals['ruletype'])].selected = true;
	document.getElementById('value_init').value = default_vals['init'];
	document.getElementById('value_steps').value = default_vals['steps'];
	document.getElementById('TotalSteps').innerHTML = default_vals['steps'];
	document.getElementById('value_scale').value = default_vals['scalevalue'];
	document.getElementById('value_scale_select').options[getScaleIndexByValue(default_vals['scalevalue'])].selected = true;
	document.getElementById('value_instrument1').options[getInstrumentIndexByValue(default_vals['instrument1'])].selected = true;
	document.getElementById('value_instrument2').options[getInstrumentIndexByValue(default_vals['instrument2'])].selected = true;
	document.getElementById('value_instrument3').options[getInstrumentIndexByValue(default_vals['instrument3'])].selected = true;
	document.getElementById('value_instrument4').options[getInstrumentIndexByValue(default_vals['instrument4'])].selected = true;
	document.getElementById('value_instrument5').options[getInstrumentIndexByValue(default_vals['instrument5'])].selected = true;
	var filters_this = new Array();
	filters_this = getAdditionalFilters(default_vals);
	var filters_order = new Array();
	filters_order = getFiltersOrder(filters_this);
	document.getElementById('select_filter1').innerHTML = writeFilterOptions('1', default_vals['filter1'], filters_this, filters_order);
	document.getElementById('select_filter2').innerHTML = writeFilterOptions('2', default_vals['filter2'], filters_this, filters_order);
	document.getElementById('select_filter3').innerHTML = writeFilterOptions('3', default_vals['filter3'], filters_this, filters_order);
	document.getElementById('select_filter4').innerHTML = writeFilterOptions('4', default_vals['filter4'], filters_this, filters_order);
	document.getElementById('select_filter5').innerHTML = writeFilterOptions('5', default_vals['filter5'], filters_this, filters_order);
	document.getElementById('value_percussion').options[getPercussionIndexByValue(default_vals['percussion'])].selected = true;
	adjustNKMIDValue(default_vals['id']);

	if (document.getElementById('section_instrumentation')) {
		if ((document.getElementById('section_instrumentation').style.display == 'none') && (sect_close == 1)) {
			document.getElementById('section_instrumentation').style.display = '';
		}
	}


// Play it on load
	if (no_play == 1)	{ no_play = 0; loadImage(); }
	else			{ playTone(); }
}



function sliderChange_height(sliderObj, val, newPos) {
	document.getElementById('value_height').value = val;
}



function sliderChange_pitch(sliderObj, val, newPos) {
	document.getElementById('value_pitch').value = val;
	adjustNKMIDValue();
}



function sliderChange_notesperbeat(sliderObj, val, newPos) {
	document.getElementById('value_notesperbeat').value = val;
	document.getElementById('value_steps').value =
		Math.round((val * document.getElementById('value_duration').value * document.getElementById('value_tempo').value) / 60);
	document.getElementById('TotalSteps').innerHTML = document.getElementById('value_steps').value;
	adjustNKMIDValue();
}



function sliderChange_tempo(sliderObj, val, newPos) {
	document.getElementById('value_tempo').value = val;
	document.getElementById('value_steps').value =
		Math.round((val * document.getElementById('value_duration').value * document.getElementById('value_notesperbeat').value) / 60);
	document.getElementById('TotalSteps').innerHTML = document.getElementById('value_steps').value;
	adjustNKMIDValue();
}



function sliderChange_duration(sliderObj, val, newPos) {
	document.getElementById('value_duration').value = val;
	document.getElementById('value_steps').value =
		Math.round((val * document.getElementById('value_notesperbeat').value * document.getElementById('value_tempo').value) / 60);
	document.getElementById('TotalSteps').innerHTML = document.getElementById('value_steps').value;
	adjustNKMIDValue();
}



function sliderSlideEnd_height(sliderObj, val, newPos) {
	sliderObj.valueDefault = val;
	sliderObj.draw('slider_height');
	playChoice('Height');
}



function sliderSlideEnd_pitch(sliderObj, val, newPos) {
	sliderObj.valueDefault = val;
	sliderObj.draw('slider_pitch');
	playTone();
}



function sliderSlideEnd_notesperbeat(sliderObj, val, newPos) {
	var beatStops = new Array(1, 2, 3, 4, 5, 6, 8, 9, 12, 16);
	var adjusted_beat = 1;
	for (var i = 0; i < beatStops.length; i++) {
		if (beatStops[i] == val)		{ adjusted_beat = beatStops[i]; i = beatStops.length; }
		else if (beatStops[(i + 1)] == val)	{ adjusted_beat = beatStops[(i + 1)]; i = beatStops.length; }
		else if (beatStops[(i + 1)] > val)	{ adjusted_beat = beatStops[i]; i = beatStops.length; }
	}
	sliderObj.setValue(adjusted_beat);
	sliderObj.updateValueField(adjusted_beat);
	sliderObj.valueDefault = adjusted_beat;
	sliderObj.draw('slider_notesperbeat');
	document.getElementById('value_notesperbeat').value = adjusted_beat;
	document.getElementById('value_steps').value =
		Math.round((adjusted_beat * document.getElementById('value_duration').value * document.getElementById('value_tempo').value) / 60);
	document.getElementById('TotalSteps').innerHTML = document.getElementById('value_steps').value;
	adjustNKMIDValue();
	playTone();
}



function sliderSlideEnd_tempo(sliderObj, val, newPos) {
	sliderObj.valueDefault = val;
	sliderObj.draw('slider_tempo');
	document.getElementById('value_tempo').value = val;
	document.getElementById('value_steps').value =
		Math.round((val * document.getElementById('value_duration').value * document.getElementById('value_notesperbeat').value) / 60);
	document.getElementById('TotalSteps').innerHTML = document.getElementById('value_steps').value;
	adjustNKMIDValue();
	playTone();
}



function sliderSlideEnd_duration(sliderObj, val, newPos) {
	sliderObj.valueDefault = val;
	sliderObj.draw('slider_duration');
	playTone();
}



function highlightSection(section, state) {
	var sections = new Array();
	sections = ['generator', 'instrumentation', 'pitch', 'time'];
	var valid_section = 0;
	for (var i = 0; i < sections.length; i++) {
		if (sections[i] == section) { valid_section = 1; }
	}
	if (valid_section == 0) { section = 'generator'; }
	if (state == 'on') {
		for (var i = 0; i < sections.length; i++) {
			if (document.getElementById('tab_'+sections[i])) {
				var this_src = new String();
				this_src = document.getElementById('tab_'+sections[i]).src;
				if (sections[i] != section) {
					document.getElementById('tab_'+sections[i]).src = '/generate/images/tab_' + sections[i] + '.gif';
					if (document.getElementById('section_'+sections[i])) {
						document.getElementById('section_'+sections[i]).style.display = 'none';
					}
				}
			}
		}
		if (document.getElementById('tab_'+section)) {
			document.getElementById('tab_'+section).src = '/generate/images/tab_' + section + '-on.gif';
			if (document.getElementById('section_'+section)) {
				document.getElementById('section_'+section).style.display = '';
			}
			if (section == 'generator') {
				SliderHeight.draw('slider_height');
			}
			else if (section == 'pitch') {
				SliderPitch.draw('slider_pitch');
			}
			else if (section == 'time') {
				SliderTempo.draw('slider_tempo');
				SliderBeat.draw('slider_notesperbeat');
				SliderDuration.draw('slider_duration');
			}
		}
		if ((section == 'instrumentation') && (document.getElementById('value_instrument1').options[0].selected)) {
			initVals();
			var default_vals = new Array();
			default_vals = getDefaultVals();
			document.getElementById('value_instrument1').options[getInstrumentIndexByValue(default_vals['instrument1'])].selected = true;
			document.getElementById('value_instrument2').options[getInstrumentIndexByValue(default_vals['instrument2'])].selected = true;
			document.getElementById('value_instrument3').options[getInstrumentIndexByValue(default_vals['instrument3'])].selected = true;
			document.getElementById('value_instrument4').options[getInstrumentIndexByValue(default_vals['instrument4'])].selected = true;
			document.getElementById('value_instrument5').options[getInstrumentIndexByValue(default_vals['instrument5'])].selected = true;
		}
		else if ((section == 'pitch') && (document.getElementById('value_scale_select').options[0].selected)) {
			initVals();
			var default_vals = new Array();
			default_vals = getDefaultVals();
			document.getElementById('value_scale_select').options[getScaleIndexByValue(default_vals['scalevalue'])].selected = true;
		}
	}
	else if (state == 'over') {
		if (document.getElementById('tab_'+section)) {
			var this_src = new String();
			this_src = document.getElementById('tab_'+section).src;
			if (!this_src.match(/\-on\.gif$/)) {
				document.getElementById('tab_'+section).src = '/generate/images/tab_' + section + '-over.gif';
			}
		}
	}
	else if (state == 'off') {
		if (document.getElementById('tab_'+section)) {
			var this_src = new String();
			this_src = document.getElementById('tab_'+section).src;
			if (!this_src.match(/\-on\.gif$/)) {
				document.getElementById('tab_'+section).src = '/generate/images/tab_' + section + '.gif';
			}
		}
	}
}



function prepareDocument() {
	document.getElementById('select_ruletype').innerHTML = writeRuletypeOptions();
	document.getElementById('select_instrument1').innerHTML = writeInstrumentOptions('1');
	document.getElementById('select_instrument2').innerHTML = writeInstrumentOptions('2');
	document.getElementById('select_instrument3').innerHTML = writeInstrumentOptions('3');
	document.getElementById('select_instrument4').innerHTML = writeInstrumentOptions('4');
	document.getElementById('select_instrument5').innerHTML = writeInstrumentOptions('5');
	document.getElementById('select_percussion').innerHTML = writePercussionOptions();
	document.getElementById('select_scale').innerHTML = writeScaleOptions();
	init();
	var section_name = new String();
	section_name = location.search;
	section_name = section_name.replace(/^\?/, "");
	highlightSection(section_name, 'on');
	adjustToggleColor();
}



function popSmall(url) {
	var location = 'http://' + document.location.host + url;
	var features = 'scrollbars=yes,menubar=no,height=340,width=340,resizable=no,toolbar=no,location=no,status=no';
	window.open(location, 'popup', features);
}



function popControlsHelp(anchor) {
	var location = 'http://' + document.location.host + '/about/controls.html#' + anchor;
	var features = 'scrollbars=yes,menubar=no,height=500,width=440,toolbar=no,location=no,status=no';
	var helpwin = window.open(location, 'controls_help', features);
	helpwin.focus();
}


