/*
 *	Client-side JavaScript routines for MMP web applications.
 */
 
//alert('JavaScript loaded.');

/*	Routine to navigate back in application.  Called by "onClick" event of "Back" button. */
function navBack() { 
	var form = document.mmpCalc;
	form.stage.value--;
	form.submit();
}

function advance(stage) {
	var form = document.mmpCalc;
	var stage;
	if (eval('validate_' + stage + '()')) {
		stage = eval('form.stage');
		if (stage != null) stage.value++;
		form.submit();
		return true;
	}
	else { return false; }
}

function update() {
	var form = document.mmpCalc;
	if (eval('validate_' + form.stage.value + '()')) {
		if (form.stage.value == form.maxStage.value) { form.maxStage.value++; }
		form.submit();
		return true;
	}
	else { return false; }
}

/*	Routine to validate and submit form.  Called by "onChange" event of "region" and "county" combo boxes */
function submitCombo(stage) {
	if (eval("validate_" + stage + "()")) { document.mmpCalc.submit(); }
}

/*	Routine to submit form when user requests to change number of rows. */
function addRowsSubmit(stage) {
	var form = document.mmpCalc;
	form.stage.value = stage;
	form.addRows.value = -1;
	form.submit();
}

/*
 *	Routine to determine how many rows are to be processed.
 *	Finds first blank FieldID input, and sets rowCount value to one less.
 */
function setRowCount() {
	var form = document.mmpCalc;
	var rowCount = 99;

	for (var i = 0; i < rowCount; i++) {
		var rowId = getRowId(i + 1);
		var field = eval("form.field_" + rowId);
		if (field == null || String(field.value) == "")
			rowCount = i;
	}
	return (form.rowCount.value = rowCount);
}

/*
 *	Routine to convert row number into 2-digit string w/ leading zero, if necessary.
 *	Used for field name suffixes for each row of the form "_00" where "00" is the rowId.
 */
function getRowId(rowNumber) {
	var returnValue;
	
	returnValue = String(rowNumber);
	if (returnValue.length > 2)
		returnValue = returnValue.substr(-2);
	else if (returnValue.length < 2) {
		do {
			returnValue = "0" + returnValue;
		} while (returnValue.length < 2);
	}
	return returnValue;
}

/*	Routine to check or uncheck all checkboxes with the same fieldPrefix. */
function checkAll(fieldPrefix) {
	var form = document.mmpCalc;
	var rowCount = form.rowCount.value;
	var isChecked = eval('form.' + fieldPrefix + 'All.checked');

	for (var i = 0; i < rowCount; i++) {
		var rowId = getRowId(i + 1);
		var checkBox = eval('form.' + fieldPrefix + rowId);
		checkBox.checked = isChecked;
	}
}

/* Display popup window containing notes for specified state */
function showNotes(stateName) {
	var features = 'toolbar=no,status=yes,menubar=no,resizable=no,scrollbars=yes,width=600,height=400';
	var notesUrl = String(document.location);
	notesUrl = notesUrl.substring(0, notesUrl.lastIndexOf('/')+1);
	notesUrl = notesUrl + 'notes.asp?region=' + stateName;
	
	open(notesUrl, 'notes', features);
}

/* Display popup window containing notes for specified state */
function popUp(url) {
	var features = 'toolbar=no,status=no,menubar=yes,resizable=yes,scrollbars=yes,width=600,height=400';
	var baseUrl = String(document.location);
	baseUrl = baseUrl.substring(0, baseUrl.lastIndexOf('/')+1);
	
	open(baseUrl + url, 'popUp', features);
}

/*	Validation routine for stage 1 form input. */
function validate_1() {
	var returnValue = true;
	var form = document.mmpCalc;
	var sMsg = "";
	
	// Check that a value is selected in "region" combo box
	if (form.region.selectedIndex == 0) {
		returnValue = false;
		sMsg = sMsg + "Please select a state to continue.\n";
	}
	
	if (!returnValue) alert(sMsg);
	return returnValue
	
	//return validate_general();
}

/*	Validation routine for stage 2 form input. */
function validate_2() {
	var returnValue = true;
	var form = document.mmpCalc;
	var sMsg = "";
	
	// Check that a value is selected in "county" combo box
	if (form.county.selectedIndex == 0) {
		returnValue = false;
		sMsg = sMsg + "Please select a county to continue.\n";
	}
	
	if (!returnValue) alert(sMsg);
		
	return returnValue;
}

function go(url) {
	var baseUrl = String(document.location);
	baseUrl = baseUrl.substring(0, baseUrl.lastIndexOf('/')+1);
	var windowName = 'mmpHome' + Math.floor(Math.random() * 1000);
	window.name = windowName;
	window.open(baseUrl + url, windowName);
}

function restart(url) {
	var msg = 'This will erase any data already entered.\nContinue?';
	if (confirm(msg)) go(url);
}

function download() {
	var form = document.mmpCalc;
	var action = form.action;
	form.action += '&download=yes';
	form.submit();
	form.action = action;
	return true;
}

function mapClick(stateName) {
	var form = document.mmpCalc;
	var options = form.region.options;
	var i;
	
	for (i = 0; i < options.length; i++) {
		if (options[i].text == stateName) form.region.selectedIndex = i;
	}
	
	form.submit();
}

function validate_general() {
	var sErrorMsg = 'Error!\n\n';
	var sWarnMsg = 'Warning!\n\n';
	var bErr = false;
	var bWarn = false;
	var returnValue = true;
	
	var form = document.mmpCalc;
	
	alert('searching for validation elements');
	for (var i = 0; i < form.elements.length; i++) {
		alert('checking element: ' + i);
		var elem = form.elements[i];
		if (true) {
			if (elem.name.indexOf("_validate") > -1) {
				var target = 'document.mmpCalc.' + elem.name.substring(0, elem.name.lastIndexOf('_'));
				alert('target: ' + target);
				//var target = elem.value.substring(0, elem.value.indexOf(';'));
				//elem.value = elem.value.substring(elem.value.indexOf(';') + 1, elem.value.length);
				alert = ('target value: ' + eval(target.substring(0,target.lastIndexOf('.'))));
				target = eval(target);
				if (target != null) {
					var type = elem.value.substring(0, elem.value.indexOf(';'));
					elem.value = elem.value.substring(elem.value.indexOf(';') + 1, elem.value.length);
					var value = elem.value.substring(0, elem.value.indexOf(';'));
					elem.value = elem.value.substring(elem.value.indexOf(';') + 1, elem.value.length);
					var critical = elem.value.substring(0, elem.value.indexOf(';'));
					elem.value = elem.value.substring(elem.value.indexOf(';') + 1, elem.value.length);
					var message = elem.value.substring(0, elem.value.indexOf(';'));
					elem.value = elem.value.substring(elem.value.indexOf(';') + 1, elem.value.length);
					
					var isValid = false;
					if (type.toLower == 'range') {
						var valMin = value.substring(0, value.indexOf(','));
						var valMax = value.substring(value.indexOf(',') + 1, value.length);
						valMin = parseFloat(valMin);
						valMax = parseFloat(valMax);
						if (typeof(target).toLower() == 'string') { target = parseFloat(target); }
						if (target >= valMin && target <= valMax) { isValid = true; }
					}
					else if (type.toLower() == 'min') {
						var valMin = parseFloat(value);
						if (typeof(target).toLower() == 'string') { target = parseFloat(target); }
						if (target >= valMin) { isValid = true; }
					}
					else if (type.toLower() == 'max') {
						var valMax = parseFloat(value);
						if (typeof(target).toLower() == 'string') { target = parseFloat(target); }
						if (target <= valMax) { isValid = true; }
					}
					if (!isValid) {
						if (parseInt(critical) == -1) {
							sErrorMsg = sErrorMsg + message + '\n';
							bErr = true;
						}
						else {
							sWarnMsg = sWarnMsg + message + '\n';
							bWarn = true;
						}
					} // if (isValid)
				} // if (target)
			} // if (elem.name)
		} // if (typeof(elem))
	} // for (i)
	if (bErr) {
		returnValue = false;
		alert(sErrMsg);
	}
	else if (bWarn) {
		sWarnMsg = sWarnMsg + '\nProceed anyway?';
		returnValue = confirm(sWarnMsg);
	}
	return returnValue;
}
