String.prototype.insert = function(s, p)
{
	var str = this;
	return this.substr(0,p) + s + this.substr(p);
};

String.prototype.isEmail = function()
{
	return /[A-Za-z0-9][A-Za-z0-9\-\.\_]*\@[A-Za-z0-9][A-Za-z0-9\-\.]*\.[A-Za-z]{2,4}$/.test(this)
};

String.prototype.isRange = function(low, high)
{
	var obj = this;
	if(obj < low || obj > high){
		return false;
	}
	return true;
};

String.prototype.isNumeric = function()
{
	var obj = this;
	if(isNaN(obj) || obj.length == 0){
		return false;
	}
	return true;
};

String.prototype.isAlphaOnly = function()
{
	return /[A-Za-z][A-Za-z]*$/.test(this)
};

String.prototype.isPhone = function()
{
	return /[0-9]{3}\-[0-9]{3}-[0-9]{4}$/.test(this)
};

String.prototype.isSSN = function()
{
	return /[0-9]{3}\-[0-9]{2}-[0-9]{4}$/.test(this)
};

String.prototype.isCreditCard = function()
{
	var number = this.replace(/\s+/g, '') ;

	if(number.match(/\D/)){
		return false ;
	}

	number = number.split('').reverse().join('') ;

	var digits = '';
	for(var i = 0; i < number.length; i++){
		digits += '' + ((i%2) ?
			number.charAt(i) * 2 :
			number.charAt(i)) ;
	}

	var sum = 0 ;
	for (var i = 0; i < digits.length; i++){
		sum += (digits.charAt(i) * 1) ;
	}

	return (sum % 10) ? false : true ;
};

proto___is_day = function(y, m, d)
{
	maxDay = 31;

	if (m == 4 || m == 6 || m == 9 || m == 11){
		maxDay = 30;
	}else{
		if (m == 2){
			if(y % 4 > 0){
				maxDay =28;
			}else{
				if(y % 100 == 0 && y % 400 > 0){
					maxDay = 28;
				}else{
					maxDay = 29;
				}
			}
		}
	}
	return d.isRange(1, maxDay);
};

String.prototype.isDate = function()
{
	/*
	Parameters:
		string
	Returns:
		boolean
	Purpose:
	 	ensures value is a valid date:
			mm/dd/yyyy
			 mm/d/yyyy
			 m/dd/yyyy
			  m/d/yyyy
			  mm/dd/yy
			   mm/d/yy
			   m/dd/yy
			    m/d/yy
		  				
	*/
	var obj = this;
	dSplit = obj.indexOf('/');
	if(dSplit == -1 || dSplit == obj.length){
		return false
	}

	dMonth = obj.substring(0, dSplit);
	if(dMonth == 0){
		return false;
	}

	dSplit = obj.indexOf('/', (dSplit + 1));
	if(dSplit == -1 || (dSplit  + 1) == obj.length){
		return false;
	}
	
	dDay = obj.substring((dMonth.length + 1), dSplit);
	if(dDay.length == 0){
		return false;
	}
	
	dYear = obj.substring(dSplit + 1);
	
	if(!dMonth.isNumeric()){
		return false;
	}else{
		if(!dMonth.isRange(1, 12)){
			return false;
		}else{
			if(!dYear.isNumeric()){
				return false;
			}else{
				if(!dYear.isRange(0, 9999)){
					return false;
				}else{
					if(!dDay.isNumeric()){
						return false;
					}else{
						if(!proto___is_day(dYear, dMonth, dDay)){
							return false;
						}else{
							return true;
						}
					}
				}
			}
		}
	}
};