﻿function formvalidation()
{

	this.isDate = isDate;
	this.isEmail = isEmail;
	this.isEmpty = isEmpty;

	this.isCreditCard = isCreditCard;
	this.isExpired = isExpired;

	this.ForceNumeric = ForceNumeric;

	this.addEvent = addEvent;

	function isDate(fieldid)
	{
		var fieldobj = document.getElementById(fieldid);
		var RegExPattern = /^((((0?[1-9]|[12]\d|3[01])[\.\-\/](0?[13578]|1[02])[\.\-\/]((1[6-9]|[2-9]\d)?\d{2}))|((0?[1-9]|[12]\d|30)[\.\-\/](0?[13456789]|1[012])[\.\-\/]((1[6-9]|[2-9]\d)?\d{2}))|((0?[1-9]|1\d|2[0-8])[\.\-\/]0?2[\.\-\/]((1[6-9]|[2-9]\d)?\d{2}))|(29[\.\-\/]0?2[\.\-\/]((1[6-9]|[2-9]\d)?(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00)|00)))|(((0[1-9]|[12]\d|3[01])(0[13578]|1[02])((1[6-9]|[2-9]\d)?\d{2}))|((0[1-9]|[12]\d|30)(0[13456789]|1[012])((1[6-9]|[2-9]\d)?\d{2}))|((0[1-9]|1\d|2[0-8])02((1[6-9]|[2-9]\d)?\d{2}))|(2902((1[6-9]|[2-9]\d)?(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00)|00))))$/;
		if ((fieldobj.value.match(RegExPattern)) && (fieldobj.value != ''))
			return true;
		else
			return false;
	}
	function isEmail(fieldid)
	{
		var fieldobj = document.getElementById(fieldid);
		if (/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(fieldobj.value))
			return true;
		else
			return false;
	}

	function isEmpty(fieldid)
	{
		var fieldobj = document.getElementById(fieldid);
		if (fieldobj.type == "select-one")
		{
			if (fieldobj[fieldobj.selectedIndex].value == 0 || fieldobj[fieldobj.selectedIndex].value == null)
				return true;
			else
				return false;
		}
		if (fieldobj.type == "checkbox")
		{
			if (!fieldobj.checked)
				return true;
			else
				return false;
		}
		else
		{
			if (fieldobj.value.length == 0 || fieldobj.value == null)
				return true;
			else
				return false;
		}
	}

	function addEvent(elm, evType, fn, useCapture) {
		if (elm.addEventListener) {
			elm.addEventListener(evType, fn, useCapture);
			return true;
		} 
		else if (elm.attachEvent) { 
			var r = elm.attachEvent('on' + evType, fn);
			return r;
		} 
		else {
			elm['on' + evType] = fn;
		}
	}


	function isCreditCard(CardNoControl)
	{
	
		if (isEmpty(CardNoControl))
			return true;
		else
		{
		
			var CardNoValue = document.getElementById(CardNoControl).value.replace(/^\s+/, "").replace(/\s+$/, "");
			
			var numbersonly = CardNoValue.replace(/[^\d]/g, "");

			if ((!/(^[0-9\s\-]{10,})$/gi.test(CardNoValue)) || (numbersonly == "" && CardNoValue != ""))
				return false;
			else
			{
				var sum = 0;
				var numdigits = numbersonly.length;
				var parity = numdigits % 2;
				for (var i=0; i < numdigits; i++)
				{
					var digit = parseInt(numbersonly.charAt(i))
					if (i % 2 == parity) digit *= 2;
					if (digit > 9) digit -= 9;
					sum += digit;
				}
				return (sum % 10) == 0;
			}
		}
	}

	function isExpired(CardMonthControl, CardYearControl)
	{
		if (isEmpty(CardMonthControl))
		{
			if (CardYearControl != "" && CardYearControl != null)
			{
				if (isEmpty(CardYearControl))
					return false;
			}
			else
				return false;
		}

		var expirymonth = document.getElementById(CardMonthControl).value;
		if (CardYearControl != "" && CardYearControl != null)
			var expiryyear = document.getElementById(CardYearControl).value;
		else
			var expiryyear = "";

		if (expiryyear.length == 0)
		{
			if (expirymonth.indexOf("/") > 0)
			{
				expiryyear = expirymonth.substr(expirymonth.indexOf("/") + 1);
				expirymonth = expirymonth.substr(0, expirymonth.indexOf("/"));
			}
			else if (expirymonth.indexOf("-") > 0)
			{
				expiryyear = expirymonth.substr(expirymonth.indexOf("-") + 1);
				expirymonth = expirymonth.substr(0, expirymonth.indexOf("-"));
			}
			else if (expirymonth.length >= 4)
			{
				expiryyear = expirymonth.substr(2);
				expirymonth = expirymonth.substr(0, 2);
			}
		}
	
		if (expiryyear.length == 2) expiryyear = "20" + expiryyear;

		if (expirymonth < 1 || expirymonth > 12) return true;

		var now = new Date();
		var expiresIn = new Date(expiryyear, expirymonth, 0, 0, 0);
		//expiresIn.setMonth(expiresIn.getMonth() + 1);
		if (now.getTime() < expiresIn.getTime()) return false;
		return true;
	}

	function ForceNumeric(targ)
	{
		var dp = targ.getAttribute("dp");
		var groupdigits = targ.getAttribute("groupdigits");
		if (!dp || dp<0) dp = 0;
		
		return objFormat.FormatNumber(targ.value, dp, true, false, false);
	}

	function ForceDate(targ)
	{
		if (!isEmpty(targ.name))
		{
			if (isDate(targ.name))
			{
				var mydatesplit = targ.value.split('/');
				var myday = mydatesplit[0] + '';
				if (myday.length == 1)
					myday = '0' + myday;
				var mymonth = mydatesplit[1] + '';
				if (mymonth.length == 1)
					mymonth = '0' + mymonth;
				var myyear = parseFloat(mydatesplit[2]);
				if ((myyear + '').length < 4)
				{
					var thisyear = (new Date()).getFullYear();
					var thiscentury = parseInt((thisyear + '').substr(0, 2));
					thisyear = parseInt((thisyear + '').substr(2));
					if (myyear > (thisyear + 10))
						thiscentury = thiscentury - 1;
					myyear = (thiscentury * 100) + myyear;
					myyear = myyear + '';
					while (myyear.length < 4)
						myyear = '0' + myyear;
				}
				var mydate = myday + '/' + mymonth + '/' + myyear;
				return mydate;
			}
			else
			{
				return '';
			}
		}

	}

}

var objFormValidation = new formvalidation();


