$.fn.tristate = function() {
	return this.each(function() {
		/*
		
		*/
	if ($(this).parent().hasClass('tristate_div')) {
		
	}else{
		if ($(this).hasClass('tristate_mandatory')){

			$(this).wrap('<div class="tristate_div tristate_mandatory_div" />');
			var cur_tristate=$(this).parent();
			cur_tristate.prepend('<a href="#" onclick="return false;" class="tristate_mandatory_on_a"></a>');
			cur_tristate.prepend('<a href="#" onclick="return false;" class="tristate_mandatory_off_a"></a>');
			
			var cur_input=$(this);
			var cur_input_id=$(this).attr('id');
			
			
			var on_but=cur_tristate.find(".tristate_mandatory_on_a");
			var off_but=cur_tristate.find(".tristate_mandatory_off_a");

			
			
			off_but.attr('title','No').mousedown(function(){
				if (cur_input.val()!='0'){
					cur_tristate.removeClass('tristate_mandatory_off').removeClass('tristate_mandatory_on').removeClass('tristate_mandatory_def').addClass('tristate_mandatory_off')
					cur_input.val('0');
				} else {
					on_but.mousedown();
				}
			});
			on_but.attr('title','Yes').mousedown(function(){
				if (cur_input.val()!='1'){
					cur_tristate.removeClass('tristate_mandatory_off').removeClass('tristate_mandatory_on').removeClass('tristate_mandatory_def').addClass('tristate_mandatory_on')
					cur_input.val('1');
				} else {
					off_but.mousedown();
				}
			});

			
			if (cur_input_id!=''){
				$('label[for='+cur_input_id+']').mousedown(function(){
					on_but.mousedown();
				}).hover(function(){
					cur_tristate.toggleClass('hover');
					$(this).toggleClass('hover');
				})
			}
						
			if (cur_input.val()=='0'){cur_input.val('');off_but.mousedown();}
			else if (cur_input.val()=='1'){cur_input.val('');on_but.mousedown();}
			else {
				off_but.mousedown();
			}
			
		
			
		} else {
		
			$(this).wrap('<div class="tristate_div" />');
			var cur_tristate=$(this).parent();
			cur_tristate.prepend('<a href="#" onclick="return false;" class="tristate_on_a"></a>');
			cur_tristate.prepend('<a href="#" onclick="return false;" class="tristate_def_a"></a>');
			cur_tristate.prepend('<a href="#" onclick="return false;" class="tristate_off_a"></a>');
			
			var cur_input=$(this);
			var cur_input_id=$(this).attr('id');
			
			
			
			var on_but=cur_tristate.find(".tristate_on_a");
			var off_but=cur_tristate.find(".tristate_off_a");
			var def_but=cur_tristate.find(".tristate_def_a");
			
			
			
			off_but.attr('title','No').mousedown(function(){
				if (cur_input.val()!='0'){
					cur_tristate.removeClass('tristate_off').removeClass('tristate_on').removeClass('tristate_def').addClass('tristate_off')
					cur_input.val('0');
				} else {
					def_but.mousedown();
				}
			});
			on_but.attr('title','Yes').mousedown(function(){
				if (cur_input.val()!='1'){
					cur_tristate.removeClass('tristate_off').removeClass('tristate_on').removeClass('tristate_def').addClass('tristate_on')
					cur_input.val('1');
				} else {
					cur_input.val('0');
					def_but.mousedown();
				}
			});
			def_but.attr('title','Default').mousedown(function(){
				
				switch (cur_input.val()){
					case '':
					case '0':
						cur_tristate.removeClass('tristate_off').removeClass('tristate_on').removeClass('tristate_def').addClass('tristate_def')
						cur_input.val('2');
					break;
					case '1':
						cur_tristate.removeClass('tristate_off').removeClass('tristate_on').removeClass('tristate_def').addClass('tristate_off')
						cur_input.val('0');
					break;
					case '2':
					default:
						on_but.mousedown();
					break;


				}

				
			});		
			

			if (cur_input_id!=''){
				$('label[for='+cur_input_id+']').mousedown(function(){
					def_but.mousedown();
				}).hover(function(){
					cur_tristate.toggleClass('hover');
					$(this).toggleClass('hover');
				})
			}
			
			if (cur_input.val()=='0'){cur_input.val('');off_but.mousedown();}
			else if (cur_input.val()=='1'){cur_input.val('');on_but.mousedown();}
			else if (cur_input.val()=='2'){cur_input.val('');def_but.mousedown();}
			else {
				def_but.mousedown();
			}
		
		}
		
		
	}
		
		
		
		
	});
};


