/**
* PrimeUI radiobutton widget
*/
$(function() {
var checkedRadios = {};
$.widget("primeui.puiradiobutton", {
_create: function() {
this.element.wrap('
');
this.container = this.element.parent().parent();
this.box = $('').appendTo(this.container);
this.icon = $('').appendTo(this.box);
this.disabled = this.element.prop('disabled');
this.label = $('label[for="' + this.element.attr('id') + '"]');
if(this.element.prop('checked')) {
this.box.addClass('ui-state-active');
this.icon.addClass('ui-icon ui-icon-bullet');
checkedRadios[this.element.attr('name')] = this.box;
}
if(this.disabled) {
this.box.addClass('ui-state-disabled');
} else {
this._bindEvents();
}
},
_bindEvents: function() {
var $this = this;
this.box.on('mouseover.puiradiobutton', function() {
if(!$this._isChecked())
$this.box.addClass('ui-state-hover');
}).on('mouseout.puiradiobutton', function() {
if(!$this._isChecked())
$this.box.removeClass('ui-state-hover');
}).on('click.puiradiobutton', function() {
if(!$this._isChecked()) {
$this.element.trigger('click');
if($.browser.msie && parseInt($.browser.version) < 9) {
$this.element.trigger('change');
}
}
});
if(this.label.length > 0) {
this.label.on('click.puiradiobutton', function(e) {
$this.element.trigger('click');
e.preventDefault();
});
}
this.element.focus(function() {
if($this._isChecked()) {
$this.box.removeClass('ui-state-active');
}
$this.box.addClass('ui-state-focus');
})
.blur(function() {
if($this._isChecked()) {
$this.box.addClass('ui-state-active');
}
$this.box.removeClass('ui-state-focus');
})
.change(function(e) {
var name = $this.element.attr('name');
if(checkedRadios[name]) {
checkedRadios[name].removeClass('ui-state-active ui-state-focus ui-state-hover').children('.pui-radiobutton-icon').removeClass('ui-icon ui-icon-bullet');
}
$this.icon.addClass('ui-icon ui-icon-bullet');
if(!$this.element.is(':focus')) {
$this.box.addClass('ui-state-active');
}
checkedRadios[name] = $this.box;
$this._trigger('change', null);
});
},
_isChecked: function() {
return this.element.prop('checked');
}
});
});