e['function5'] = function () {
	//all functions are private unless included in return statement
// 'abstract' method implementations (for api)
	function getInterface() {
		var out = "<ul>";
		out += "<li><h1>Lagrange Interpolation</h1></li>";
		// input #1
		out += "<li><label for='datapoints'>Data Points</label></li>";
		out += "<li class='input'><textarea id='datapoints' rows='8' cols='40'>";
		out += "3 1.5\n";
		out += "4 3.4\n";
		out += "7 22.3\n";
		out += "8 35";
		out += "</textarea></li>";
		// input #2
		out += "<li><label for='x'>Solve for x=</label></li>";
		out += "<li class='input'><input type='text' id='x' value='2'/></li>";

		// submit button
		out += "<li>&nbsp;</li>";
		out += "<li class='input'><input id='submit' onclick=\"e['function5'].getHTML(this, document.getElementById('returnValue'))\" type='submit' value='Solve For x'/></li>";
		out += "</ul>";
		return out;
	}

	function getHTML(caller, returnNode) {
		// grab input vals
		var x = document.getElementById('x').value;
		//get our x-y pairs
		var rawData = document.getElementById('datapoints');
		var points = e['function3'].getMatrix(rawData);

		//format for output and create html
		var out = "<ul>";
		out += "<li><h1>Results</h1></li>";
		out += "<li><span>Value of f(x)</span></li>";
		out += "<li class='output'><span id='results_value'>" + laGrange(points, x).toFixed(3) + "</span></li>";

		out += "</ul>";
		returnNode.innerHTML = out;
	}

	function validateInput() {
		//test that we've got x-y (value-value) pairs
		//return e['function3'].validateInput(matrixContainer);
	}

// Program & Presentation Functions
/* Inheriting:

*/

// Math Functions
	function laGrange(points, x) {
		var fx = 0;
		for(var j = 0; j < points.length; j++) {
			laGrange2 = function(points, x, currPoint) {
					var quotient = 1;
					for(var k = 0; k < points.length; k++) {
						if (k != currPoint) {
							quotient *= (x - points[k][0]) / (points[currPoint][0] - points[k][0]);
						}
					}
					return quotient;
				};
			fx += points[j][1] * laGrange2(points, x, j);
		}
		return fx;
	}

// return public pointers to the private methods
	return {
		getInterface:getInterface,
		getHTML:getHTML,
		validateInput:validateInput
	}

}();

