var vObj = new Object();
vObj['alpha']	 		= 'isAlpha';
vObj['num']				= 'isNum';
vObj['alphanum']		= 'isAlphaNum';
vObj['alphanumslash']	= 'isAlphaNumSlash';
vObj['notindexzero']	= 'notIndexZero';
vObj['checked']			= 'isChecked';
vObj['email']			= 'isEmail';
vObj['pnr']				= 'checkBirth';
vObj['age']				= 'checkBirthAge';
vObj['ymd']				= 'checkYmd';
vObj['phone']			= 'isPhone';
vObj['notempty']		= 'notEmpty';
vObj['orgnr']			= 'isOrgNr';
vObj['checkyear']		= 'correctAge';
vObj['hasnum']			= 'hasNum';
vObj['amount']			= 'isAmount';
vObj['totalsum']		= 'compareSum';
vObj['selectDropdown']	= 'selectDropdown';
vObj['ageLimit']		= 'checkAgeLimit';
vObj['pnrNO']			= 'checkPnrNO';
vObj['zipNL']			= 'checkZipNL';


function checkZipNL(str, fl)
{
	if(!str)
		return false;
	
	var r = /^[0-9]{4}[\s]?[a-zA-Z]{2}$/;
	return r.test(str);
}


function isOrgNr(str, fl)
{
	if(!str)
		return false;
	
	var r = /^[0-9]{6}[-][0-9]{4}$/;
	return r.test(str);
}


function checkAgeLimit(val, min)
{
	if(val.length != 6)
		return false;
		
	days = new Date();
	gdate = days.getDate();
	gmonth = days.getMonth();
	gyear = days.getFullYear();

	date = val;
	y = 19 + date.substring(0, 2);
	m = date.substring(2, 4);
	d = date.substring(4, 6);
	
	age = gyear - y;
	if ((m == (gmonth + 1)) && (d <= parseInt(gdate))) 
		age = age; 
	else 
	{
		if (m <= (gmonth))
			age = age;
		else 
			age = age - 1; 
	}
	
	return age >= min;
}



function compareSum(str, fl)
{
	return str == fl;
}


function isPhone(str, fl)
{
	if(!str)
		return false;
		
	if(str == 0)
		return false;
	
	var l = '+';
	if(fl != 'false')
		l = '{' + fl + '}';
		
	var r = new RegExp("^([0-9 +-]" + l + ")$");
	return r.test(str);
}


function isAmount(str, fl)
{
	if(!str)
		return false;

	if(!isNum(str, 'false'))
		return false;
	
	var i = fl.indexOf(",");
	

	if((i + 1) == fl.length)
		return str >= parseInt(fl.substr(0, (fl.length-1)));
		
	else if(i == 0)
		return str <= parseInt(fl.substr(1, (fl.length-1)));
	
	else
	{
		var mi = parseInt(fl.substr(0, i));
		var ma = parseInt(fl.substr(i+1, fl.length-1));
		return (str >= mi && str <= ma); 
	}
	
}


function notEmpty(str, fl)
{
	var r = /^([\s]*)$/;
	return r.test(str) == false;
}


function isEmail(str, fl)
{
	// Regexp pattern uppdaterad för att klara vissa specialtecken i delen innan @, denna ändring gjordes 2011-11-28 av Joi.
	var r = /^[a-zA-Z]+([_\.-]?[a-zA-Z0-9#%&_-]+)*@[a-zA-Z0-9]+([\.-]?[a-zA-Z0-9]+)*(\.[a-zA-Z]{2,4})+$/;
	return r.test(str);
}


function isChecked(str, fl)
{
	return (str == 'true' || str == 'checked' || str == true);
}


function notIndexZero(str, fl)
{
	return str > 0;
}



function isAlpha(str, fl)
{
	if(!str)
		return false;
		
	if(str.length < 2)
		return false;
	
	var l = '+';
	if(fl != 'false')
		l = '{' + fl + '}';
		
	var r = new RegExp("^([a-zåäæöøüáéíóúàèìòù -]" + l + ")$", "i");
	return r.test(str);
}


function hasNum(str, fl)
{
	var r = /[0-9]/;
	return r.test(str);
}



function isNum(str, fl)
{
	if(!str)
		return false;

	var l = '+';
	if(fl != 'false')
		l = "{" + fl + "}";
		
	var r = new RegExp("^([0-9]" + l + ")$");
	return r.test(str);
}



function isAlphaNum(str, fl)
{
	if(!str)
		return false;
	
	var l = '+';
	if(fl != 'false')
		l = '{' + fl + '}';
		
	var r = new RegExp("^([0-9a-zåäöüa-zåäæøöüáéíóúàèìòù ]" + l + ")$", "i");
	return r.test(str);
}


function isAlphaNumSlash(str, fl)
{
	if(!str)
		return false;
	
	var l = '+';
	if(fl != 'false')
		l = '{' + fl + '}';
		
	var r = new RegExp("^([0-9a-zåäöüa-zåäæøöüáéíóúàèìòù /]" + l + ")$", "i");
	return r.test(str);
}


function checkPnrNO(nr)
{
	nr = nr.replace(/([^0-9])/, '');
	if(nr.length != 11)
		return false;
		
	var wfirstD = new Array(3, 7, 6, 1, 8, 9, 4, 5, 2);
	var wsecondD = new Array(5, 4, 3, 2, 7, 6, 5, 4, 3, 2);
	var firstD = 0;
	var secondD = 0;
	
	var nr_check = nr.substring(0,9);
	
	for(var i = 0; i < wfirstD.length; i++)
		firstD += wfirstD[i]*nr_check.charAt(i);
	firstD = 11 - (firstD % 11);
	if(firstD == 11)
		firstD = 0;
	
	nr_check = nr_check + '' + firstD;
	
	for(var i = 0; i < wsecondD.length; i++)
		secondD += wsecondD[i]*nr_check.charAt(i);
	secondD = 11 - (secondD % 11);
	if(secondD == 11)
		secondD = 0;
	
	res = nr_check + '' + secondD;
	
	return res == nr;
}


function checkBirth(birth) 
{	
	birth = birth.replace(/([^0-9])/, '');
	if(birth.length != 10 && birth.length != 12)
		return false;
	
	var cpr = birth;
	if(birth.length == 12)	
		cpr = birth.substr(2, birth.length);
		
	var checknum = cpr.charAt(cpr.length-1); 
	var checknumcalc = 0;
	var csum = 0;
	
	for (i=0;i<cpr.length-1;i++) 
	{
		t = (parseInt(cpr.charAt(i))*((i+1)%2+1));
		if (t>=10) t = parseInt(t.toString().charAt(0))+parseInt(t.toString().charAt(1));
		csum += t;
	}
	var csum = (csum%10);
	if (csum>0) csum = 10-csum;
	
	return (parseInt(checknum)==csum);
}

function checkBirthAge(birth) 
{	
	birth = birth.replace(/([^0-9])/, '');
	
	if(birth.length != 10 && birth.length != 12)
		return false;
	
	var cpr = birth;
	if(birth.length == 12)	
		cpr = birth.substr(2, birth.length);
		
	var checknum = cpr.charAt(cpr.length-1); 
	var checknumcalc = 0;
	var csum = 0;
	
	for (i=0;i<cpr.length-1;i++) 
	{
		t = (parseInt(cpr.charAt(i))*((i+1)%2+1));
		if (t>=10) t = parseInt(t.toString().charAt(0))+parseInt(t.toString().charAt(1));
		csum += t;
	}
	var csum = (csum%10);
	if (csum>0) csum = 10-csum;
	
			

	var min_age = 18;

	var year = parseInt(19+cpr.slice(0,2));
	var month = parseInt(cpr.slice(2,4)-1);
	var day = parseInt(cpr.slice(4,6));
	var theirDate = new Date((year + min_age), month, day);
	var today = new Date;

	if ( (today.getTime() - theirDate.getTime()) < 0)
			return false;
	
	return (parseInt(checknum)==csum);
}


function checkYmd(ymd)
{
	var yObj = document.getElementById('p1');
	var mObj = document.getElementById('p2');
	var dObj = document.getElementById('p3');
	
	var y = yObj[yObj.selectedIndex].value;
	var m = mObj[mObj.selectedIndex].value;
	var d = dObj[dObj.selectedIndex].value;
	
	if(y == 0 || m == 0 || d == 0)
	return false;
	else
	return true;
	
}

function correctAge(index, birthyear)
{
	if((thisYear-birthyear) >= 18 && birthyear > 0)
		return true;
	else
		return false;
		
}

function selectDropdown(index)
{
	alert("index: " + index);
	return false;
}
