(function($) {
	
	$.fn.cbFilter = function(options) {
 		
		 // build main options before element iteration
		var opts = $.extend({}, $.fn.cbFilter.defaults, options);
		var ids= new Array();
		 // iterate and reformat each matched element
		$(this).each(function() {
				$this = $(this);
				$label= $this.next().addClass("cb-filter");
				var initval= $this.val();
				var hdnname= $this.attr("name");
				var hdnid= $this.attr("id");
				ids.push("#"+hdnid);
				$this.replaceWith('<input type="hidden" name="'+hdnname+'" id="'+hdnid+'" value="'+initval+'" />');
				$this= $("#"+hdnid)
					.data("cb-filter",{'opts':opts,'displayName':$label.text()})
					.addClass(opts.initedClass)
					.addClass("cb-filter")
				var data= $this.data("cb-filter");
				switch(initval){
					case '0':
						$label.addClass("cb-filter-either");
						data.displayVal=false;
					break;
					case '1':
						$label.addClass("cb-filter-checked");
						data.displayVal=" is true";
					break;
					case '2':
						data.displayVal=" is false";
					break;
				}
				//alert($label.next().attr("name"));
				$label
					.bind("click.cb-filter",function(e){
							//alert(e.target.tagName);
							$lbl=$(this);
							var data= $lbl.prev().data("cb-filter");
							//alert($lbl.prev().val());
							switch($lbl.prev().val()){
								case '0':
									$lbl.addClass("cb-filter-checked")
										.removeClass("cb-filter-either")
										.prev().val(1)
									data.displayVal=" is true";
								break;
								case '1':
									$lbl.removeClass("cb-filter-checked")
										.removeClass("cb-filter-either")
										.prev().val(2)
									data.displayVal=" is false";
								break;
								case '2':
									$lbl.removeClass("cb-filter-checked")
										.addClass("cb-filter-either")
										.prev().val(0)
									data.displayVal=false;
								break;
									
							}
						});
					
		 	})
		return $(ids.join(","));
	};
	
	$.fn.cbFilter.defaults= {
			initedClass:'cb-filter-inited'
		};
	
})(jQuery);
