﻿/*
	Validating functions :
		- Credit Card
		- Dates
		- Numbers
*/

/* 
	Credit Cards
*/

// ignoruje mezery, tecky, pomlcky
function isValidCCNumber(strNum) {
	var nCheck = 0;
	var nDigit = 0;
	var bEven  = false;
	for (n = strNum.length - 1; n >= 0; n--)
	{
		var cDigit = strNum.charAt (n);
		if (isDigit (cDigit))
		{
			var nDigit = parseInt(cDigit, 10);
			if (bEven)
			{
				if ((nDigit *= 2) > 9) nDigit -= 9;
			}
			nCheck += nDigit;
			bEven = ! bEven;
		}
		else 
			if (cDigit != ' ' && cDigit != '.' && cDigit != '-')
				return false;
	}
	return (nCheck % 10) == 0;
}

function isValidCCExp(s /*mmyy*/, dateToCheck)
{
	if(s.length != 4 || !isInt(s))
		return false;
	var myDate=new Date();
	myDate.setFullYear("20" + s.substr(2,2), parseInt(s.substr(1,1),10) - 1 + (s.substr(0,1)!='0'?10:0), 1, 0)
	return myDate >= dateToCheck;
}
function isValidCCExpNow(s /*mmyy*/)
{
	var d = new Date();
	return isValidCCExp(s, d);
}
function isValidCCCVV(s)
{
	return true;
}

function isValidCC(number, exp, cvv)
{
	return isValidCCNumber(numbner) && isValidCCExp(exp) && isValidCCCVV(cvv);
}

/*
	Date
		NifosDate je ve formatu DDMMMYY teda "01JAN07"
*/
function isNifosMonth(str){
	str = str.toUpperCase();
	return str=="JAN" || str=="FEB" || str=="MAR" || str=="APR" || str=="MAY" || str=="JUN" || str=="JUL" || str=="AUG" || str=="SEP" || str=="OCT" || str=="NOV" || str=="DEC";
}
function getMonthNumberFromNifosMonth(str)
{
	str = str.toUpperCase();
 	if (str=="JAN") return 0;
	if (str=="FEB") return 1;
	if (str=="MAR") return 2;
	if (str=="APR") return 3;
	if (str=="MAY") return 4;
	if (str=="JUN") return 5;
	if (str=="JUL") return 6;
	if (str=="AUG") return 7;
	if (str=="SEP") return 8;
	if (str=="OCT") return 9;
	if (str=="NOV") return 10;
	if (str=="DEC") return 11;
	return null;
}
function getValidNifosDate(dtm)
{
	if(dtm.length != 7)
		return null;
	dtm = dtm.toUpperCase();
   	var 
   		d = parseInt(dtm.substring(0,2),10),
   		m = getMonthNumberFromNifosMonth(dtm.substring(2,5)),
   		y = parseInt(dtm.substring(5,7),10);
   	if(!isInt(dtm.substring(5,7)))
   		return null;
   	if(d < 1 || d > 31 || m == null)
   		return null;
   	var dat = new Date(2000 + y, m, d);
   	if(dat.getDate() != d)
   		return null;
	return dat;
}


/* 
	Number
*/
function isDigit(i)
{
	var re = new RegExp("^[0-9]$");
	return re.test(i);
}

function isInt(i)
{
	var re = new RegExp("^(-?|[0-9]+)[0-9]*$");
	return re.test(i);
}
function isInteger(val)
{
	return isInt(val);
}

function isFloat(val)
{
	var re = new RegExp("^[0-9]*[.,]?[0-9]*$");
	return re.test(val);
}
