function superValidate(settings){
	this.defaultSettings = {
		value:"",
		error:null,
		required:false,
		email:false,
		NumbersOnly:false,
		zipCode:false				
	};
	
	var self = this;
	
	var opts = $.extend({}, this.defaultSettings,settings);
	
	var data = opts.value;
	delete opts['value'];
	
	var errorTarget = opts.error;
	delete opts['error'];
					
	this.zipCode = function(data){
		var testEx = /^\d{5}$/gi;
		if(data.match(testEx)){
			return {result:true};
		} else {
			return {result:false, error:"Not a ZipCode"};
		}
	};
	this.required = function(data){
		var testEx = /^\w+/gi;
		if(data.match(testEx)){
			return {result:true};
		} else {
			return {result:false, error:"Required"};
		}
	};
	this.NumbersOnly = function(data){
		var testEx = /^\d+$/gi;
		if(data.match(testEx)){
			return {result:true};
		} else {
			return {result:false, error:"Numbers Only"};
		}
	};
	this.charLimit = function(data, i){
		var testEx = new RegExp('^.{'+i+'}$','gi');
		if(data.match(testEx)){
			return {result:true};
		} else {
			return {result:false, error:"Too many characters ("+i+")"};
		}
	};
	this.email = function(data, i){
		var testGroup = data;
		testGroup = testGroup.replace(/,/gi, ";");
		//$(this).val(testGroup);
		testGroup = testGroup.replace(/(\s*)*(\W*$)*/gi,"");
		testGroup = testGroup.split(";");
		//console.dir(testGroup);
		
		var problemAddress;
		var problem = false;
		var testEx = /^([0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*@((\w+\-+)|(\w+\.))*\w{1,63}\.[a-zA-Z]{2,9})$/gi;

		if(typeof(i)==="number") {
			if(testGroup.length>i) {
				problem=true;
				return {result:false, error:"Too many email addresses, Limit("+i+")"};
			}
		}
		
		if (!problem) {
			jQuery.each(testGroup,function(i,val){
				//var testString = val;
				var test = val.match(testEx);
				
				if (test) {
					return test;	
				} else {
					problem=true;
					problemAddress = val;
					return test;	
				}
						
			});	
		}

		if(!problem){
			return {result:true};
		} else {
			return {result:false, error:"Not a valid email address ("+problemAddress+")"};
		}
	};
					
	this.test = function(){
	 	return test();
	};
	
	function test(){
		var valid = true;
		var errors = [];
		jQuery.each(opts,function(i,val){
			
			if(val){
				var testObj = eval('self.'+i+'(data,'+val+')');
				if(testObj.result){
					//console.log('yes');
				} else {
					//console.log('no');
					valid=false;
					errors.push(testObj.error);
				}
			}
		});
		
		if(valid){
			triggerValid(errorTarget);
		} else {
			triggerError(errorTarget,errors);
		}
		
		return valid;

	};
	
	function triggerError(obj, error){
		if(!error) {
			error = "";
		}
		//console.dir(error);
		$(obj)
			//.html(error[0])
			.attr("title", error[0])
			.removeClass('ttk-validate')
			.addClass("ttk-error")
	};
	
	function triggerValid(obj){
		if ($(obj).hasClass("ttk-error")) {
			$(obj).attr("title","").html("").removeClass('ttk-error').addClass("ttk-validate");
		}
	};
	
	function triggerClear(obj) {
		$(obj).attr("title","").removeClass('ttk-error ttk-validate')
	};

	
}

