Piano = function(container, start, end){

		/**
		 * The canvas
		 * @type {Element}
		 * @private
		 */
		this._canvas = document.createElement("canvas");
		this._canvas.id = "PianoKeyboard";
		container.appendChild(this._canvas);

		/**
		 * The drawing context
		 * @type {Context2D}
		 * @private
		 */
		this._context = this._canvas.getContext("2d");

		/**
		 * The container of the canvas
		 * @type {Element}
		 * @private
		 */
		this._container = container;

		/**
		 * The lowest note on the keyboard
		 * @type {String}
		 * @private
		 */
		this._startNote = start || "C4";

		/**
		 * The highest note on the keyboard
		 * @type {String}
		 * @private
		 */
		this._endNote = end || "C6";

		/**
		 * The array of note names
		 * @private
		 * @type {Array}
		 */
		this._notes = [];

		/**
		 * an object mapping note names to note objects
		 * @type {Object}
		 * @private
		 */
		this._noteNames = {};

		/**
		 * Indicates if the mouse is currently down
		 * @type {Boolean}
		 * @private
		 */
		this._isMouseDown = false;

		/**
		 * Flag if the touch was moved
		 * @type {Boolean}
		 * @private
		 */
		this._touchDragged = false;

		/**
		 * Flag if the context started callback
		 * was invoked.
		 * @type {Boolean}
		 * @private
		 */
		this._contextStarted = false;

		/**
		 * The highlighted keys
		 * @type {Array}
		 * @private
		 */
		this._highlightedKeys = [];

		/**
		 * the highlight color
		 * @type {String}
		 * @private
		 */
		this._highlightColor = "#FFB729";

		//listen for changes in the size of the container
		window.addEventListener("resize", this._resize.bind(this));
		//events
		this._canvas.addEventListener("mousedown", this._mouseDown.bind(this));
		this._canvas.addEventListener("mousemove", this._mouseMove.bind(this));
		this._canvas.addEventListener("mouseup", this._mouseUp.bind(this));
		this._canvas.addEventListener("mouseleave", this._mouseLeave.bind(this));
		this._canvas.addEventListener("touchstart", this._touchStart.bind(this));
		this._canvas.addEventListener("touchend", this._touchEnd.bind(this));
		this._canvas.addEventListener("touchmove", this._touchMove.bind(this));

		//size the container initially
		this._makeKeys();
		this._resize();

		//callback events
		this.onkeydown = function(){};
		this.onkeyup = function(){};

		//callback if the context can be started
		this.oncontextstart = function(){};
	}
@class Create a new piano keyboard.
@param {Element} container The container to put the piano
@param {String=} start The lowest note on the keyboard
@param {String=} end The highest note on the keyboard