function convertKeyPressToUpperCase()
{
	var k = event.keyCode & 223;
	if((k < 65) || (k > 90))
		k = 0;
	event.keyCode = k;
}

function ValidateControls()
{
	var n;
	for(n=0; n<document.all.length; n++)
	{
		if(!ValidateControl(document.all[n]))
			return;
	}
}

function ValidateControl(ctl)
{
	var dt = String(ctl.DATATYPE).toUpperCase();
	if((dt == "VARCHAR") && (!ctl.readonly))
		return ValdateVarchar(ctl);
	if(((dt == "INT")  || (dt == "DECIMAL")) && (!ctl.readonly))
		return ValdateNumber(ctl);
	if((dt == "DATETIME") && (!ctl.readonly))
		return ValdateDateTime(ctl);
	if((dt == "DATE") && (!ctl.readonly))
		return ValidateDate(ctl.value, ctl);
	if((dt == "TIME") && (!ctl.readonly))
		return ValidateTime(ctl.value, ctl);
	return true;
}

function ValdateDateTime(ctl)
{
	var d,t,s;

	s = String(ctl.value);
	// if the entered value contains a space
	// then it must be entered date<space>time
	i = s.indexOf(" ");
	if(i>0)
	{
		d = s.substr(0, i);
		t = rtrim(s.substr(i+1, s.length - i - 1));
	
		d = ValidateDate(d,ctl);
		if(!d)
			return false;
		if(t != "")
		{
			t = ValidateTime(t,ctl);
			if(!t)
				return false;
			t = " " + t;
		}
		ctl.value = d + t;
	}
	else	// otherwise it is only a date
	{
		if(s.length > 0)
		{
			d = ValidateDate(s,ctl);
			if(!d)
				return false;
			ctl.value = d;
		}
	}
	return true;
}

function ValidateDate(s,ctl)
{
	var month,day,year;
	var maxdays = new Array(0,31,28,31,30,31,30,31,31,30,31,30,31);
	if(s.indexOf("/")>0)
	{
		s = s.split("/");
		if(s.length == 3)
		{
			month = Number(s[0]);
			day = Number(s[1]);
			year = Number(s[2]);
			//alert('array:' + s.length);
		}
		else
			return DisplayWarning(ctl, "Invalid Date.  Please re-enter.");
	}
	else
	{
		if((s.length == 6) || (s.length == 8))
		{
			month = s.substr(0,2);
			day = s.substr(2,2);
			year = s.substr(4,4);
		}
		else
			return DisplayWarning(ctl, "Invalid Date.  Please re-enter.");
	}
	
	month = Number(month);
	day = Number(day);
	year = Number(year);
	
	if((year % 4) == 0)
		maxdays[2] = 29;

	if((month < 1) || (month > 12))
		return DisplayWarning(ctl, "Invalid Date.  Please re-enter.");

	if((day < 1) || (day > maxdays[month]))
		return DisplayWarning(ctl, "Invalid Date.  Please re-enter.");

	month = "0" + String(month);
	day = "0" + String(day);
	if(year < 50)
		year += 2000;
	else
		if(year < 100)
			year += 1900;
	year = String(year);
	month = month.substr(month.length - 2,2);
	day = day.substr(day.length - 2,2);
	year = year.substr(year.length - 4,4);
	ctl.value = month + '/' + day + '/' + year;
}

function ValidateTime(s,ctl)
{
	var hour,minute,second=0;
	var is_afternoon = false;
	s = s.toLowerCase();
	if(s.indexOf("p")>0)
	    is_afternoon = true;
    s = s.replace("a","");
    s = s.replace("m","");
    s = s.replace("p","");
    s = s.replace(" ","");
	
	if(s.indexOf(":")>0)
	{
		s = s.split(":");
		if(s.length == 3)
		{
			hour = Number(s[0]);
			minute = Number(s[1]);
			second = Number(s[2]);
			//alert('array:' + s.length);
		}
		else
		{
			if(s.length == 2)
			{
				hour = Number(s[0]);
				minute = Number(s[1]);
			}
			else
			{
				if(s.length == 1)
					hour = Number(s[0]);
				else
					return DisplayWarning(ctl, "Invalid Time.  Please re-enter.");	
			}
		}
	}
	else
	{
		if(s.length == 6)
		{
			hour = s.substr(0,2);
			minute = s.substr(2,2);
			second = s.substr(4,2);
		}
		else
		{
			if(s.length == 4)
			{
				hour = s.substr(0,2);
				minute = s.substr(2,2);
			}
			else
			{
				if(s.length == 2)
					hour = s.substr(0,2);
				else
					return DisplayWarning(ctl, "Invalid Time.  Please re-enter.");
			}
		}
	}
	
	hour = Number(hour);
	minute = Number(minute);
	second = Number(second);
	
	if(is_afternoon)
	    hour += 12;
	    
	if((hour < 0) || (hour > 23) || (minute < 0) || (minute > 59) || (second < 0) || (second > 59))
		return DisplayWarning(ctl, "Invalid Time.  Please re-enter.");
	
	hour = "0" + String(hour);
	minute = "0" + String(minute);
	second = "0" + String(second);
	hour = hour.substr(hour.length - 2,2);
	minute = minute.substr(minute.length - 2,2);
	second = second.substr(second.length - 2,2);
	ctl.value = hour + ':' + minute + ':' + second;
}

function ValdateVarchar(ctl)
{
	var l = Number(ctl.value.length);
	
	if(l > ctl.LENGTH)
		return DisplayWarning(ctl, "Value to large for field.  Please re-enter.");
	return true;
}

function ValdateNumber(ctl)
{
	var dt = String(ctl.getAttribute("DATATYPE")).toUpperCase();
	var t = ctl.value;
	var r = Number(ctl.getAttribute("RIGHTDIGITS"));
	var max = Number(ctl.getAttribute("FIELDLENGTH"));

	if(dt == "INT")
		max = 4;
	
	if(String(Number(t)) == "NaN")
		return DisplayWarning(ctl, "Invalid numeric format.  Please re-enter.");

	t = Round(StringToNumber(ctl.value), max, r);
	ctl.value = t;
	return true;
}

function ValidateDecimal(ctl)
{
	var t = ctl.value;
	var r = ctl.getAttribute("RIGHTDIGITS");
	var l = ctl.getAttribute("size");
	
	if(r == null)
		r = 2;
    else
        r = Number(r);
	
	if(l == null)
		l = 8;
    else
        l = Number(l);
        	
	if(String(Number(t)) == "NaN")
		return DisplayWarning(ctl, "Invalid numeric format.  Please re-enter.");

	t = Round(StringToNumber(ctl.value), l, r);
	ctl.value = t;
	return true;
}

function ValidatePhone(ctl)
{
    var s = ctl.value;
    s = s.replace(" ","");
    s = s.replace("(","");
    s = s.replace(")","");
    s = s.replace("-","");
    if(s.length == 10)
        ctl.value = "(" + s.substr(0,3) + ") " + s.substr(3,3) + "-" + s.substr(6,4);
    if(s.length == 7)
        ctl.value = s.substr(0,3) + "-" + s.substr(3,4);
}

function StripChars(ctl, chars)
{
    var x = ctl.value;
    var y;
    var chr;
    var n;
    for(n=0; n<chars.length; n++)
    {
        chr = chars.substr(n,1);
        while(x.indexOf(chr) >= 0)
        {
            y = x.indexOf(chr);
            x = x.substr(0,y) + x.substr(y+1);
        }
    }
    ctl.value = x;
    ctl.select();
}

function StripCharsForPhone(ctl)
{
    var s = ctl.value;
    s = s.replace(" ","");
    s = s.replace("(","");
    s = s.replace(")","");
    s = s.replace("-","");
    ctl.value = s;
    ctl.select();
}

function ValidateSSN(ctl)
{
    if(ctl == null) return;
    StripCharsForSSN(ctl);
    var ssn = ctl.value;
    if(ssn.length == 0) return;
    if(ssn.length != 9)
        return DisplayWarning(ctl, "The Social Security Number must be nine digits.  Please re-enter.");
    
    var n,i;
    for(n=0; n<ssn.length; n++)
    {
        i = ssn.substr(n,1);
        if((i < "0") || (i > "9"))
            return DisplayWarning(ctl, "The Social Security Number can only contain numbers.  Please re-enter.");
    }
    ssn = ssn.substr(0,3) + "-" + ssn.substr(3,2) + "-" + ssn.substr(5,4);
    
    ctl.value = ssn;
}
function SSNGotFocus(ctl)
{
    StripCharsForSSN(ctl);
    ctl.select();
}
function StripCharsForSSN(ctl)
{
    var s = ctl.value;
    while(s.indexOf('-')>=0)
        s = s.replace("-","");
    ctl.value = s;
}

function ValidateDate(ctl)
{
    var s = ctl.value;
	var month,day,year;
	var maxdays = new Array(0,31,28,31,30,31,30,31,31,30,31,30,31);

    if(s.length == 0) return;
 
	if(s.indexOf("/")>0)
	{
		s = s.split("/");
		if(s.length == 3)
		{
			month = Number(s[0]);
			day = Number(s[1]);
			year = Number(s[2]);
		}
		else
			return DisplayWarning(ctl, "Invalid Date.  Please re-enter.");
	}
	else
	{
		if((s.length == 6) || (s.length == 8))
		{
			month = s.substr(0,2);
			day = s.substr(2,2);
			year = s.substr(4,4);
		}
		else
		{
            return DisplayWarning(ctl, "Invalid Date.  Please re-enter.");
		}
	}
	
	month = Number(month);
	day = Number(day);
	year = Number(year);
	
	if((year % 4) == 0)
		maxdays[2] = 29;

	if((month < 1) || (month > 12))
		return DisplayWarning(ctl, "Invalid Date.  Please re-enter.");

	if((day < 1) || (day > maxdays[month]))
		return DisplayWarning(ctl, "Invalid Date.  Please re-enter.");

	if(year < 50)
		year += 2000;
	else
		if(year < 100)
			year += 1900;


    var dte = new Date(year,month-1,day);
    ctl.value = formatDateTime(dte,ctl.Format);
}

function ValidateTime(ctl)
{
    var s = ctl.value;
	var hour,minute=0,second=0;
	var is_afternoon = false;
	s = s.toLowerCase();
	if(s.indexOf("p")>0)
	    is_afternoon = true;
	    
    s = s.replace("a","");
    s = s.replace("m","");
    s = s.replace("p","");
    s = s.replace(" ","");
	
	if(s.indexOf(":")>0)
	{
		s = s.split(":");
		if(s.length == 3)
		{
			hour = Number(s[0]);
			minute = Number(s[1]);
			second = Number(s[2]);
			//alert('array:' + s.length);
		}
		else
		{
			if(s.length == 2)
			{
				hour = Number(s[0]);
				minute = Number(s[1]);
			}
			else
			{
				if(s.length == 1)
					hour = Number(s[0]);
				else
					return DisplayWarning(ctl, "Invalid Time.  Please re-enter.");	
			}
		}
	}
	else
	{
		if(s.length >= 6)
		{
			hour = s.substr(0,2);
			minute = s.substr(2,2);
			second = s.substr(4,2);
		}
		else
		{
			if(s.length >= 4)
			{
				hour = s.substr(0,2);
				minute = s.substr(2,2);
			}
			else
			{
				if(s.length >= 2)
					hour = s.substr(0,2);
				else
					return DisplayWarning(ctl, "Invalid Time.  Please re-enter.");
			}
		}
	}
	
	hour = Number(hour);
	minute = Number(minute);
	second = Number(second);
	
	if((is_afternoon) && (hour < 12))
	    hour += 12;
	    
	if((hour < 0) || (hour > 23) || (minute < 0) || (minute > 59) || (second < 0) || (second > 59))
		return DisplayWarning(ctl, "Invalid Time.  Please re-enter.");

    var dte = new Date(2005,1,1,hour,minute,second);
    ctl.value = formatDateTime(dte,ctl.Format);
}

function getTwoDigitNumber(n)
{
	var x = "0" + String(n);
	return x.substr(x.length - 2,2)
}
function getFourDigitNumber(n)
{
	var x = "0000" + String(n);
	return x.substr(x.length - 4,4)
}
function formatDateTime(dte, fmt)
{
    var h;

    if(fmt == null) fmt = "MM/dd/yyyy";

    fmt = fmt.replace('MM',getTwoDigitNumber(dte.getMonth()+1));
    fmt = fmt.replace('M',dte.getMonth()+1);
    fmt = fmt.replace('dd',getTwoDigitNumber(dte.getDate()));
    fmt = fmt.replace('d',dte.getDate());
    fmt = fmt.replace('yyyy',getFourDigitNumber(dte.getFullYear()));
    fmt = fmt.replace('y',dte.getFullYear());

    h = dte.getHours() % 12;
    if(h == 0) h = 12;
    if((fmt.indexOf("t")>=0) || (fmt.indexOf("T")>=0))
        fmt = fmt.replace('hh',getTwoDigitNumber( h ));
    else
        fmt = fmt.replace('hh',getTwoDigitNumber(dte.getHours()));
    fmt = fmt.replace('h',dte.getHours());
    fmt = fmt.replace('mm',getTwoDigitNumber(dte.getMinutes()));
    fmt = fmt.replace('m',dte.getMinutes());
    fmt = fmt.replace('ss',getTwoDigitNumber(dte.getSeconds()));
    fmt = fmt.replace('s',dte.getSeconds());

    if(dte.getHours()>12)
    {
        fmt = fmt.replace('tt',"PM");
        fmt = fmt.replace('t',"P");
    }
    else
    {
        fmt = fmt.replace('tt',"AM");
        fmt = fmt.replace('t',"A");
    }
    return fmt;
}
var ctlBeingValidated = null;
function SetFocusBackToControl()
{
    if(ctlBeingValidated != null)
    {
        ctlBeingValidated.select();
        ctlBeingValidated.focus();
    }
}
function DisplayWarning(ctl,w)
{
    ctlBeingValidated = ctl;
    Alert(w, 200, 500, "close_button.gif=SetFocusBackToControl()");
    return false;
}
// n = number to round
// s = size of field (999999.00 = 8 digits)
// m = precision (digits to the right of the decimal)
// returns String containing formatted number
function Round(n, s, m)
{
	m = Number(m)
	var x,y,p = Math.pow(10,m);
	x = String(Math.round(n*p)/p);
	//alert('n=' + n + '  p=' + p + '  x=' + (n*p));
	y = x.lastIndexOf(".");
	if(y == -1)
		x += ".";
	x += Repeat("0", m);
	y = x.lastIndexOf(".");
		
	if(m == 0)
	{
		x = x.substr(0, y);
		y = Math.min(x.length, s);
	}
	else
	{
		x = x.substr(0, y + m + 1);
		y = x.length;
	}
	x = x.substr(Math.max(y-s-1,0),y);
	if(x.indexOf('.') >= 0)
	{
	    var arr = x.split('.');
	    x = "." + arr[1];
	    var str = arr[0];
	    while(str.length > 0)
	    {
	        y = str.length - 3;
	        if(y < 0) y = 0;
	        x = str.substr(y,3) + x;
	        str = str.substr(0, y);
	        if(str.length > 0)
	            x = "," + x;
	    }
	}
	return x;
}

function Repeat(c, m)
{
	var x = "", y;
	for(y=0; y<m; y++)
		x += c;
	return x;
}

function StringToNumber(n)
{
	var x = "", y, c;
	n = String(n);
	for(y=0; y<n.length; y++)
	{
		c = n.charAt(y);
		if(((c >= "0") && (c <= "9")) || (c == "-") || (c == "."))
			x += c;
	}
	return Number(x);
}
function rtrim(s)
{
	var n;
	for(n=s.length; n>0; n--)
	{
		if(s[n] != " ")
			return s.substr(0,n);
	}
	return s;
}

function ValidateEmailAddress(ctl)
{
    if(!isEmailAddressValid(ctl))
        if(rtrim(ctl.value) != "")
            DisplayWarning(ctl, "Invalid email address.  Please re-enter.");
}
/*
** This function performs syntactic validation of the email address.
** The return value is TRUE for valid syntax, otherwise FALSE.
*/
function isEmailAddressValid(ctl)
{
    var email = ctl.value;
    var parts;
    var boxname;
    var domain;
    var n;
    var part;
    var chr;

    // remove leading spaces
    while((email.length > 0) && (email.substr(0, 1) == ' '))
        email = email.substr(1, email.length);
    // remove trailing spaces
    while((email.length > 0) && (email.substr(email.length-1, 1) == ' '))
        email = email.substr(0, email.length-1);

    ctl.value = email;

    if (email.length == 0)
        return false;

    parts = email.split('@')
    if(parts.length != 2)
        return false;

    boxname = parts[0];
    chr = boxname.substr(boxname.length-1,1).toUpperCase();
    if((chr < "0" || chr > "9") && (chr < "A" || chr > "Z"))
        return false;


    domain = parts[1];
    if(domain.length == 0)
        return false;

    parts = domain.split('.');
    for(n=0; n<parts.length; n++)
    {
        part = parts[n];
        if(part.length == 0)
            return false;
    }

    for(n=0; n<domain.length; n++)
    {
        chr = domain.substr(n,1).toUpperCase();
        if((chr < "0" || chr > "9") && (chr < "A" || chr > "Z") && (chr != "."))
            return false;
    }
    return true;
}

