$.fn.extend({

	/**
	 * 为 ie6 隐藏 select 边框：
	 * 在 select 外层包一个等大小的 div，设为 overflow: hidden，然后增加 select 的大小，把边框挤出去
	 * 要求：css 仅用 class 指定 select 和 wrapper 共用的 css
	 */
	hideSelectBorder: function (width) {
	
		return this.each(function () {
		
			var select = this;
			//alert($(select).width());
			//var exwidth = (width || $(select).width()) + 20;
			//var exwidth2 = (width || $(select).width()) + 270;
	
			var wrapper = $('<div></div>')
				.addClass(select.className)
				.insertBefore(select)
				.css({
					'position' : 'relative',
					'overflow' :  'hidden',
					'height'   : '17px'
				})
				.append(select);
				
			$(select)
				.removeClass(select.className)
				.css({
					'position' : 'absolute',
					'top'      : '-2px',
					'left'     : '-2px',
					'width'    : width + 'px'
				});
			
		});
		
	},
	
	/**
	 * 为表格和列表增加计数 class，以便应对特殊样式处理
	 * 包括：count_last, count_odd, count_even, count_{number}
	 */
	addCountClasses: function () {
	
		return this.each(function () {
		
			var list = $(this);
		
			var itemsel =
				list.is('table') ? '> tbody > tr' :
				list.is('tbody,thead,tfoot') ? '> tr' :
				list.is('ul,ol') ? '> li' :
				null;
				
			if (!itemsel) return;
			
			var items = list.find(itemsel);
			
			if (items.length == 0) return;
			
			for (var i=0; i<items.length; i++) {
				items.eq(i).removeClass($.grep(items[i].className.split(/\s+/), function (claz) {
					return (/^count_/.test(claz));
				}).join(' ')).addClass('count_' + i).addClass(i % 2 ? 'count_odd' : 'count_even');
			}
			items.eq(items.length - 1).addClass('count_last');
		
		});
		
	},
	
	/**
	 * 将 input 表单的类型添加为 class
	 */
	addInputClasses: function () {
	
		return this.each(function () {
		
			var inp = $(this);
			var type = inp.attr('type') || 'text';
			inp.addClass(type);
		
		});
	
	},
	
	/**
	 * 将表格的列标签 <col> 上带有的 class 拷贝到对应的 td/th 上
	 * 以便 css 能够利用该 class 对 td/th 指定样式
	 */
	addColClasses: function () {
	
		return this.each(function () {
		
			var table = $(this);
			
			var colClasses = [];
			table.find('> colgroup > col').each(function () {
				colClasses.push(this.className);
			});
			
			table.find('> thead > tr, > tbody > tr, > tfoot > tr').each(function () {
				var tr = $(this);
				var col = 0;
				tr.find('th, td').each(function (i) {
					var td = $(this);
					var colspan = Number(td.attr('colspan') || 1);
					td.addClass(colClasses.slice(col, col+colspan).join(' '));
					col += colspan;
				});
			});
		
		});
	
	}
	
});