function Validator()
{

}

/**
 *  Check Email Function
 */
Validator.prototype.checkEmail=function(ELEM, EVENT)
{

  if(EVENT)
  {
    var scope = this;
    YAHOO.util.Event.addListener(ELEM, EVENT, function(){scope.checkEmail(ELEM);});
    return false;
  }
	try
	{
		var elem = this._getElem(ELEM);
		var targetElem = this._findTarget(elem);
		var email = elem.value;
		var regex = /^[-_.a-zA-Z0-9]+@[-_.a-zA-Z0-9]+\.[a-zA-Z0-9]+$/
		if (regex.test(email))
		{
      targetElem.className = "msg";
			return true;
		}
		else
		{
      targetElem.innerHTML = "<span class='hint-pointer'>&nbsp;</span>please enter a valid email address";
      targetElem.className = "msgshow";
			return false;
		}
	}
	catch(e)
	{
		alert("Error in Validator() -> checkEmail(): " + e.message);
		return false;
	}
}
/**
 *  Check Length Function
 */
Validator.prototype.checkLength=function(ELEM, ARGS, EVENT)
{
  if(EVENT)
  {
    var scope = this;
    YAHOO.util.Event.addListener(ELEM, EVENT, function(){scope.checkLength(ELEM, ARGS);});
    return false;
  }
	try
	{
		var elem = this._getElem(ELEM);
		var targetElem = this._findTarget(elem);
		var value = elem.value;
		if(ARGS.min && value.length < ARGS.min)
		{
      if(ARGS.min == 1)
        targetElem.innerHTML = "<span class='hint-pointer'>&nbsp;</span>This field is required.";
      else
        targetElem.innerHTML = "<span class='hint-pointer'>&nbsp;</span>Must be at least " + ARGS.min + " characters long.";
      targetElem.className = "msgshow";
			return false;
    }
    else if(ARGS.max && value.length > ARGS.max)
		{
      targetElem.innerHTML = "<span class='hint-pointer'>&nbsp;</span>Cannot be longer than " + ARGS.max + " characters.";
      targetElem.className = "msgshow";
			return false;
    }
    else
    {
      targetElem.className = "msg";
			return true;
    }
		
	}
	catch(e)
	{
		alert("Error in Validator() -> checkLength(): " + e.message);
		return false;
	}
}
/**
 *  Check Date Function
 */
Validator.prototype.checkDate=function(ELEM, EVENT)
{
  if(EVENT)
  {
    var scope = this;
    YAHOO.util.Event.addListener(ELEM, EVENT, function(){scope.checkDate(ELEM);});
    return false;
  }
	try
	{
		var elem = this._getElem(ELEM);
		var targetElem = this._findTarget(elem);
		var value = elem.value;
		var regex = /^(0?[1-9]|1[012])\/(0?[1-9]|[12][0-9]|3[01])\/(19|20)\d\d$/
		

		if (regex.test(value))
		{
      targetElem.className = "msg";
			return true;
		}
		else
		{
      targetElem.innerHTML = "<span class='hint-pointer'>&nbsp;</span>Please enter a valid date in the form mm/dd/yyyy";
      targetElem.className = "msgshow";
			return false;
		}


	}
	catch(e)
	{
		alert("Error in Validator() -> checkDate(): " + e.message);
		return false;
	}
}

/**
 *  Check Same
 */
Validator.prototype.checkSame=function(ELEM, ARGS, EVENT)
{
  if(EVENT)
  {
    var scope = this;
    YAHOO.util.Event.addListener(ELEM, EVENT, function(){scope.checkSame(ELEM, ARGS);});
    return false;
  }
	try
	{
		var elem = this._getElem(ELEM);
		var targetElem = this._findTarget(elem);
		var value = elem.value;
		var compareValue = this._getElem(ARGS.compareField).value;
		if(value == compareValue)
		{
      targetElem.className = "msg";
			return true;
    }
    else
    {
      targetElem.innerHTML = "<span class='hint-pointer'>&nbsp;</span>Verification does not match.";
      targetElem.className = "msgshow";
			return false;
    }
	}
	catch(e)
	{
		alert("Error in Validator() -> checkSame(): " + e.message);
		return false;
	}
}
Validator.prototype._findTarget=function(ELEM)
{
  var i=0;
  var e = ELEM;
	while (e.nodeName.toLowerCase() != "dd" && i < 10)
	{
		e = e.parentNode;
		i++;
	}
	if(i<10)
	{
    e = e.nextSibling;
    
    while(!e.className || e.className.indexOf('msg')<0)
    {
      e = e.nextSibling;
    }
    return e;
  }
}
Validator.prototype._getElem=function(NAME)
{
	try
	{
		if(typeof NAME == 'string')
      return $(NAME);
		return NAME;
	}
	catch(e)
	{
		alert("Error in Validator() -> _getElem(): " + e.message);
	}
}
