function Annotate(ctl)
{
	var dt = new Date();
	if((ctl.value != "") && (ctl.value.substr(ctl.value.length-1,1) != "\n"))
		ctl.value = ctl.value + "\n";
	ctl.value = ctl.value + "<----" + document.all("user").value + " - " + dt + "---->\n";
	
	var rng = ctl.createTextRange();
	rng.collapse(false);
	rng.select();
	ctl.focus();
}
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 == false))
		return ValdateVarchar(ctl);
	if(((dt == "INT")  || (dt == "DECIMAL")) && (ctl.readonly == false))
		return ValdateNumber(ctl);
	if((dt == "DATETIME") && (ctl.readonly == false))
		return ValdateDateTime(ctl);
	if((dt == "DATE") && (ctl.readonly == false))
		return ValidateDate(ctl.value, ctl);
	if((dt == "TIME") && (ctl.readonly == false))
		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 == false)
			return false;
		if(t != "")
		{
			t = ValidateTime(t,ctl);
			if(t == false)
				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 == false)
				return false;
			ctl.value = d;
		}
	}
	return true;
}

function ValidateDate(s,ctl)
{
	var month,day,year,hour,minute,second;
	var maxdays = new Array(0,31,28,31,30,31,30,31,31,30,31,30,31);
	alert('gotcha');
	debugger;
	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 t = ctl.value;
	var max = Number(ctl.FIELDLENGTH);
	var l = Number(ctl.value.length);
	
	//message_ctl.innerHTML = "l=" + l + "  max=" + max;
	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"));
	var l = Number(ctl.value.length);

	if(dt == "INT")
		max = 4;
	
	//message_ctl.innerHTML = "t=" + t + "*";
	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 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,hour,minute,second;
	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;
}

function DisplayWarning(ctl,w)
{
	ctl.select();
	ctl.focus();
	alert(w);
	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 xRound(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);
	return x;
}
// 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 RollOverCell(c)
{
	c.style.backgroundColor = 'silver';
	c.style.color = 'black';
}

function RollOutCell(c,fc)
{
	c.style.backgroundColor = 'white';
	c.style.color = fc;
}

function SetDefaultDate()
{
	window.returnValue = get_date_picker.txtOriginalDate.value;
}

function SelectDate(d)
{
	window.returnValue = d;
	parent.window.close();
}

function rtrim(s)
{
	var n;
	for(n=s.length; n>0; n--)
	{
		if(s[n] != " ")
			return s.substr(0,n);
	}
	return s;
}

function highlight_row(elem)
{
	var row;
	while(elem != null)
	{
		if(elem.tagName == "TR")
		{
			row = elem;
			break;
		}
		elem = elem.parentElement;
	}
	
	if(row != null)
	{
		var n;
		unhighlight_row(row);

		for(n=0; n<row.cells.length; n++)
			row.cells[n].style.color = 'blue';
	}
}

function unhighlight_row(elem)
{
	var ix,r,n;
	for(ix=0; ix<document.all.length; ix++)
	{
		if(document.all[ix].tagName == "TD")
			document.all[ix].style.color = 'black';
	}
}

function DeleteCookie(sName)
{
	var aCookie = GetCookie(sName);
	var date = new Date(1999, 1, 1);
	document.cookie = sName + "=; expires=" + date.toGMTString();
}

function GetCookie(sName)
{
	var aCookie = document.cookie.split("; ");
	for (var i=0; i < aCookie.length; i++)
	{
		var aCrumb = aCookie[i].split("=");
		if (sName == aCrumb[0]) 
			return unescape(aCrumb[1]);
	}
	return null;
}

function SetCookie(sName, sValue)
{
	var d = new Date(2010, 12, 31);
	document.cookie = sName + "=" + escape(sValue) + "; expires=" + d.toGMTString();
}

function GetSelectedRadioButton(ctl)
{
    var base_id = ctl.id;
    var n = 0;
    var ctl;
    while(true)
    {
        ctl = document.all(base_id + "_" + n).value;
        if(ctl == null) break;
        if(ctl.checked) return ctl;
        n++;
    }
    return null;
}

function SetFocusOnNumber(ctl)
{
    var x = ctl.value;
    var y;
    while(x.indexOf(',') >= 0)
    {
        y = x.indexOf(',');
        x = x.substr(0,y) + x.substr(y+1);
    }
    ctl.value = x;
	ctl.select();
}