(function () {
	
	Object.beget = function (o, membs) {
		var F = function () {},
			self;
		F.prototype = o;
		self = new F();
		return Object.augment(self, membs);
	};
	
	Object.augment = function (obj, membs) {
		var m;
		for (m in membs) {
			obj[m] = membs[m];
		}
		return obj;
	};
	
	window.prolific = {
		extend: function (name, constr) {
			this[name] = Object.augment(constr.call(this[name]), {
				extend: this.extend
			});
			return this;
		},
		Element: function (tag) {
			return document.createElement(tag);
		},
		Div: function () {
			return this.Element('div');
		},
		Select: function (multiple) {
			var self = this.Element('select');
			if (multiple === true) {
				$(self).attr({
					multiple: true
				});
			}
			return self;
		},
		Option: function (label, value) {
			var wrapper = $('<select><option></option></select>').clone();
			return $('option', wrapper).text(label).attr({ value: value }).get(0);
		}
	};

})();
