/* *******************************************
 * This file is created by Quan Duc Binh
 * Email: Hastilydoll219@yahoo.com
 * Mobile: +84 905 089661
 * Date Created: 2007-1-24
 * Date Modified: 2007-2-2
 * ******************************************/

//Predefine Constants
var BinhBK_Validator_RequireValidator = 0;
var BinhBK_Validator_PreValidator = 1;
var BinhBK_Validator_RegExValidator = 2;

var BinhBK_Validator_EmailRegEx = /^[\w-]+(\.[\w-]+)*@([\w-]+\.)+[a-zA-Z]{2,7}$/;
var BinhBK_Validator_NumberRegEx = /^[-]?\d*\.?\d*$/;
var BinhBK_Validator_PositiveNumberRegEx = /^\d*\.?\d*$/;
var BinhBK_Validator_NegativeNumberRegEx = /^(-){1}\d*\.?\d*$/;
var BinhBK_Validator_IntergerRegEx = /^-?\d+$/;
var BinhBK_Validator_PositiveIntergerRegEx = /^\d+$/;
var BinhBK_Validator_NegativeIntergerRegEx = /^(-){1}\d+$/;
var BinhBK_Validator_PhoneRegEx = /^\d{3}-\d{3}-\d{4}$/;
var BinhBK_Validator_IpAddressRegEx = /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/;
//var BinhBK_Validator_SiteAddress = /^/;
function BinhBK_ValidatorControl()
{
	this.Control = null;
	this.Message = "";
	this.DisplayObject = null;
	this.ValidatorType = 0;
}
function BinhBK_Validator(FormContainer,ValidatorType)
{
	this.ParentForm = FormContainer;
	this.Controls = new Array();
	this.ValidatorType = ValidatorType;
	this.RegExType = BinhBK_Validator_EmailRegEx;
	this.Id = Container.Objects.Add(this);
	this.ObjectInValidate = null;
}
BinhBK_Validator.prototype.AddControl = function(control,message,type)
{
	//Kiá»ƒm tra tá»“n táº¡i control trÆ°á»›c
	var Control = new BinhBK_ValidatorControl();
	Control.Control = control;
	Control.Message = message;
	//Táº¡o má»™t tháº» div Ä‘á»ƒ Ä‘áº·t message vÃ o
	Control.DisplayObject = document.createElement("div");
	Control.DisplayObject.innerHTML ="<font color='red' size='1px'><b>"+message+"</b></font>";

	//Set style cho Ä‘áº¹p
	
	control.parentNode.insertBefore(Control.DisplayObject,control);
	
	Control.DisplayObject.style.display = "none";
	
	//ThÃªm sá»± kiá»‡n blur vÃ o Ä‘á»‘i tÆ°á»£ng
	if (Control.ValidatorType == BinhBK_Validator_RequireValidator)
	{
		Container.DOM.AddEventListener(Control.Control,"blur",this.RequireControlOnBlur);
	}
	
	//Äáº·t ID cho Ä‘á»‘i tÆ°á»£ng
	control.setAttribute("BinhBK_Validator_ID",this.Controls.length);
	control.setAttribute("BinhBK_Validator_ParentObjectId",this.Id);
	this.Controls[this.Controls.length] = Control;
	if (type)
		this.RegExType = type;
}
var BinhBK_ThisValidator_Lock = false;
BinhBK_Validator.prototype.RequireControlOnBlur = function(evt)
{
	evt = (evt) ? evt : event;
    var target = (evt.target) ? evt.target : ((evt.currentTarget) ? evt.currentTarget : evt.srcElement);
	
	//Láº¥y Ä‘á»‘i tÆ°á»£ng validator
    var parentObjectId = target.getAttribute("BinhBK_Validator_ParentObjectId");
	thisValidator = Container.Objects.GetObject(parentObjectId);
	if (thisValidator.ObjectInValidate == null || thisValidator.ObjectInValidate == target)
	{
		//Láº¥y chá»‰ sá»‘ cá»§a control trong validator
		var objectIndex = target.getAttribute("BinhBK_Validator_ID");
		
		if (thisValidator.Controls[objectIndex].Control.value == '')
		{
			thisValidator.ObjectInValidate = target;
			//target.focus();
			thisValidator.Controls[objectIndex].DisplayObject.style.display = "block";
		}
		else
		{
			thisValidator.Controls[objectIndex].DisplayObject.style.display = "none";
			thisValidator.ObjectInValidate = null;
		}
	}
}
BinhBK_Validator.prototype.RequireFieldValidation = function()
{
	var retVal = true;
	for (var i=0;i<this.Controls.length;i++)
	{
		if (this.Controls[i].Control.value == '')
		{
			this.Controls[i].DisplayObject.style.display = "block";
			retVal = false;
			this.ObjectInValidate = this.Controls[i].Control;
			//this.Controls[i].Control.focus();
		}
		else
		{
			this.Controls[i].DisplayObject.style.display = "none";
			this.ObjectInValidate = null;
		}
	}
	return retVal;
}
BinhBK_Validator.prototype.PreValidation = function()
{
	for (var i=0;i<this.Controls.length;i++)
	{
		this.Controls[i].Control.parentNode.insertBefore(this.Controls[i].DisplayObject,this.Controls[i].Control);
	}
}
BinhBK_Validator.prototype.RegexValidator = function()
{
	var retVal = true;
	for (var i=0;i<this.Controls.length;i++)
	{
		if (this.Controls[i].Control.parentNode == this.Controls[i].DisplayObject.parentNode)
			this.Controls[i].Control.parentNode.removeChild(this.Controls[i].DisplayObject);
		if (!this.Controls[i].Control.value.match(this.RegExType))
		{
			this.Controls[i].Control.parentNode.insertBefore(this.Controls[i].DisplayObject,this.Controls[i].Control);
			retVal = false;
		}
	}
	return retVal;
}
