function makeArray() 
{
  var args = makeArray.arguments;
  for (var i = 0; i < args.length; i++) {
    this[i] = args[i];
  }
  this.length = args.length;
}

function fixDate(dt_date) 
{
  var dt_base = new Date(0);
  var dt_skew = dt_base.getTime();
  if (dt_skew > 0)
    dt_date.setTime(dt_date.getTime() - dt_skew);
}

function sGetString(dt_date) 
{
	var i_num = dt_date.getYear();
	var i_year = i_num + ((i_num < 70) ? 2000 : 0);
	i_year = i_year + ((i_year < 100) ? 1900 : 0);
	i_year = i_year + ((i_year < 1900) ? 1900 : 0);
	var i_month = dt_date.getMonth()+1;
	var s_month = "0" + i_month;
	s_month = s_month.substr(s_month.length-2,2);
	var i_day = dt_date.getDate();
	var s_day = "0" + i_day;
	s_day = s_day.substr(s_day.length-2,2);
  return  s_month + "/" + s_day + "/" + i_year;
}

function sLtrim(s_val) 
{
	var i_num = 0;
	while ((i_num < s_val.length) && (s_val.substr(i_num, 1) == " ")) {
		i_num++;
	}
	return s_val.substr(i_num);
}

function sRtrim(s_val) 
{
	var i_num = s_val.length;
	while ((i_num > 0) && (s_val.substr(i_num - 1, 1) == " ")) {
		i_num--;
	}
	return s_val.substr(0, i_num);
}

function sTrim(s_val) 
{
	return (sRtrim(sLtrim(s_val)));
}

function sMsgUserFileName(o_fld, s_fld_title, b_update) 
{
	var s_val = new String(o_fld.value);
	var s_new = sTrim(s_val);
	var reg1=/[A-Za-z0-9-_.]+/;
	if (s_new == "")
		return ("\n - " + s_fld_title + " cannot be blank.");
	else {
		if ('*' + s_val.match(reg1) + '*' != '*' + s_val + '*')
			return ("\n - " + s_fld_title + " can only contain the following characters (A-Z, 0-9, -, _, .)");
		else
			if (b_update == true)
				o_fld.value = s_new;
	}
	return "";
}

function sMsgStringExists(o_fld, s_fld_title, b_update) 
{
	var s_val = new String(o_fld.value);
	var s_new = sTrim(s_val);
	if (s_new == "")
		return ("\n - " + s_fld_title + " cannot be blank.");
	else if (b_update == true)
		o_fld.value = s_new;
	return "";
}

function sMsgEmailValid(o_fld, s_fld_title, b_update) {
	var s_val = new String(o_fld.value);
	var s_new = sTrim(s_val);
	if (s_new == "")
		return ("\n - " + s_fld_title + " cannot be blank.");
	var i_pos = s_new.indexOf("@")
	if (i_pos > 0) {
		if (i_pos == s_new.lastIndexOf("@")) {
			if (i_pos < s_new.lastIndexOf(".")) {
				if (s_new.lastIndexOf(".") + 2 < s_new.length) {
					if (s_new.indexOf(" ") == -1) {
						if (b_update == true)
							o_fld.value = s_new;
						return "";
					}
				}
			}
		}
	}
	return ("\n - " + s_fld_title + " is invalid.");
}

function sMsgListSelected(o_fld, s_fld_title, b_allow_zero) 
{
	var f_val = parseFloat(o_fld.selectedIndex);
	if (isNaN(f_val))
		return ("\n - " + s_fld_title + " must be selected.");
	else if ((b_allow_zero == false) && (f_val < 1))
		return ("\n - " + s_fld_title + " must be selected.");
	else if (f_val < 0)
		return ("\n - " + s_fld_title + " must be selected.");
	return "";
}

function sMsgDateValid(o_fld, s_fld_title, b_update) 
{
	var s_val = new String(o_fld.value);
	var s_new = sTrim(s_val);
	if (s_new == "")
		return ("\n - " + s_fld_title + " cannot be blank.");
	var dt_date_val = new Date(s_new);
	if (isNaN(dt_date_val))
		return ("\n - " + s_fld_title + " is invalid.");
	else if (b_update == true) {
		fixDate(dt_date_val);
		o_fld.value = sGetString(dt_date_val);
	}
	return "";
}

function sMsgTimeValid(o_fld, s_fld_title, b_update) 
{
		var dt_time_val, dToday, dt_date_val, s;
		dToday = new Date();
		dt_time_val = new String(o_fld.value);
		if (dt_time_val == "")
				return ("\n - " + s_fld_title + " cannot be blank.");
		else {
				s = (dToday.getMonth() + 1) + "/";
				s += dToday.getDate() + "/";
				s += dToday.getYear() + " ";
				s += dt_time_val;
				dt_date_val = new Date(s);
				if (isNaN(dt_date_val))  
						return ("\n - " + s_fld_title + " is invalid.");
				else if (b_update == true) {
						o_fld.value = dt_time_val;
				}
		}
		return "";
}
  
function sMsgFloatValid(o_fld, s_fld_title, b_update) 
{
	var s_val = new String(o_fld.value);
	var s_new = sTrim(s_val);
	if (s_new == "")
		return ("\n - " + s_fld_title + " cannot be blank.");
	var f_val = parseFloat(s_new);
	if (isNaN(f_val))
		return ("\n - " + s_fld_title + " is invalid.");
	else if (b_update == true) {	
		o_fld.value = f_val;
	}
	return "";
}

function sMsgIntegerValid(o_fld, s_fld_title, b_update) 
{
	var s_val = new String(o_fld.value);
	var s_new = sTrim(s_val);
	if (s_new == "")
		return ("\n - " + s_fld_title + " cannot be blank.");
	var i_val = parseInt(s_new, 10);
	if (isNaN(i_val))
		return ("\n - " + s_fld_title + " is invalid.");
	else if (b_update == true) {	
		o_fld.value = i_val;
	}
	return "";
}

function sMsgIntegerPositive(o_fld, s_fld_title, b_update) 
{
	var s_val = new String(o_fld.value);
	var s_new = sTrim(s_val);
	if (s_new == "")
		return ("\n - " + s_fld_title + " cannot be blank.");
	var i_val = parseInt(s_new, 10);
	if (isNaN(i_val)) {
		return ("\n - " + s_fld_title + " is invalid.");
	} else if (i_val < 0) {
		return ("\n - " + s_fld_title + " must be >= 0.");
	} else if (b_update == true) {
		o_fld.value = i_val;
	}
	return "";
}
function sMsgIntegerBetween(o_fld, s_fld_title, i_low_val, i_high_val, b_update) 
{
	var s_val = new String(o_fld.value);
	var s_new = sTrim(s_val);
	if (s_new == "")
		return ("\n - " + s_fld_title + " cannot be blank.");
	var i_val = parseInt(s_new, 10);
	if (isNaN(i_val)) {
		return ("\n - " + s_fld_title + " is invalid.");
	} else if ((i_val < i_low_val) || (i_val > i_high_val)) {
		return ("\n - " + s_fld_title + " must be between "+i_low_val.toString(10)+" and "+i_high_val.toString(10)+".");
	} else if (b_update == true) {
		o_fld.value = i_val;
	}
	return "";
}

function sMsgStringLength(o_fld, s_fld_title, i_low_len, i_high_len, b_update) 
{
	var s_val = new String(o_fld.value);
	var s_new = sTrim(s_val);
	if ((s_new.length < i_low_len) || (s_new.length > i_high_len))
		return ("\n - " + s_fld_title + " must be at between "+i_low_len.toString(10)+" and "+i_high_len.toString(10)+" characters in length.");
	else if (b_update == true)
		o_fld.value = s_new;
	return "";
}


function sMsgMoneyValid(o_fld, s_fld_title, b_update) 
{
	var s_val = new String(o_fld.value);
	var s_new = sTrim(s_val);
	if (s_new == "")
		return ("\n - " + s_fld_title + " cannot be blank.");

	var f_val = parseFloat(o_fld.value);
	var i_pos;
	if (isNaN(f_val))
		return ("\n - " + s_fld_title + " is invalid.");
	else if (b_update == true) {	
		f_val = f_val * 100;
		f_val = Math.round(f_val);
		f_val = f_val / 100;
		s_val = f_val.toString(10);
		i_pos = s_val.lastIndexOf(".");
		if (i_pos < 0) {
			s_val = s_val + ".00"
		} else {
			switch (s_val.length - i_pos) {
				case 3:
					break;
				case 2:
					s_val = s_val + "0"
					break;
				case 1:
					s_val = s_val + "00"
					break;
				default:
					s_val = s_val + ".00"
					break;
			}
		}
		o_fld.value = s_val;
	}
	return "";
}

function sMsgRadioChecked(o_fld, s_fld_title, b_update)
{
	if (o_fld.length > 0) {
		for (var i_cnt=0; i_cnt < o_fld.length; i_cnt++)
		{
			if (o_fld[i_cnt].checked)
				return ""; 
		}
	} else {
		if (o_fld.checked) {
			return ""; 
		}
	}
	return ("\n - " + s_fld_title + " must be selected.");
}

function sPasswordCheck(o_fld, s_password, s_password_confirm, i_min_size, b_force, s_err_msg)
{
	var s_msg = "";
	var s_trim = sTrim(s_password);
	var s_trim_confirm = sTrim(s_password_confirm);
	var i_len = s_trim.length;
	var s_min_size = i_min_size.toString(10);

	if (s_trim != s_trim_confirm)
		s_msg = "\n - Password and Confirmation do not match.";
	else if ((i_len < i_min_size) && (b_force == true))
		s_msg = "\n - Password must be at least " + s_min_size + " non-blank character(s).";
	else if ((i_len < i_min_size) && (i_len > 0))
		s_msg = "\n - Password must be at least " + s_min_size + " non-blank character(s).";

	if ((s_msg != "") && (s_err_msg == "")) {
			s_msg = o_fld.name + "|" + s_msg;
	}
	return (s_err_msg + s_msg);
}

function sMsgErrCheck(o_fld, s_fld_title, b_update, s_err_msg, s_data_type, v_min, v_max) 
{

	var s_msg = "";
		
	switch(s_data_type) {
		case "S":
			s_msg = sMsgStringExists(o_fld, s_fld_title, b_update);
			break;
		case "D":			
			s_msg = sMsgDateValid(o_fld, s_fld_title, b_update);
			break;
		case "F":			
			s_msg = sMsgFloatValid(o_fld, s_fld_title, b_update);
			break;
		case "I":			
			s_msg = sMsgIntegerValid(o_fld, s_fld_title, b_update);
			break;
		case "P":			
			s_msg = sMsgIntegerPositive(o_fld, s_fld_title, b_update);
			break;
		case "M":			
			s_msg = sMsgMoneyValid(o_fld, s_fld_title, b_update);
			break;
		case "T":
			s_msg = sMsgTimeValid(o_fld, s_fld_title, b_update);
			break;	
		case "L":
			s_msg = sMsgListSelected(o_fld, s_fld_title, b_update);
			break;	
		case "E":
			s_msg = sMsgEmailValid(o_fld, s_fld_title, b_update);
			break;
		case "R":
			s_msg = sMsgRadioChecked(o_fld, s_fld_title, b_update);
			break;	
		case "U":
			s_msg = sMsgUserFileName(o_fld, s_fld_title, b_update);
			break;
		case "BI":
			s_msg = sMsgIntegerBetween(o_fld, s_fld_title, v_min, v_max, b_update);
			break;
		case "BS":
			s_msg = sMsgStringLength(o_fld, s_fld_title, v_min, v_max, b_update);
			break;
	}
	if ((s_msg != "") && (s_err_msg == "")) {
		if ((s_data_type == "R") && (o_fld.length > 0))
			s_msg = o_fld[0].name + "[0]|" + s_msg;
		else
			s_msg = o_fld.name + "|" + s_msg;
	}

	return (s_err_msg + s_msg);
}
