// Common validation functions:

function IsBlank(str)
{
	for (i=0; i < str.length; i++)
		{
			if (str.charAt(i) != ' ')
				return false;
		}
	return true;
}

function IsCurrency(str)
{
    var recur = /\$*\s*\d+[\s\.]*\d*/;
    if (str.length==0) {
        return true;
        }
       
	if (!recur.test(str))
	    return false;
	return true;
}

function IsDate(strField)
{
	var bRet;
	switch(gLocale)
	{
		case 'US':
			bRet = IsDateUS(strField);
			break;
		case 'NZ':
			bRet = IsDateNZ(strField);
			break;
		default:
			bRet = IsDateUS(strField);
			break;
	}
	return bRet;
}

function IsDateUS(strField) 
{
    var strDate, strNewDate, strTempDate, strYear;
    var remmmddyy = /(\D{3})[\W\s]*(\d{1,2})[\W\s]+(\d{2,5})/;
    var remmddyy = /(\d{1,2})[\W\s]+(\d{1,2})[\W\s]+(\d{2,5})/;
    var reddmmmyy = /(\d{1,2})[\W\s]*(\w{3})[\W\s]*(\d{2,5})/;
    var remmdd = /(\d{1,2})[\W\s]+(\d{1,2})$/;
    var re4 = /\d+[\W\s]+\d+[\W\s]+\d+[\W\s]+\d+/;
    var re3 = /\d+[\W\s]+\d+[\W\s]+\d+/;
    var reArray;

	strDate = strField.value;
	if (IsBlank(strDate))
	    {if (strDate.length > 0)
	        strField.value = "";
	    return true;
	    }
	if (re4.test(strDate) || strDate.length < 3)
	    return false;
	strDate = strDate.toUpperCase();
	//if m/d/yy format
	if (remmddyy.test(strDate))
	    {
	    reArray = remmddyy.exec(strDate);
	    strDate = reArray[1] + "/" + reArray[2] + "/" + reArray[3];
	    }
	//if M d, yy format
	else if (remmmddyy.test(strDate))
	    {//convert to mm/dd/yy
	    reArray = remmmddyy.exec(strDate);
	    if ((reArray[3].length < 3) && (reArray[3] < 50))
	       reArray[3] = "20" + reArray[3];
	    strTempDate = new Date(reArray[1] + " 1, 2000");
	    strDate = (strTempDate.getMonth()+1) + "/" + reArray[2] + "/" + reArray[3];
	    }
	//if d M yy format
	else if (reddmmmyy.test(strDate))
	    {//convert to mm/dd/yy
	    reArray = reddmmmyy.exec(strDate);
	    if ((reArray[3].length < 3) && (reArray[3] < 50))
	       reArray[3] = "20" + reArray[3];
	    strTempDate = new Date(reArray[2] + " 1, 2000");
	    strDate = (strTempDate.getMonth()+1) + "/" + reArray[1] + "/" + reArray[3];
	    }
	else if (strDate == "TODAY")
	    {
	    strTempDate = new Date();
	    strDate = (strTempDate.getMonth()+1) + "/" + (strTempDate.getDate()) + "/" + strTempDate.getFullYear();
	    }
	else if (strDate == "TOMORROW")
	    {
	    strTempDate = new Date();
	    strDate = (strTempDate.getMonth()+1) + "/" + (strTempDate.getDate()+1) + "/" + strTempDate.getFullYear();
	    }
	else if (strDate == "YESTERDAY")
	    {
	    strTempDate = new Date();
	    strDate = (strTempDate.getMonth()+1) + "/" + (strTempDate.getDate()-1) + "/" + strTempDate.getFullYear();
	    }


    if (remmddyy.test(strDate))
        {//correct for Y2K
        reArray = remmddyy.exec(strDate);
        if ((reArray[1] > 12) || (reArray[1] < 1))
            return false;
        if (reArray[3] < 50)
            strDate = reArray[1] + "/" + reArray[2] + "/20" + reArray[3];
        }     
	strNewDate = new Date(strDate);
	if (isNaN(strNewDate))
	    return false;
    //if year < 1900 or > 9999 reject --????
    strYear = strNewDate.getFullYear();
	if ((strYear < 1900) || (strYear > 9999))
            return false;

    //if the month got converted by date object due to bad day input, reject it
	if (!remmddyy.test(strDate))
	    return false;
	reArray = remmddyy.exec(strDate);
	strTempDate = new Date(reArray[1] + "/1/2000");
	if (strNewDate.getMonth() != strTempDate.getMonth())
		return false;
    //this next step strips the values down
    strDate = (strNewDate.getMonth()+1) + "/" + strNewDate.getDate() + "/" + strNewDate.getFullYear();
	if (strDate != strField.value)
	    strField.value = strDate;
    return true;
}

function IsDateNZ(strField) 
{
    var strDate, strNewDate, strTempDate, strYear;
    var remmmddyy = /(\D{3})[\W\s]*(\d{1,2})[\W\s]+(\d{2,5})/;
    var reddmmmyy = /(\d{1,2})[\W\s]*(\w{3})[\W\s]*(\d{2,5})/;
    var reddmmyy = /(\d{1,2})[\W\s]+(\d{1,2})[\W\s]+(\d{2,5})/;
    var reddmm = /(\d{1,2})[\W\s]+(\d{1,2})$/;
    var re4 = /\d+[\W\s]+\d+[\W\s]+\d+[\W\s]+\d+/;
    var reArray;

	strDate = strField.value;
	if (IsBlank(strDate))
	    {if (strDate.length > 0)
	        strField.value = "";
	    return true;
	    }
	if (re4.test(strDate) || strDate.length < 3)
	    return false;
	strDate = strDate.toUpperCase();
	//if d/m/yy format
	if (reddmmyy.test(strDate))
	    {
	    reArray = reddmmyy.exec(strDate);
	    strDate = reArray[1] + "/" + reArray[2] + "/" + reArray[3];
	    }
	//if M d, yy format
	else if (remmmddyy.test(strDate))
	    {//convert to dd/mm/yy
	    reArray = remmmddyy.exec(strDate);
	    if ((reArray[3].length < 3) && (reArray[3] < 50))
	       reArray[3] = "20" + reArray[3];
	    strTempDate = new Date("1 " + reArray[2] + ", 2000");
	    strDate = reArray[1] + "/" + (strTempDate.getMonth()+1) + "/" + reArray[3];
	    }
	//if d M yy format
	else if (reddmmmyy.test(strDate))
	    {//convert to mm/dd/yy
	    reArray = reddmmmyy.exec(strDate);
	    if ((reArray[3].length < 3) && (reArray[3] < 50))
	       reArray[3] = "20" + reArray[3];
	    strTempDate = new Date(reArray[2] + " 1, 2000");
	    strDate = reArray[1] + "/" + (strTempDate.getMonth()+1) + "/" + reArray[3];
	    }
	else if (strDate == "TODAY")
	    {
	    strTempDate = new Date();
	    strDate =  (strTempDate.getDate()) + "/" + (strTempDate.getMonth()+1) + "/" + strTempDate.getFullYear();
	    }
	else if (strDate == "TOMORROW")
	    {
	    strTempDate = new Date();
	    strDate = (strTempDate.getDate()+1) + "/" + (strTempDate.getMonth()+1) + "/" + strTempDate.getFullYear();
	    }
	else if (strDate == "YESTERDAY")
	    {
	    strTempDate = new Date();
	    strDate = (strTempDate.getDate()-1) + "/" + (strTempDate.getMonth()+1) + "/" + strTempDate.getFullYear();
	    }


    if (reddmmyy.test(strDate))
        {//correct for Y2K
        reArray = reddmmyy.exec(strDate);
        if ((reArray[2] > 12) || (reArray[2] < 1))
            return false;
        if (reArray[3] < 50)
            strDate = reArray[1] + "/" + reArray[2] + "/20" + reArray[3];
        }
    else
		return false;

	strNewDate = new Date(reArray[3],reArray[2]-1,reArray[1]);
	if (isNaN(strNewDate))
	    return false;
    //if year < 1900 or > 9999 reject --????
    strYear = strNewDate.getFullYear();
	if ((strYear < 1900) || (strYear > 9999))
            return false;

    //if the month got converted by date object due to bad day input, reject it
	if (!reddmmyy.test(strDate))
	    return false;
	reArray = reddmmyy.exec(strDate);
	strTempDate = new Date(2000, reArray[2] - 1, 1);
	if (strNewDate.getMonth() != strTempDate.getMonth())
		return false;
    //this next step strips the values down
    strDate = (strNewDate.getDate()) + "/" + (strNewDate.getMonth() + 1) + "/" + strNewDate.getFullYear();
	if (strDate != strField.value)
	    strField.value = strDate;
    return true;
}


function IsNumber(str)
{
	if (!IsBlank(str)) {
	    if (!Number(str)) {
		    if (str == "0")
		        return true;
	    	return false;
	    	}
	    for (i=0;i < str.length; i++) {
			if (str.charAt(i) == '.')
				return false;
		}	    
	}
	return true;
}

function IsFloat(str)
{
	if (!IsBlank(str) && !Number(str)) {
		if (str == "0")
		    return true;
		return false;
	}
	return true;
}
function IsValid(str,iMax)
{
	if (str.length > iMax)
		return false;
	return true;
}

function cvtTime (str, b24Hour) 
{
   var re = /\s*(\d{1,2})[: ]*(\d{0,2})\s*([AP]*[M]*)/;
   var reneg = /[^\dAMP:\s]/;
   var re3d = /\d{3}/;
   var re4d = /\d{4}/;
   var re3inputs = /\d+[: ]+\d+[: ]+\d/;
   var OK;
   var reArray;
   var strOut;
   var iHr;
   
   str = str.toUpperCase();
   if (reneg.test(str))
       return false;
   if ((re3d.test(str) && !re4d.test(str)) || re3inputs.test(str))
       return false; //3 digit number
   if (!re.test(str))
       return false;
   reArray = re.exec(str);
   if ((parseInt(reArray[1]) > 23) || (parseInt(reArray[2]) > 59))
       return false; //invalid inputs
   if (b24Hour)
       {
       //convert hr if pm
       if (reArray[3] == "PM") 
           {
           if (reArray[1] < 12)
               {//add 12
				while (reArray[1].charAt(0) == '0')
					reArray[1] = reArray[1].substring(1, reArray[1].length);
					iHr = parseInt(reArray[1]);
					iHr = iHr + 12;
					reArray[1] = iHr;
				}
           }
       else if (reArray[3] == "AM")
           {
           if (reArray[1] > 12)//conflict between am tag & value
               return false;
           if (reArray[1] == 12)//convert to 00
               reArray[1] = "00";           
           }
       else if (reArray[3] != "")//= a or p or m
           return false;
       if (reArray[1].length == 1)
           reArray[1] = "0" + reArray[1];
       reArray[3] = "";
       }
   else //not 24 hr
       {
       if (reArray[3] == "AM") //no tag
           {
           if (reArray[1] > 12)//conflict between am tag & value
               return false;
           }
       else if ((reArray[3] == "") || (reArray[3] == "PM"))
           {
           if (reArray[1] > 12)//-12
               {
               iHr = parseInt(reArray[1]);
               iHr = iHr - 12;
               reArray[1] = iHr;
               }
           }
       else //= a or p or m
           return false;
       if (reArray[3].length == 0)
           reArray[3] = "AM";
       }
   //pad minutes
   if (reArray[2].length == 0)
       reArray[2] = "00";
   if (reArray[2].length == 1)
       reArray[2] = "0" + reArray[2];
   strOut = reArray[1] + ":" + reArray[2];
   if (!b24Hour)
       strOut = strOut + " " + reArray[3];
   
   return strOut;
}

function cvtTimeSpan (str1, str2) 
{
   var re = /(\d{2}):(\d{2})/;
   var reArray1, reArray2;
   var str1cvt, str2cvt;
   var strHrs, strMins;
   
   str1cvt = cvtTime(str1,true); //converted to 24 hr format 
   str2cvt = cvtTime(str2,true); //"
   if (!str1cvt || !str2cvt)
       return false;
   reArray1 = re.exec(str1cvt);
   reArray2 = re.exec(str2cvt);
   if (reArray2[1] < reArray1[1])
       return false; //negative time span
   if (reArray2[2] < reArray1[2])
       {
       reArray2[1] = reArray2[1] - 1;
       reArray2[2] = reArray2[2] + 60;
       }
   strHrs = reArray2[1] - reArray1[1];
   strMins = reArray2[2] - reArray1[2];
   if (strMins.length = 1)
       strMins = "0" + strMins;
   
   return strHrs + ":" + strMins;
}

function IsTime (strField, b24Hour) 
{
    var strTime, strNewTime;
	strTime = strField.value;
    if (!IsBlank(strTime))
    {
		strNewTime = cvtTime(strTime,b24Hour);
		if (!strNewTime)
			return false;
		if (strNewTime != strTime)
			strField.value = strNewTime;
	}
    return true;
}

function IsTimeSpan (strField) 
{
    var strTime, strNewTime;
	strTime = strField.value;
    if (!IsBlank(strTime))
    {
		strNewTime=cvtTime(strTime,true);
		if (!strNewTime)
		    return false;
		if (strNewTime != strTime)
			strField.value = strNewTime;
	}
    return true;
}

function ShowTab(eTab)
{
	var eTxt;
	if (eOld != null)
	{
		eOld.className = 'tab-button';
		eTxt = eval("txt" + eOld.id);
		eTxt.style.display = 'none';
	}
	eTab.className = 'tab-button3';
	eTxt = eval("txt" + eTab.id);
	eTxt.style.display = '';
	eOld = eTab;
}
