
if (typeof(ui) == 'undefined') {
	var ui = {};
}


/** */
ui.YuiCal = {

	NAME: 'ui.YuiCal',

	_calmap: {},

	initialize: function(target) {
		var self = ui.YuiCal, c = self._calmap[target];
		if (!c) {
			c = new YAHOO.widget.Calendar('yuicaltbl', target, {'title': 'Datum wählen ...', 'close': true});
			c.render();
		}
		self._calmap[target] = c;
	},

	show: function(target, cfg, pos, callback) {
		var self = ui.YuiCal, c = self._calmap[target];
		if (typeof(c) == 'undefined') {
			throw new Error('No such Calendar defined.');
		}
		try {
			for (var k in cfg) {
				c.cfg.setProperty(k, cfg[k]);
			}
			if (pos) {
				setElementPosition(c.oDomContainer.id, pos);
			}
			c.render();
			c.selectEvent.subscribe(function(type, d, calObj) {
				c.selectEvent.unsubscribeAll(type);
				c.hide();
				d = d[0][0];
				callback(new Date(d[0], d[1]-1, d[2]));
			}, c, true);
			c.show();
		} catch(e) {
			console.error(e);
		}
	}
};

if (typeof(ui.Utils) == 'undefined') {
	ui.Utils = {};
}

/** */
ui.Utils.RadioGroup = function(id) {
	if (arguments.length > 0) {
		this.id = $(id);
		connect(this.id, 'onclick', this, 'onclick');
	}
};

ui.Utils.RadioGroup.prototype = update({}, {

	NAME: 'ui.Utils.RadioGroup',

	/** */
	id: null,

	/** */
	onclick: function(domEvObj) {
		//~ console.log('%s::onclick', this.NAME);
		var t = getNodeAttribute(domEvObj.target(), 'type');
		if (t && t.toLowerCase() == 'radio') {
			signal(this, 'onchange', domEvObj.target().value);
		}
	},

	/** */
	select: function(value) {
		//~ console.log('%s::select', this.NAME, value);
		var rtc = false;
		forEach(getElementsByTagAndClassName('input', null, this.id), function(e) {
			var t = getNodeAttribute(e, 'type');
			if (t && t.toLowerCase() == 'radio') {
				if (e.value == value) {
					rtc = e.checked = true;
				} else {
					e.checked = false;
				}
			}
		});
		if (rtc) {
			signal(this, 'onchange', value);
		}
		return rtc;
	},

	/** */
	selection: function() {
		var rtc = null;
		forEach(getElementsByTagAndClassName('input', null, this.id), function(e) {
			var t = getNodeAttribute(e, 'type');
			if (t && t.toLowerCase() == 'radio') {
				if (e.checked) {
					rtc = e.value;
					//~ break;
				}
			}
		});
		return rtc;
	},

	/** */
	destroy: function() {
		//~ console.log('%s::destroy', this.NAME, this.id);
		try {
			disconnectAllTo(this);
			disconnectAll(this);
			this.id = null;
		} catch(e) {
			console.error(e);
		}
	}
});

