/HackPreferences.js
enyo.kind({
	name: "HackPreferences",
	kind: "VFlexBox",
	events: {
		"onClose": ""
	},
	components: [
		{kind: "Header", content: "Preferences"},
		{kind: "Scroller", flex: 1, components: [
			{kind: "Control", className: "prefs-center", components: [
				{kind: "RowGroup", name: "prefsContainer"},
				{kind: "HFlexBox", pack: "center", components: [
					{kind: "Button", className: "enyo-button-negative prefs-done-button", caption: "Reset to Defaults", onclick: "resetToDefaults"}
				]}
			]}
		]},
		{kind: "Toolbar", className: "enyo-toolbar-light", components: [
			{kind: "Button", content: "Done", onclick: "close", className: "enyo-button-affirmative prefs-done-button"}
		]}
	],
	load: function(name, prefs, values) {
		this.$.prefsContainer.setCaption(name);
		this.prefs = prefs;

		for (var i = 0; i < this.prefs.length; i++) {
			var p = this.prefs[i];
			var c;

			switch(p.kind) {
			case 'Slider':
				c = this.$.prefsContainer.createComponent({kind: "HFlexBox", align: "center", components: [{content: p.label, flex: 1}]});
				var slider = c.createComponent(p, {owner: this.$.prefsContainer});
				slider.setPosition(values[p.name]);
				break;
			default:
				c = this.$.prefsContainer.createComponent(p, {owner: this.$.prefsContainer});
				c.setValue(values[p.name]);
			}
		}
		this.$.prefsContainer.render();
	},
	close: function() {
		var o = {};
		for (var i = 0; i < this.prefs.length; i++) {
			var p = this.prefs[i];
			var v;

			switch (p.kind) {
			case 'Slider':
				v = this.$.prefsContainer.$[p.name].getPosition();
				break;
			default:
				v = this.$.prefsContainer.$[p.name].getValue();
			}
			o[p.name] = v;
		}
		this.doClose(o);

		this.cleanup();
	},
	resetToDefaults: function() {
		this.doClose(null);
		this.cleanup();
	},
	cleanup: function() {
		var controls = this.$.prefsContainer.getControls();
		for (var i = 0; i < controls.length; i++) {
			// We destroy the parent because we want to destroy the
			// row client, as well.  This is probably a bug in
			// Enyo.
			controls[i].parent.destroy();
			controls[i].destroy();
		}
	}
});