var g_InvalidValueMsgHead = "Please check the following errors:";
/*
objArray Format => Array where i-th element is
		[i] = Array with format
				[0] => 	R|C|G|D
						R - Required field validation
						C - Compare two textbox values
						G - Regular Expression validations
						D - Date Validations / Accepts 3 select boxes in order YY, MM, DD and validates date
							[1] => Year select box
							[2] => Month select box
							[3] => Day select box
							[4] => true/false - check for mandatory
							[5] => Display Name
				[1] => 	Control to check
				[2] =>	Control display name for R
						Error Message for C
						Control display name for G
				[3] =>	2nd Control to compare with for C
						Regex expression or Constant for G
*/
//var g_rgx_Email = /^[a-z][a-z_0-9\.]+@[a-z_0-9\.]+\.[a-z]{2,4}$/i;
var g_rgx_Email = /^\w+((-\w+)|(\.\w+))*\@\w+((\.|-)\w+)*\.\w+$/i;
var g_rgx_SSNNo = /^\d{3}-\d{2}-\d{4}$/i;
//var g_rgx_URL = /^(http:\/\/www.|https:\/\/www.|ftp:\/\/www.|www.){1}([\w]+)(.[\w]+){1,2}$/;
var g_rgx_URL = /^(ht|f)tp(s?)\:\/\/[a-zA-Z0-9\-\._]+(\.[a-zA-Z0-9\-\._]+){2,}(\/?)([a-zA-Z0-9\-\.\?\,\'\/\\\+&%\$#_]*)?$/;
function valdFlds(objArray, errMsg)
{
	var focusObj = null;
	var errIndex = -1;
	for (var i=0; i<objArray.length; i++)
	{
		var obj = objArray[i];
		var msg = null;
		if ('R' == obj[0])
		{
			if ('undefined' != typeof(obj[1].value))
			{

				if  ((0 >= obj[1].value.trim().length) || ( obj[1].value.trim() == 0))
				{
					msg = "\r\n- " + obj[2] + " cannot be empty";
				}
			}
		}
		else if ('C' == obj[0])
		{
			if ((typeof(obj[1].value) != 'undefined') && (typeof(obj[3].value) != 'undefined'))
			{
				if (0 < obj[1].value.length || 0 < obj[3].value.length)
				{
					if (obj[1].value != obj[3].value)
					{
						msg = "\r\n- " + obj[2];
					}
				}
			}
		}
		else if ('G' == obj[0])
		{
			if (typeof(obj[1].value) != 'undefined')
			{
				if (0 < obj[1].value.length)
				{
					if (!obj[3].test(obj[1].value))
					{
						msg = "\r\n- " + "Invalid value for " + obj[2];
					}

				}
			}
		}
		else if ('D' == obj[0])
		{
			if (obj[1].options && obj[2].options && obj[3].options)
			{
				if (obj[1].options[obj[1].selectedIndex].value == '' &&
					obj[2].options[obj[2].selectedIndex].value == '' &&
					obj[3].options[obj[3].selectedIndex].value == '')
				{
					if (obj[4])	//Mandatory field
					{
						msg = "\r\n- " + obj[5] + " cannot be empty";
					}
				}
				else
				{
					var dtString =
						obj[1].options[obj[1].selectedIndex].value + "-" +
						obj[2].options[obj[2].selectedIndex].value + "-" +
						obj[3].options[obj[3].selectedIndex].value;

					if (!valdDate(dtString))
					{
						msg = "\r\n- " + "Invalid date entered for " + obj[5];
					}
				}
			}
		}

		if (null != msg)
		{
			if (null == focusObj)
			{
				focusObj = obj[1];
				errIndex = i;
			}
			if (null == errMsg)
				errMsg = g_InvalidValueMsgHead
			errMsg += msg;
		}
	}

	var status = true;
	if (null != focusObj)
	{
		status = false;
		focusObj.focus();
	}
	return Array(status, errIndex, errMsg, focusObj);
}

function GetDateFromString(dateString)
{
	var dateMatchExp = new RegExp("^(\\d{4})-(\\d{1,2})-(\\d{1,2})$");
	var match = dateMatchExp.exec(dateString);
	if (null == match) return null;	//Match failed, invalid date

	if (match[2] < 1 || match[2] > 12) return null;	//validate month
	if (match[3] < 1 || match[3] > 31) return null;	//validate day
	if (match[1] < 1) return null;	//validate year

	// valid day check
	if (match[2] == 2) 		// february check
	{
		if (match[3] > 29) return null;
		//Check for leap year.
		if (((match[1] % 100 == 0 || match[1] % 4 != 0) && (match[1] % 400 != 0))  // non-leap year checked
				&& match[3] > 28) return null;
	}
	else if ((match[2] == 4 || match[2] == 6 || match[2] == 9 || match[2] == 11) && (match[3] > 30))
		return null;

	return new Date(match[1], match[2]-1, match[3]);
}

function valdDate(dateString)
{
	var dateMatchExp = new RegExp("^(\\d{4})-(\\d{1,2})-(\\d{1,2})$");
	var match = dateMatchExp.exec(dateString);

	if (null == match) return false;	//Match failed, invalid date

	if (match[2] < 1 || match[2] > 12) return false;	//validate month
	if (match[3] < 1 || match[3] > 31) return false;	//validate day
	if (match[1] < 1) return false;	//validate year

	// valid day check
	if (match[2] == 2) 		// february check
	{
		if (match[3] > 29) return false;
		//Check for leap year.
		if (((match[1] % 100 == 0 || match[1] % 4 != 0) && (match[1] % 400 != 0))  // non-leap year checked
				&& match[3] > 28) return false;
	}
	else if ((match[2] == 4 || match[2] == 6 || match[2] == 9 || match[2] == 11) && (match[3] > 30))
		return false;

	return true;
}

//Standard Rules
var g_ruleUserName = ".0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz";
var g_ruleName = ".0123456789 ABCDEFGHIJKLMNOPQRSTUVWXYZ_-abcdefghijklmnopqrstuvwxyz'";
var g_ruleZip = "0123456789- ";
var g_rulePhone = "0123456789- ()";
var g_ruleNumber = ".0123456789";
var g_ruleSSNNo = "-0123456789";
var g_ruleCtyStateCntry = " #\'()-.0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz\"";

function isRule(oComp, sRule, nLength, fdecimal)
{

	if (fdecimal == "" || typeof(fdecimal) == "undefined")
	{
		fdecimal = false;
	}

	//If the object is not specified return false
	if (typeof(oComp) == 'undefined' || oComp == null || oComp == '')
	{
		alert('Error: Input object not specified.');
		return false;
	}
	//If neither rule nor max length is specified, return false
	else if (typeof(sRule) == 'undefined' && typeof(nLength) == 'undefined')
	{
		alert('Error: No rule/maximum lenght for input object specified.');
		return false;
	}

	var noErrorFlg = true;

	//If object is specified and either of rule is specified,
	if (typeof(sRule) != 'undefined' && sRule != null)
	{
		var temp;
		sRule = sRule + "";
		var discardChars = false;
		if (sRule.length > 0 && sRule.charAt(0) == "~")
		{
			sRule = sRule.substring(1);
			discardChars = true;
		}

		if (typeof(oComp) == "undefined" || typeof(sRule) == "undefined")
			return false;

		for (var i = 0;i < oComp.value.length;i++)
		{
			temp = oComp.value.charAt(i);

			if ((!discardChars && sRule.indexOf(temp) == -1) || (discardChars && sRule.indexOf(temp) >= 0))
			{
				alert("Invalid Character!");
				oComp.value = oComp.value.substring(0,i);// + (oComp.value.length > i ? oComp.value.substring(i+1):"");
				noErrorFlg = false;
				break;
			}
		}
	}
	if (nLength)
	{
		if (fdecimal)
		{
			nLength -= fdecimal;
			var dp = oComp.value.indexOf(".");
			var p1;
			var p2 = "";
			if (dp >= 0)
			{
				p1 = oComp.value.substring(0,dp);
				p2 = oComp.value.substring(dp+1);
			}
			else
			{
				p1 = oComp.value;
			}
			if (p1.length > nLength)
			{
				oComp.value = oComp.value.substring(0,nLength);
				return noErrorFlg;
			}
			for (var i = 0;i < p2.length;i++)
			{
				var ch = p2.charAt(i);
				if (ch < '0' || ch > '9')
				{
					oComp.value = p1 + "." + p2.substring(0,i);
					return noErrorFlg;
				}
			}
			if (p2.length > fdecimal)
			{
				oComp.value = p1 + "." + p2.substring(0,fdecimal);
			}
		}
		else if (oComp.value.length > nLength)
		{
			oComp.value = oComp.value.substring(0,nLength);
		}
	}
	return noErrorFlg;
}

function isGreaterthan(datestr1,delim1,dd1,mm1,yy1,datestr2,delim2,dd2,mm2,yy2)
{
	datestr1 = datestr1.trim();
	delim1 = delim1.trim();
	datestr2 = datestr2.trim();
	delim2 = delim2.trim();

	var dt1=Array();
	var dt2=Array();
	var v1=0;
	var v2=0;
	var v3=0;
	var v4=0;
	var v5=0;
	var v6=0;
	dt1 = datestr1.split(delim1);
	dt2 = datestr2.split(delim2);

	v1=dt1[yy1];
	v2=dt2[yy2];
	v3=dt1[mm1];
	v4=dt2[mm2];
	v5=dt1[dd1];
	v6=dt2[dd2];
	if (v1*10 > v2*10)
		return false;
	else
		if ((v1*10 == v2*10) && (v3*10 > v4*10))
			return false;
		else
			if ((v1*10 == v2*10) && (v3*10 == v4*10) && (v5*10 > v6*10))
				return false;
			else
				return true;
}

function isValidRealNumber(val)
{
	var i = val.indexOf(".");
	var str = val.substring(i+1);
	i = str.indexOf(".");
	if (i>0 || str.length==0 )
		return false;
	else
		return true;
}
/**
 * This function checks that particular date is after another date
 * @param datestr1 String representing the Date the should come first
 * @param datestr2 String representing the Date the should come later
 * @return Returns the boolean value true if the precedence is maintained
 */
function isStdateGreaterthanEnddt(datestr1,datestr2)
{
		return isGreaterthan(datestr1,"-",2,1,0,datestr2,"-",2,1,0);
}

function compareDate(control1,control2)
{
	date1 = getDateValue(DatePicker_GetDate(control1));
	date2 = getDateValue(DatePicker_GetDate(control2));
	if (date1 <= date2 )
		 return true
	else
		 return false;
}

function getDateValue(dtObj)
{
	var dtyear = dtObj.getFullYear()+"";
	var dtMonth = dtObj.getMonth();
	var dtDay = dtObj.getDate();
	datevalue = dtyear+"-"+ (dtMonth < 9 ? '0' : '') + (dtMonth + 1)+ "-"+(dtDay < 10 ? '0' : '') + dtDay  ;
	return datevalue;
}

function dateValidation(datectr1,datectr2,msg)
{
	if (!compareDate(datectr1,datectr2))
	{
		alert(msg);
		return false;
	}
	return true;
}
