var iUsrMinChar = 4;	// to override
var iPwdMinChar = 4;	// to override
var iPwdMaxChar = 10;	// to override

var formError = 0;
var formErrorMsg = '';

function Confirmation(sMsg)
{
	var agree;
	agree = confirm(sMsg);
	if (agree)
		return true;
	else
		return false;
}

function CheckRequiredFields(arrReqFlds, sHeader)
{
	for (var i=0 ; i<arrReqFlds.length ; i++)
	{
		if (document.getElementById(arrReqFlds[i][0]).value == '')
			AddErrMsg(arrReqFlds[i][1]);
	}
	
	if (formErrorMsg != '')
		formErrorMsg = sHeader + '\n\n' + formErrorMsg;
	
	return formErrorMsg;
}

function CheckInteger (p_txtInteger, sMsg)
{ 
	var i;
	var ch;
	if (document.getElementById)
	{
		var txtInteger = document.getElementById(p_txtInteger);
		if (txtInteger != null)	
		{
			var s = txtInteger.value;
			for (i = 0; i < s.length; i++)
			{   
				ch = s.charAt(i);
				if (!IsDigit(ch))
				{
					AddErrMsg(sMsg);
					break;
				}
			}
		}
	}
}

function IsDigit (ch)
{
	return ((ch >= "0") && (ch <= "9"));
}

function isInteger(s)
{
	var i;
    for (i = 0; i < s.length; i++){   
        // Check that current character is number.
        var c = s.charAt(i);
        if (((c < "0") || (c > "9"))) return false;
    }
    // All characters are numbers.
    return true;
}

function IsEmpty(s)
{
	return ((s == null) || (s.length == 0));
}

function IsValidColor(sCode)
{
	var sRegEx = /[0-9A-F]{6}/gi;
	var bool;
	
	return sCode.match(sRegEx);
}

function CheckFloat(input, sMsg)
{
	var value = new String(input.value);
	var str = value.replace(",",".");

	if (isNaN(str))
		AddErrMsg(sMsg);
	else
		input.value = str;
}

function CheckPrice(input, sMsg)
{
	myString = new String(document.getElementById(input).value);
	str = myString.replace(",",".");

	if (isNaN(str))
		AddErrMsg(sMsg);
	else
		input.value = FormatCurrency(str);
}

function CheckPhoneNumber(p_txtPhone, sMsg)
{
	var sRegEx = /(\d{3}-\d{3}-\d{4})/gi;
	var str;
	var bool;
	
	if (document.getElementById)
	{
		var txtPhone = document.getElementById(p_txtPhone);
		if (txtPhone != null)	
		{
			str = txtPhone.value;
			bool = str.search(sRegEx);
			if (bool != 0 && str != '')
			{
				AddErrMsg(sMsg);
				document.getElementById(p_txtPhone).focus();
			}			
		}
	}
}

function CheckHexaCode(p_txtCode, sMsg)
{
	var sRegEx = /[0-9A-F]{6}/gi;
	var str;
	var bool;
	
	if (document.getElementById)
	{
		var txtCode = document.getElementById(p_txtCode);
		if (txtCode != null)
		{
			str = txtCode.value;
			bool = str.search(sRegEx);
			if (bool != 0 && str != '')
			{
				AddErrMsg(sMsg);
				txtCode.focus();
			}			
		}
	}
}

function FormatCurrency(num)
{
	num = num.toString().replace(/\$|\,/g,'');
	if(isNaN(num))
	num = "0";
	sign = (num == (num = Math.abs(num)));
	num = Math.floor(num*100+0.50000000001);
	cents = num%100;
	num = Math.floor(num/100).toString();
	
	if(cents<10)
	cents = "0" + cents;
	
	for (var i = 0; i < Math.floor((num.length-(1+i))/3); i++)
	num = num.substring(0,num.length-(4*i+3))+
	num.substring(num.length-(4*i+3));
	
	return (((sign)?'':'-') + num + '.' + cents);
}

function IsBetween(iValue, iMinBound, iMaxBound)
{ 
	iValue = parseInt(iValue);

	if (iValue >= iMinBound && iValue <= iMaxBound)
		return true;
	else
		return false;
}

function AllFieldsRequired( frm, sMsg )
{
	var field;
	var bReturn = true;
	
	for (var e = 0; e < frm.elements.length; e++)
	{
		field = frm.elements[e];
	
		if (field.type.toLowerCase() == 'text')
		{
			if (Trim(field.value) == "")
			 {
				alert(sMsg);
				field.focus();
				bReturn = false;
			} 
		}
	}
	return bReturn;
}

function CheckUrl(p_txtEmail, sMsg)
{
	var sRegEx = /(https?:\/\/)/gi;
	var str;
	var bool;
	
	if (document.getElementById)
	{
		var txtEmail = document.getElementById(p_txtEmail);
		if (txtEmail != null)	
		{
			str = txtEmail.value;
			bool = str.search(sRegEx);
			if (bool != 0 && str != '')
			{
				AddErrMsg(sMsg);
				txtEmail.focus();
			}			
		}
	}
}

function CheckFilename( field, sMsg )
{
	var re = /^[A-Za-z0-9_-]+\.[A-Za-z0-9]+$/g;
	var sFilename = field.value;
	
	sFilename = sFilename.substring(sFilename.lastIndexOf('\\') + 1);
	
	if (re.test(sFilename) == false)
	{
		AddErrMsg(sMsg);
		field.focus();
	}
}

function CheckEmail(p_txtEmail, sMsg)
{
	var sRegEx = /([\w\_\.\-]+\@[\w\_\.\-]+\.[a-zA-Z]{2,5})/i;	
	var str;
	var bool;
	
	if (document.getElementById)
	{
		var txtEmail = document.getElementById(p_txtEmail);
		if (txtEmail != null)	
		{
			str = txtEmail.value;
			bool = str.search(sRegEx);
			if (bool != 0 && str != '')
			{
				AddErrMsg(sMsg);
				txtEmail.focus();
			}
		}
	}
}

function CheckValueExist(p_txtValue, sMsg)
{
	var str;
	var bool;

	if (document.getElementById)
	{
		var txtValue = document.getElementById(p_txtValue);
		if (txtValue != null && txtValue.disabled != true)	
		{
			str = txtValue.value;
			bool = IsEmpty(str);
			if (bool != false)
			{
				AddErrMsg(sMsg);
				txtValue.focus();
			}
		}
	}
}

function CheckDateRange(p_txtDate1, p_txtDate2, bCheckStartDateEndDate, sMsg)
{

	var str1;
	var str2;
	var bool1;
	var bool2;
	var bool3;
	var bool4;
	
	if (document.getElementById)
	{
		var txtDate1 = document.getElementById(p_txtDate1);
		var txtDate2 = document.getElementById(p_txtDate2);
		if (txtDate1 != null && txtDate1.disabled != true && txtDate2 != null && txtDate2.disabled != true)	
		{
			str1 = txtDate1.value;
			bool1 = IsDate(str1);
			str2 = txtDate2.value;
			bool2 = IsDate(str2);
			bool3 = true;
			if (bCheckStartDateEndDate)
			{
				str1 = str1.replace('-','/');
				str1 = str1.replace('-','/');
				start = new Date(str1);
				
				str2 = str2.replace('-','/');
				str2 = str2.replace('-','/');
				end = new Date(str2);
				
				bool3 = IsStartDateLower(start, end);			
				bool4 = IsRangeInOneYear(start, end);				
			}
			if (bool1 == false || bool2 == false || bool3 == false || bool4 == false)
			{
				AddErrMsg(sMsg);
				txtDate1.focus();
			}
		}
	}
}

function IsStartDateLower(start, end)
{
	if (start > end) return false;
	return true;
}

function IsRangeInOneYear(start, end)
{
	var diff  = new Date();
	var	timediff  = new Date();
	var days;

	diff.setTime(Math.abs(start.getTime() - end.getTime()));
	timediff = diff.getTime();
	days = Math.floor(timediff / (1000 * 60 * 60 * 24)); 
	timediff -= days * (1000 * 60 * 60 * 24);
	if (days > 365) return false;
	return true;
}

function CheckDate(p_txtDate, sMsg)
{
	var str;
	var bool;
	
	if (document.getElementById)
	{
		var txtDate = document.getElementById(p_txtDate);
		if (txtDate != null)	
		{
			str = txtDate.value;
			bool = IsDate(str);
			if (bool == false)
			{
				AddErrMsg(sMsg);
				txtDate.focus();
			}
		}
	}
}

function DaysArray(n) {
	for (var i = 1; i <= n; i++)
	{
		this[i] = 31
		if (i==4 || i==6 || i==9 || i==11) this[i] = 30
		if (i==2) this[i] = 29
   	} 
   	return this;
}

function daysInFebruary (year){
	// February has 29 days in any year evenly divisible by four,
    // EXCEPT for centurial years which are not also divisible by 400.
    return (((year % 4 == 0) && ( (!(year % 100 == 0)) || (year % 400 == 0))) ? 29 : 28 );
}

function stripCharsInBag(s, bag)
{
	var i;
    var returnString = "";
    // Search through string's characters one by one.
    // If character is not in bag, append to returnString.
    for (i = 0; i < s.length; i++){   
        var c = s.charAt(i);
        if (bag.indexOf(c) == -1) returnString += c;
    }
    return returnString;
}

function IsDate (dtStr)
{
	var d = new Date();
	var dtCh = "-";
	var minYear = 1900;
	var maxYear = d.getFullYear() + 1;
	
	var daysInMonth = DaysArray(12)
	var pos1 = dtStr.indexOf(dtCh)
	var pos2 = dtStr.indexOf(dtCh, pos1 + 1)
	var strYear = dtStr.substring(0, pos1)
	var strMonth = dtStr.substring(pos1 + 1, pos2)
	var strDay = dtStr.substring(pos2 + 1)
		
	strYr = strYear;
	
	for (var i = 1; i <= 3; i++)
	{
		if (strYr.charAt(0) == "0" && strYr.length > 1) strYr = strYr.substring(1)
	}
	
	if (strMonth.charAt(0) == "0" && strMonth.length > 1) strMonth = strMonth.substring(1)
	
	if (strDay.charAt(0) == "0" && strDay.length > 1) strDay = strDay.substring(1)
	
	month = parseInt(strMonth)
	day = parseInt(strDay)
	year = parseInt(strYr)
	
	if (strYear.length != 4 || year==0 || year < minYear || year > maxYear)	return false;
	if (pos1 == -1 || pos2 == -1) return false;
	if (strMonth.length < 1 || month < 1 || month > 12) return false;
	if (strDay.length < 1 || day < 1 || day > 31 || (month == 2 && day > daysInFebruary(year)) || day > daysInMonth[month]) return false;
	if (dtStr.indexOf(dtCh, pos2 + 1) != -1 || isInteger(stripCharsInBag(dtStr, dtCh)) == false) return false;
	
	return true;
}

function CheckUsername(p_txtUsr, sMsg)
{
	if (document.getElementById)
	{
		var txtUsr = document.getElementById(p_txtUsr);
		if (txtUsr != null)
		{
			if (IsValidUsername(txtUsr.value) == 0)
			{
				AddErrMsg(sMsg);
				document.getElementById(p_txtUsr).focus();
			}
		}
	}
}

function IsValidUsername(p_sUsr)
{
	var re = /([a-zA-Z0-9]+)/;
	var iReturn = -1;

	str = p_sUsr;

	if (str != '')
	{
		if (!str.match(re) || str.length < iUsrMinChar )
			iReturn = 0;
		else
			iReturn = 1;
	}

	return iReturn;
}

function CheckPassword(p_txtPwd, sMsg)
{
	if (document.getElementById)
	{
		var txtPwd = document.getElementById(p_txtPwd);
		
		if (txtPwd != null)
		{
			if (IsValidPassword(txtPwd.value) == 0)
			{
				AddErrMsg(sMsg);
				txtPwd.focus();
			}				
		}
	}
}

function CheckMaxLength(p_txtarea, p_maxlength, sMsg)
{
	if (document.getElementById)
	{
		var field = document.getElementById(p_txtarea);

		if (field != null)
		{
			if (field.value.length > p_maxlength)
			{
				AddErrMsg(sMsg);
				if (field.type.toLowerCase() != 'hidden')
					field.focus();
			}
		}
	}
}

function IsValidPassword(p_sPwd)
{
	var re = /([a-zA-Z0-9]+)/;
	var iReturn = -1;
	var str;

	str = p_sPwd;

	if (str != "")
	{
		if (!str.match(re) || str.length < iPwdMinChar || str.length > iPwdMaxChar )
			iReturn = 0;
		else
			iReturn = 1;
	}
	
	return iReturn;
}

function MatchPassword(p_txtPwd1, p_txtPwd2)
{
	var iReturn = -1;
	
	if (document.getElementById)
	{
		var txtPwd1 = document.getElementById(p_txtPwd1);
		var txtPwd2 = document.getElementById(p_txtPwd2);
		
		if (txtPwd1 != null && txtPwd2 != null)
		{
			if (txtPwd1.value == '' && txtPwd2.value == '')
				iReturn = -1;
			else
				if ( (txtPwd1.value == txtPwd2.value) && (txtPwd1.value != '' && txtPwd2.value != '') )
					iReturn = 1;
				else
					iReturn = 0;
		}
	}
	
	return iReturn;
}

function getRandomNum(lbound, ubound) {
	return (Math.floor(Math.random() * (ubound - lbound)) + lbound);
}

function getRandomChar() {
	var numberChars = "0123456789";
	var lowerChars = "abcdefghijklmnopqrstuvwxyz";
	var upperChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
	
	var charSet = "";
	charSet += numberChars;
	charSet += lowerChars;
	charSet += upperChars;
	return charSet.charAt(getRandomNum(0, charSet.length));
}

function getRandomPassword() {
	var rc;
	var pwd = '';
	var length = getRandomNum(iPwdMinChar,iPwdMaxChar);
	
	do
	{
		rc = "";
		for (var idx = 0; idx < length; ++idx) {
			rc = rc + getRandomChar();
		}
		pwd = rc;
	}
	while (!IsValidPassword(pwd) )
	
	return pwd;
}

function Trim(sString) 
{
	while (sString.substring(0,1) == ' ')
	{
		sString = sString.substring(1, sString.length);
	}
	while (sString.substring(sString.length-1, sString.length) == ' ')
	{
		sString = sString.substring(0,sString.length-1);
	}
	return sString;
}

function FindSemicolon(p_field, sMsg)
{
	if (p_field.value != '')
		if (p_field.value.match(';') == null)
			{
			p_field.focus();
			alert(sMsg);
			}
}

function AddErrMsg(sMsg)
{
	formErrorMsg = formErrorMsg + '- ' + sMsg + '\n';
	formError = formError + 1;	
}

function GetCheckedValue(p_rdbtn)
{
	var valReturn = '';

	if (document.getElementsByName)
	{
		var radiogroup = document.getElementsByName(p_rdbtn);
		if (radiogroup != null)
		{
			var length = radiogroup.length;
			if (length == undefined)
				valReturn = radiogroup.value
				
			for (var i=0; i<radiogroup.length ; i++)
			{
				if (radiogroup[i].checked)
					valReturn = radiogroup[i].value;
			}
		}
	}

	return valReturn;
}