// constructor
function Validator() {
	//if (!hasSupport()) return;
}

Validator.prototype.notEmpty = function(str) {
	return ('' != str && !this.isWhiteSpace(str));
}

Validator.prototype.isEmpty = function(str) {
	return ('' == str || this.isWhiteSpace(str));
}

Validator.prototype.isDigits = function(str) {
	return this.isRegex(str, /^\d+$/);
}

Validator.prototype.isInt = function(str) {
	return this.isRegex(str, /^[-+]?\d+$/);
}

Validator.prototype.isAlpha = function(str) {
	return this.isRegex(str, /^[A-Za-z]+$/);
}

Validator.prototype.isAlnum = function(str) {
	return this.isRegex(str, /^[A-Za-z\d]+$/);
}

Validator.prototype.isBetween = function(str, min, max) {
	if (!this.isInt(str)) {
		return false;
	}

	if (!this.isGreaterThan(str, max)
		&& !this.isLessThan(str, min)
	) {
		return true;	
	} else {
		return false;
	}
}

Validator.prototype.isGreaterThan = function(str, min) {
	if (!this.isInt(str)) {
		return false;
	}
	
	integer = parseInt(str);
	
	return (integer > min);
}

Validator.prototype.isLessThan = function(str, max) {
	if (!this.isInt(str)) {
		return false;
	}
	
	integer = parseInt(str);
	
	return (integer < max);
}

Validator.prototype.isLength = function(str, min, max) {
	return (this.isMinLength(str, min) && this.isMaxLength(str, max));
}

Validator.prototype.isMinLength = function(str, min) {
	return (str.length >= min);
}

Validator.prototype.isMaxLength = function(str, max) {
	return (str.length <= max);
}

Validator.prototype.isRegex = function(str, pattern) {
	str += '';
	var found = str.match(pattern);

	if (!found) {
		return false;
	}
	
	return true;
}

Validator.prototype.isIp = function(ipAddress) {
	return this.isRegex(ipAddress, /^(25[0-5]|2[0-4]\d|1\d\d|\d{1,2})(\.(25[0-5]|2[0-4]\d|1\d\d|\d{1,2})){3}$/);
}

Validator.prototype.isDomain = function(domainName) {
	if (this.isEmpty(domainName)
		|| this.isEqual(domainName, 'localhost.rev')
		|| this.isRegex(domainName, /\.in-addr.arpa$/)
		|| this.isRegex(domainName, / /)
		|| this.isIp(domainName)
	) {
		return false;
	} else {
		return true;
	}
}

Validator.prototype.isHostname = function(host) {
	if (this.isIp(host)
		|| this.isDomain(host)
	) {
		return true;
	} else {
		return false;
	}
}

Validator.prototype.isMailName = function(mailName) {	
	return this.isRegex(mailName, /^[\w-\+]+((\.)[\w-\+]+)*$/);
}

Validator.prototype.isEmail = function(email) {
	re = /^([^\@]+){1}\@([^\@]+){1}$/;
	found = email.match(re);

	if (!found) {
		return false;
	}
	
	return (this.isMailName(found[1]) && this.isDomain(found[2]));
}

Validator.prototype.isUrl = function(url) {
	re = /^(.+){1}:\/\/(.+){1}$/
	found = url.match(re);

	if (!found) {
		return false;
	}
	
	return (this.isAlnum(found[1]) && this.isHostname(found[2]));
	
}

Validator.prototype.isHttpUrl = function(url) {	
	return (this.isUrl(url) && this.isRegex(url, /^https?:(.+)$/));
}

Validator.prototype.isPath = function(path) {
	return this.isRegex(path, /^[A-Za-z\d\\\\\/\%^&*()+=\-_\[\]{}\'?\.,<>:;|!\@#]+$/);
}

Validator.prototype.isPhone = function(path) {
	return this.isRegex(path, /^[ \d\-+()]+$/);
}

Validator.prototype.isEqual = function(str1, str2) {
	return (str1 == str2);
}

Validator.prototype.isWhiteSpace = function(str) {
	return this.isRegex(str, /^[\s]+$/);
}

Validator.prototype.isFloat = function(str, decimalPoint) {
	decimalPoint += '';
	decimalPoint = decimalPoint.replace(/\./ig, '\\.');
	re = '/^[-+]?\\d*(' + decimalPoint+'\\d+)?$/';
	eval('var result = this.isRegex(str, ' + re + ');');
	return result;
}

Validator.prototype.isLogin = function(str) {
	return this.isRegex(str, /^[-a-zA-Z0-9@#+&._]+$/);
}

SB_Validator = new Validator();
