var Validator = function(name)
{
  this.formName = name;
  this.errMsg = new Array();

  this.required = function(controlId, msg)
  {
    var obj = document.forms[this.formName].elements[controlId];
    if (typeof(obj) == "undefined" || trim(obj.value) == "")
    {
      this.addErrorMsg(msg);
    }
  };

  this.isEmail = function(controlId, msg, required)
  {
    var obj = document.forms[this.formName].elements[controlId];
    obj.value = trim(obj.value);

    if ( ! required && obj.value == '')
    {
      return;
    }

    if ( ! isEmail(obj.value))
    {
      this.addErrorMsg(msg);
    }
  }

  this.equal = function(fstControl, sndControl, msg)
  {
    var fstObj = document.forms[this.formName].elements[fstControl];
    var sndObj = document.forms[this.formName].elements[sndControl];

    if (fstObj != null && sndObj != null)
    {
      if (fstObj.value == '' || fstObj.value != sndObj.value)
      {
        this.addErrorMsg(msg);
      }
    }
  }

  this.gt = function(fstControl, sndControl, msg)
  {
    var fstObj = document.forms[this.formName].elements[fstControl];
    var sndObj = document.forms[this.formName].elements[sndControl];

    if (fstObj != null && sndObj != null)
    {
      if (fstObj.value <= sndObj.value)
      {
        this.addErrorMsg(msg);
      }
    }
  }

  this.gtDate = function(fstControl, sndControl, msg)
  {
	var fstObj = document.forms[this.formName].elements[fstControl+'Year'].value+'-'+document.forms[this.formName].elements[fstControl+'Month'].value;//+'-'+document.forms[this.formName].elements[fstControl+'Day'].value;
	var sndObj = document.forms[this.formName].elements[sndControl+'Year'].value+'-'+document.forms[this.formName].elements[sndControl+'Month'].value;//+'-'+document.forms[this.formName].elements[sndControl+'Day'].value;
	if (fstObj != null && sndObj != null)
	{
		if (fstObj > sndObj)
		{
			this.addErrorMsg(msg);
		}
	}
  }
	
  this.gtDate2 = function(fstControl, sndControl, msg)
  {
	var fstObj = document.forms[this.formName].elements[fstControl+'Year'].value+'-'+document.forms[this.formName].elements[fstControl+'Month'].value+'-'+document.forms[this.formName].elements[fstControl+'Day'].value;
	var sndObj = document.forms[this.formName].elements[sndControl+'Year'].value+'-'+document.forms[this.formName].elements[sndControl+'Month'].value+'-'+document.forms[this.formName].elements[sndControl+'Day'].value;
	if (fstObj != null && sndObj != null)
	{
		if (fstObj >= sndObj)
		{
			this.addErrorMsg(msg);
		}
	}
  }

  this.isNumber = function(controlId, msg, required)
  {
    var obj = document.forms[this.formName].elements[controlId];
    obj.value = trim(obj.value);

    if (obj.value == '' && ! required)
    {
      return;
    }
    else
    {
      if ( ! isNumber(obj.value))
      {
        this.addErrorMsg(msg);
      }
    }
  }

  this.isInt = function(controlId, msg, required)
  {
    var obj = document.forms[this.formName].elements[controlId];
    obj.value = trim(obj.value);

    if (obj.value == '' && ! required)
    {
      return;
    }
    else
    {
      if ( ! isInt(obj.value)) this.addErrorMsg(msg);
    }
  }

  this.isNullOption = function(controlId, msg)
  {
    var obj = document.forms[this.formName].elements[controlId];

    obj.value = trim(obj.value);

    if (obj.value > '0' )
    {
      return;
    }
    else
    {
      this.addErrorMsg(msg);
    }
  }

  this.isTime = function(controlId, msg, required)
  {
    var obj = document.forms[this.formName].elements[controlId];
    obj.value = trim(obj.value);

    if (obj.value == '' && ! required)
    {
      return;
    }
    else
    {
      if ( ! isTime(obj.value)) this.addErrorMsg(msg);
    }
  }

  this.lenIn = function(controlId,len1,len2, msg)
  {
	var obj = document.forms[this.formName].elements[controlId];
	if (typeof(obj) == "undefined" || trim(obj.value) == "")
	{
		this.addErrorMsg(msg);
	}
	else
	{
		if (obj.value.length<len1 || obj.value.length>len2)
		{
			this.addErrorMsg(msg);
		}
	}
  };
   
  this.isChecked = function(chk, msg)
  {
    var obj = document.forms[this.formName].elements[controlId];
    var checked = false;

    for (var i = 0; i < objects.length; i ++ )
    {
      if (objects[i].type.toLowerCase() != "checkbox") continue;
      if (objects[i].checked)
      {
        checked = true;
        break;
      }
    }

    if ( ! checked) this.addErrorMsg(msg);
  }

  this.passed = function()
  {
    if (this.errMsg.length > 0)
    {
      var msg = "";
      for (i = 0; i < this.errMsg.length; i ++ )
      {
        msg += "- " + this.errMsg[i] + "\n";
      }

      alert(msg);
      return false;
    }
    else
    {
      return true;
    }
  }

  this.addErrorMsg = function(str)
  {
    this.errMsg.push(str);
  }
}