(function($){
  var i=function(e){
    if(!e)var e=window.event;
    e.cancelBubble=true;
    if(e.stopPropagation)e.stopPropagation()
      };

  $.fn.checkbox=function(f){
    try{
      document.execCommand('BackgroundImageCache',false,true)
      }catch(e){}
    var g={
      cls:'jquery-checkbox',
      empty:'empty.png'
    };

    g=$.extend(g,f||{});
    var h=function(a){
      var b=a.checked;
      var c=a.disabled;
      var d=$(a);
      if(a.stateInterval)clearInterval(a.stateInterval);
      a.stateInterval=setInterval(function(){
        if(a.disabled!=c)d.trigger((c=!!a.disabled)?'disable':'enable');
        if(a.checked!=b)d.trigger((b=!!a.checked)?'check':'uncheck')
          },10);
      return d
      };

    return this.each(function(){
      var a=this;
      var b=h(a);
      if(a.wrapper)a.wrapper.remove();
      a.wrapper=$('<span class="'+g.cls+'"><span class="mark"><img src="'+g.empty+'" /></span></span>');
      a.wrapperInner=a.wrapper.children('span:eq(0)');
      a.wrapper.hover(function(e){
        a.wrapperInner.addClass(g.cls+'-hover');
        i(e)
        },function(e){
        a.wrapperInner.removeClass(g.cls+'-hover');
        i(e)
        });
      b.css({
        position:'absolute',
        zIndex:-1,
        visibility:'hidden'
      }).after(a.wrapper);
      var c=false;
      if(b.attr('id')){
        c=$('label[for='+b.attr('id')+']');
        if(!c.length)c=false
          }
          if(!c){
        c=b.closest?b.closest('label'):b.parents('label:eq(0)');
        if(!c.length)c=false
          }
          if(c){
        c.hover(function(e){
          a.wrapper.trigger('mouseover',[e])
          },function(e){
          a.wrapper.trigger('mouseout',[e])
          });
        c.click(function(e){
          b.trigger('click',[e]);
          i(e);
          return false
          })
        }
        a.wrapper.click(function(e){
        b.trigger('click',[e]);
        i(e);
        return false
        });
      b.click(function(e){
        i(e)
        });
      b.bind('disable',function(){
        a.wrapperInner.addClass(g.cls+'-disabled')
        }).bind('enable',function(){
        a.wrapperInner.removeClass(g.cls+'-disabled')
        });
      b.bind('check',function(){
        a.wrapper.addClass(g.cls+'-checked')
        }).bind('uncheck',function(){
        a.wrapper.removeClass(g.cls+'-checked')
        });
      $('img',a.wrapper).bind('dragstart',function(){
        return false
        }).bind('mousedown',function(){
        return false
        });
      if(window.getSelection)a.wrapper.css('MozUserSelect','none');
      if(a.checked)a.wrapper.addClass(g.cls+'-checked');
      if(a.disabled)a.wrapperInner.addClass(g.cls+'-disabled')
        })
    }
  })(jQuery);
