String.prototype.isAlpha = function()
{
	return /^[a-zA-Z]+$/.test(this);
}

String.prototype.isAlphaNum = function()
{
	return !/\W/.test(this);
}

String.prototype.isFloat = function()
{
	return /^[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?$/.test(this);
}

String.prototype.isEmail = function()
{
	return /[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?/.test(this);
}

String.prototype.isDate = function()
{
	return /^\d{1,2}\/\d{1,2}\/\d{4}$/.test(this);
}

String.prototype.isUrl = function()
{
	return /^(http|https|ftp):\/\/(([A-Z0-9][A-Z0-9_-]*)(\.[A-Z0-9][A-Z0-9_-]*)+)(:(\d+))?\/?/i.test(this);
}

String.prototype.isNumeric = function()
{
	return (!isNaN(this) && !/^\s+$/.test(this));
}

String.prototype.isCreditCard = function(cardType)
{
	var cardNumber = this.replace(/[^\d]/g, "");
	var isValid = false;

	switch (cardType)
	{
		case "mastercard" :

			isValid = /^5[1-5][0-9]{14}$/.test(cardNumber);
			break;

		case "visa" :

			isValid = /^4[0-9]{12}(?:[0-9]{3})?$/.test(cardNumber);
			break;

		case "amex" :

			isValid = /^3[47][0-9]{13}$/.test(cardNumber);
			break;

		case "diners" :

			isValid = /^3(?:0[0-5]|[68][0-9])[0-9]{11}$/.test(cardNumber);
			break;

		case "discover" :

			isValid = /^6(?:011|5[0-9]{2})[0-9]{12}$/.test(cardNumber);
			break;

		case "jcb" :

			isValid = /^(?:2131|1800|35\d{3})\d{11}$/.test(cardNumber);
			break;
	}

	if (isValid)
	{
		var numberProduct;
		var numberProductDigitIndex;
		var checkSumTotal = 0;

		for (var digitCounter = cardNumber.length - 1; digitCounter >= 0; digitCounter--)
		{
			checkSumTotal += parseInt(cardNumber.charAt(digitCounter));
			digitCounter--;
			numberProduct = String((cardNumber.charAt(digitCounter) * 2));

			for (var productDigitCounter = 0; productDigitCounter < numberProduct.length; productDigitCounter++)
			{
				checkSumTotal += parseInt(numberProduct.charAt(productDigitCounter));
			}
		}

		isValid = (checkSumTotal % 10 == 0);
	}

	return isValid;
}

String.prototype.toDate = function()
{
	if(!this.isDate())
	{
		return null;
	}

	var date_s = this.split("/");
	var new_date = [date_s[1],date_s[0],date_s[2]];

	// Formato mm/dd/yyyy
	var dDate = new Date(new_date.join("/"));

	return dDate;
};

String.prototype.getDaysBetween = function(d)
{
	if (!d.isDate() || !this.isDate())
	{
		return 0;
	}

	var date2 = d.toDate();
	var date1 = this.toDate();

	return date1.getDaysBetween(date2);
};

Date.prototype.copy = function ()
{
	return new Date(this.getTime());
};

Date.prototype.getDaysBetween = function(d)
{
	var msPERDAY = 1000 * 60 * 60 * 24;
	var tmp = d.copy();
	tmp.setUTCHours(this.getUTCHours(), this.getUTCMinutes(), this.getUTCSeconds(), this.getUTCMilliseconds());

	var time = tmp.getTime() - this.getTime();
	return time/msPERDAY;
};

Date.prototype.addDays = function(d)
{
	this.setDate(this.getDate() + parseInt(d, 10));
	return this;
};

Date.prototype.removeDays = function(d)
{
	this.setDate(this.getDate() - parseInt(d, 10));
	return this;
};

Date.prototype.toStrDate = function()
{
	var day = parseInt(this.getDate(), 10);
	var month = parseInt(this.getMonth(), 10) + 1;

	return (day < 10 ? "0" + day : day) + "/" + (month < 10 ? "0" + month : month) + "/" + this.getFullYear();
};

String.prototype.parseInt = parseInt.methodize();

String.prototype.parseFloat = parseFloat.methodize();

function createCookie(name,value,domain,days) {
	if (days) {
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		var expires = ";expires="+date.toGMTString();
	}
	else var expires = "";
	
	if (typeof domain != 'undefined'){
		domain = ";domain=" + domain;
	}
	else domain = "";
	
	document.cookie = name+"="+value+expires+domain+"; path=/";
}

function readCookie(name) {
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++) {
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	}
	return null;
}

function eraseCookie(name,domain) {	
	createCookie(name,"",domain,-1);
}
