	jQuery.fn.highlight = function(selector, className, eventStart, eventEnd){
	
		// variables
			var className		= className || 'highlight';
			if(eventStart == undefined && eventEnd == undefined){
				var eventStart = 'mouseover';
				var eventEnd = 'mouseout';
				}
			else if(eventStart == eventEnd || eventStart != undefined && eventEnd == undefined){
				var toggle = true;
				}
		
		// code
			this.each
				(
				function(){
				
					var tagName	= this.tagName.toLowerCase();
					
					if(tagName == 'form'){
					
						selector		= selector || 'li';
						var elements 	= jQuery("textarea, select, multi-select, :text, :image, :password, :radio, :checkbox, :file", this);
	
						elements.bind
							(
							'focus', 
							function(){
								var parents	= jQuery(this).parents(selector)
								var parent	= jQuery(parents.get(0))
								parent.addClass(className);
								}
							);
							
						elements.bind
							(
							'blur', 
							function(){
								var parents	= jQuery(this).parents(selector)
								var parent	= jQuery(parents.get(0))
								parent.removeClass(className);
								}
							);
	
						}
						
					else{
	
	
						if(tagName.match(/^(table|tbody)$/) != null){
							selector = selector || 'tr';
							}
						else if(tagName.match(/^(ul|ol)$/) != null){
							selector = selector || 'li';
							}
						else{
							selector = '*';
							}
							
						var elements	= jQuery(selector, this);
	
						if(toggle){
							elements.bind
								(
								eventStart, 
								function(){
									if(jQuery(this).hasClass(className)){
										jQuery(this).removeClass(className);
										}
									else{
										jQuery(this).addClass(className);
										}
									}
								);
							
							}
							
						else{
							elements.bind
								(
								eventStart, 
								function(){
									jQuery(this).addClass(className);
									}
								);
								
							elements.bind
								(
								eventEnd, 
								function(){
									jQuery(this).removeClass(className);
									}
								);
							}
					
						}
					}
				);
		
		}
