$.fn.tabGroup = function(opts){
	
	var inputs = this;
	
	var opts = $.extend({
		valid: /^.*$/,
		invalidClass: 'invalid',
		validClass: 'valid',
		selectOnFocus: true,
		overwrite: true
	}, opts);
	
	this.each(function(i){
		$(this).keypress(function(e){
			var input = $(this);
			if (e.charCode != 0) {
				
				var caretPos = ($.ranges) ? $.ranges.getCaretPos(input[0]) : null;
				if (caretPos < input.val().length && $.ranges) {
					if (opts.overwrite) {
						if (input.val().length + 1 >= input.attr('maxlength')) {
							input.val(input.val().substr(0, caretPos) + String.fromCharCode(e.charCode) + input.val().substr(caretPos + 1));
							input.selection(caretPos+1, caretPos+1);
						};
					};
					e.preventDefault();
				};

				if (inputs[i + 1] && caretPos + 1 >= input.attr('maxlength')) {
					setTimeout(function(){
						inputs[i + 1].focus()
					});
				};

				setTimeout(function(){	
					if(!input.val().match(opts.valid)){
						input.addClass(opts.invalidClass)
						.removeClass(opts.validClass)
      					.attr("aria-invalid", "true")

					}
					else{
						input.removeClass(opts.invalidClass)
						.addClass(opts.validClass)
      					.attr("aria-invalid", "false")
					};
				});
				
			};
		});
	})
	.focus(function(){
		var obj = $(this);
		if (opts.selectOnFocus && $.ranges && obj.selection() == '' && obj.val() != '') {
			setTimeout(function(){obj.selection(0);});
		};
	});
	
	return this;
};

