/**
* jQuery custom checkboxes
*
* Copyright (c) 2008 Khavilo Dmitry (http://widowmaker.kiev.ua/checkbox/)
* Licensed under the MIT License:
* http://www.opensource.org/licenses/mit-license.php
*
* @version 1.0.0
* @author Khavilo Dmitry
* @mailto wm.morgun@gmail.com
**/
jQuery.fn.checkbox = function(options) {
/* IE < 7.0 background flicker fix */
if ( jQuery.browser.msie && (parseFloat(jQuery.browser.version) < 7) )
{
document.execCommand('BackgroundImageCache', false, true);
}
/* Default settings */
var settings = {
cls: 'jquery-checkbox', /* checkbox */
empty: 'empty.png' /* checkbox */
};
/* Processing settings */
settings = jQuery.extend(settings, options || {});
/* Wrapping all passed elements */
return this.each(function()
{
/* Creating div for checkbox and assigning "hover" event */
var div = jQuery('
').hover(
function() { jQuery('.' + settings.cls, this).addClass(settings.cls + '-hover'); },
function() { jQuery('.' + settings.cls, this).removeClass(settings.cls + '-hover'); }
);
/* If custom style was applied - removing it */
if ( this._div && (oldDiv = jQuery(this._div)) )
{
clearInterval(this._int);
oldDiv.replaceWith(jQuery(this));
}
/* Wrapping checkbox */
jQuery(this).after(div).css({display: 'none'}).appendTo(div);
/* "disabled" & "checked" state changer hook */
this._div = div;
var el = this;
this._disabled = (this.disabled ? true : false);
this._checked = (this.checked ? true : false);
this._int = setInterval(function() {
if ( el._disabled != el.disabled ) {
el._disabled = (el.disabled ? true : false);
if ( el.disabled )
jQuery('.' + settings.cls, div).addClass(settings.cls + '-disabled');
else
jQuery('.' + settings.cls, div).removeClass(settings.cls + '-disabled');
}
if ( el._checked != el.checked ) {
el._checked = (el.checked ? true : false);
if ( el.checked )
div.addClass(settings.cls + '-checked');
else
div.removeClass(settings.cls + '-checked');
}
}, 10);
/* Creating "click" event handler for checkbox wrapper*/
jQuery(div).click(function(){
jQuery('input', this).click();
});
/* Disable image drag-n-drop */
jQuery('img', div).bind('dragstart', function () {return false;}).bind('mousedown', function () {return false;});
/* Firefox div antiselection hack */
if ( window.getSelection )
jQuery(div).css('MozUserSelect', 'none');
/* Applying checkbox state */
if (this.checked)
div.addClass(settings.cls + '-checked');
if (this.disabled)
jQuery('.' + settings.cls, div).addClass(settings.cls + '-disabled');
});
};