// Removes leading and ending whitespaces
 function validateTextFormat(str)
    {
       regExInvalidChars = /[a-zA-Z]/;
       if (regExInvalidChars.test(str))
       { 
         return true;
       }
       else
       {
	     return false;
	   }
  }

	var pass =  "";
	var dateFrom = "";
	var dateTo = "";
	var toval = true;
	var frmDate = null;
	var unit="";
	var fac="";
	var toDate =null;
	var prevId;
	var dateFrom_array;
	var dateTo_array;
	var d=null;
/*
 * Validator Class represents the validation fiels with the 
 * validation configuration attributes (Constructor Parameters). 
 * Also have customized accessors. 
 * 
 * @param _id  - field id
 * @param _lbl - id if of label the of the this.id
 * @param _mandFlag - 
 * 						1 - Mandetory Field
 * 						0 - Non - Mandetory Field
 * @param _formatCode
 * 						1 -  Email Validation
 * 						2 -  Text(alpha) Validation
 * 						3 -  Phone Number Validation
 * 						11 - Password Validation I 
 * 						12 - Password Validation II 
 * @param _nullValue - 	specifies the null value for the field 
 * 						eg. 'netui_null'
  * */

	Validator = function(_id,_lbl,_mandFlag,_formatCode,_nullValue,_maxlength,_callback){
	 this.id =  _id;
	 this.lbl = _lbl;
	 this.mandFlag = _mandFlag;
	 this.formatCode = _formatCode;
	 this.nullValue = _nullValue; 
	 this.callback = _callback;
 	 this.maxlength = _maxlength;
 	 this.trimInputText = function()
	 {
     	// Null checking added by Sushil on 16 June 2007
		el = this.getElement(this.id);
		if(el != null)
		{
			text = el.value;			
			if(text != null && text != "" && text != this.nullValue)
			{
				while(text.charAt(0)==' ')
					text=text.substring(1,text.length )
				while(text.charAt(text.length-1)==' ')
				text=text.substring(0,text.length-1)
			}
			el.value = text;
		}
	}
	// Get handle to the current element
	this.getInputText = function(){
	return this.getElement().value;
	}

	// Get handle to the current element
	this.getElement = function(){
	return document.getElementById(this.id);
	}

	// Get handle to the current element
	this.getLabelElement = function(){
	return document.getElementById(this.lbl);
	}
	
	
	/*this.delegateCallback = function()
	{
		if(this.callback != 'undefined' && this.callback != null )
		{
			this.callback();
		}
		
	}*/
			
};

/*
 * ValidatorManager class have the methods for validating 
 * fields.
 * 
 * @param _labaleDivId  - Error Message title label ID for the mandetory fields 
 * @param _outputDivId	- Error message container ID
 *  
 */
 
ValidatorManager = function(_labelDivId,_outputDivId)
{
	this.labelDivId  = _labelDivId;
	this.outputDivId = _outputDivId;	
 	
 	this.ERROR_COLOR = "#CC3333"; //#EB7E00 , #f75801 - Orange, Red - #CC3333
 	this.ERROR_FONT_WEIGHT = "bold";	
 	this.ERROR_FONT_SIZE = "11";
	this.INVISIBLE		 = "none";
	this.VISIBLE		 = "block";
	this.BULLET			 = "&#187;"
	
	//checkMandetory(arr) ........ attached later
	//checkFormat(arr)    ........ attached later	
	
	this.setErrorStyle = function (_el,_modeFlag,_visible)
	{
		if(_el != null)
		{
			if(_modeFlag)
			{

				_el.style.fontWeight= 	this.ERROR_FONT_WEIGHT;
				_el.style.fontSize 	= 	this.ERROR_FONT_SIZE;				
				_el.style.color		= 	this.ERROR_COLOR;			
				_el.style.indent	= 	this.ERROR_COLOR;			
				
			}
			else
			{
				_el.style.fontWeight = 	"";
				_el.style.color		= 	"";							
			}
			
			_el.style.display	=	_visible;				
		}
		else
		{
			var ele = document.getElementById(this.labelDivId);			
			if(ele != null )
			{
				this.setErrorStyle(ele,_modeFlag,_visible)
				return;
			}
		}		
	}	
}

ValidatorManager.prototype.checkMandetory = function(arr)
{
		var i;
		var focusFlag 		= false;
		var errorFlag = false;
		var	msgLabel 		= document.getElementById(this.labelDivId); 
		var focusEl = null;

		for(i = 0; i < arr.length; i++)
		{
			var el;
			var lbEl;
			var validatorObj = arr[i];         
            var yFlag;   
			
			if(validatorObj != null && validatorObj.mandFlag == 1)
			{
				el 	= validatorObj.getElement();				
						
				//trimming is not application to select component
				if(el != null && el.type != 'select-one')
				{
					validatorObj.trimInputText();
				}
				
				var inputText = validatorObj.getInputText();								
				
				lbEl= validatorObj.getLabelElement();						
				
				if(validatorObj.nullValue=='y' && !el.checked)//for checking supervisory experience 
				{
				   	yFlag = false;
				}
	          
				if((inputText.length == 0 || inputText == validatorObj.nullValue) ||
				   (validatorObj.nullValue=='n' && !el.checked && yFlag == true))
				{
					this.setErrorStyle(lbEl,true,this.VISIBLE);

					if(!focusFlag)
					{
						focusEl = validatorObj.getElement();
						try{
							focusEl.focus();
						}catch(e){}
			
						errorMessageContainer = document.getElementById(this.outputDivId);

						if(errorMessageContainer != null)
						{
							this.setErrorStyle(msgLabel,false,this.VISIBLE);

						}
			
						errorFlag = true;
						focusFlag = true;										
					}				 						
				}
				else 
				{
					this.setErrorStyle(lbEl,false,this.VISIBLE);
					
				}
			}				
		}

		if(msgLabel != null && errorFlag)
		{
				this.setErrorStyle(msgLabel,true,this.VISIBLE);
		}
		else if(msgLabel != null && !errorFlag)
		{
				this.setErrorStyle(msgLabel,false,this.VISIBLE);
		}
		
		return (!errorFlag);			
	}

	ValidatorManager.prototype.checkFormat = function(arr)
	{
		var i;
		var str = "";		
		var flag = true;
		var el;
		var lbEl;
		var inputText;
		var errorMsg = "";
		var errorCounter = 0;
		var validatorObj =null;
		var labelStr = ""
		var	errorMessageContainer = document.getElementById(this.outputDivId); 
		var errSet = false;//error is set already so as to not display same ofr second time
		var errSet1 = false;
		var errSet2 = false;
		var errSetCurrent = false;
		var errSetPhone = false;
		var errSetBedHospital =false;
		var errSetBedUnit =false;
		var errSetFrmTo = false;
		var errValidDate =false;
		var errValidDate1 =false;
		
		frmDate = new Date();	
	    toDate = new Date();
	    d= new Date();
	     var month;
	      
		for(i=0; i <arr.length ;i++)
		{
			validatorObj = arr[i] ;
								
			if(validatorObj != null)
			{
				el 	= validatorObj.getElement();						

				//trimming is not application to select component
				if(el != null && el.type != 'select-one')
				{
					validatorObj.trimInputText();
				}
				
				lbEl= validatorObj.getLabelElement();		
				inputText = validatorObj.getInputText();			
				if(inputText.length == 0)
					this.setErrorStyle(lbEl,false,this.VISIBLE);						
				if(inputText.length != 0)// added because in IE, giving problem , even if values are empty
				if(inputText != validatorObj.nullValue || inputText != null || inputText != "null" )
				{
					switch(validatorObj.formatCode)
					{
						case 0 :	break;

									
						case 1 :	// email Address Validation
									if(!isEmail(inputText))
									{
										labelStr = new String(lbEl.innerHTML);
										str = labelStr.substring(0,labelStr.indexOf(":"));
										errorMsg += this.BULLET +" Please enter a valid " +str+"<br>&nbsp;&nbsp;&nbsp;<font style='weight:normal'>(eg. jmartin@medstaffinc.com)<br>";
										
										if(flag)
										{
											validatorObj.getElement().focus();
										}
//									
										/*validatorObj.delegateCallback();*/
										this.setErrorStyle(lbEl,true,this.VISIBLE);						
										flag = false;
									}
									else
									{
									this.setErrorStyle(lbEl,false,this.VISIBLE);
									}
									break;
						
						case 2 :	// Text Validation
									if(!validateTextFormat(inputText))
									{
										labelStr = new String(lbEl.innerHTML);
										str = labelStr.substring(0,labelStr.indexOf(":"));
										errorMsg += this.BULLET +" Please enter a valid " +str+"<br>";
										if(flag)
										{
											validatorObj.getElement().focus();
										}
//										validatorObj.delegateCallback();
										this.setErrorStyle(lbEl,true,this.VISIBLE);
										flag = false;
									}
									break;

						case 4:
									break;

						case 3 :	if(!isPhoneNumber(inputText))
									{
										labelStr = new String(lbEl.innerHTML);
										str = labelStr.substring(0,labelStr.indexOf(":"));
										errorMsg += this.BULLET +" Please enter a valid " +str+"<br>";
	
										if(flag)
										{
											validatorObj.getElement().focus();
										}
//										validatorObj.delegateCallback();
										this.setErrorStyle(lbEl,true,this.VISIBLE);
										flag = false;
									}
									break;
									
						case 11 ://validation for password in landing
									re = /[0-9]/;
									re1 = /[a-z]/;
									re2 = /[A-Z]/;
									pass = inputText;
									if(inputText.length < 6) 									
									{	
										errorMsg += this.BULLET+" Password must contain at least six characters!<br>";
										if(flag)
										{
											validatorObj.getElement().focus();
										}
//										validatorObj.delegateCallback();
										this.setErrorStyle(lbEl,true,this.VISIBLE);
										flag = false;
									}
									
									else if(!re.test(inputText)) 
									{ 
										errorMsg += this.BULLET+" Password must contain at least one number (0-9)!<br>";
										if(flag)
										{
											validatorObj.getElement().focus();
										}
//										validatorObj.delegateCallback();
										this.setErrorStyle(lbEl,true,this.VISIBLE);
										flag = false;
	
									} 
									else if(!re1.test(inputText))
									{ 
										errorMsg += this.BULLET+" Password must contain at least one lowercase letter (a-z)!<br>";
										if(flag)
										{
											validatorObj.getElement().focus();
										}
//										validatorObj.delegateCallback();
										this.setErrorStyle(lbEl,true,this.VISIBLE);
										flag = false;
									}
									else if(!re2.test(inputText))
									{ 
										errorMsg += this.BULLET+" Password must contain at least one uppercase letter (A-Z)!<br>";
										if(flag)
										{
											validatorObj.getElement().focus();
										}
//										validatorObj.delegateCallback();
										this.setErrorStyle(lbEl,true,this.VISIBLE);
										flag = false;
									} 
									break;	
					
					case 12: // validation for confirm password field in landing page
					          if(inputText != pass)
					          {
					          	errorMsg += this.BULLET+" Password and Confirmed password values must be same<br>";
									if(flag)
									{
										validatorObj.getElement().focus();
									}
//									validatorObj.delegateCallback();
									this.setErrorStyle(lbEl,true,this.VISIBLE);
									flag = false;
								} 
							    break;
							    
		           case 13 : //get date validation mm/yyyy 
        	    			  dateFrom = inputText;			
            				 if(inputText != null && inputText != "null")
			    	     	{	         
					          if(inputText.length < validatorObj.maxlength-1)
						      {									
					    	      if(!errValidDate1)
						        	{
								         errorMsg += this.BULLET+" Please Enter a valid Date in  mm/yyyy  format <br>";
									     errValidDate1 =true;
								    }
								  if(flag)
									{
										validatorObj.getElement().focus();
									}
									this.setErrorStyle(lbEl,true,this.VISIBLE);
									flag = false;
							  	}
							  else
							  {
						        	 dateFrom_array=inputText.split("/");
						         	 frmDate.setMonth(dateFrom_array[0]-1);
	
							         // For Four Digit Year 
	   								if( dateFrom_array[1].length >4||dateFrom_array[1].length <4)
						        	{
							       		if(!errSet1)//to avoid message to display twice	
										{
								          	errorMsg += this.BULLET+" Year value must be of Four Digits <br>";
								          	errSet1 = true;
								         }
								        if(flag)
										{
											validatorObj.getElement().focus();
										}
										this.setErrorStyle(lbEl,true,this.VISIBLE);
										flag = false;
						  			}
		
						         // For month Values       
						         if( dateFrom_array[0]<1 || dateFrom_array[0]>12 )
						          {
									if(!errSet)//to avoid message to display twice	
									{
							          errorMsg += this.BULLET+" Month value must be between 1-12<br> ";
							          errSet = true;
							        }
							        if(flag)
									{
										validatorObj.getElement().focus();
									}
									this.setErrorStyle(lbEl,true,this.VISIBLE);
									flag = false;
						          }
							          /*else
						          {
						          	this.setErrorStyle(lbEl,false,this.VISIBLE);
						          }	*/
							  frmDate.setFullYear(dateFrom_array[1]);	
							    month = d.getMonth()+1;
	 							//frm date needs to be less than current date 
								 if((dateFrom_array[0]> month && dateFrom_array[1]>= d.getFullYear())||(dateFrom_array[1]> d.getFullYear()))				
	 							  {
	 							   errorMsg += this.BULLET+" Date must be less than current date<br>";
								    if(flag)
									{
									validatorObj.getElement().focus();
									}
									this.setErrorStyle(lbEl,true,this.VISIBLE);
									flag = false;
								 }   		  					          
							}	
						}  
				          break;
		
					case 14 : //date validation
						         dateTo = inputText;
						         if(inputText != null && inputText != "null")
						         {
							         dateTo_array=inputText.split("/");						         
							         toDate.setMonth(dateTo_array[0]-1);
									 toDate.setFullYear(dateTo_array[1]);
									 var monthFlag = false;
									 var dateFlag = false;
									 var yearFlag = false;
								     if(dateTo_array[0]<1 || dateTo_array[0]>12 )
							          {
							            monthFlag = true;
		             				    if(!errSet)//to avoid message to display twice
			             				    errorMsg += this.BULLET+" Month value must be between 1-12<br> ";
							          }
							          // For Four Digit Year 
			   							if( dateTo_array[1].length >4||dateTo_array[1].length <4)
								        {  yearFlag= true;
								       		if(!errSet1)//to avoid message to display twice	
											{
									          	errorMsg += this.BULLET+" Year value must be of Four Digits <br>";
									          	errSet1 = true;
									         }
									        				
								  		}
						             else if(frmDate > toDate)
								     {
								     	dateFlag = true;
								     	 if(!errSetFrmTo)
									     {		
								     	errorMsg += this.BULLET+" To date must be greater than from date<br>";
								     errSetFrmTo = true;
								     }
								     }	
								     if(monthFlag || dateFlag ||yearFlag)
								     {
								     	if(flag)
										{
											validatorObj.getElement().focus();
										}
										this.setErrorStyle(lbEl,true,this.VISIBLE);
										flag = false;
								     }
								   }  
								break;
					case 15 :	//phone number and ssn validation			
								if(inputText.length < validatorObj.maxlength)
								{
									if(validatorObj.maxlength==12)      
									{
										if(!errSetPhone)
										{
											errorMsg += this.BULLET+" Please Enter a valid phone number (eg. 111-111-1111)<br>";
											errSetPhone = true;
										}	
									}
									else if(validatorObj.maxlength==11)      
									{
										errorMsg += this.BULLET+" Please Enter a valid ssn number<br>";
									}
									else if(validatorObj.maxlength==5)
									{
										errorMsg += this.BULLET+" Please Enter a valid zip code<br>";
									}
									if(flag)
									{
										validatorObj.getElement().focus();
									}
									this.setErrorStyle(lbEl,true,this.VISIBLE);
									flag = false;
								}
								else
								{
									this.setErrorStyle(lbEl,false,this.VISIBLE);
								}
								break;
               	
               	case 16 : // Date validation used in professional.jsp for date you graduated and for incident date in legal.jsp
		            			  dateFrom = inputText;				  
		            			  if(inputText != null && inputText != "null")
						         {  
						         if(inputText.length < validatorObj.maxlength-1)
								      {									
								          if(!errValidDate1)
								         {
								         errorMsg += this.BULLET+" Please Enter a valid Date in  mm/yyyy  format <br>";
									     errValidDate1 =true;
									      }
									  if(flag)
											{
												validatorObj.getElement().focus();
											}
											this.setErrorStyle(lbEl,true,this.VISIBLE);
											flag = false;
									  }
									  else
									  {
						           
						        	  dateFrom_array=inputText.split("/");
							          frmDate.setMonth(dateFrom_array[0]-1);
							          frmDate.setFullYear(dateFrom_array[1]);		
							          var optFlag = false;
							        
							          month = d.getMonth()+1;
	 								 //dates need to be less than current date for experiences except than current experience
									  if((dateFrom_array[0]> month && dateFrom_array[1]>= d.getFullYear())||(dateFrom_array[1]> d.getFullYear()))				
	 								  {
	 								  	if(!errSetCurrent)//to avoid message to display twice	
										{
									        errorMsg += this.BULLET+" Date must be less than current date<br>";
									        if(flag)
											{
												validatorObj.getElement().focus();
											}
											this.setErrorStyle(lbEl,true,this.VISIBLE);
											flag = false;
											errSetCurrent = true;
									         // errSet1 = true;
									     }
							           }
							           else
	                                   {						         
								          //year values 
								          if( dateFrom_array[1].length >4||dateFrom_array[1].length <4)
								          {
								           if(!errSet1)//to avoid message to display twice	
											{
									        	errorMsg += this.BULLET+" Year value must be of Four Digits <br>";
									        	if(flag)
												{
													validatorObj.getElement().focus();
												}
												this.setErrorStyle(lbEl,true,this.VISIBLE);
												flag = false;
										        errSet1 = true;
									         }
								          }
								          // For month Values       
								         if(dateFrom_array.length!=0 || dateFrom_array != null)	
								          if( dateFrom_array[0]<1 || dateFrom_array[0]>12 )
								          {
											if(!errSet)//to avoid message to display twice	
											{
									          	errorMsg += this.BULLET+" Month value must be between 1-12 <br>";
									          	 if(flag)
												{
													validatorObj.getElement().focus();
												}
												this.setErrorStyle(lbEl,true,this.VISIBLE);
												flag = false;
									          	errSet = true;
									         }
								          }
								          if(!errSet && !errSet1)
									          	this.setErrorStyle(lbEl,false,this.VISIBLE);
										        				          
										}
									}
								}	
		     					break;
					case 17 : //date validation
						         dateTo = inputText;
						         if(inputText != null && inputText != "null")
						         {
						         
							         dateTo_array=inputText.split("/");						         
							       	 toDate.setMonth(dateTo_array[0]-1);
									 toDate.setFullYear(dateTo_array[1]);
									 var monthFlag = false;
									 var dateFlag = false;
							           //dates need to be less than current date for experiences except than current experience
	 								  if((dateFrom_array[0]> month && dateFrom_array[1]>= d.getFullYear())||(dateFrom_array[1]> d.getFullYear()))								
	 								  {
	 								  	if(!errSetCurrent)//to avoid message to display twice	
										{
								          errorMsg += this.BULLET+" Date must be less than current date<br>";
								          if(flag)
											{
												validatorObj.getElement().focus();
											}
											this.setErrorStyle(lbEl,true,this.VISIBLE);
											flag = false;
											errSetCurrent = true;
								         //errSet1 = true;
								         }
							          }
	 						           else
	                                   {						         
								         if(dateTo_array[0]<1 || dateTo_array[0]>12 )
								          {
								            monthFlag = true;
			             				    if(!errSet)//to avoid message to display twice
				             				{    
												errorMsg += this.BULLET+" Month value must be between 1-12 <br>";
                                                errSet=true;								          
											}	
								          }
							             else if(frmDate > toDate)
									     { 
									     dateFlag = true;
									     if(!errSetFrmTo)
									     {									   
									      	
									     	errorMsg += this.BULLET+" To date must be greater than from date<br>";
									        errSetFrmTo=true;
									      }
									      }	
									     if(monthFlag || dateFlag)
									     	{
									     		if(flag)
												{
													validatorObj.getElement().focus();
												}
												this.setErrorStyle(lbEl,true,this.VISIBLE);
												flag = false;
												
									      }
										}//else	
									}	
								 	break;
									 	
						
									 	
						case 18: // for No of Beds Validation in workhistory.jsp 
						        // For greater than 0
					          unit=parseInt(inputText);
					          if(inputText <= 0)
					          {
					           if(!errSetBedUnit)
					           {
						          	errorMsg += this.BULLET+" No of Beds in the Unit should be greater than 0 <br>";
									if(flag)
									{ 
									validatorObj.getElement().focus();
									}
//									validatorObj.delegateCallback();
									this.setErrorStyle(lbEl,true,this.VISIBLE);
									flag = false;
									errSetBedUnit =true;
								} 
					         }
					          else
						          this.setErrorStyle(lbEl,false,this.VISIBLE);
					           break;

					   case 19: // For No of beds in Hospital greater than No of Beds in Unit
					        var noTag=false;
					        var hosTag=false;
					          fac = parseInt(inputText);
					         // if(unit!="" && fac!="") // No need to check as it has been already checked in the starting of function, hence this condn. causing prblm 
					        // {
					          if(fac <= 0)
					           {
					             noTag = true;
						           if(!errSetBedHospital)
						           {
						          		errorMsg += this.BULLET+" No of Beds in the Hospital should be greater than 0 <br>";
									}
								}
								if(unit >= fac)
								{
									hosTag=true;								
									 if(!errSetBedHospital)
							           {
										errorMsg += this.BULLET+" No of Beds in Hospital should be greater than No of Beds in Unit <br>";
										}	
								}
								/*if(unit.length != 0||unit.value != "" || unit!=null )
								{
								 if(inputText.length == 0 || inputText == validatorObj.nullValue|| inputText.value==" "||inputText==null)
								 {
								 errorMsg += this.BULLET+" Please Enter the value for No of Beds in Hospital. <br>";
								 }
								}*/
								if(noTag||hosTag)
								{
                                  if(flag)
                                  {
									validatorObj.getElement().focus();
								   }
//									validatorObj.delegateCallback();
									this.setErrorStyle(lbEl,true,this.VISIBLE);
									flag = false;
                                  	errSetBedHospital =true;
								 }	
								 		
					             else 
						          	this.setErrorStyle(lbEl,false,this.VISIBLE);		
					//	      }    		
                    			 break;
					  	
					  case 20 : //Validation for date of expiry for format(mm/dd/yyyy)and employee Gap FROM_DATE
		            			 dateFrom = inputText;	
           			             if(inputText != null && inputText != "null")
						         {
   						          if(inputText.length < validatorObj.maxlength-2)
								      {									
								          if(!errValidDate)
								         {
								         errorMsg += this.BULLET+" Please Enter a valid Date in  mm/dd/yyyy  format <br>";
									      errValidDate =true;
									      }
									  if(flag)
											{
												validatorObj.getElement().focus();
											}
											this.setErrorStyle(lbEl,true,this.VISIBLE);
											flag = false;
								 					  						  								  							  
									  }
									  else
									  {
						             	 frmDate = new Date();
							             dateFrom_array=inputText.split("/");
								         frmDate.setMonth(dateFrom_array[0]-1);
								         frmDate.setDate(dateFrom_array[1]);
								         frmDate.setFullYear(dateFrom_array[2]);
								         month = d.getMonth()+1;
		 								 //dates need to be less than current date for experiences except than current experience
										  if((dateFrom_array[0]> month && dateFrom_array[2]>= d.getFullYear()&& dateFrom_array[1]>d.getDate())||(dateFrom_array[2]> d.getFullYear())||(dateFrom_array[0]> month && dateFrom_array[2]>= d.getFullYear())||(dateFrom_array[1]>d.getDate()&& dateFrom_array[0]>=month && dateFrom_array[2]>=d.getFullYear()) )				
		 								  {
		 								  	if(!errSetCurrent)//to avoid message to display twice	
											{
										        errorMsg += this.BULLET+" Date must be less than current date<br>";
										        if(flag)
												{
													validatorObj.getElement().focus();
												}
												this.setErrorStyle(lbEl,true,this.VISIBLE);
												flag = false;
												errSetCurrent = true;
										         // errSet1 = true;
										     }
								           }
								           else
		                                   {						         
										          //year values 
										        if(dateFrom_array.length!=0 || dateFrom_array != null || dateFrom_array!='null')	
										        if( dateFrom_array[2].length >4||dateFrom_array[2].length <4)// For Four Digit Year 
									    	    {
										        	   if(!errSet1)//to avoid message to display twice	
														{
											          		errorMsg += this.BULLET+" Year value must be of Four Digits <br>";
											          		errSet1 = true;
											         	}
											          	if(flag)
														{
															validatorObj.getElement().focus();
														}
														this.setErrorStyle(lbEl,true,this.VISIBLE);
														flag = false;
									         	 }
												if(dateFrom_array.length!=0 || dateFrom_array != null)							         
									          	if( dateFrom_array[0]<1 || dateFrom_array[0]>12 )// For month Values       
									          	{
													if(!errSet)//to avoid message to display twice	
													{
										          		errorMsg += this.BULLET+" Month value must be between 1-12<br> ";
										          		errSet = true;
										         	}
										          	if(flag)
													{
														validatorObj.getElement().focus();
													}
													this.setErrorStyle(lbEl,true,this.VISIBLE);
													flag = false;
									          	}
									            else
									         		 this.setErrorStyle(lbEl,false,this.VISIBLE);
									 		} 	
										}
									}						
						          break;
			          case 21 : //Validation for date of expiry for format(mm/dd/yyyy)and TO_DATE
		            			 dateTo = inputText;	
		            			 var monthFlag = false;
								 var dateFlag = false;			 
           			             if(inputText != null && inputText != "null")
						         {
						          if(inputText.length < validatorObj.maxlength-2)
								      {									
								         if(!errValidDate)
								         {
								         	errorMsg += this.BULLET+" Please Enter a valid Date in  mm/dd/yyyy  format  <br>";
									      	errValidDate =true;
									      }
									  	 if(flag)
										 {
											validatorObj.getElement().focus();
										 }
										 this.setErrorStyle(lbEl,true,this.VISIBLE);
										 flag = false;
									  }
									  else
									  {
								         dateTo_array=inputText.split("/");
								         toDate = new Date();
								         toDate.setMonth(dateTo_array[0]-1);
								         toDate.setDate(dateTo_array[1]);
								         toDate.setFullYear(dateTo_array[2]);
								         month = d.getMonth()+1;
	 								 
	 								 	//dates need to be less than current date for experiences except than current experience
									  	if((dateTo_array[0]> month && dateTo_array[2]>= d.getFullYear()&& dateTo_array[1]>d.getDate())||(dateTo_array[2]> d.getFullYear())||(dateTo_array[0]> month && dateTo_array[2]>= d.getFullYear())||(dateTo_array[1]>d.getDate()&& dateTo_array[0]>=month && dateTo_array[2]>=d.getFullYear()) )				
	 								  	{
	 								  		if(!errSetCurrent)//to avoid message to display twice	
											{
									        	errorMsg += this.BULLET+" Date must be less than current date<br>";
										        if(flag)
												{
													validatorObj.getElement().focus();
												}
												this.setErrorStyle(lbEl,true,this.VISIBLE);
												flag = false;
												errSetCurrent = true;
										         // errSet1 = true;
										     }
							           }
							           else
	                                   {						 
								         if(dateTo_array.length!=0 || dateTo_array != null || dateTo_array!='null')	
								         if( dateTo_array[2].length >4||dateTo_array[2].length <4)// For Four Digit Year 
								          {
									        if(!errSet1)//to avoid message to display twice	
											{
										         errorMsg += this.BULLET+" Year value must be of Four Digits <br>";
								    		     errSet1 = true;
								        	}
								       		if(flag)
											{
												validatorObj.getElement().focus();
											}
											this.setErrorStyle(lbEl,true,this.VISIBLE);
											flag = false;
							         	}
										if(dateTo_array.length!=0 || dateTo_array != null)							         
							          	if( dateTo_array[0]<1 || dateTo_array[0]>12 )// For month Values       
							          	{
											if(!errSet)//to avoid message to display twice	
											{
									    	  monthFlag = true;
									          errorMsg += this.BULLET+" Month value must be between 1-12<br> ";
									          errSet = true;
								         	}
								         	if(flag)
											{
												validatorObj.getElement().focus();
											}
											this.setErrorStyle(lbEl,true,this.VISIBLE);
											flag = false;
							          	}
							          	if(dateTo_array.length!=0 || dateTo_array != null)							         
									    if( dateTo_array[1]<1 || dateTo_array[1]>31 )// For date Values       
									     {
											if(!errSet2)//to avoid message to display twice	
											{
										         errorMsg += this.BULLET+" Please Enter a valid date<br> ";
										         errSet2 = true;
										    }
										    if(flag)
											{
												validatorObj.getElement().focus();
											}
											this.setErrorStyle(lbEl,true,this.VISIBLE);
											flag = false;
									    } 
							            if(frmDate > toDate)
									    { 
									      	dateFlag = true;
									    	if(!errSetFrmTo && !errSet && !errSet1 && !errSet2)
									     	{									   
										     	errorMsg += this.BULLET+" To date must be greater than from date<br>";
										        errSetFrmTo=true;
										    }
									     }	
									     if(monthFlag || dateFlag)
									     {
									     	if(flag)
											{
												validatorObj.getElement().focus();
											}
											this.setErrorStyle(lbEl,true,this.VISIBLE);
											flag = false;
										}
										//}//else	
										//}
							        /*  else
							           	 this.setErrorStyle(lbEl,false,this.VISIBLE);*/
							          }
									}
								}
						  	    break;
				    case 22 : //get date validation mm/dd/yyyy not considering current date validation(Date must be less than current date)
			            								
								    dateFrom = inputText;
			            			  			
			            			 if(inputText != null && inputText != "null")
						         	{	         
									      if(inputText.length < validatorObj.maxlength-2)
									      {									
										       if(!errValidDate)
										        {
											         errorMsg += this.BULLET+" Please Enter a valid Date in  mm/dd/yyyy  format <br>";
												     errValidDate =true;
											     }
											  	if(flag)
												{
													validatorObj.getElement().focus();
												}
												this.setErrorStyle(lbEl,true,this.VISIBLE);
												flag = false;
										  }
										  else
										  {
									                  
									         dateFrom_array=inputText.split("/");
									         frmDate.setMonth(dateFrom_array[0]-1);
									         frmDate.setDate(dateFrom_array[1]);
									         frmDate.setFullYear(dateFrom_array[2]);			
									    	 // For Four Digit Year 
				   							if( dateFrom_array[2].length >4||dateFrom_array[2].length <4)
									        {
									       		if(!errSet1)//to avoid message to display twice	
												{
										          	errorMsg += this.BULLET+" Year value must be of Four Digits <br>";
										          	errSet1 = true;
										         }
										        if(flag)
												{
													validatorObj.getElement().focus();
												}
												this.setErrorStyle(lbEl,true,this.VISIBLE);
												flag = false;
									  		}
									         // For month Values       
									         if( dateFrom_array[0]<1 || dateFrom_array[0]>12 )
									          {
												if(!errSet)//to avoid message to display twice	
												{
										          errorMsg += this.BULLET+" Month value must be between 1-12<br> ";
										          errSet = true;
										         }
										          if(flag)
													{
														validatorObj.getElement().focus();
													}
													this.setErrorStyle(lbEl,true,this.VISIBLE);
													flag = false;
									          }
									          if(dateFrom_array.length!=0 || dateFrom_array != null)							         
										          if( dateFrom_array[1]<1 || dateFrom_array[1]>31 )// For date Values       
										          {
													if(!errSet2)//to avoid message to display twice	
													{
											          errorMsg += this.BULLET+" Please Enter a valid date value<br> ";
											          errSet2 = true;
											         }
											          if(flag)
														{
															validatorObj.getElement().focus();
														}
														this.setErrorStyle(lbEl,true,this.VISIBLE);
														flag = false;
										          } 
											}
									}	  
							          break;
					
					case 23 : //date validation mm/dd/yyyy for Current Position in workhistory.jsp
						         dateTo = inputText;
						         if(inputText != null && inputText != "null")
						         {
							          if(inputText.length < validatorObj.maxlength-2)
								      {									
								          if(!errValidDate)
								         {
								         errorMsg += this.BULLET+" Please Enter a valid Date in  mm/dd/yyyy  format <br>";
									      errValidDate =true;
									      }
									  if(flag)
											{
												validatorObj.getElement().focus();
											}
											this.setErrorStyle(lbEl,true,this.VISIBLE);
											flag = false;
								 					  						  								  							  
									  }
									  else
									  {
								         dateTo_array=inputText.split("/");						         
								         toDate.setMonth(dateTo_array[0]-1);
								         toDate.setDate(dateTo_array[1]);
								         toDate.setFullYear(dateTo_array[2]);
										 var monthFlag = false;
										 var dateFlag = false;
									     if(dateTo_array[0]<1 || dateTo_array[0]>12 )
								          {
								            monthFlag = true;
			             				    if(!errSet)//to avoid message to display twice
				             				    errorMsg += this.BULLET+" Month value must be between 1-12<br> ";
								          }
							             if( dateTo_array[2].length >4||dateTo_array[2].length <4)
									        {
									       		if(!errSet1)//to avoid message to display twice	
												{
										          	errorMsg += this.BULLET+" Year value must be of Four Digits <br>";
										          	errSet1 = true;
										         }
										        if(flag)
												{
													validatorObj.getElement().focus();
												}
												this.setErrorStyle(lbEl,true,this.VISIBLE);
												flag = false;
									  		}
									  		if(dateTo_array.length!=0 || dateTo_array != null)							         
										          if( dateTo_array[1]<1 || dateTo_array[1]>31 )// For date Values       
										          {
													if(!errSet2)//to avoid message to display twice	
													{
											          errorMsg += this.BULLET+" Please Enter a valid date value<br> ";
											          errSet2 = true;
											         }
											          if(flag)
														{
															validatorObj.getElement().focus();
														}
														this.setErrorStyle(lbEl,true,this.VISIBLE);
														flag = false;
										          } 
							             if(frmDate > toDate)
									     {
									     	dateFlag = true;
											if(!errSetFrmTo && !errSet && !errSet1 && !errSet2)
										     {									   
										      	
										     	errorMsg += this.BULLET+" To date must be greater than from date<br>";
										        errSetFrmTo=true;
										      }
	
									     }	
									     if(monthFlag || dateFlag)
									     {
									     	if(flag)
											{
												validatorObj.getElement().focus();
											}
											this.setErrorStyle(lbEl,true,this.VISIBLE);
											flag = false;
									     }
								    } 
								   } 
								break;
								
								
				case 24 : //Validation for date of expiry for format(mm/dd/yyyy)
		            			 if(inputText != validatorObj.nullValue)
		            			 {         			
			            			 dateFrom = inputText;	
			            			 
	           			             if(inputText != null && inputText != "null")
							         {
	   						          if(inputText.length < validatorObj.maxlength-2)
									      {									
									          if(!errValidDate)
									         {
									         errorMsg += this.BULLET+" Please Enter a valid Date in  mm/dd/yyyy  format <br>";
										      errValidDate =true;
										      }
										  if(flag)
												{
													validatorObj.getElement().focus();
												}
												this.setErrorStyle(lbEl,true,this.VISIBLE);
												flag = false;
									 					  						  								  							  
										  }
										  else
										  {
							            	dateFrom_array=inputText.split("/");
								         	frmDate.setMonth(dateFrom_array[0]-1);
								         	frmDate.setDate(dateFrom_array[1]);
								         	frmDate.setFullYear(dateFrom_array[2]);
								         
								         	 month = d.getMonth()+1;
		 								 	  //year values 
								         							         	
								         	 if(dateFrom_array.length!=0 || dateFrom_array != null || dateFrom_array!='null')	
								        	 if( dateFrom_array[2].length >4||dateFrom_array[2].length <4)// For Four Digit Year 
								         	{
								           		if(!errSet1)//to avoid message to display twice	
												{
									        	  errorMsg += this.BULLET+" Year value must be of Four Digits <br>";
									         	  errSet1 = true;
									        	}
									          	if(flag)
												{
													validatorObj.getElement().focus();
												}
												this.setErrorStyle(lbEl,true,this.VISIBLE);
												flag = false;
								        	 }
											if(dateFrom_array.length!=0 || dateFrom_array != null)							         
								         	 if( dateFrom_array[0]<1 || dateFrom_array[0]>12 )// For month Values       
								          	{
												if(!errSet)//to avoid message to display twice	
												{
									          		errorMsg += this.BULLET+" Month value must be between 1-12<br> ";
									         		 errSet = true;
									         	}
									          	if(flag)
												{
													validatorObj.getElement().focus();
												}
												this.setErrorStyle(lbEl,true,this.VISIBLE);
												flag = false;
								         	 }
								          	if(dateFrom_array.length!=0 || dateFrom_array != null)							         
										          if( dateFrom_array[1]<1 || dateFrom_array[1]>31 )// For date Values       
										          {
													if(!errSet2)//to avoid message to display twice	
													{
											          errorMsg += this.BULLET+" Please Enter a valid date value<br> ";
											          errSet2 = true;
											         }
											          if(flag)
														{
															validatorObj.getElement().focus();
														}
														this.setErrorStyle(lbEl,true,this.VISIBLE);
														flag = false;
										          } 
								                  else if(!errSet && !errSet1 && !errSet2)//in order to make errored label invisible
								         	 		this.setErrorStyle(lbEl,false,this.VISIBLE);
										 } 	
										}
									}
									else
						    	 		this.setErrorStyle(lbEl,false,this.VISIBLE);					
						          break;
						          
		           case 25 : //get date validation mm/yyyy 
	            			  dateFrom = inputText;			
	            			 if(inputText != null && inputText != "null")
				         		{	         
						          if(inputText.length < validatorObj.maxlength-1)
						     	 {									
							          if(!errValidDate1)
							         {
							         errorMsg += this.BULLET+" Please Enter a valid Date in  mm/yyyy  format <br>";
								      errValidDate1 =true;
								      }
									  if(flag)
											{
												validatorObj.getElement().focus();
											}
											this.setErrorStyle(lbEl,true,this.VISIBLE);
											flag = false;
							 	 }
							  else
							  {
						         	 dateFrom_array=inputText.split("/");
						         	 frmDate.setMonth(dateFrom_array[0]-1);
						         // For Four Digit Year 
	   								if( dateFrom_array[1].length >4||dateFrom_array[1].length <4)
						       		 {
							       		if(!errSet1)//to avoid message to display twice	
										{
								          	errorMsg += this.BULLET+" Year value must be of Four Digits <br>";
								          	errSet1 = true;
								         }
								        if(flag)
										{
											validatorObj.getElement().focus();
										}
										this.setErrorStyle(lbEl,true,this.VISIBLE);
										flag = false;
						  			}
						        	 // For month Values       
						         	if( dateFrom_array[0]<1 || dateFrom_array[0]>12 )
						         	 {
										if(!errSet)//to avoid message to display twice	
										{
								          errorMsg += this.BULLET+" Month value must be between 1-12<br> ";
								          errSet = true;
								         }
								        if(flag)
										{
												validatorObj.getElement().focus();
										}
										this.setErrorStyle(lbEl,true,this.VISIBLE);
										flag = false;
						          	}
						          	 else
							          {
							          	this.setErrorStyle(lbEl,false,this.VISIBLE);
							          }	
									  frmDate.setFullYear(dateFrom_array[1]);						          
								}	
							}  
					          break;
               	}
		}
    }
 }  
		if(errorMessageContainer != null)
		{
			if(!flag)
			{
				errorMsg = "<p class='error_text_header'>Following fields are not filled correctly :</p>"
				+"<p class='error_text'>"+ errorMsg + "</p>";
				errorMessageContainer.innerHTML = errorMsg;
				errorMessageContainer.className = "error_box";
				errorMessageContainer.innerHTML.className = "error_text";				

				this.setErrorStyle(errorMessageContainer,true,this.VISIBLE);
//								_el.className = "error_text";
			}
			else
			{
				errorMessageContainer.innerHTML = "";
				this.setErrorStyle(errorMessageContainer,false,this.INVISIBLE);
			}
		}			

		return flag;					
}



ValidatorManager.prototype.isOverlapping = function(arr)
{
	var flag = true;
	var errorMsg = "";
	var errorCounter = 0;
	var overlapErrorSet = false;
	var overlapErrorSet1 = false;
	var overlapErrorSet2 = false;
	var	errorMessageContainer = document.getElementById(this.outputDivId); 
		//Current gap dates should always be less than currrent start date fine
	 for(var arrCnt = 0;arrCnt<arr.length;arrCnt++)
	 {
       var obj = arr[arrCnt]; 	 
       var frmDate = new Date(obj.fromDate.value); 
	   var toDate = new Date(obj.toDate.value); 
       var frm_0 = new Date(obj.fromDateStore[0]);
       var to_0 = new Date(obj.toDateStore[0]);
       var label = document.getElementById(obj.label); 
       
       switch(obj.code)
       {
          case 0 : // validation for Current experience gap dates should be less than assignment dates
          			if(frm_0 >= frmDate || to_0 >= frmDate) 
					 {
				        if(!overlapErrorSet)
				        {
				         	errorMsg += this.BULLET+"Current experience gap dates should be less than assignment dates<br>";  
				         	overlapErrorSet = true;
				         	
				        } 	
				        this.setErrorStyle(label,true,this.VISIBLE);
				        flag = false;
					 }
          			break;
          case 1 : //validation for No assignment details dates will overlap with gap dates for prev experiences
       				 
       				 for (var i = 0 ; i <= obj.fromDateStore.length;)
					 {
					    var from = new Date(obj.fromDateStore[i]);
					    var to = new Date(obj.toDateStore[i]);
					    
						 if(obj.fromDateStore[i] instanceof Date)
						 {
							 if(  	(frmDate >= from && 
									frmDate <= to) || 
									(toDate >= from && 
									toDate <= to) 
									
								) 
								{
									if( i==0 && overlapErrorSet){;}//dont do anything case,so as to avoid 2 messages at a time 
								    else
								    {
										if(!overlapErrorSet1)
										{
											errorMsg += this.BULLET +"Gap dates Can not overlap with assignnment dates<br>";
											overlapErrorSet1 = true;
										}	
										this.setErrorStyle(label,true,this.VISIBLE);
										flag = false;
									}	
								}
						   }
								i++;
				   		 }
       				break;
       	
       	 case 2 : //validation for No assignment details dates will overlap with other assignment details dates for prev experiences
       				 
       				 for (var i = 0 ; i <= obj.fromDateStore.length;)
					 {
					    var from = new Date(obj.fromDateStore[i]);
					    var to = new Date(obj.toDateStore[i]);
					    
						 if(obj.fromDateStore[i] instanceof Date)
						 {
							 if(  	(frmDate >= from && 
									frmDate <= to) || 
									(toDate >= from && 
									toDate <= to)
								) 
								{
									if(overlapErrorSet1){;}//dont do anything case,so as to avoid 2 messages at a time 
								    else
								    {
										if(!overlapErrorSet2)
										{
											errorMsg += this.BULLET +"Assignment dates Can not overlap with other assignnment dates<br>";
											overlapErrorSet1 = true;
										}	
										this.setErrorStyle(label,true,this.VISIBLE);
										flag = false;
									}	
								}
						   }
								i++;
				   		 }
       				break;			
       }//switch
       
	   }//for
	   if(errorMessageContainer != null)
		{
			if(!flag)
			{
				errorMsg = "<p class='error_text_header'>Following fields are not filled correctly :</p>"
				+"<p class='error_text'>"+ errorMsg + "</p>";
				errorMessageContainer.innerHTML = errorMsg;
				errorMessageContainer.className = "error_box";
				errorMessageContainer.innerHTML.className = "error_text";				

				this.setErrorStyle(errorMessageContainer,true,this.VISIBLE);
//								_el.className = "error_text";
			}
			else
			{
				errorMessageContainer.innerHTML = "";
				this.setErrorStyle(errorMessageContainer,false,this.INVISIBLE);
			}
		}				
        return flag;
 }


DateValidator = function(_fromDateStore,_toDateStore,_fromDate,_toDate,_label,_isGap,_isFull,_code)
{
	this.fromDateStore = _fromDateStore;
	this.fromDate = _fromDate;
	this.toDate = _toDate;
	this.toDateStore = _toDateStore;
	this.isGap = _isGap;
    this.isFull = _isFull;
    this.label = _label;
    this.code = _code;

};
	