var jQueryButtonsReady = false;

$(document).ready(function() {
   jQueryButtonsReady = true; 
});

;(function($) {
$.fn.extend({
    createButton: function(offImg, onImg, floater) {    
        var btn = new $.Btn($(this), offImg, onImg, floater);
        btn.selfRef(btn);
        return btn;
    }
});

$.Btn = function(obj, offImg, onImg, floater) {
    var $obj = obj;
    var state_on = false;
    var $floater = $(floater);
    var selfref = null;
    var $imgObj = jQuery("<img src='" + offImg + "' />").appendTo(jQuery("<div></div>")).appendTo($obj);
    setup();
    var onFcn;
    var offFcn;
    
    function setup() {
        $obj.click(function() {
            handleClick(false);
        });
        
    }
    
    function addOn(fcn)
    {
        onFcn = fcn;
    }
    
    function addOff(fcn)
    {
        offFcn = fcn;
    }
    
    function selfRef(ref)
    {
        selfref = ref;
    }
    
    function handleClick(onlyDisplay)
    {
        if (jQueryButtonsReady)
        {
            if (state_on) 
            {
                $imgObj.attr("src", offImg);
                
                if ($floater != null && !onlyDisplay)
                    $floater.hideFloater(true);
            }
            else
            {
                $imgObj.attr("src", onImg);
                
                if ($floater != null && !onlyDisplay)    
                    $floater.showFloater(0.8, false, selfref, offFcn);
                
                onFcn();
            }
            
            state_on = !state_on;
        }
    }
    
    function simClick(onlyDisplay)
    {
        handleClick(onlyDisplay);
    }
    
    return { simClick: function(onlyDisplay) { simClick(onlyDisplay); }, selfRef: function(ref) { selfRef(ref); }, addOn: function(fcn) { addOn(fcn) }, addOff: function(fcn) { addOff(fcn) } }
};

})(jQuery);