(function($) {
    $.fn.input_style = function(options) {
        var defaults = {
            element_height: 20
        };

        var options = $.extend(defaults,options);

        return this.each(function() {
            var div = $(this);
            var input = $(div.children().get(0));
            var label = $("label[for='" + input.attr("id") + "']");

            clear(div);

            div.mousedown(function() { effect(div); })
            div.mouseup(function() { handle(div); })
            div.mouseleave(function() { clear(div); });

            label.click(function(event) { event.preventDefault(); })
            label.mousedown(function() { effect(div); })
            label.mouseup(function(event) { handle(div); })
            label.mouseleave(function(event) { clear(div); });
        });

        function is_checked(element) {
            return ($(element.children().get(0)).attr("checked") == "checked" ? true : false);
        }

        function get_type(element) {
            return $(element.children().get(0)).attr("type");
        }

        function check(element) {
            element.css("backgroundPosition","center -" + (options.element_height * 2) + "px");
            $(element.children().get(0)).attr("checked",true);
            $(element.children()).trigger("change");
        };

        function uncheck(element) {
            element.css("backgroundPosition","center 0");
            $(element.children().get(0)).attr("checked",false);
            $(element.children()).trigger("change");
        };

        function clear(element) {
            if(is_checked(element) == true) {
                element.css("backgroundPosition","center -" + (options.element_height * 2) + "px");
            }
            else {
                element.css("backgroundPosition","center 0");
            }    
        };

        function effect(element) {
            if(is_checked(element) == true) {
                element.css("backgroundPosition","center -" + (options.element_height * 3) + "px");
            }
            else {
                element.css("backgroundPosition","center -" + (options.element_height) + "px");
            }
        };

        function handle(element) {
            if(get_type(element) == "radio") {
                $.each($("input[name='" + $(element.children().get(0)).attr("name") + "']:checked"),function() {
                    uncheck($(this).parent());
                });
            }
            is_checked(element) == true ? uncheck(element) : check(element);
        };
    };
})(jQuery);
