﻿jQuery.fn.CheckBox = function (settings) {

    var checkbox = jQuery(this);

    checkbox.css("display", "none");

    var isDisabled = settings["disabled"];

    var image = "";

    if (isDisabled) {
        image = settings["imageDisabled"];
    }
    else {
        image = checkbox.is(':checked') ? settings["imageChacked"] : settings["image"];
    }

    var sender = this;

    var input = this.input = $("<img>")
                .attr("src", image)
                .attr("class", checkbox.attr("class"))
                .attr("title", checkbox.attr("title"))
                .bind("hello", function () {
                    alert(this.id);
                })
                .mouseup(function () {
                    if (!result.IsDisabled) {
                        if (checkbox.is(':checked')) {
                            checkbox.attr('checked', false);
                            input.attr("src", settings["image"]);
                        }
                        else {
                            checkbox.attr('checked', true);
                            input.attr("src", settings["imageChacked"]);
                        }
                        if (settings["change"] != undefined) {
                            var change = settings["change"].toString();
                            eval("(" + change + ")()");
                        }
                    }
                })
                .change(function () { return settings["change"]; })
                .appendTo($(this).parent());

    if (isDisabled) { this.input.css("cursor", "default"); }
    else { this.input.css("cursor", ""); }

    var result = {
        Input: input,
        Checkbox: checkbox,
        IsDisabled: isDisabled,
        Disable: function () {
            $(input).css("cursor", "default");
            $(input).attr("src", settings["imageDisabled"]);
            checkbox.attr('checked', false);
            result.IsDisabled = true;
        },
        Enable: function () {
            image = result.Checkbox.is(':checked') ? settings["imageChacked"] : settings["image"];
            $(input).css("cursor", "");
            $(input).attr("src", image);
            result.IsDisabled = false;
        },
        Reset: function () {
            result.Enable();
            checkbox.attr('checked', false);
            if (result.IsDisabled) {
                $(input).attr("src", settings["imageDisabled"]);
            }
            else {
                $(input).attr("src", checkbox.is(':checked') ? settings["imageChacked"] : settings["image"]);
            }
        }
    }

    return result;
};
