(function($){
	var validSettings = [];
	var warningMessages = [];
	$.formvalidator={
		/*
		config structure:
		id: string. need valid input id
		cid: string. compared input id
		validtype: string. use which type to valid
		min: int. input string length should be no less than this number
		max: int. input string length should be no more than this number
		regex: string. regex used to validate
		required: boolean. if this input is required
		warning: string. Warning message
		*/
		addValidSettings:function(settings) {
			validSettings = settings;
		}, 
		
		addValidSetting:function(setting) {
			validSettings[validSettings.length] = setting;
		},
		
		requireValidate:function(setting) {
			return $('#' + setting.id).val().length > 0?true:false;
		},
		
		regexValidate:function(setting) {
			return setting.regex.test($('#' + setting.id).val());
		},
		
		compareValidate:function(setting) {
			return $('#' + setting.id).val() == $('#' + setting.cid).val();
		},
		
		lengthValidate:function(setting) {
			return ($('#' + setting.id).val().length >= setting.min) && ($('#' + setting.id).val().length <= setting.max);
		},
		
		validate:function() {
			warningMessages.splice(0, warningMessages.length);
			for(var i=0; i < validSettings.length; i++) {
				var setting = validSettings[i];
				var isValid = true;
				switch(setting.validtype) {
					case "require":
						isValid = $.formvalidator.requireValidate(setting);
						break;
					case "compare":
						isValid = $.formvalidator.compareValidate(setting);
						break;
					case "regex":
						isValid = $.formvalidator.regexValidate(setting);
						break;
					case "length":
						isValid = $.formvalidator.lengthValidate(setting);
						break;
				}
				if(!isValid) {
					warningMessages[warningMessages.length] = setting.warning;
				}
			}
			
			return warningMessages.join(',');
		}
	}
})(jQuery);