This product includes software developed by
The Apache Software Foundation (http://www.apache.org/).

This product includes the Script.aculo.us JavaScript library, distributed under the terms of an MIT-style license.
http://script.aculo.us

This product includes the Prototype JavaScript library, distributed under the terms of an MIT-style license.
http://prototypejs.org/

This product includes modified versions of Java classes from the JSON library, which is freely available.
http://json.org/

This product includes the WebFX DatePicker, a JavaScript library released under the Apache Software License 2.0
http://webfx.eae.net/dhtml/datepicker/datepicker.html

This product includes images from the Silk icon set, distributed under the terms of the Creative Commons Attribution 2.5 License.
http://www.famfamfam.com/lab/icons/silk/

This product includes Underscore.js.
http://documentcloud.github.com/underscore/

This product includes RequireJS, distributed under the terms of the "New" BSD license or the MIT license (you get
to take your pick!).
http://requirejs.org/

This product includes Bootstrap, distributed under the Apache Software License 2.0
http://getbootstrap.com/

This product includes jQuery, distributed under the MIT License:
http://jquery.org/

This product includes Twitter Typeahead.js, distributed under the MIT License.
https://github.com/twitter/typeahead.js

This product includes Moment.js, distributed under the MIT License.
https://github.com/moment/moment

This product includes typeahead.js-bootstrap3.less, distributed under the MIT License.
https://github.com/hyspace/typeahead.js-bootstrap3.less


