//-----
function c9x4_count_text_chars(field, countfield, maxlimit) 
{	
	if(field.value.length > maxlimit)
	{
		field.value = field.value.substring(0, maxlimit);
		countfield.value = '0 of ' + maxlimit + ' characters left';
		return false;
	}
	else 
	{
		countfield.value = (maxlimit - field.value.length) + ' of ' + maxlimit + ' characters left';
		return true;
	}
}
//-----
function c9x4_force_numeric_text(fld, e) 
{
  var key;
  var keychar;

  if(window.event)
    key = window.event.keyCode;
  else if(e)
    key = e.which;
  else
    return true;
	
  keychar = String.fromCharCode(key);

  if((key==null) || (key==0) || (key==8) || (key==9) || (key==13) || (key==27) )
	return true;
  else if((("0123456789").indexOf(keychar) > -1))
    return true;
  else
    return false;
}
//-----
//-----
function c9x4_is_a_checkbox_checked(fld)
{
	var l = fld.length;
	
	if(l == undefined)
		return fld.checked;
	else
	{
		for(var i = 0; i < l; i++)
		{
			if(fld[i].checked)
				return true;
		}
	}

	return false;
}
//-----
function c9x4_is_numeric(value)
{
	if(c9x4_empty(value))
		return false;
		
	value = c9x4_replace(value, "$");
	
	value = c9x4_replace(value, ",");		

	var valid = "0123456789";
	
	var period_count = 0;
	
	var start = 0;
	
	if(value.charAt(0) == "-")
		start = 1;
	
	var ch = "";
	
	for(var i = start; i < value.length; i++)
	{
		ch = value.charAt(i);
		
		if(ch == '.')
		{
			period_count++;
			
			if(period_count > 1)
				return false;
		}
		else if(valid.indexOf(ch) < 0)
			return false;
	}

	return true;	
}
//-----
function c9x4_replace(value, search, replace)	
{
	if(c9x4_empty(value) || c9x4_empty(replace))
		return "";
		
	var ret = "";
	var ch = "";
	
	for(var i = 0; i < value.length; i++)
	{
		ch = value.charAt(i);
		
		if(ch == search)
			ret += replace;
		else
			ret += ch;
	}
	
	return ret;
}
//-----
function c9x4_same(value1, value2)
{
	if( value1 == undefined || value2 == undefined )
		return false;
	
	return (	value1.toLowerCase() == value2.toLowerCase()	);	
}
//-----
function c9x4_test_alpha(value)
{
	var good = true;
	
	var at = 0;

	value = value.toLowerCase();

	for(var i = 0; i < value.length; i++)
	{
		var ch = value.charAt(i);
		
		if(ch == '@')
		{
			at++;

			if(at > 1)
			{
				good = false;
				break;
			}
		}
		else if(".0123456789abcdefghijklmnopqrstuvwxyz_ ".indexOf(ch) < 0)
		{
			good = false;
			break;
		}
	}

	return good;
}
//-----
function c9x4_test_email(value)
{
	var period_count = 0;
	var count = 0;
	var ch;

	for(var i = 0; i < value.length; i++)
	{
		ch = value.charAt(i);

		if(ch == '@')
			count++;
		else if(ch == '.')
			period_count++;
	}

	return (count == 1) && (period_count > 0);
}
//-----
function c9x4_test_date(m, d, y)
{
	m = parseInt(m);
	d = parseInt(d);
	y = parseInt(y);
	
	if(m < 1 || m > 12)
		return false;
	else if(d < 1 || d > 31)
		return false;
	else if(y > 9999 || y < 1200)
		return false;
	else if(m == 2)
	{
		if( (y / 4) == Math.floor( y / 4)  )
			return (d <= 29);
		else
			return (d <= 28 );
		
		return false;
	}
	else if(d == 30)
	{
		switch(m)
		{
			case 1:
			case 3:
			case 4:
			case 5:
			case 6:
			case 7:
			case 8:
			case 9:
			case 10:
			case 11:
			case 12:
				return true;
			default:
				return false;
		}
	}
	else if(d == 31)
	{
		switch(m)
		{
			case 1:
			case 3:
			case 5:
			case 7:
			case 8:
			case 10:
			case 12:
				return true;
			default:
				return false;
		}
	}
	else
		return true;
}
//-----
function c9x4_test_minimum(value, minimum)
{
	var ln = value.length;
	
	if(minimum < 1)
		return (ln > 0);
	else
		return (ln >= minimum);
}
//-----
function c9x4_test_multi_word(value)
{
	var inword = false;

	var total = 0;

	for(var i = 0; i < value.length; i++)
	{
		if(value.charAt(i) == ' ')
		{
			if(inword)
			{
				inword = false;
				total++;

				if(total > 2)
					return true;
			}
		}
		else // not a space
			inword = true;
	}

	return false;
}
//-----
function c9x4_test_text(value)
{
	return c9x4_test_minimum(value, 0);
}
//-----
function c9x4_test_valid_text(value)
{
	if(value.length < 100)
		return true;
		
	value = value.replace('\n', ' ');
	
	var arr = value.split(' ');
	
	for(var word in arr)
	{
		if(word.length > 100)
			return false;
	}

	return true;
}
//-----
function c9x4_validate_message(display, defaultMessage)
{
	if(!c9x4_test_multi_word(display))
		return defaultMessage;
	else
		return display;	
}
//-----

//----- class
function ValidateResult(value)
{
	if(typeof(value) == 'string')
	{
		this.message = value;
		this.good = false;		
	}
	else
	{
		this.message = '';		
		this.good = value;
	}
}
//----- class

//-----
function c9x4_validate_combo(ctx)
{
	var fld = c9x4_element(ctx.id, false);
	
	if(!fld) return new ValidateResult("Can't Load Field: " + ctx.id);

	if(fld.selectedIndex < 1)
	{
		if(ctx.skipIfEmpty)
			return new ValidateResult(true);
		else
			return new ValidateResult("Please select " + ctx.display);
	}
	else
		return new ValidateResult(true);	
}
//-----
function c9x4_validate_checkbox(ctx)
{
	var fld = c9x4_element(ctx.id, false);
	
	if(!fld) return new ValidateResult("Can't Load Field: " + ctx.id);

	if(!fld.checked)
	{
		if(ctx.skipIfEmpty)
			return new ValidateResult(true);
		else
			return new ValidateResult("Please select " + ctx.display);
	}
	else
		return new ValidateResult(true);	
}
//-----
function c9x4_validate_combo(ctx)
{
	var fld = c9x4_element(ctx.id, false);
	
	if(!fld) return new ValidateResult("Can't Load Field: " + ctx.id);

	if(fld.selectedIndex < 1)
	{
		if(ctx.skipIfEmpty)
			return new ValidateResult(true);
		else
			return new ValidateResult("Please select " + ctx.display);
	}
	else
		return new ValidateResult(true);	
}
//-----
function c9x4_validate_confirm(ctx)
{
	var fld = c9x4_element(ctx.id, false);
	
	var fld2 = c9x4_element(ctx.id + '_confirm', false);
	
	if(!fld) return new ValidateResult("Can't Load Field: " + ctx.id);

	var value = fld.value;  
	
	var value2 = fld2.value;
	
//----------------
	if(!c9x4_test_text(value))
		return new ValidateResult("Please enter " + ctx.display);
//----------------
	else if(!c9x4_test_minimum(value, ctx.minimum))
		return new ValidateResult(ctx.display + " must be at least " + ctx.minimum + " character(s)");
//----------------
	else if(!c9x4_test_alpha(value))
		return new ValidateResult(ctx.display + " contains invalid characters ");
//----------------
	else if(!c9x4_same(value, value2))
		return new ValidateResult(ctx.display + " and Confirm do not match");
//----------------
	else
		return new ValidateResult(true);	
}
//-------------------------------------------------------------------------
function c9x3_validate_date(ctx)
{
	var fld = c9x4_element(ctx.id + "_month", false);
	var fld2 = c9x4_element(ctx.id + "_day", false);
	var fld3 = c9x4_element(ctx.id + "_year", false);	
	
	if(!fld) return new ValidateResult("Can't Load Field: " + ctx.id);

	if(ctx.skipIfEmpty)
	{
		if(fld.selectedIndex < 1)
		{
			if(fld2.selectedIndex < 1)
			{
				if(fld3.selectedIndex < 1)
				{
					return new ValidateResult(true);
				}
			}
		}
	}

	var m = fld.options[fld.selectedIndex].value;
	
	var d = fld2.options[fld2.selectedIndex].value;
	
	var y = fld3.options[fld3.selectedIndex].value;

	if(!c9x4_test_date(m, d, y))
		return new ValidateResult("Please enter a valid " + ctx.display);
	else
		return new ValidateResult(true);	
}
//-------------------------------------------------------------------------
function c9x4_validate_email(ctx)
{
	var fld = c9x4_element(ctx.id, false);
	
	if(!fld) return new ValidateResult("Can't Load Field: " + ctx.id);

	var value = fld.value;

	if(ctx.skipIfEmpty)
	{
		if(empty(value))
			return new ValidateResult(true);
	}

	if(!c9x4_test_email(value))
		return new ValidateResult("Please enter a valid " + ctx.display);
	else
		return new ValidateResult(true);	
}
//-------------------------------------------------------------------------
function c9x3_validate_items(ctx)
{
	var fld = c9x4_element(ctx.id)
	
	if(!fld) return new ValidateResult("Can't Load Field: " + ctx.id);

	if(!c9x4_is_a_checkbox_checked(fld))
		return new ValidateResult("Please select at least one " + ctx.display);
	else
		return new ValidateResult(true);	
}
//-------------------------------------------------------------------------
function c9x3_validate_number(ctx)
{
	var fld = c9x4_element(ctx.id, false);
	
	if(!fld) return new ValidateResult("Can't Load Field: " + ctx.id);

   if(ctx.skipIfEmpty)
   {
	   if(c9x4_empty(fld.value))
			return new ValidateResult(true);
   }

   var value = parseFloat(fld.value);

   if(c9x4_empty(fld.value))
		return new ValidateResult("Please enter " + ctx.display);
   else if(!c9x4_is_numeric(fld.value))
		return new ValidateResult(ctx.display + " must be a numeric value");
   else if(value == 0 && ctx.minimum == 0)
		return new ValidateResult(ctx.display + " must be greater than 0");
   else if(value < ctx.minimum)
		return new ValidateResult(ctx.display + " must be greater than " + ctx.minimum);
   else
	   return new ValidateResult(true);	
}
//-------------------------------------------------------------------------
function c9x4_validate_numeric(ctx)
{
	var fld = c9x4_element(ctx.id, false);
	
	if(!fld) return new ValidateResult("Can't Load Field: " + ctx.id);

   if(ctx.skipIfEmpty)
   {
	   if(c9x4_empty(fld.value))
			return new ValidateResult(true);
   }

   if(c9x4_empty(fld.value))
		return new ValidateResult("Please enter " + ctx.display);
   else if(!c9x4_is_numeric(fld.value))
		return new ValidateResult(ctx.display + " must be a numeric value");
   else if(!c9x4_test_minimum(fld.value, ctx.minimum))
		return new ValidateResult(ctx.display + " must be at least " + ctx.minimum + " character(s)");
   else
	   return new ValidateResult(true);	
}
//-------------------------------------------------------------------------
function c9x4_validate_phone(ctx)
{
	var fld = c9x4_element(ctx.id + "_one", false);
	
	var fld2 = c9x4_element(ctx.id + "_two", false);
	
	var fld3 = c9x4_element(ctx.id + "_three", false);	
	
	if(!fld) return new ValidateResult("Can't Load Field: " + ctx.id);

	var p1 = fld.value;

	var p2 = fld2.value;

	var p3 = fld3.value;

	if(ctx.skipIfEmpty)
	{
		if(c9x4_empty(p1))
		{
			if(c9x4_empty(p2))
			{
				if(c9x4_empty(p3))
				{
					return new ValidateResult(true);
				}
			}
		}
	}

	if(p1.length < 3 || !c9x4_is_numeric(p1) || parseInt(p1) < 100)
		return new ValidateResult("Please enter a valid " + ctx.display);
	else if(p2.length < 3 || !c9x4_is_numeric(p2) || parseInt(p2) < 1)
		return new ValidateResult("Please enter a valid " + ctx.display);
	else if(p3.length < 4 || !c9x4_is_numeric(p3))
		return new ValidateResult("Please enter a valid " + ctx.display);
	else
		return new ValidateResult(true);	
}
//-------------------------------------------------------------------------
function c9x4_validate_text(ctx)
{
	var fld = c9x4_element(ctx.id, false);
	
	if(!fld) return new ValidateResult("Can't Load Field: " + ctx.id);

	var value = fld.value;

	if(ctx.skipIfEmpty)
	{
		if(empty(value))
			return new ValidateResult(true);
	}

	if(!c9x4_test_text(value))
		return new ValidateResult("Please enter " + ctx.display);
	else if(!c9x4_test_minimum(value, ctx.minimum))
		return new ValidateResult(ctx.display + " must be at least " + ctx.minimum + " character(s)");
	else if(ctx.alpha && !c9x4_test_alpha(value))
		return new ValidateResult(ctx.display + " contains invalid characters");
	else
		return new ValidateResult(true);
}
//-------------------------------------------------------------------------
function c9x4_validate_textarea(ctx)
{
	var value = '';
		
	if(typeof(tinyMCE) == 'object')
		value = tinyMCE.activeEditor.getContent({format : 'text'});
	else
	{
		var fld = c9x4_element(ctx.id, false);
		
		if(!fld) 
			return new ValidateResult("Can't Load Field: " + ctx.id);
		else
			value = fld.value;
	}

	var emptyText = (value.length < 3);

	if(ctx.skipIfEmpty)
	{
		if(emptyText)
			return new ValidateResult(true);
	}

	if(emptyText)
		return new ValidateResult("Please enter " + ctx.display);
	else
		return new ValidateResult(true);
}
//-------------------------------------------------------------------------