var _rules = new Array();

function _Validator(source, check, message)
{
	this.source = source;
	this.check = check;
	this.message = message;
}

function _validate()
{
	var errors = new Array();
	for (var i = 0; i < _rules.length; ++i)
	{
		var validation = _rules[i];
		if(!(validation.source instanceof Object))
		{
		   validation.source = document.getElementById(validation.source);
		}
	
	    
		if (validation.check instanceof RegExp)
		{
			if (! validation.check.test(validation.source.value))
				errors.push(validation);
		}
		else
		{
			if (! validation.check(validation.source))
				errors.push(validation);
		}
	}
	if (errors.length > 0)
	{
		var errMsg = 'Please check the following field(s): \n\n';
		for (var i = 0; i < errors.length; ++i)
		{
			errMsg += errors[i].message + '\n';
		}
		alert(errMsg);
		if (errors[0].source != null)
			errors[0].source.focus();
		return false;
	}
	return true;
}


function _validate2(rules)
{

	var errors = new Array()
	for (var i = 0; i < rules.length; ++i)
	{
		var validation = rules[i]
		
		if (validation.check instanceof RegExp)
		{
		
		    if(typeof(validation.source)=='object')
		        {
		           
			       if (! validation.check.test(validation.source.value))
				           errors.push(validation);
				}
			else	
			     if (! validation.check.test(document.getElementById(validation.source).value))
				           errors.push(validation);
		}
		else
		{
		    //alert(typeof(validation.source))
		    if(typeof(validation.source)=='object')
		        {
		            
			         if (! validation.check(validation.source))
				           errors.push(validation);
				 }
		   else	if (! validation.check(document.getElementById(validation.source)))
				           errors.push(validation);
		}
	}
	
	
	if (errors.length > 0)
	{
	    
		var errMsg = 'Please check the following field(s): \n\n'
		for (var i = 0; i < errors.length; ++i)
		{
			errMsg += errors[i].message + '\n'
		}
		alert(errMsg);
		if (errors[0].source != null)
		{
		    if(typeof(errors[0].source) == 'object')
		       document.getElementById(errors[0].source.id).focus()
			else
				document.getElementById(errors[0].source).focus()
		}
		
		return false;
	}
	return true
}

//#####################################
	// var __text = /([\S])+/
    // var __validEmail = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/
  //  var __phone /^((\+\d{1,3}(-| )?\(?\d\)?(-| )?\d{1,3})|(\(?\d{2,3}\)?))(-| )?(\d{3,4})(-| 
//)?(\d{4})(( x| ext)\d{1,5}){0,1}$/
    // var __Digit =  /^[0-9]+$/
    // var __Double=/^[0-9]+.[0-9]+$/
	//	var testObject
	//	function init()
	//	{  testObject = new ValidateObject(0)
	//     testObject.InstanceHelp=false
	//	   testObject.AddValidatedObject(Form1.text1,"__validEmail.test(Form1.text1.value)","Required: the length must be greater than three characters")
	//	   testObject.AddValidatedObject(Form1.sltOne,"Form1.sltOne.options.value==1","Select1")
	//	   testObject.AddValidatedObject(Form1.sltMore,"Form1.sltMore.options.value==2","Select2")
	//	   testObject.Report() //Programmer report to see current config
	//	}
	//	function submiting()
	//	{
		 
	//	  return testObject.OnSubmit()
	
	//	}
	
		var __RefObject= new Array() //This to binding to User instance
	    var __Index
		function ValidateObject(Index)
		{  
		   var URL = new String(window.location.href)
		   URL=URL.replace("www.","")
		  /*
		   if (URL.toUpperCase().indexOf("HTTP://TYGO.COM")==-1 && URL.toUpperCase().indexOf("HTTPS://TYGO.COM")==-1)
		      { URL +=" does not have permissions to use this application!\n"
		        URL += " Contact author, Nhat Minh Ho, at nhatminhho@yahoo.com to get permissions."
		        alert(" Warning!!\n\n" + URL)
		        return
		      }
		      */
		   this.Index=Index
		   this.FocusingObject
		   this.FocusingRule
		   this.FocusingCaption
		   this.Objects= new Array()
		   this.Errors = new Array()
		   this.Rules = new Array()
		   this.Captions = new Array()
		   this.OnSubmit=_OnSubmit
		   this.IsSubmited=false
		   this.InstanceHelp=false
		   this.ErrorTextColor="red"
		  
		   this.Popup=window.createPopup()
		   this.Popup.document.body.style.backgroundColor = "lightyellow";
           this.Popup.document.body.style.border = "solid black 1px";

		   
		   this.AddValidatedObject = _AddValidatedObject
		   this.ForCusToTheFirstErrorObject=_ForCusToTheFirstErrorObject
		   this.DisplayInstanceCaption=_DisplayInstanceCaption
		   this.Report=_Report
		   this.Clear=_Clear
           if (Index==__RefObject.length-1)
              alert("the array element " + Index + " already populated" )
		   __RefObject[Index]=this//point to user instance
		}
		
	    function _Clear()
	    { 
	    
	       
	      for(i=0;i<__RefObject;++i) 
	      {
	       __RefObject.pop
	       }
	       
	       
	    }
		function _OnSubmit()
		{
		   var strErr=""
		   var ErrCount=0
		   var NoErr
		   this.IsSubmited=true
		   for(var i=0;i<__RefObject[this.Index].Objects.length;i++)
		   { eval( "NoErr= (" + __RefObject[this.Index].Rules[i] + ")" )  
		    
		     if(NoErr)
		        __RefObject[this.Index].Errors[i]=false
		     
		     if (__RefObject[this.Index].Errors[i]==true)
		        { 
		          ErrCount++
		          strErr+= "\n     " + ErrCount + ") " + __RefObject[this.Index].Captions[i] 
		        
		        }
		   }
		   
		   if (ErrCount>1)
		      strErr=ErrCount + "  Errors:" + strErr
		   else   
		     strErr=ErrCount + "  Error:" + strErr
		      
		   
		   if (ErrCount>0)
		     {   
		      alert(strErr)
		      __RefObject[this.Index].ForCusToTheFirstErrorObject()
		      return false
		      }
		   else
		     return true   
		
		}
		function _Report()
		{  var temp =""
		   for(var i=0;i<this.Objects.length;i++)
		     {
		       temp += "\n\nObject: " + this.Objects[i].name + ", Rule: " + this.Rules[i] + ", Caption: " + this.Captions[i]
		     }
		     temp= "Report: " + temp
		     alert(temp)
		  
		}
		function _ObjectBluring()
		{   
		     eval( "NoErr= (" + __RefObject.FocusingRule + ")" )   
		     if (!NoErr)
		          __RefObject.FocusingObject.focus()
		       
		}
		function __RefObjectIndex(name)
		{
		  for(var i=0;i<__RefObject.length;i++)
		    {
		      for(var j=0;j<__RefObject[i].Objects.length;j++)
		        {
		           if (name==__RefObject[i].Objects[j].name)
		               return i
		        }
		    }
		}
		
		
		function _ObjectForcusing()
		{ 
		  
		   var ObjectName=window.event.srcElement.name
		   
		   var Index=__RefObjectIndex(ObjectName)
		   __Index=Index//set to global variable
		 
		  
		   if (!__RefObject[Index].IsSubmited)
		     {
		        ObjectName=window.event.srcElement.name
		   
		        for(var i=0;i<__RefObject[Index].Objects.length;i++)
		        {
		          if (ObjectName == __RefObject[Index].Objects[i].name)
		           {
		            __RefObject[Index].FocusingObject=__RefObject[Index].Objects[i]
		            __RefObject[Index].FocusingRule=__RefObject[Index].Rules[i]
		            __RefObject[Index].FocusingCaption=__RefObject[Index].Captions[i]
		          
		            
		           
		            
		          }
		       }
		     }
		     else
		     { 
		       //__RefObject[Index].ForCusToTheFirstErrorObject()
		     }
		     __RefObject[Index].DisplayInstanceCaption() 
		  
		    
		}
		function _ForCusToTheFirstErrorObject()
		{
		  var NoErr
		        for(var i=0;i<__RefObject[this.Index].Objects.length;i++)
		        {
		          eval( "NoErr= (" + __RefObject[this.Index].Rules[i] + ")" )   
		          if (!NoErr)
		            {
		            __RefObject[this.Index].FocusingObject=__RefObject[this.Index].Objects[i]
		            __RefObject[this.Index].FocusingObject.focus()
		            __RefObject[this.Index].FocusingRule=__RefObject[this.Index].Rules[i]
		            __RefObject[this.Index].FocusingCaption=__RefObject[this.Index].Captions[i]
		            
		            i=10000
		           
		            
		            }
		        }
		        
		}
		function _DisplayInstanceCaption()
		{  var NoErr,len
		   if (!__RefObject[__Index].InstanceHelp)
		       {
		       
		       return
		       }
		   eval( "NoErr= (" + __RefObject[this.Index].FocusingRule + ")" )   
		    
		    if (!NoErr)
		       {
		           	           
		           __RefObject[this.Index].FocusingObject.style.color=__RefObject[this.Index].ErrorTextColor 
					
		           __RefObject[this.Index].Popup.document.body.innerHTML=__RefObject[this.Index].FocusingCaption
		           
		           
		           len=__RefObject[this.Index].FocusingCaption.length*8
		           
		           __RefObject[this.Index].Popup.show(0,-(__RefObject[this.Index].FocusingObject.offsetHeight+3) ,len, 25,__RefObject[this.Index].FocusingObject)
		           //Form1.text1.offsetTop

		       }
		    else   
		    {
		   
		     __RefObject[this.Index].FocusingObject.style.color=""
		     __RefObject[this.Index].Popup.hide()
		     }
		}
		function _InstanceValidating()
		 {  
		    if (!__RefObject[__Index].InstanceHelp)
		       {
		       
		       return
		       }
		    
		     __RefObject[__Index].DisplayInstanceCaption() 
		   
		  
		    
		 }   
		   
		function _AddValidatedObject(Object,Rule,Caption)
		{
		  Object.onfocus=_ObjectForcusing
		  
		  if (this.InstanceHelp)
		     {
		           Object.onblur=_ObjectBluring
		      }
		  
		  switch(Object.type)
		  { case "password":
		       
		       Object.onkeyup=_InstanceValidating
		       break
		    case "text":
		     
		     
		       Object.onkeyup=_InstanceValidating
		       break
		    case "file":
		     
		       Object.onkeyup=_InstanceValidating
		       break   
		    case "textarea":
		     
		       Object.onkeyup=_InstanceValidating
		       break
		    case "select-one":
		       Object.onchange=_InstanceValidating
		       break
		    case "select-muliple":   
		     
		      Object.onchange=_InstanceValidating
		      break
		  }
		 
		  this.Objects[this.Objects.length]=Object
		  this.Errors[this.Errors.length]=true
		  this.Rules[this.Rules.length]=Rule
		  this.Captions[this.Captions.length]=Caption
		
		  
		}
	
	    
	    function OnEnter()
		{
			if(event.keyCode==13)
				return;
		}
	
		
