(function($) {
	$.fn.setCheckbox = function(state) {
		return $(this).attr("checked", state).trigger("click");
	};
	
	$.fn.checkbox = function(options) {
		var params = $.extend(true, null, $.fn.checkbox.defaults, options);
		
		return this.each(function() {
			var input = $(this);
			
			input.data("checkbox_params", params);
			if(!input.is("input[type=checkbox]")) { return; }
			var label = $("label[for=" + input.attr("id") + "]");
			var button = $('<div class="' + params.baseClass + '"></div>').css({
				marginLeft: input.css("marginLeft"),
				marginRight: input.css("marginRight") == "0px" ? "4px" : input.css("marginRight"),
				/*paddingLeft: (input.width() == 0 ? 7 : input.width()/2) + "px",
				paddingRight: (input.width() == 0 ? 7 : input.width()/2) + "px",*/
				paddingLeft: "7px",
				paddingRight: "7px",
				overflow: "hidden"
			});
			
			if($.browser.msie || $.browser.safari)
				button.html("&nbsp;");
			
			if(input.is(":checked")) { button.addClass(params.checkedClass); }
			button.insertAfter(input);
			input.hide();
			
			input.change(function() {
				return false;
			});
			input.click(function(event) {
				if(!event.target)
					label.trigger("click");
				input.trigger("change");
				return false;
			});
			
			label.click(function() {
				var elem = $(this).find("input:checkbox:first");
				elem.setCheckedState(!elem.is(":checked"));
				input.trigger("click");
				return false;
			});
		});
	};
	
	$.fn.setCheckedState = function(state) {
	
		state = state? true: false;
		return this.each(function() {
			var element = $(this);
			var params = element.data("checkbox_params");
			if(typeof params == 'undefined')
				params = $.extend(true, null, $.fn.checkbox.defaults);
			
			if(element.is("input[type=checkbox]")) {
				if(state) {
					//element.attr("checked", "checked").trigger("checked").trigger("click");
					element.attr("checked", "checked");
					$("label[for=" + element.attr("id") + "]").find("div." + params.baseClass).addClass(params.checkedClass);
				} else {
					//element.removeAttr("checked").trigger("checked").trigger("click");
					element.removeAttr("checked");
					$("label[for=" + element.attr("id") + "]").find("div." + params.baseClass).removeClass(params.checkedClass);
				}
			}
		});
	};
	
	$.fn.checkbox.defaults = {
		baseClass: "httpool-checkbox-button",
		checkedClass: "httpool-checkbox-checked"
	};
})(jQuery);
