Source: Element/NameSpaceFunctions.js

/**
                * @author Rafael Ostertag <rafael.ostertag@math.uzh.ch>
                */

                /* global $ */

                /**
                * Qfq Namespace
                *
                * @namespace QfqNS
                */
                var QfqNS = QfqNS || {};
                /**
                * Qfq.Element Namespace
                *
                * @namespace QfqNS.Element
                */
                QfqNS.Element = QfqNS.Element || {};

                (function (n) {
                'use strict';

                /**
                *
                * @param name
                * @returns {*}
                * @function QfqNS.Element.getElement
                */
                n.getElement = function (name) {
                var $element = $('[name="' + name + '"]:not([type="hidden"])');
                if ($element.length === 0) {
                throw Error('No element with name "' + name + '" found.');
                }

                if ($element[0].nodeName.toLowerCase() === "select") {
                return new n.Select($element);
                }

                if (!$element[0].hasAttribute('type')) {
                return new n.Textual($element);
                }

                var type = $element[0].getAttribute('type').toLowerCase();
                switch (type) {
                case 'checkbox':
                return new n.Checkbox($element);
                case 'radio':
                return new n.Radio($element);
                case 'text':
                case 'number':
                case "email":
                case "url":
                case "password":
                case "datetime":
                case "datetime-local":
                case "date":
                case "month":
                case "time":
                case "week":
                return new n.Textual($element);
                default:
                throw new Error("Don't know how to handle <input> of type '" + type + "'");
                }

                };
                })(QfqNS.Element);