 //ProjectName	-	HPSProfessional On Site
//Purpose		-	Global Validations 

var vsHelpFileInfo = "1" //For Help
var vsHelpFileMode = "NEW" //For Help

var status ="Health Plan Systems"
//var msgDateFormat = "Please enter date in format: MM/DD/YYYY"
var msgDateFormat = "Format : MM/DD/YYYY"
var msgDateExceeds = "Date exceeds current date."
var msgPhoneFormat= "Format : 000-000-0000"
var msgFaxFormat= "Format : 000-000-0000"
var msgCellPhoneFormat= "Format: 000-000-0000"
var msgBeeperFormat= "Format: 000-000-0000"
var msgTaxFormat= "Format: 00-0000000"
var msgTaxSSNEINFormat= "Format: 000000000"
var msgSsnFormat = "Format: 000-00-0000"
var msgZipFormat = "Format: 00000-0000"
//var msgValidName = "Enter valid characters [Valid character set [A-Z],[a-z],space,comma,.,-,&]"
      /*
      Date			:	07/19/2004
      Name			:	siddiq
      Document Name	:	Insurance-Dental.doc
      BugID			:	Bug012
      Description	:	Full stop added and prompt (&) place altered
      */
var msgValidName = "Valid characters : [A-Z],[a-z],space,comma,full stop,&,hyphen."
var msgEmailFormat="Invalid Email address."
var sMsgXMLErr = "The page has encountered an error. Please try again!!"
var sEmptyMessage = " is empty."
var sMsgNoEncounterPending = "No Encounters pending to be billed."
var sMsgDemoUser = "Demonstration only. Please contact support@hpsprof.2hps.com for details"
var msgNotValid="Not a valid"
var msgZero="Invalid number "
var msgSave="Saved successfully"
var msgDelete="Deleted successfully"
var msgUpdate="Updated successfully"
var msgNotActivated= "Not Activated."
var msgNoPatients="No patient information available."
var msgPatientSelect="Select a patient."
var msgDiscountRateFormat="Format: 00.00"
var sMsgNoMatchPassword = "Password characters doesn't Match!!!"; //michael-08/04/2004

var sMsgInValidCCTrans = "Not a Valid Credit Card Payment! \nClick the button 'Credit Card Payment' to enter Credit Card Details and Process."; //michael-08/07/2004  

/*---------------------------------------------------------------------------------------------------------------------
UDF:
FUNCTION NAME	-	vfnXMLCodeCheck
PURPOSE			-   To load Description when Code is chosen 
ARGUMENTS		-	Object of the Code, Object of description, string
RETURN VALUE	-   Nil
---------------------------------------------------------------------------------------------------------------------*/

// FUNCTION NOT USED 

function vfnXMLCodeCheck(objCode,objDesc,sMsg)
{
	if(objCode.value!="")
	{
		/*if(sMsg=="ICD" && objCode.value.length<=3)		
		{
			//alert("Invalid diagonis code.")
			//jayaraj 			
			alert("Invalid ICD Diagnosis Code. Enter full diagnosis Code.")			
			
			objDesc.value=""
			
			return false;
			
			fnSelectDescription(objCode,objDesc,'ICD','')
			
			//objCode.focus()
			return false;
		}*/
		
		var parser=new ActiveXObject("microsoft.xmldom")
		parser.async="false"
			
		parser.load("XMLCodeCheck.asp?Code=" + escape(objCode.value) + "&msg=" + sMsg)
		
		nodes = parser.documentElement.childNodes
		
		var Description = nodes.item(0).text
		
		if (nodes.item(0).text=="NA")
		{
			alert(sMsg+" Code not available in the list.")
			objDesc.value=""
			objCode.focus()
			objCode.select();
		}
		else
		{
			if(sMsg=="ICD") 
			{
				if(Description.indexOf("*")<0)
					objDesc.value=Description
				else
				{				
					//alert("Invalid ICD Diagnosis Code. Enter full diagnosis Code.")			
					alert("Invalid code. Enter/Select valid code.")			
					objDesc.value=""								
					fnSelectDescription(objCode,objDesc,'ICD','')
				}
			}
			else
			{
				objDesc.value=nodes.item(0).text
			}
			
		}
	}
}



/*---------------------------------------------------------------------------------------------------------------------
UDF:
FUNCTION NAME	-	vfnXMLCodeCheckNew
PURPOSE			-   To load Description when Code is chosen 
ARGUMENTS		-	
RETURN VALUE	-   Nil
---------------------------------------------------------------------------------------------------------------------*/
function vfnXMLCodeCheckNew(sCodeType, objQulaifier, objCode, objDesc, objFocus, sCheckFieldVal, sCodeName, sAddPractice,objSerDate) 
{
	if(objDesc.value!="Modifier not applicable")
	{
		 objDesc.value=""
	}
	if(sCodeName==null) sCodeName = sCodeType

	var sQulaifier
	vfnToUpper(objCode)

	if(sAddPractice==null) sAddPractice="" //JAN-3-2003 'Michael J Optioanl, used only in the function.
	
	if(objQulaifier==null || objQulaifier=="")
		sQulaifier = "";
	else if(objQulaifier=="ND" || objQulaifier=="HC" || objQulaifier=="ID")
		sQulaifier = objQulaifier
	else
		sQulaifier = objQulaifier.options[objQulaifier.selectedIndex].value;		

	if(objSerDate!=null)
	var sSerDate=objSerDate.value
			
	if(objCode.value!="")
	{
		if(sSerDate==null)
			var sQueryString = "Code=" + escape(objCode.value) + "&msg=" + sCodeType + "&Qualifier=" + sQulaifier + "&qAddPractice=" + sAddPractice
		else
			var sQueryString = "Code=" + escape(objCode.value) + "&msg=" + sCodeType + "&Qualifier=" + sQulaifier + "&qAddPractice=" + sAddPractice + "&SerDate=" + sSerDate

		var parser=new ActiveXObject("microsoft.xmldom")
		parser.async="false"			
		//location.href="XMLCodeCheck.asp?" + sQueryString
		//return
		parser.load("XMLCodeCheck.asp?" + sQueryString)
		nodes = parser.documentElement.childNodes

		var Description = nodes.item(0).text
		if (Description=="NA")
		{
			if(sCodeName!=null) 
				alert(sCodeName + " not available in the list.")
			else
				alert(sCodeType + " not available in the list.")
				
			objCode.focus()
			objCode.select()
		}
		else
		{
		
			if(sCodeType=="ICD" || sCodeType=="PROC") 
			{
				if(Description.indexOf("*")>=0)
				{
					alert("Invalid code. Enter/Select valid code.")			//alert("Invalid ICD Diagnosis Code. Enter full diagnosis Code.")								
					vfnShowSearch(sCodeType, objQulaifier, objCode, objDesc, null, "SHOW",sSerDate)//JAN-02-2003 'Michael J //Old fnSelectDescription(objCode,objDesc,'ICD','')
				}	
				//------------------------------------Confirm from User to add code to practice tables --------------
				else if(Description=="$ADD_PRACTICE?$")
				{
					if(confirm(sCodeName + " Code not available in Practice setup list!!. Do you want to add it to the list?")==true) //Call the function again
					{
						vfnXMLCodeCheckNew(sCodeType, objQulaifier, objCode, objDesc, objFocus, sCheckFieldVal, sCodeName, "Y",sSerDate) 
					}
					else
					{
						objCode.focus()
						objCode.select()
					}				
				}
				//------------------------------------Confirm from User to add code to practice tables --------------
				else
				{				
					objDesc.value=Description
				}
				
			}
			else
			{
				objDesc.value=nodes.item(0).text
			}
			
		}
	}
}


function vfnShowSearch(sCodeType, objQulaifier, objCode, objDesc, objFocus, sCheckFieldVal,objSerDate)
{
	 var ctlCode=objCode.name
	var ctlDesc=objDesc.name
	var ctlFocus, sQulaifier
	var Code=objCode.value
	var Desc=objDesc.value
	var SerDate=objSerDate.value
	
	if(objQulaifier==null || objQulaifier=="")
		sQulaifier = "";
	else if(objQulaifier=="ND" || objQulaifier=="HC" || objQulaifier=="ID")
		sQulaifier = objQulaifier
	else
		sQulaifier = objQulaifier.options[objQulaifier.selectedIndex].value;		
		
	if(objFocus==null) 
		ctlFocus="";
	else
		ctlFocus=objFocus.name;
	
	if(sCheckFieldVal=="DONTSHOW" || sCheckFieldVal.value=="") 	{}		 //Don't Open
	else if(sCheckFieldVal==null || sCheckFieldVal!="")//Do Open
	{
		if(SerDate==null)
			var qrystr="CodeType=" + sCodeType + "&Qualifier=" + sQulaifier + "&Code=" + Code + "&ctlCode=" + ctlCode + "&Desc=" + escape(Desc) + "&ctlDesc=" + ctlDesc + "&ctlFocus=" + ctlFocus		
		else
			var qrystr="CodeType=" + sCodeType + "&Qualifier=" + sQulaifier + "&Code=" + Code + "&ctlCode=" + ctlCode + "&Desc=" + escape(Desc) + "&ctlDesc=" + ctlDesc + "&ctlFocus=" + ctlFocus + "&SerDate=" + SerDate

//	  Gowrishankar - 06/30/2004
//	  window.open("SearchCodesWin.asp?"+qrystr,"SearchCodesWin","resize=1,toolbar=no,scrollbars=yes,menubar=no,height=500,width=730,top=20,left=30")
		window.open("SearchCodesWin.asp?"+qrystr+"&AnesSetup=YES","SearchCodesWin","resize=1,toolbar=no,scrollbars=yes,menubar=no,height=500,width=730,top=20,left=30")
	}	
}







/*---------------------------------------------------------------------------------------------------------------------
UDF:
FUNCTION NAME	-	vfnXMLProCodeCheck
PURPOSE			-   To load Description when Code is chosen 
ARGUMENTS		-	Object of the Code, Object of description, string
RETURN VALUE	-   Nil
---------------------------------------------------------------------------------------------------------------------*/

function vfnXMLProCodeCheck(objCode,objDesc,sMsg)
{
	if(objCode.value!="")
	{
				
		var parser=new ActiveXObject("microsoft.xmldom")
		parser.async="false"
			
		parser.load("XMLCodeCheck.asp?Code=" + escape(objCode.value) + "&msg=" + sMsg)
		
		nodes = parser.documentElement.childNodes
		
		var Description = nodes.item(0).text
		
		if (nodes.item(0).text=="NA")
		{
			alert(sMsg+" Code not available in the list.")
			objDesc.value=""
			objCode.focus()
			objCode.select();
		}
		else
		{
			if(sMsg=="ICD") 
			{
				if(Description.indexOf("*")<0)
					objDesc.value=Description
				else
				{				
					//alert("Invalid ICD Diagnosis Code.Enter full diagnosis Code.")			
					alert("Invalid code.Enter/Select valid code.")			
					objDesc.value=""								
					fnSelectProDescription(objCode,objDesc,'ICD','')
				}
			}
			else
			{
				objDesc.value=nodes.item(0).text
			}
			
		}
	}
}

/*---------------------------------------------------------------------------------------------------------------------
UDF:
FUNCTION NAME	-	vfnPopuluate
PURPOSE			-   To load City and State when zip is entered
ARGUMENTS		-	Code object, City object, State object, string
RETURN VALUE	-   Nil
---------------------------------------------------------------------------------------------------------------------*/
function vfnPopuluate(objCode,obj1,obj2,sMsg)
{

	if(objCode.value!="")
	{
		var parser=new ActiveXObject("microsoft.xmldom")
		parser.async="false"
			
		//alert('jayaraj')
		
		//location.href="XMLCodeCheck.asp?Code=" + escape(objCode.value) + "&msg=" + sMsg
		//return	

		parser.load("XMLCodeCheck.asp?Code=" + escape(objCode.value) + "&msg=" + sMsg)

		
		nodes = parser.documentElement.childNodes
		alert(nodes.length)
		if (nodes.item(0).text=="NA")
		{
			alert(sMsg+" Code not available in the list.")
			obj1.value=""
			obj2.value=""
			objCode.focus()
			objCode.select();
		}
		else
		{
			obj1.value=nodes.item(0).text
			obj2.value=nodes.item(1).text
		}
	}
}

function vfnPopuluateZip(objCode,obj1,obj2,obj3,sMsg)
{
if(objCode.value!="")
{

	var parser=new ActiveXObject("microsoft.xmldom")
	parser.async="false"
		
	//location.href="XMLCodeCheck.asp?Code=" + escape(objCode.value) + "&msg=" + sMsg
	//return		
	parser.load("XMLCodeCheck.asp?Code=" + escape(objCode.value) + "&msg=" + sMsg)
	
	
	nodes = parser.documentElement.childNodes
	
			//answer_text.innerHTML=nodes.item(0).text

	if (nodes.item(0).text=="NA")
	{
		alert(sMsg+" Code not available in the list.")
		obj1.value=""
		obj2.value=""
		obj3.value=""
		objCode.focus()
		objCode.select();
	}
	else
	{
		obj1.value=nodes.item(0).text
		obj2.value=nodes.item(1).text
		obj3.value=nodes.item(2).text
		
	}
}
}


function vfnXMLTaxCheck(objCode,sMsg)
{

	if(objCode.value!="")
	{
		var parser=new ActiveXObject("microsoft.xmldom")
		parser.async="false"
		
		parser.load("XMLCodeCheck.asp?Code=" + escape(objCode.value) + "&msg=" + sMsg)
		nodes = parser.documentElement.childNodes
		if (nodes.item(0).text=="NA")
		{
			alert("Tax ID already exists.")
			objCode.focus()
			objCode.select();
		}
	}
}


/*---------------------------------------------------------------------------------------------------------------------
UDF:
FUNCTION NAME	-	vfnXMLCheckAvailability
PURPOSE			-   To find the code existis in db 
ARGUMENTS		-	Object of the Code, Object of description, string
RETURN VALUE	-   Nil
---------------------------------------------------------------------------------------------------------------------*/

function vfnXMLCheckAvailability(objCode,sMsg,alertMsg,sOldCode)
{
	//sOldCode - for custom code, in edit mode to avoid the checking
	if(objCode.value!="")
	{
	if (sOldCode==null) sOldCode=""
	
	//location.href="XMLCodeCheck.asp?Code=" + escape(objCode.value) + "&msg=" + sMsg + "&qOldCode=" + sOldCode
	//return;
		var parser=new ActiveXObject("microsoft.xmldom")
		parser.async="false"
			
		parser.load("XMLCodeCheck.asp?Code=" + escape(objCode.value) + "&msg=" + sMsg + "&qOldCode=" + sOldCode)		
		nodes = parser.documentElement.childNodes		
		if (nodes.item(0).text=="NA")
		{
			if(alertMsg==null)
				alert("Code not available in the list")						
			else
				alert(alertMsg)
				
			objCode.focus();
			objCode.select();
		}
	}
}

//Purpose: To get the values from diff type of objects
//Author: Michael J
//Date: 07/28/2004
function vfnGetValue(obj)
{
	if (obj.type=="text" || obj.type=="password" || obj.type=="textarea" ||obj.type=="file")
	{
		obj.value = vfnTrim(obj)
		return obj.value;
	}	
	else if(obj.type=="select-one")	
	{
		return obj.options[obj.selectedIndex].value
	}
	else
	{
		alert("")
	}
	
}

/*---------------------------------------------------------------------------------------------------------------------
UDF:
FUNCTION NAME	-	vfnXMLLoadList
PURPOSE			-   To Load the the list box iteem from db 
ARGUMENTS		-	XML File Name (optional, default=XML_LoadList.asp, pass empty), 
				-   List Type(This list type should be present in the xml file)
				-   selLoadName - List box to be loaded with Name or  Description
				-   selLoadID - List box to be loaded with ID (optional: Pass empty)
				-	N List boxes objects for the query string values qID1,qID2....				
RETURN VALUE	-   Nil, if error occurs, Message Box would be shown
---------------------------------------------------------------------------------------------------------------------*/
function vfnXMLLoadList()
{
	var sXMLFile = arguments[0]
	var sListType = arguments[1]
	var selLoadName = arguments[2]
	var selLoadID = arguments[3]
	
	var sID = ""
	for (i=4; i<(arguments.length); i++)  // Forming n number of values in query string
	{
		if(i==4)
		{
			//	sID = "qID" + (i-3) + "=" + escape(arguments[i].options[arguments[i].selectedIndex].value)
			 sID = "qID" + (i-3) + "=" + escape( vfnGetValue(arguments[i]) ) //Michael: 07/28/2004
		}
		else
		{
			 
			//sID = sID + "&qID" + (i-3) + "=" + escape(arguments[i].options[arguments[i].selectedIndex].value)
			sID = sID + "&qID" + (i-3) + "=" + escape( vfnGetValue(arguments[i]) ) //Michael: 07/28/2004
		}
	}
	
	//var sValue1 = selValue1.options[selValue1.selectedIndex].value;	
	if(sXMLFile==null || sXMLFile=="")
	sXMLFile="XML_LoadList.asp"
		
	try{
	var parser=new ActiveXObject("microsoft.xmldom")
	parser.async="false"		
	parser.load(sXMLFile +"?qListType=" + sListType + "&" + sID)
	nodes = parser.documentElement.childNodes
	}
	catch(e)
	{
		alert(sMsgXMLErr);	
		selLoadName.selectedIndex=0;
		
		if(selLoadID!=null && selLoadID!="")
		selLoadID.selectedIndex=0;

		return false;
	}
	
	var sItem, arListItem
	
	selLoadName.length=1;
	
	if(selLoadID!=null && selLoadID!="")
	selLoadID.length=1;
 	
 	if(nodes.item(0).text=="NA") return; 	
 	
	for(var i=0;i<nodes.length;i++)
	{
		sItem = nodes.item(i).text
		
		arListItem = sItem.split(String.fromCharCode(30))	//0 - ID; 1 - Description
		selLoadName.options[selLoadName.length] = new Option(arListItem[1],arListItem[0])
		
		if(selLoadID!=null && selLoadID!="")
		selLoadID.options[selLoadID.length] = new Option(arListItem[0],arListItem[0])
	}
}





/*---------------------------------------------------------------------------------------------------------------------
UDF:
FUNCTION NAME	-	vfnShowTab()
PURPOSE			-   To show tab 
ARGUMENTS		-	Nil
RETURN VALUE	-   Nil
---------------------------------------------------------------------------------------------------------------------*/

function vfnShowTab() 
{
	 
	var i;
	for (i=0; i<(arguments.length); i++)  
	{
		if (i==0)
		{
			document.all[arguments[0]+'lt'].className = 'bgofftabbottom' ;
			document.all[arguments[0]+'lnk'].className ='bgofftabbottommid';
			document.all[arguments[0]+'rt'].className = 'bgofftabbottom';			
			document.all[arguments[0]+'font'].className = 'bgofffont';
			document.images[arguments[0]+'lti'].src="Images/tab_subtask_stroked_l.gif";
			document.images[arguments[0]+'rti'].src="Images/tab_subtask_stroked_r.gif";
		}
		else
		{
			document.all[arguments[i]+'lt'].className =  'bgontabbottom';
			document.all[arguments[i]+'lnk'].className = 'bgontabbottommid';
			document.all[arguments[i]+'rt'].className = 'bgontabbottom';
			document.all[arguments[i]+'font'].className = 'bgonfont';
			document.images[arguments[0]+'lti'].src="Images/tab_subtask_plain_l.gif";
			document.images[arguments[0]+'rti'].src="Images/tab_subtask_plain_r.gif";
		}
	}
}


/*----------------------------------------------------------------------------------------------------------------------
UDF:
FUNCTION NAME	-	vfnAgeCount
PURPOSE			-	To calculate the age
ARGUMENTS		-	Date Object and Age Object
RETURN VALUE	-	Age
------------------------------------------------------------------------------------------------------------------------*/

function vfnAgeCount(objDOB,objAge)
{
if(objDOB.value!="")
{
	birthday = new Date(objDOB.value);
	today = new Date();
	
	//Find the date diff. Diff in milli seconds will return. add Milli Sec for 1 day then divide by the milli seconds for a year
	var iDateDiff = (today - birthday+(24*60*60*1000))/(1000*60*60*24*365.25)
	
			
	var iAge = Math.floor(iDateDiff)
	var iAgeDisplay  = iAge;
	
	if(iAge==0)	//If 0 find the months
	{
		iAge = Math.floor( (iDateDiff*365.25)/(30.4375) )
		iAgeDisplay = (iAge==1) ?  iAge + " Month" : iAge + " Months";
	}
	
	if(iAge==0)	//If 0 find the days
	{	
		iAge = Math.floor( (iDateDiff*365.25))
		iAgeDisplay = (iAge==1) ?  iAge + " Day" : iAge + " Days";
	}
	
	objAge.value=iAgeDisplay;
}
else
{
	objAge.value=""
}
}

function vfnAgeCountold(objDOB,objAge)
{

	birthday = new Date(objDOB.value);
	today = new Date();
	years = today.getFullYear() - birthday.getFullYear();
	birthday.setYear( today.getFullYear() );
	   
	// If your birthday hasn't occurred yet this year, subtract 1.
	if(today < birthday)
	{
		years-- ;
	}
	      
	if(years>0)
	{ 
		objAge.value=years ;
	}
	else if(years<=0)
	{
		months=today.getMonth() - birthday.getMonth(); 
		if(months<2 )
			objAge.value=months + " month" ;
		else if(months>1)
			objAge.value=months + " month(s)" ;
		else if(months<=0)
		{
			days=today.getDate() - birthday.getDate();
			if(days>=0)
				objAge.value=days + " day(s)" ;
			else
			objAge.value=""	;			
		}
	}
}


/*----------------------------------------------------------------------------------------------------------------------
FUNCTION NAME	-	vfnTrim
PURPOSE			-	To trim spaces
ARGUMENTS		-	Field object
RETURN VALUE	-	Trimmed value
-------------------------------------------------------------------------------------------------------------------------*/

function vfnTrim(obj)
{
  	var Field
    Field = obj
    if (!Field) // Validate the Form element
      {
        alert("Function : Element is not Defined !");
        return(-1);
      }
			
	var y=Field.value.length;
    var retval=Field.value;
    var m=0;
		
    while(m < y) //Start removing white spaces from left side
	{  
      	if ((retval.substring(0,1)==" ")||(retval.substring(0,1)=="     "))
		{ 
          	retval=Field.value.substring(m+1,y); //remove left most white char
        } 
        else 
        { 
          	break;
        }
        m++;
    }
				
    y=retval.length;
    m=y;
	
      while (m >= 0) //Start removing white spaces from right side
		{  
        	if ((retval.substring(m-1,m)==" ")||(retval.substring(m-1,m)==" "))
          	{  
            	retval=retval.substring(0,m-1); //remove right most white char
            } 
          else 
            { 
              break;  //first non - white character encountered while 
                      //traversing from right to left. so break the loop
            }
          m--;
        }
        
      return retval;
}


/*----------------------------------------------------------------------------------------------------------------------
UDF:
FUNCTION NAME	- vfnReplace
PURPOSE			- To remove the character (eg - or /)
ARGUMENTS		- Field value, character to be removed
RETURN VALUE	- Field value with the character removed
-------------------------------------------------------------------------------------------------------------------------*/

function vfnReplace(sData,replaceChar)
{
	var newData=""
	for(var i=0; i<sData.length; i++)
	{
		if(sData.charAt(i)==replaceChar)
		{
		}
		else
		{
			newData = newData + sData.charAt(i)
		}
	}
	return newData
}


/*----------------------------------------------------------------------------------------------------------------------
UDF:
FUNCTION NAME	- MM_findObj
PURPOSE			- used for layers
-------------------------------------------------------------------------------------------------------------------------*/

function MM_findObj(n, d) { //v3.0
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document); return x;
}


/*----------------------------------------------------------------------------------------------------------------------
UDF:
FUNCTION NAME	- MM_showHideLayers
PURPOSE			- used to show and hide layers
-------------------------------------------------------------------------------------------------------------------------*/

function MM_showHideLayers() { //v3.0
 
   
  var i,p,v,obj,args=MM_showHideLayers.arguments;
 
  for (i=0; i<(args.length-2); i+=3) if ((obj=MM_findObj(args[i]))!=null) { v=args[i+2];
    if (obj.style) { obj=obj.style; v=(v=='show')?'visible':(v='hide')?'hidden':v; }
    obj.visibility=v; }
}


/*---------------------------------------------------------------------------------------------------------------------
UDF:
FUNCTION NAME	-	vfnCheckFforEmpty
PURPOSE			-   To check for empty.
ARGUMENTS		-	Field object, Message, Layer name, X position , Y position , ScrollBy/ScrollTo
RETURN VALUE	-   alert() (if empty) and return boolean (return false if empty)
---------------------------------------------------------------------------------------------------------------------*/
function vfnCheckForEmpty(obj,sMsg,sLayerName, scrollX, scrollY,scrollMode)
{
	if (scrollX==null) scrollX=-800 //for netscape
	if (scrollY==null) scrollY=-100
	if (scrollMode==null) scrollMode="By"	
	
	if (obj.type=="text" || obj.type=="password" || obj.type=="textarea" ||obj.type=="file")
	{
		obj.value=vfnTrim(obj)
		if (obj.value=="")
		{	
			if(sLayerName!=null  && sLayerName!="")
			vfnLayerFocus(sLayerName)
			if (scrollMode=="To") window.scrollTo (scrollX, scrollY);
			{			
				obj.focus()
				obj.select();
			}
			if (scrollMode=="By") window.scrollBy(scrollX,scrollY)
			alert(sMsg + sEmptyMessage)
			return false;
		}
		else
			return true;
	}
	
	else if(obj.type=="select-one")	
	{
		//alert(obj.value)
		
	
		if (obj.options[obj.selectedIndex].value=="")
		{
			if(sLayerName!=null && sLayerName!="")
			{
				vfnLayerFocus(sLayerName)
			}
			if (scrollMode=="To") window.scrollTo (scrollX, scrollY);
			{
				obj.focus() 
				//obj.select();
			}
			if (scrollMode=="By") window.scrollBy(scrollX,scrollY)
			alert(sMsg + " " + sEmptyMessage)
			return false;
		}
		else
			return true;
	}
}


/*---------------------------------------------------------------------------------------------------------------------
	UDF:
	FUNCTION NAME	-	vfnLayerFocus
	PURPOSE			-	To bring focus to a particular layer.
	ARGUMENTS		-	Layer name
	RETURN VALUE	-   Nil
---------------------------------------------------------------------------------------------------------------------*/

function vfnLayerFocus(sLayerName)
{
	switch (sLayerName)
	{	
		
		case "Guarantor":
			MM_showHideLayers('divTab','','show','divGuarantor','','show','divEmployer','','hide','divComm','','hide')
			vfnShowTab('Guarantor','Communication','Employer')
			break;
		case "Communication":
			MM_showHideLayers('divTab','','show','divGuarantor','','hide','divEmployer','','hide','divComm','','show')
			vfnShowTab('Communication','Guarantor','Employer')
			break;
		case "Employer":
			MM_showHideLayers('divTab','','show','divGuarantor','','hide','divEmployer','','show','divComm','','hide')
			vfnShowTab('Guarantor','Communication','Employer')
			break;
		case "Patient":
			MM_showHideLayers('Billing','','hide','divTab','','show','divPatient','','show')
			vfnShowTab('Patient','Billing')
			break;
		case "Insurance1":
			MM_showHideLayers('Insurance2','','hide','Billing','','hide','Insurance1','','show','divTab','','show','divPatient','','hide')
			vfnShowTab('Insurance','Patient','Billing');
			break;
		case "Insurance2":
			MM_showHideLayers('Insurance2','','show','Billing','','hide','Insurance1','','hide','divTab','','show','divPatient','','hide')
			vfnShowTab('Insurance','Patient','Billing');
			break;
		case "Billing":
			MM_showHideLayers('Billing','','show','divTab','','show','divPatient','','hide')
			vfnShowTab('Billing','Patient')
			break;
		case "Comm":
			MM_showHideLayers('divRelativeTab','','show','divContact','','hide','divContactList','','show','divComm','','show');
			vfnShowTab('Comm','Contact')
			break;
		case "Contact":
			MM_showHideLayers('divEmergencyTab','','show','divContact','','show','divContactList','','show','divComm','','hide');
			vfnShowTab('Contact','Comm')
			break;
		case "Diagnosis":
			//alert("into")
			MM_showHideLayers('divPrescription','','hide','divInsurance','','hide','divPhysician','','hide','divOthers','','hide','divProcedure','','hide','divDiagnosis','','show','divPatientNotes','','hide')
			vfnShowTab('Diagnosis','Procedure','Physician','Insurance','Others','PatientNotes','Prescription')	
			break;
		case "Procedure":
			MM_showHideLayers('divPrescription','','hide','divInsurance','','hide','divPhysician','','hide','divOthers','','hide','divProcedure','','show','divDiagnosis','','hide','divPatientNotes','','hide')
			vfnShowTab('Procedure','Diagnosis','Physician','Insurance','Others','PatientNotes','Prescription')
			break;
		case "Physician":
			MM_showHideLayers('divPrescription','','hide','divInsurance','','hide','divPhysician','','show','divOthers','','hide','divProcedure','','hide','divDiagnosis','','hide','divPatientNotes','','hide')
			vfnShowTab('Physician','Diagnosis','Procedure','Insurance','Others','PatientNotes','Prescription')
			break;
		case "Insurance":
			MM_showHideLayers('divPrescription','','hide','divInsurance','','show','divPhysician','','hide','divOthers','','hide','divProcedure','','hide','divDiagnosis','','hide','divPatientNotes','','hide')
			vfnShowTab('Insurance','Diagnosis','Procedure','Physician','Others','PatientNotes','Prescription')
			break;
		case "Others":
			MM_showHideLayers('divPrescription','','hide','divInsurance','','hide','divPhysician','','hide','divOthers','','show','divProcedure','','hide','divDiagnosis','','hide','divPatientNotes','','hide')
			vfnShowTab('Others','Diagnosis','Procedure','Physician','Insurance','PatientNotes','Prescription')
			break;
		case "PatientNotes":
			MM_showHideLayers('divPrescription','','hide','divInsurance','','hide','divPhysician','','hide','divOthers','','hide','divProcedure','','hide','divDiagnosis','','hide','divPatientNotes','','show')
			vfnShowTab('PatientNotes','Diagnosis','Procedure','Physician','Insurance','Others','Prescription')
			break;
		case "Prescription":
			MM_showHideLayers('divPrescription','','show','divInsurance','','hide','divPhysician','','hide','divOthers','','hide','divProcedure','','hide','divDiagnosis','','hide','divPatientNotes','','hide')
			vfnShowTab('Prescription','Physician','Diagnosis','Procedure','Insurance','Others','PatientNotes')
			break;
		case "PractProvider":
			MM_showHideLayers('divTab','','show','divPractSpecialty','','hide','divPractHospital','','hide','divPractAddress','','hide','divPractInsurance','','hide','divPractProvider','','show')
			vfnShowTab('PractProvider','PractAddress','PractSpecialty','PractInsurance','PractHospital') 	
			break;
		case "PractAddress": 
			MM_showHideLayers('divTab','','show','divPractSpecialty','','hide','divPractHospital','','hide','divPractAddress','','show','divPractInsurance','','hide','divPractProvider','','hide')
			vfnShowTab('PractAddress','PractProvider','PractSpecialty','PractInsurance','PractHospital')	
			break;
		case "PractSpecialty":
			MM_showHideLayers('divTab','','show','divPractSpecialty','','show','divPractHospital','','hide','divPractAddress','','hide','divPractInsurance','','hide','divPractProvider','','hide')
			vfnShowTab('PractSpecialty','PractProvider','PractAddress','PractInsurance','PractHospital')	
			break;
		case "PractInsurance":
			MM_showHideLayers('divTab','','show','divPractSpecialty','','hide','divPractHospital','','hide','divPractAddress','','hide','divPractInsurance','','show','divPractProvider','','hide')
			vfnShowTab('PractInsurance','PractProvider','PractAddress','PractSpecialty','PractHospital')	
			break;
		case "PractHospital":
			MM_showHideLayers('divTab','','show','divPractSpecialty','','hide','divPractHospital','','show','divPractAddress','','hide','divPractInsurance','','hide','divPractProvider','','hide')
			vfnShowTab('PractHospital','PractProvider','PractAddress','PractSpecialty','PractInsurance')	
			break;
		case "InsInsuranceRelation":
			MM_showHideLayers('Insurance2','','hide','Insurance1','','show','divTab','','show')
			vfnShowTab('Insurance1','Insurance2')	
			break;
		case "InsInsurance":
			MM_showHideLayers('Insurance2','','show','Insurance1','','hide','divTab','','show')
			vfnShowTab('Insurance2','Insurance1')
			break;
		case "RefPhysician":
			MM_showHideLayers('divReason','','hide','divAuthorisation','','hide','divEmergencyTab','','show','divPhysician','','show','divComm','','hide')
			vfnShowTab('RefPhysician','RefComm','RefAuth','RefReason')
			break;
		case "RefComm":
			MM_showHideLayers('divReason','','hide','divAuthorisation','','hide','divEmergencyTab','','show','divPhysician','','hide','divComm','','show')
			vfnShowTab('RefComm','RefPhysician','RefAuth','RefReason')
			break;
		case "RefAuth": 	
			MM_showHideLayers('divReason','','hide','divAuthorisation','','show','divEmergencyTab','','show','divPhysician','','hide','divComm','','hide')
			vfnShowTab('RefAuth','RefPhysician','RefComm','RefReason')
			break;
		case "RefReason":
			MM_showHideLayers('divReason','','show','divAuthorisation','','hide','divEmergencyTab','','show','divPhysician','','hide','divComm','','hide')
			vfnShowTab('RefReason','RefPhysician','RefComm','RefAuth')
			break;
		case "InsuranceCompany":
			MM_showHideLayers('EliClaims','','hide','Insurance','','show','divTab','','show','Claims','','hide','EDIClaims','','hide','divHCFA1500','','hide')
			vfnShowTab('Insurance','Claims','EDIClaims','EDIEligibility','HCFA1500')
			break;
		case "Claims":
			MM_showHideLayers('EliClaims','','hide','Insurance','','hide','divTab','','show','Claims','','show','EDIClaims','','hide','divHCFA1500','','hide')
			vfnShowTab('Claims','Insurance','EDIClaims','EDIEligibility','HCFA1500')
			break;
		case "EDIClaims":
			MM_showHideLayers('EliClaims','','hide','Insurance','','hide','divTab','','show','Claims','','hide','EDIClaims','','show','divHCFA1500','','hide')
			vfnShowTab('EDIClaims','Claims','Insurance','EDIEligibility','HCFA1500')
			break;
			//vijay 
		case "PractProv":
			MM_showHideLayers('divPractAddress','','hide','divPractInsurance','','hide','divPractProvider','','show')
			vfnShowTab('PractProvider','PractAddress','PractInsurance') 	
			break;
		case "PractAdd": 
			MM_showHideLayers('divPractAddress','','show','divPractInsurance','','hide','divPractProvider','','hide')
			vfnShowTab('PractAddress','PractProvider','PractInsurance')	
			break;	
			//over vijay	
			
			//priya  lastupdated by:Jayaraj : MAR-19-2004
		case "SetupPractice":
			MM_showHideLayers('divEncounter','','hide','divPatient','','hide','divPractice','','show','divClearinghouse','','hide','divPatientBilling','','hide')
			vfnShowTab('Practice','Patient','Encounter','Clearinghouse','PatientBilling')
			break;
		case "SetupPatient":
			MM_showHideLayers('divEncounter','','hide','divPatient','','show','divPractice','','hide','divClearinghouse','','hide','divPatientBilling','','hide')
			vfnShowTab('Patient','Encounter','Clearinghouse','PatientBilling','Practice')
			break;
		case "SetupEncounter":
			MM_showHideLayers('divEncounter','','show','divPatient','','hide','divPractice','','hide','divClearinghouse','','hide','divPatientBilling','','hide')
			vfnShowTab('Encounter','Clearinghouse','PatientBilling','Practice','Patient')		
			break;
		//over priya lastupdated by:Jayaraj : MAR-19-2004
		//Update Block by Rajesh : Jan - 17 - 2005
		case "SetupPatientBill":
			MM_showHideLayers('divEncounter','','hide','divPatient','','hide','divPractice','','hide','divClearinghouse','','hide','divPatientBilling','','show')
			vfnShowTab('PatientBilling','Practice','Patient','Encounter','Clearinghouse')		
			break;
		case "SetupClearinghouse":
			MM_showHideLayers('divEncounter','','hide','divPatient','','hide','divPractice','','hide','divClearinghouse','','show','divPatientBilling','','hide')
			vfnShowTab('Clearinghouse','PatientBilling','Practice','Patient','Encounter')
			break;		
		//End of Block by Rajesh : Jan - 17 - 2005	
	}
}


/*---------------------------------------------------------------------------------------------------------------------
	UDF:
	FUNCTION NAME	-	vfnIsNumber	
	PURPOSE			-	To check if the entered value is Integer.
	ARGUMENTS		-	Field object, bAlert=true
	RETURN VALUE	-	If Integer returns true.
---------------------------------------------------------------------------------------------------------------------*/

function vfnIsNumber(obj,bAlert)
{
	if(bAlert==null) bAlert=1

	if(obj.value!="")
	{
	var s1=obj.value;
	var s2;
	var tem=0;
		for (var i=0;i<s1.length;i++)
		{
			s2=s1.charAt(i);
			if( (s2>='0') && (s2<='9') )
			{
				tem=1;
			}
			else
			{
				tem=0
				break;
			}
		}

		if (tem==0)
		{
			obj.focus();				
			obj.select();	 //coment by MIchael
			
			if(bAlert==1)
				alert("Valid characters : [0-9]");
			
			return false;
		}
		else
		return true;
	}
	else
	{
		return true;
	}
	
	
}


/*----------------------------------------------------------------------------------------------------------------------
UDF:
FUNCTION NAME	-	vfnIsValidAlphaChar
PURPOSE			-	To allow [a-z], [A-Z] and restricting other characters
ARGUMENTS		-	Form object
RETURN VALUE	-	If valid returns true else displays alert
-------------------------------------------------------------------------------------------------------------------------*/
function vfnIsValidAlphaChar(obj,sMsg)          
{

	var Field
	obj.value=vfnTrim(obj)
	Field = obj
    var length = Field.value.length;
   
    for (var ct = 0; ct <= (Field.value.length - 1); ct++)
    {
		var Validchar = Field.value.substring(ct,ct+1);  // Check one Character at a time
		var character = 0;  // Set character as invalid alphanumeric value
		if(!(((Validchar >= "A") && (Validchar <= "Z")) || ((Validchar >= "a") && (Validchar <= "z"))))
		{
			alert(sMsg + " - Valid characters : [A-Z],[a-z]");
			obj.focus();
			obj.select();
			return false;		
		}
	 }
	return true; //If valid character
}


/*----------------------------------------------------------------------------------------------------------------------
UDF:
FUNCTION NAME	-	vfnIsValidAlphaSplChar
PURPOSE			-	To allow [a-z], [A-Z], space, comma, hyphen, numbers and restricting other characters
ARGUMENTS		-	Field object
RETURN VALUE	-	If valid returns true else displays alert
-------------------------------------------------------------------------------------------------------------------------*/

function vfnIsValidAlphaSplChar(obj)          
{
	var Field
	obj.value=vfnTrim(obj)

	Field = obj
	
    var length = Field.value.length;
    
    for (var ct = 0; ct <= (Field.value.length - 1); ct++)
    {
		var Validchar = Field.value.substring(ct,ct+1);  // Check one Character at a time
		var character = 0;  // Set character as invalid alphanumeric value
		if (((Validchar >= "A") && (Validchar <= "Z")) || ((Validchar >= "a") && (Validchar <= "z")) || (Validchar == " ") || (Validchar == ",") || (Validchar == "-")||((Validchar >="0") && (Validchar <= "9")))
		{
       		character = 1; //valid character
	  	}
		else
		{
			character = 0; //Invalid character			
			obj.focus();
			obj.select();
			alert("Valid characters : [A-Z],[a-z],[0-9],space,comma,hyphen");
			return false;
		}
	}
	return true; //If valid character
}


/*----------------------------------------------------------------------------------------------------------------------
UDF:
FUNCTION NAME	- vfnIsValidAlphaNum
PURPOSE			- To allow [A-Z], [a-z], numbers and restrict all other characters
ARGUMENTS		- Field object
RETURN VALUE	- If valid returns true else displays alert
-------------------------------------------------------------------------------------------------------------------------*/

function vfnIsValidAlphaNum(obj)          
{

	var Field
	obj.value=vfnTrim(obj)
	Field = obj
    var length = Field.value.length;
   
    for (var ct = 0; ct <= (Field.value.length - 1); ct++)
    {
		var Validchar = Field.value.substring(ct,ct+1);  // Check one Character at a time
		var character = 0;  // Set character as invalid alphanumeric value
		if(!(((Validchar >= "A") && (Validchar <= "Z")) || ((Validchar >= "a") && (Validchar <= "z")) || ((Validchar >= "0") && (Validchar <= "9") ||(Validchar == " "))))
		//if(!(((Validchar >= "A") && (Validchar <= "Z")) || ((Validchar >= "a") && (Validchar <= "z")) || ((Validchar >= "0") && (Validchar <= "9"))))
		{
			alert("Valid characters : [A-Z],[a-z],[0-9]");
			obj.focus();
			obj.select();  // jayaraj 12-Dec-2003
			return false;
		}
	}
	return true; //If valid character
}

/*----------------------------------------------------------------------------------------------------------------------
UDF:
FUNCTION NAME	- vfnIsValidName
PURPOSE			- To allow [A-Z],[a-z],space,comma,.,-,&,'
ARGUMENTS		- Field object
RETURN VALUE	- If valid returns true else displays alert
-------------------------------------------------------------------------------------------------------------------------*/
function vfnIsValidName(obj,sMsg) 
{	
	obj.value=vfnTrim(obj)	
    var iLength = obj.value.length;
    	
    for (var ct = 0; ct <= (iLength - 1); ct++)
    {	
		var Validchar = obj.value.substring(ct,ct+1);  // Check one Character at a time
		var character = 0;  // Set character as invalid alphanumeric value
		if (((Validchar >= "A") && (Validchar <= "Z")) || ((Validchar >= "a") && (Validchar <= "z")) || (Validchar == ".") || (Validchar == " ") || (Validchar == ",") || (Validchar == "-") || (Validchar == "&") ||(Validchar == "'"))
		{
       		character = 1; //valid character
	  	}
		else
		{
			character = 0; //Invalid character
			alert(sMsg + " - " + msgValidName);
			obj.focus();
			obj.select();  // jayaraj 12-Dec-2003
			return false;
		}
	    
	}
	
	
	obj.value=((obj.value).charAt(0)).toUpperCase()+obj.value.substring(1,(obj.value).length)
	return true; //If valid character
	
}


/*----------------------------------------------------------------------------------------------------------------------
FUNCTION NAME	- vfnQuotes
PURPOSE			- To allow all characters except single quotes and double quotes
ARGUMENTS		- field object
RETURN VALUE	- If valid returns true else displays alert 
-------------------------------------------------------------------------------------------------------------------------*/
function vfnQuotes(obj)
{
	var Field
	obj.value=vfnTrim(obj)
	Field = obj
	var length = Field.value.length;
     
    for (var ct = 0; ct <= (Field.value.length - 1); ct++)
    {
		var Validchar = Field.value.substring(ct,ct+1);  // Check one Character at a
							    // time
		var character = 0;  // Set character as invalid alphanumeric value
		if ((Validchar == "'") || (Validchar == '"'))
		{
			character = 0; //Invalid character			
			obj.focus();
			obj.select();
			alert("Type valid characters [Invalid characters are single quotes and double quotes]");
			return false;
	  	}
		else
		{
			character = 1; //valid character
		}
	}
	return true; //If valid character
}


/*----------------------------------------------------------------------------------------------------------------------
UDF:
FUNCTION NAME	-	vfnPhoneFaxFormat
PURPOSE			-	To format Phone and Fax values to the format 000-000-0000
ARGUMENTS		-	Form object, character to distinguish phone or fax
RETURN VALUE	-	If valid returns true else displays alert  
-------------------------------------------------------------------------------------------------------------------------*/
function vfnPhoneFaxFormat(obj,nType)
{

    obj.value=vfnTrim(obj);	
	phonefaxno=obj.value;			
	
	if(phonefaxno=="")return true;
	phonefaxno = vfnReplace(phonefaxno,"-")
	obj.value = phonefaxno
	
		if(vfnIsValidAlphaNum(obj)) //vfnIsNumber
		{	if(phonefaxno.length==10)
			{
				if(phonefaxno.substring(0,3)=="000" && phonefaxno.substring(3,6)=="000" && phonefaxno.substring(6,10)=="0000")	
					{
						if(nType=="F"){
							sMsgInvalid=" Fax number."
						}
						else if(nType=="P"){		
							sMsgInvalid=" Phone number."			
						}
						else if(nType=="C"){					
							sMsgInvalid=" Cell phone number."
						}
						else if(nType=="B"){
							sMsgInvalid=" Beeper."
						}
						obj.focus();
						obj.select();
						alert(msgNotValid + sMsgInvalid);
						return false
					}
				
				obj.value = phonefaxno.substring(0,3) + "-" + phonefaxno.substring(3,6) + "-" + phonefaxno.substring(6,10)	
				vfnToUpper(obj)
			}
			else
			{
				if(nType=="F"){					
					obj.focus();
					obj.select();
					alert(msgFaxFormat);
				}			
				else if(nType=="P"){					
					obj.focus();
					obj.select();
					alert(msgPhoneFormat);
				}
				else if(nType=="C"){					
					obj.focus();
					obj.select();
					alert(msgCellPhoneFormat);
				}
				else if(nType=="B"){
					obj.focus();
					obj.select();
					alert(msgBeeperFormat);
				}	
				return false;
			}
			
		}
		else
			return false;
		
		/*else{
			obj.select();obj.focus();
			alert("Enter valid characters [Valid character set [0-9]]");
			return false;}*/
		
		return true
}


/*----------------------------------------------------------------------------------------------------------------------
UDF:
FUNCTION NAME	-	vfnTaxIDFormat
PURPOSE			-	To format tax value to format 00-0000000
ARGUMENTS		-	Field object
RETURN VALUE	-	If valid returns true else displays alert   
-------------------------------------------------------------------------------------------------------------------------*/

function vfnTaxIDFormat(obj)
{
    obj.value=vfnTrim(obj);
	taxID=obj.value;			
	
	if(taxID=="")return true;
	 			
		taxID = vfnReplace(taxID,"-")
		obj.value = taxID
		
		if(vfnIsNumber(obj))
		{		
			if( taxID.substring(0,2)=="00" && taxID.substring(2,9)=="0000000")
			{
				
				obj.focus();
				obj.select();
				alert(msgNotValid + " Tax ID.");
				return false;
			
			}
			if(taxID.length==9)
			{	
				obj.value = taxID.substring(0,2) + "-" + taxID.substring(2,9)	
			}
			else
			{
				obj.focus();
				obj.select();
				alert(msgTaxFormat);
				return false;
			}
		}
		else{
			/*obj.select();
			obj.focus();
			alert("Enter valid characters [Valid character set [0-9]]");*/
			return false;
			}
		
		return true
}


/*----------------------------------------------------------------------------------------------------------------------
UDF:
FUNCTION NAME	-	vfnTaxIDSSNEINFormat
PURPOSE			-	To validate tax id format 000000000
ARGUMENTS		-	Field object
RETURN VALUE	-	If valid returns true else displays alert   
AUTHOR			-   Michael J
Function for	-	Change ID: 5 (HPSProf_Impact Analysis of Changes.xls)
-------------------------------------------------------------------------------------------------------------------------*/

function vfnTaxIDSSNEINFormat(obj)
{
    obj.value=vfnTrim(obj);
	taxID=obj.value;			
	
	if(taxID=="")return true;
	 			
		taxID = vfnReplace(taxID,"-")
		obj.value = taxID
		
		if(vfnIsNumber(obj))
		{		
			
			if(taxID.length==9)
			{	
				//obj.value = taxID.substring(0,2) + "-" + taxID.substring(2,9)	
			}
			else
			{
				obj.focus();
				obj.select();
				alert(msgTaxSSNEINFormat);
				return false;
			}
		}
		else
		{	
			return false;
		}		
		return true
}


/*----------------------------------------------------------------------------------------------------------------------
UDF:
FUNCTION NAME	-	vfnSSNFormat
PURPOSE			-	To format SSN value to format 000-00-0000
ARGUMENTS		-	Field object
RETURN VALUE	-	If valid returns true else displays alert   
-------------------------------------------------------------------------------------------------------------------------*/

function vfnSSNFormat(obj)
{
    obj.value=vfnTrim(obj);	
	ssn=obj.value;			
	
	if(ssn=="")return true;	
	 			
		ssn = vfnReplace(ssn,"-")
		
		obj.value = ssn	
		
		if(vfnIsNumber(obj))
		{		
			if(ssn.substring(0,3)=="000" && ssn.substring(3,5)=="00" && ssn.substring(5,9)=="0000")	
				{
				alert(msgNotValid + " SSN number." );
				obj.focus();
				obj.select();
				return false
				}
			if(ssn.length==9)
			{	
				obj.value = ssn.substring(0,3) + "-" + ssn.substring(3,5)	+ "-" + ssn.substring(5,9)	
			}
			else
			{	
				alert(msgSsnFormat);
				obj.focus();
				obj.select();
				return false;
			}
		}
		else{
			/*obj.select();
			obj.focus();
			alert("Valid characters : [0-9]");*/	
			return false;
			}		
		
		return true
}




/*------------------------------------------------------------------------------------------
UDF:
FUNCTION NAME	-	vfnZipFormat
PURPOSE			-	To format zip value to format 00000-0000
ARGUMENTS		-	Field object
RETURN VALUE	-	If valid returns true else displays alert   
-------------------------------------------------------------------------------------------*/

function vfnZipFormat(e,obj,sLabel,sLayerName)
{	
    
	var sLabelNew=""
	obj.value=vfnTrim(obj);	
	zip=obj.value;
	if(sLabel) sLabelNew = sLabel + ":\n\n"  //Default Value	
	
	if(zip=="") return true;
		
		zip = vfnReplace(zip,"-")		
		obj.value = zip;
		if(vfnIsNumber(e,obj,1,sLabel,sLayerName))
		{		
			if(zip.length==9 || zip.length==5)
			{				
			    if( zip.substring(0,5)=="00000" || zip.substring(5,9)=="0000")
				{
					vfnAlertFocus(e, obj, sLabelNew + "Zip code " + msgNotValid,sLayerName)
					return false;
					
				}
			    if(zip.length==9) obj.value = zip.substring(0,5) + "-" + zip.substring(5,9);
			}
			else
			{
				vfnAlertFocus(e, obj, sLabelNew +  "Zip code " + msgZipFormat,sLayerName)
				return false;
			}
		}
		else{
			/*alert("Enter valid characters [Valid character set [0-9]]");
			obj.select();
			obj.focus();*/
			return false;
			}
	return true;
		//obj.value=left(zip
}

function vfnValidZipFormat(obj)
{	
	obj.value=vfnTrim(obj);	
	zip=obj.value;
		
	if(zip=="") return true;
		
		zip = vfnReplace(zip,"-")		
		obj.value = zip;
		
		if(vfnIsNumber(obj,false))
		{		
			if(zip.length==9 || zip.length==5)
			{				
			if( zip.substring(0,5)=="00000" || zip.substring(5,9)=="0000")
				{
				//	alert(msgNotValid + " Zip code");				
				//	obj.focus();
				//	obj.select();
					return false;
					
				}
			if(zip.length==9) obj.value = zip.substring(0,5) + "-" + zip.substring(5,9);
	
			}
			else
			{
			//	alert(msgZipFormat);				
			//	obj.focus();
			//	obj.select();
				return false;
			}
		}
		else{
			/*alert("Enter valid characters [Valid character set [0-9]]");
			obj.select();
			obj.focus();*/
			return false;
			}
		
		return true;
		//obj.value=left(zip
}

/*----------------------------------------------------------------------------------------------------------------------
UDF:
FUNCTION NAME	-	vfnEmailCheck
PURPOSE			-	To validate the field for a valid email address
ARGUMENTS		-	Field object
RETURN VALUE	-	If valid returns true else displays alert   
-------------------------------------------------------------------------------------------------------------------------*/

function oldvfnEmailCheck(obj)
{
	emailStr=obj.value

	if(emailStr=="")return true;	

	/* The following variable tells the rest of the function whether or not
	to verify that the address ends in a two-letter country or well-known
	TLD.  1 means check it, 0 means don't. */

	var checkTLD=1;

	/* The following is the list of known TLDs that an e-mail address must end with. */

	var knownDomsPat=/^(com|net|org|edu|int|mil|gov|arpa|biz|aero|name|coop|info|pro|museum)$/;

	/* The following pattern is used to check if the entered e-mail address
	fits the user@domain format.  It also is used to separate the username
	from the domain. */

	var emailPat=/^(.+)@(.+)$/;

	/* The following string represents the pattern for matching all special
	characters.  We don't want to allow special characters in the address. 
	These characters include ( ) < > @ , ; : \ " . [ ] */

	var specialChars="\\(\\)><@,;:\\\\\\\"\\.\\[\\]";

	/* The following string represents the range of characters allowed in a 
	username or domainname.  It really states which chars aren't allowed.*/

	var validChars="\[^\\s" + specialChars + "\]";

	/* The following pattern applies if the "user" is a quoted string (in
	which case, there are no rules about which characters are allowed
	and which aren't; anything goes).  E.g. "jiminy cricket"@disney.com
	is a legal e-mail address. */

	var quotedUser="(\"[^\"]*\")";

	/* The following pattern applies for domains that are IP addresses,
	rather than symbolic names.  E.g. joe@[123.124.233.4] is a legal
	e-mail address. NOTE: The square brackets are required. */

	var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/;

	/* The following string represents an atom (basically a series of non-special characters.) */

	var atom=validChars + '+';

	/* The following string represents one word in the typical username.
	For example, in john.doe@somewhere.com, john and doe are words.
	Basically, a word is either an atom or quoted string. */

	var word="(" + atom + "|" + quotedUser + ")";

	// The following pattern describes the structure of the user

	var userPat=new RegExp("^" + word + "(\\." + word + ")*$");

	/* The following pattern describes the structure of a normal symbolic
	domain, as opposed to ipDomainPat, shown above. */

	var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$");

	/* Finally, let's start trying to figure out if the supplied address is valid. */

	/* Begin with the coarse pattern to simply break up user@domain into different pieces that are easy to analyze. */

	var matchArray=emailStr.match(emailPat);

	if (matchArray==null) {

	/* Too many/few @'s or something; basically, this address doesn't even fit the general mould of a valid e-mail address. */

	//alert("Email address seems incorrect (check @ and .'s)");	priya
	alert(msgEmailFormat)
	
	obj.focus();
	obj.select();
	return false;
	}
	var user=matchArray[1];
	var domain=matchArray[2];

	// Start by checking that only basic ASCII characters are in the strings (0-127).

	for (i=0; i<user.length; i++) {
	if (user.charCodeAt(i)>127) {
	//alert("Ths username contains invalid characters."); priya
	alert(msgEmailFormat)
	
	obj.focus()
	obj.select();
	return false;
	   }
	}
	for (i=0; i<domain.length; i++) {
	if (domain.charCodeAt(i)>127) {
	//alert("Ths domain name contains invalid characters."); priya
	alert(msgEmailFormat)
	obj.focus()
	obj.select();
	return false;
	   }
	}

	// See if "user" is valid 

	if (user.match(userPat)==null) {

	// user is not valid

	//alert("The username doesn't seem to be valid."); priya
	alert(msgEmailFormat)
	obj.focus()
	obj.select();
	return false;
	}

	/* if the e-mail address is at an IP address (as opposed to a symbolic
	host name) make sure the IP address is valid. */

	var IPArray=domain.match(ipDomainPat);

	if (IPArray!=null)
	{

		// this is an IP address

		for (var i=1;i<=4;i++)
		{
			if (IPArray[i]>255) 
			{
				// alert("Destination IP address is invalid!"); priya
				alert(msgEmailFormat)
				obj.focus();
				obj.select();
				return false;
			}
		}
		return true;
	}

	// Domain is symbolic name.  Check if it's valid.
	 
	var atomPat=new RegExp("^" + atom + "$");
	var domArr=domain.split(".");
	var len=domArr.length;
	for (i=0;i<len;i++) {
	if (domArr[i].search(atomPat)==-1) {
	// alert("The domain name does not seem to be valid."); priya
	alert(msgEmailFormat)	
	obj.focus();
	obj.select();
	return false;
	   }
	}

	/* domain name seems valid, but now make sure that it ends in a known top-level domain (like com, edu, gov) or a two-letter word,
	representing country (uk, nl), and that there's a hostname preceding the domain or country. */

	if (checkTLD && domArr[domArr.length-1].length!=2 && 
	domArr[domArr.length-1].search(knownDomsPat)==-1) {

	// alert("The address must end in a well-known domain or two letter " + "country."); priya
	alert(msgEmailFormat)	
	obj.focus();
	obj.select();
	return false;
	}

	// Make sure there's a host name preceding the domain.

	if (len<2) {
	// alert("This address is missing a hostname!"); priya
	alert(msgEmailFormat)
	obj.focus();
	obj.select();
	return false;
	}

	// If we've gotten this far, everything's valid!
	return true;
}

/*----------------------------------------------------------------------------------------------------------------------
UDF:
FUNCTION NAME	-	vfnSelectListItem
PURPOSE			-	To select the value (in the list box) given in the parameter 'selValue'. 
ARGUMENTS		-	Field object, Selected Value
RETURN VALUE	-	If the supplied value(selValue) is present in the list box, the particular item will be selected.
------------------------------------------------------------------------------------------------------------------------*/

function vfnSelectListItem(selObj,selValue)
{
	var iSIndex=0
	for(var i=0; i<selObj.length; i++)
	{
		if(selObj.options[i].value==selValue)
		{
			iSIndex=i
			break;
		}
	}
	selObj.selectedIndex=iSIndex;
}

/*----------------------------------------------------------------------------------------------------------------------
UDF: Date:		-	4:32 AM 07/22/2003(MIchael)
FUNCTION NAME	-	vfnSelectListBox
PURPOSE			-	On choosing a value from one select box, to load the corresponding value in the other select box
ARGUMENTS		-	selObj1,selObj2 (List box objects)
RETURN VALUE	-	If the selected value in the first list box is present in the second list box, the particular item will 
				-   be selected in the second list box
------------------------------------------------------------------------------------------------------------------------*/

function vfnSelectList(selObj1,selObj2)
{
	var iSIndex=0
	var selValue = selObj1.options[selObj1.selectedIndex].value;
	
	for(var i=0; i<selObj2.length; i++)
	{
		if(selObj2.options[i].value==selValue)
		{
			iSIndex=i
			break;
		}
	}
	selObj2.selectedIndex=iSIndex;
}


/*--------TO FORMAT DATE-------------------------------------------------------------------------------------------------
	FUNCTIONS USED IN FORMATTING THE DATE ARE 
	
	1)vfnDateCheck
	3)getDays
	4)vfnLeapYear
*/

function vfnDateCheck(obj,GTToday1,sMsg1,sTitle)
{
// Purpose: To format the value to the format MM/DD/YYYY if the values is a valid date.

	var iMonth,iDay,iYear
	
	if(vfnDateFormat(obj,GTToday1)==false)
	{
				
				alert(msgDateFormat)
				obj.focus();
				obj.select();  //vijay 24-Dec-2003
				return false;
	 }
	 
	obj.value=vfnTrim(obj);
	if(obj.value=="") return true;
	var sOriginalValue = obj.value
	var sDate = vfnReplace(obj.value,"/")	
	obj.value = sDate;
	
	if(vfnIsNumber(obj,0) && sDate.length==8)
	{
		iMonth=sDate.substring(0,2);
		iDay=sDate.substring(2,4);
		iYear=sDate.substring(4,8);
	
		if((iMonth>=1 && iMonth<=12) && (iDay>=1 && iDay<=vfnGetDays(iMonth-1,iYear)) )
		{	
			obj.value = sDate.substring(0,2) + "/" + sDate.substring(2,4) + "/" + sDate.substring(4,8);
			
			if(GTToday1==1 && new Date(obj.value)>new Date())
			{
				alert(msgDateExceeds)
				obj.focus();
				obj.select();  // jayaraj 12-Dec-2003
				return false;
			}
			
			if (parseInt(iYear)<(new Date().getFullYear()-150)){
			alert("Not a valid year")
			obj.focus();
			obj.select();  // jayaraj 12-Dec-2003
			return false;
			}

			
			
			return true;
		}
		else
		{
			alert(msgDateFormat)
			obj.value=sOriginalValue
			obj.focus();
			obj.select();  // jayaraj 12-Dec-2003
			return false;
		}
	}
	else
	{
		alert(msgDateFormat)
		obj.value=sOriginalValue
		obj.focus();
		obj.select();  // jayaraj 12-Dec-2003
		return false;
	}
}


function vfnEncDateCheck(obj,GTToday1,sMsg1,sTitle)
{
//  Purpose: To format the value to the format MM/DD/YYYY if the values is a valid date.

	var iMonth,iDay,iYear
	
	obj.value=vfnTrim(obj);
	if(obj.value=="") return true;
	var sOriginalValue = obj.value
	var sDate = vfnReplace(obj.value,"/")	
	obj.value = sDate;

	if(vfnIsNumber(obj,0) && sDate.length==8)
	{
		iMonth=sDate.substring(0,2);
		iDay=sDate.substring(2,4);
		iYear=sDate.substring(4,8);
	
		if((iMonth>=1 && iMonth<=12) && (iDay>=1 && iDay<=vfnGetDays(iMonth-1,iYear)) )
		{
			obj.value = sDate.substring(0,2) + "/" + sDate.substring(2,4) + "/" + sDate.substring(4,8);
			if(GTToday1==1 && new Date(obj.value)>new Date())
			{
				alert(msgDateExceeds)
				obj.focus();
				obj.select();  // jayaraj 12-Dec-2003
				return false;
			}
		}
		else
		{
			alert(msgDateFormat)
			obj.value=sOriginalValue
			obj.focus();
			obj.select();  // jayaraj 12-Dec-2003
			return false;		
		}
	}
	else if(vfnIsNumber(obj,0) && sDate.length==6)
	{
		iMonth=sDate.substring(0,2);
		iDay=sDate.substring(2,4);
		iYear=sDate.substring(4,6);
	
		if((iMonth>=1 && iMonth<=12) && (iDay>=1 && iDay<=vfnGetDays(iMonth-1,iYear)) )
		{
			obj.value = sDate.substring(0,2) + "/" + sDate.substring(2,4) + "/20" + sDate.substring(4,6);
			if(GTToday1==1 && new Date(obj.value)>new Date())
			{
				alert(msgDateExceeds)
				obj.focus();
				obj.select();  // jayaraj 12-Dec-2003
				return false;
			}
			return true;
		}
		else
		{
			alert(msgDateFormat)
			obj.value=sOriginalValue
			obj.focus();
			obj.select();  // jayaraj 12-Dec-2003
			return false;		
		}
	}
	else
	{
		alert(msgDateFormat)
		obj.value=sOriginalValue
		obj.focus();
		obj.select();  // jayaraj 12-Dec-2003
		return false;
	}
}


/*-----------------------------------------------------------------------------------------------------------------------

FUNCTION NAME	 - fnGetDays
PURPOSE			 - TO GET THE DAYS FOR THE CORRESPONDING MONTHS

-------------------------------------------------------------------------------------------------------------------------*/



function vfnGetDays(month,year){

	var ar=new Array(12)

	ar[0]=31
	ar[1]=(vfnLeapYear(year))?29:28
	ar[2]=31
	ar[3]=30
	ar[4]=31
	ar[5]=30
	ar[6]=31
	ar[7]=31
	ar[8]=30
	ar[9]=31
	ar[10]=30
	ar[11]=31
	return ar[month]
}

/*-------------------------------------------------------------------------------------------------------------------------

FUNCTION NAME	 - vfnLeapYear
PURPOSE			 - TO CHECK IF THE YEAR VALUE PASSED IS A LEAP YEAR OR NOT

----------------------------------------------------------------------------------------------------------------------------*/
function vfnLeapYear(year){
	if(year%4==0)
		return true;
	else
	return false;
}


//-----------------------------------------------DATE FORMAT END----------------------------------------------------------------------

function fnDateCompare(date1,GTToday1,date2,GTToday2,sMsg1,sMsg2, sTite,dd1Comdd2)
{
//1 or undefine - dd1<dd2
//10 - dd1<=dd2
//-1 - dd1>dd2
//-10 - dd1>=dd2



if(sTite=="")
{}
else
sTite=sTite+" : "

var ck=false

	ck=vfnDateCheck(date1,GTToday1) && vfnDateCheck(date2,GTToday2)
if(ck)
{
if(date1.value=="" && date2.value=="")
	return true;
else if(date1.value=="")
	{
	alert("Type " + sMsg1);
	date1.focus();
	date1.select();
	return false;
	}
else if(date2.value=="")
	{
	alert("Type " + sMsg2);
	date2.focus();
	date2.select()
	return false; 
	}
else if(dd1Comdd2==10 && (new Date(date1.value) > new Date(date2.value)))
	{
	alert(sTite+sMsg2 +" should be greater than or equal to "+ sMsg1+".")
	date2.focus();
	date2.select()
	return false
	}
else if(dd1Comdd2!=10 &&(new Date(date1.value) >= new Date(date2.value)) )
	{	
	alert(sTite+sMsg2 +" should be greater than "+ sMsg1+".")
	date2.focus();
	date2.select();
	return false
	}
else
	return true;
		}
		else
			return false;
		
}


/*----------------------------------------------------------------------------------------------------------------------
UDF: Date:		-	
FUNCTION NAME	-	vfnCurrencyCheck
PURPOSE			-	To Check the currency
ARGUMENTS		-	object
RETURN VALUE	-	If valid currency, return true else alert() and false
------------------------------------------------------------------------------------------------------------------------*/
function vfnCurrencyCheck(obj)
{

obj.value = vfnTrim(obj)
var ctrlValue = obj.value;
var RegCurrency=/^\d{1,10}$|^\d{1,7}\.\d{1,2}$/

 if(ctrlValue!="")
 {
 		DeciPointLen=ctrlValue.indexOf(".")
		
		if(RegCurrency.test(ctrlValue)==false)
		{
		 alert("Type valid currency - 0000000.00");   		 
		 obj.focus();
		 obj.select();
		 return false;
		}
		else
		{
			obj.value=vfnCurrFormat(obj.value)
			return true;
		}
 }
 else
 {
	obj.value=vfnCurrFormat(obj.value)
	return true;
 }

}


//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<  Crystal Report >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
function fnShowPatientReport(sReportName,sPatientID,sOtherID)
{ 	
	
	
	var sViewer
	if (navigator.appName=="Microsoft Internet Explorer")
		{
			sViewer="ActiveX" // document.forms[0].Viewer.value ="ActiveX(IE Only)"
		}	
	else if (navigator.appName=="Netscape")
		{
			sViewer="Java" //document.forms[0].Viewer.value ="Java" 
		}
	
	
	var sQString = "?qViewer=" + sViewer + "&qReportName=" + sReportName + "&qPatientID=" + sPatientID + "&qOtherID=" + sOtherID
	//alert(sQString)	
	
	var iTop =(window.screen.availHeight-600)/2
	var iLeft =(window.screen.availWidth-800)/2 
	var iwidth=808
	var iheight=600
    WinObj=window.open("CrystalReport/CrystalReport.asp"+sQString,"PatientReport",'toolbar=0,location=0,directories=0,status=0,menubar=0,scrollbars=1,resizable=1,width='+ iwidth +',height=' + iheight +',top=' + iTop + ',left=' + iLeft);
}

//
function fnShowReport(sReportFileName, sReportName, sID1,sID2)
{ 	
 
    
	if (sReportFileName==null || sReportFileName=="")
		sReportFileName="CrystalReport.asp"
	
	/*if(sReportName.indexOf(".asp")==-1)
	{
	
	}
	else
	{
		sCrystalReportName=sReportName
	}*/	

	var sViewer
	if (navigator.appName=="Microsoft Internet Explorer")
		{
			sViewer="ActiveX" //document.forms[0].Viewer.value ="ActiveX(IE Only)"
		}	
	else if (navigator.appName=="Netscape")
		{
			sViewer="Java" //document.forms[0].Viewer.value ="Java" 
		}
	
	var sQString = "?qViewer=" + sViewer + "&qReportName=" + sReportName + "&qID1=" + sID1 + "&qID2=" + sID2

//	alert(sQString)	 
	var iTop =(window.screen.availHeight-600)/2
	var iLeft =(window.screen.availWidth-800)/2 
	var iwidth=808
	var iheight=600
	
	WinObj=window.open("CrystalReport/" + sReportFileName + sQString,"PatientReport",'toolbar=0,location=0,directories=0,status=0,menubar=0,scrollbars=1,resizable=1,width='+ iwidth +',height=' + iheight +',top=' + iTop + ',left=' + iLeft);
var h=window.screen.availHeight
var w=window.screen.availWidth
WinObj.moveTo(0,0)
WinObj.resizeTo(w,h)



	
}




//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<  Crystal Report >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>



/*----------------------------------------------------------------------------------------------------------------------
UDF: Date:		-	08/26/2003
FUNCTION NAME	-	vfnShowMe
PURPOSE			-	This function will act as dummy anchor
ARGUMENTS		-	Nill
------------------------------------------------------------------------------------------------------------------------*/
function vfnShowMe()
{

	
}

function vfnMenuAlert(sMsg)
{

if(sMsg==""){}
else{
	alert(sMsg)
}
}


function vfnLoadReferral(sFieldName1, sFieldValue1, sFieldName2, sFieldValue2, sFieldName3, sFieldValue3)
{
	var tabopen="", row="", tabclose=""

	tabopen ='<table width="90%" border="1" cellspacing="3" cellpadding="2" id="grid_Referral" bordercolor="#00009C">'
	
	row=row + '<tr  bgcolor="#EFF3FF">'
	row=row + '<td   class="textbold width="40%">&nbsp;' + sFieldName1 + '</td>'
    row=row + '<td  class="text" width="60%">&nbsp;'+ sFieldValue1 + '</td>'
    row=row + '</tr>'
    
    row=row + '<tr bgcolor="#EFF3FF">'
	row=row + '<td  class="textbold width="40%">&nbsp;' + sFieldName2 + '</td>'
    row=row + '<td  class="text" width="60%">&nbsp;'+ sFieldValue2 + '</td>'
    row=row + '</tr>'
    
    row=row + '<tr bgcolor="#EFF3FF">' 
	row=row + '<td  class="textbold width="40%">&nbsp;' + sFieldName3 + '</td>'
    row=row + '<td  class="text" width="60%">&nbsp;'+ sFieldValue3 + '</td>'
    row=row + '</tr>'
    
    tabclose='</table>'
    tableHTML = tabopen +  row + tabclose
	window.opener.grid_Referral.outerHTML=tableHTML
	
}


function vfnToUpper(obj)
{
	obj.value=obj.value.toUpperCase()
	//alert(obj.value)
}



function vfnCurrFormat(svalue)
{

if(svalue!=null) svalue = svalue.toString();

var iIndex, sFormatVal

iIndex=svalue.indexOf(".")
	if(iIndex==-1)
	{	
		if(svalue=="")
			sFormatVal= "0.00"
		else
			sFormatVal= svalue + ".00"
		 
	}
	else
	{
		sDec = svalue.substr(iIndex+1,svalue.length-1)
		if(sDec.length==1)
		{
			sFormatVal=svalue+"0"
		}
		else
		{
			sFormatVal=svalue
		}
	}
	
	
	if(sFormatVal.length-sFormatVal.indexOf(".")-1>2)
	{	
		return vbsRound(sFormatVal,2); //Calling From VB Script
	}
	else
	{
		return sFormatVal;
	}
}



/*function vfnCurrencyCheck(obj)
{
 var ctrlValue=obj.value;
 var RegCurrency=/^\d{1,10}$|^\d{1,7}\.\d{1,2}$/

 if(ctrlValue!="")
 {
 		DeciPointLen=ctrlValue.indexOf(".")
		
		if(RegCurrency.test(ctrlValue)==false)
		{
		 alert("Please enter valid currency.[Valid Currency-0000000.00]");   		 
		 obj.focus();
		 obj.select();
		 return false;
		}
		else
		{
			if(DeciPointLen==-1)
			{
				obj.value=ctrlValue+"."+"00"
			}
			return true;
		}
 }
 else
 {
	return true;
 }
}*/


//If the value is valid number, convert the value to number
function vfnToNumber(sValue)
{
	if(sValue!=null) sValue = sValue.toString();
	if(isNaN(sValue)==true)
		return 0;
	else
	{
		//return new Number(sValue) + 0		
		return vbsRound(sValue,2)
	}
}


//To obtain, time for URL 
function vfnGetTime()
{
	return new Date().getTime();
}

//Use this function instead of using location.href directly
function vfnLocationHref(arg)
{
	location.href=arg + "&t=" + vfnGetTime();
}




function vfnCancel()
{
	if(confirm("Do you want to cancel the changes made?")==true)
	{
		window.location.reload();
	}
}
 
/*----------------------------------------------------------------------------------------------------------------------
UDF: Date:		-	11/26/2003
FUNCTION NAME	-	vfnSelectAllCheck
PURPOSE			-	On selecting a check box all other check box below it gets selected
ARGUMENTS		-	objChkAll,sChkName,iCount
------------------------------------------------------------------------------------------------------------------------*/

function vfnSelectAllCheck(objChkAll,sChkName,iCount)
{
	if(objChkAll.checked==true)
	{
		for(i=1;i<iCount.value;i++)
		{
			document.myform.elements[sChkName+i].checked=true
		}
	}
	else
	{
		for(i=1;i<iCount.value;i++)
		{
			document.myform.elements[sChkName+i].checked=false
		}
	}
}


/*----------------------------------------------------------------------------------------------------------------------
UDF:
FUNCTION NAME	-	vfnEmailCheck
PURPOSE			-	To validate the field for a valid email address
ARGUMENTS		-	Field object
RETURN VALUE	-	If valid returns true else displays alert    
-------------------------------------------------------------------------------------------------------------------------*/

function vfnEmailCheck(obj)
{
	//emailStr=obj.value
	emailStr=vfnTrim(obj)

	if(emailStr=="")return true;	

	/* The following variable tells the rest of the function whether or not
	to verify that the address ends in a two-letter country or well-known
	TLD.  1 means check it, 0 means don't. */

	var checkTLD=1;

	/* The following is the list of known TLDs that an e-mail address must end with. */

	var knownDomsPat=/^(com|net|org|edu|int|mil|gov|arpa|biz|aero|name|coop|info|pro|museum)$/;

	/* The following pattern is used to check if the entered e-mail address
	fits the user@domain format.  It also is used to separate the username
	from the domain. */

	var emailPat=/^(.+)@(.+)$/;

	/* The following string represents the pattern for matching all special
	characters.  We don't want to allow special characters in the address. 
	These characters include ( ) < > @ , ; : \ " . [ ] */

	var specialChars="\\(\\)><@,;:\\\\\\\"\\.\\[\\]";

	/* The following string represents the range of characters allowed in a 
	username or domainname.  It really states which chars aren't allowed.*/

	var validChars="\[^\\s" + specialChars + "\]";

	/* The following pattern applies if the "user" is a quoted string (in
	which case, there are no rules about which characters are allowed
	and which aren't; anything goes).  E.g. "jiminy cricket"@disney.com
	is a legal e-mail address. */

	var quotedUser="(\"[^\"]*\")";

	/* The following pattern applies for domains that are IP addresses,
	rather than symbolic names.  E.g. joe@[123.124.233.4] is a legal
	e-mail address. NOTE: The square brackets are required. */

	var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/;

	/* The following string represents an atom (basically a series of non-special characters.) */

	var atom=validChars + '+';

	/* The following string represents one word in the typical username.
	For example, in john.doe@somewhere.com, john and doe are words.
	Basically, a word is either an atom or quoted string. */

	var word="(" + atom + "|" + quotedUser + ")";

	// The following pattern describes the structure of the user

	var userPat=new RegExp("^" + word + "(\\." + word + ")*$");

	/* The following pattern describes the structure of a normal symbolic
	domain, as opposed to ipDomainPat, shown above. */

	var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$");

	/* Finally, let's start trying to figure out if the supplied address is valid. */

	/* Begin with the coarse pattern to simply break up user@domain into different pieces that are easy to analyze. */

	var matchArray=emailStr.match(emailPat);

	if (matchArray==null) {

	/* Too many/few @'s or something; basically, this address doesn't even fit the general mould of a valid e-mail address. */

	//alert("Email address seems incorrect (check @ and .'s)");	 priya
	alert(msgEmailFormat)
	obj.focus();
	obj.select();
	return false;
	}
	var user=matchArray[1];
	var domain=matchArray[2];

	// Start by checking that only basic ASCII characters are in the strings (0-127).

	// Checking Username part of an email
	for (i=0; i<user.length; i++) {
  	 if ((user.charCodeAt(i)>=64 && user.charCodeAt(i)<=90) || (user.charCodeAt(i)>=97 && user.charCodeAt(i)<=122) || (user.charCodeAt(i)==46) || (user.charCodeAt(i)==95) || (user.charCodeAt(i)>=48 && user.charCodeAt(i)<=57) || (user.charCodeAt(i)==45))
	 {}
	 else
	 {
//		alert("Ths Username contains invalid characters."); priya

alert(msgEmailFormat)
		obj.focus();
		obj.select();
		return false;
     }
	}

	// Checking Domain part of an email
	
	for (i=0; i<domain.length; i++) {
  	 if ((domain.charCodeAt(i)>=64 && domain.charCodeAt(i)<=90) || (domain.charCodeAt(i)>=97 && domain.charCodeAt(i)<=122) || (domain.charCodeAt(i)==46) || (domain.charCodeAt(i)==95) || (domain.charCodeAt(i)>=48 && domain.charCodeAt(i)<=57) || (domain.charCodeAt(i)==45))
	 {}
	 else
	 {
		// alert("Ths Domain contains invalid characters."); priya
		alert(msgEmailFormat)
		obj.focus();
		obj.select();
		return false;
     }
	}

	// See if "user" is valid 

	if (user.match(userPat)==null) {

	// user is not valid

	//alert("The username doesn't seem to be valid."); priya
	alert(msgEmailFormat)	
	obj.focus();
	obj.select();
	return false;
	}

	/* if the e-mail address is at an IP address (as opposed to a symbolic
	host name) make sure the IP address is valid. */

	var IPArray=domain.match(ipDomainPat);

	if (IPArray!=null)
	{

		// this is an IP address

		for (var i=1;i<=4;i++)
		{
			if (IPArray[i]>255) 
			{
				// alert("Destination IP address is invalid!"); priya
				alert(msgEmailFormat)
				obj.focus();
				obj.select();
				return false;
			}
		}
		return true;
	}

	// Domain is symbolic name.  Check if it's valid.
	 
	var atomPat=new RegExp("^" + atom + "$");
	var domArr=domain.split(".");
	var len=domArr.length;
	for (i=0;i<len;i++) {
	if (domArr[i].search(atomPat)==-1) {
	// alert("The domain name does not seem to be valid."); priya
	alert(msgEmailFormat)
	obj.focus();
	obj.select();
	return false;
	   }
	}

	/* domain name seems valid, but now make sure that it ends in a known top-level domain (like com, edu, gov) or a two-letter word,
	representing country (uk, nl), and that there's a hostname preceding the domain or country. */

	if (checkTLD && domArr[domArr.length-1].length!=2 && 
	(domArr[domArr.length-1].toLowerCase()).search(knownDomsPat)==-1) {//toLowserCase() for Accept Captial Letter

	// alert("The address must end in a well-known domain or two letter " + "country."); priya
	alert(msgEmailFormat)
	obj.focus();
	obj.select();
	return false;
	}

	// Make sure there's a host name preceding the domain.

	if (len<2) {
	// alert("This address is missing a hostname!"); priya
	alert(msgEmailFormat)
	obj.focus();
	obj.select();
	return false;
	}

	// If we've gotten this far, everything's valid!
	return true;
}


/*---------------------------------------------------------------------------------------------------------------------*/
//FUNCTION PURPOSE - To enable and disable fields based on mode of payment
/*---------------------------------------------------------------------------------------------------------------------*/
//-----------------------PAYMENTS SCREENS; INSURANCE, PATIENT, CAPITATION------------------------------------------
//var vsCheckNo="",vsCheckDate="", vsBankName=""
//var vsCardNo="",vsCardDate="", vsProviderName=""

var sCheckNo="",sCheckDate="", sBankName=""
function vfnCheckPaymentMode()
{
var butCCPayment

with(document.myform)
{
	var sPayMode = selModeOfPay.options[selModeOfPay.selectedIndex].value;
	if(sPayMode=="CA")
	{
		//Store the values in string before clear;
		sCheckNo = txtCheckNo.value; txtCheckNo.value=""; txtCheckNo.disabled=true;
		sCheckDate = txtCheckDate.value; txtCheckDate.value="";	txtCheckDate.disabled=true;
		sBankName = txtBankName.value; txtBankName.value=""; txtBankName.disabled=true;
		
		document.all['idCheckNo'].disabled=true;
		document.all['idCheckDate'].disabled=true;
		document.all['idBankName'].disabled=true;
	}
	else
	{
		txtCheckNo.value = (txtCheckNo.value=="" ? sCheckNo : txtCheckNo.value)
		txtCheckNo.disabled=false;
		txtCheckDate.value = (txtCheckDate.value=="" ? sCheckDate : txtCheckDate.value)
		txtCheckDate.disabled=false;
		txtBankName.value = (txtBankName.value=="" ? sBankName : txtBankName.value)
		txtBankName.disabled=false;
		
		document.all['idCheckNo'].disabled=false;
		document.all['idCheckDate'].disabled=false;
		document.all['idBankName'].disabled=false;
		
		
	}
	
	if(sPayMode=="CH")
	{
		document.all['idCheckNo'].innerHTML="Check No"
		document.all['idCheckDate'].innerHTML="Check Date"
		document.all['idBankName'].innerHTML="Bank"
		if(butCCPayment!=null) butCCPayment.disabled=true;
	}
	else if(sPayMode=="CC")
	{
		//document.all['idCheckNo'].innerHTML="Card No"
		//document.all['idCheckDate'].innerHTML="Expire Date"
		//document.all['idBankName'].innerHTML="Card Provider"	
		
		
		//michael: 07-06-2004 sCheckNo = txtCheckNo.value; txtCheckNo.value=""; txtCheckNo.disabled=true; 
		//michael: 07-06-2004 sCheckDate = txtCheckDate.value; txtCheckDate.value="";	txtCheckDate.disabled=true;
		
		sCheckNo = txtCheckNo.value; //txtCheckNo.value=""; 
		txtCheckNo.disabled=true;
		sCheckDate = txtCheckDate.value; //txtCheckDate.value="";	
		txtCheckDate.disabled=true;
		
		sBankName = txtBankName.value; txtBankName.value=""; txtBankName.disabled=true;
		if(butCCPayment!=null) butCCPayment.disabled=false;
			
		document.all['idCheckNo'].innerHTML="Transaction No"
		document.all['idCheckDate'].innerHTML="Transaction Date"		
			
		document.all['idCheckNo'].disabled=false;
		document.all['idCheckDate'].disabled=false;
		document.all['idBankName'].disabled=true;
			
	}
	else if(sPayMode=="AC" || sPayMode=="WT")
	{
		document.all['idCheckNo'].innerHTML="Transaction No."
		document.all['idCheckDate'].innerHTML="Transaction Date"
		document.all['idBankName'].innerHTML="Bank"	
		if(butCCPayment!=null) butCCPayment.disabled=true;
	}
	else
	{
		document.all['idCheckNo'].innerHTML="Check/Transaction No." //Caption changed from Check/Card No.
		document.all['idCheckDate'].innerHTML="Check Date/Transaction Date" //Caption changed from Check Date/Expire Date 
		document.all['idBankName'].innerHTML="Bank"	 ///Card Provider - Removed

		document.all['idCheckNo'].disabled=true;
		document.all['idCheckDate'].disabled=true;
		document.all['idBankName'].disabled=true;

		txtCheckNo.value = ""
		txtCheckDate.value = ""
		txtBankName.value = ""

		txtCheckNo.disabled = true
		txtCheckDate.disabled = true
		txtBankName.disabled = true
		if(butCCPayment!=null) butCCPayment.disabled=true;
	}
}//End If
}
 


//Used in : Payment_Insurance.asp, Payment_Patient.asp,CapitationPayment.asp,
function vfnValidateCheckInfo()
{

return true;  //Done as in doc: Corrections for DRJ office --02272004.doc
			  // All these fields are optional.(As Suresh told)
			  //Date: MAR-02-2004
			

with(document.myform)
{	
	if(selModeOfPay.options[selModeOfPay.selectedIndex].value=="CH")
	{
		if(!vfnCheckForEmpty(txtCheckNo,"Check No")){}
		else if(!vfnCheckForEmpty(txtCheckDate,"Check Date")){}		
		else if(!vfnCheckForEmpty(txtBankName,"Bank Name")){}
		else
		{
			return true;
		}
	}
	else if(selModeOfPay.options[selModeOfPay.selectedIndex].value=="CC")
	{
		if(!vfnCheckForEmpty(txtCheckNo,"Card No")){}
		else if(!vfnCheckForEmpty(txtCheckDate,"Expire Date")){}		
		else if(!vfnCheckForEmpty(txtBankName,"Card Provider")){}
		else
		{
			return true;
		}
	}
	else
	{
		return true;
	}


}//End With
}


/*----------------------------------------------------------------------------------------------------------------------
UDF:
FUNCTION NAME	-	vfnChkExt
PURPOSE			-	If the phone field is null then clear and lock the extensiobn field
ARGUMENTS		-	PhoneField,ExtField
RETURN VALUE	-	Nil
-------------------------------------------------------------------------------------------------------------------------*/
function vfnChkExt(objPhone,objExt)
{
	if(objPhone.value!="")
		{
			objExt.disabled=false;
		}
	else
		{
			objExt.value="";
			objExt.disabled=true;
		}
}


/*----------------------------------------------------------------------------------------------------------------------
UDF:
FUNCTION NAME	-	vfnClearRadio
PURPOSE			-	To clear the checked values in radio buttons
ARGUMENTS		-	Radio button object and number of buttons(optional)
RETURN VALUE	-	Nil
AUTHOR			-	Michael J MAR-23-2004
-------------------------------------------------------------------------------------------------------------------------*/
function vfnClearRadio(objRadio,iRadioLength)
{
	if(iRadioLength==null && objRadio.length==null)
		iRadioLength=1;	
	else if(iRadioLength==null)
		iRadioLength = objRadio.length;
		
	if (iRadioLength=="" || iRadioLength==0)
	{
	}
	else if (iRadioLength==1)
	{ 
		objRadio.checked=false;
	}
	else if (iRadioLength>1)
	{
	 	for (i=0;i<objRadio.length;i++)
		{
			objRadio[i].checked=false;
		}
	}
	
}


/*----------------------------------------------------------------------------------------------------------------------
UDF:
FUNCTION NAME	-	vfnClearFormFields
PURPOSE			-	To clear all form fields txtbox, textarea, select()1 item), checkbox, password,
ARGUMENTS		-	(FormObject(myform-default), objects not to clear...n obkects -- to be done in future)
RETURN VALUE	-	Nil
-------------------------------------------------------------------------------------------------------------------------*/
function vfnClearFormFields()
{
	var FieldObject
	//var form
	for(var i=0; i<document.forms[0].elements.length; i++)
	{
		FieldObject = document.forms[0].elements[i]
		
		if (FieldObject.type=="text" || FieldObject.type=="password" || FieldObject.type=="textarea")
		{
			FieldObject.value="";
		}
		else if (FieldObject.type=="select-one")
		{
			FieldObject.selectedIndex=0;
		}

	}
	
}




/*----------------------------------------------------------------------------------------------------------------------
Auth : vijay Amirthraj
FUNCTION NAME	-	vfnClearFormFields
PURPOSE			-	automatical split the mm/dd/yyyy format 
ARGUMENTS		-	(FormObject(myform-default
RETURN VALUE	-	Nil
-------------------------------------------------------------------------------------------------------------------------*/

function vfnDateFormat(obj,GTToday)
{

if(vfnTrim(obj)=="") 
return
str=vfnTrim(obj)
str1=""
str2=""
var iDateRange=29

//FEB-21-2004 'Michael
if(GTToday==1) 
{
	iDateRange = new Date().getYear()
	iDateRange = iDateRange.toString()
	iDateRange = parseInt(iDateRange.substring(2,4),10)
}
//Over FEB-21-2004 'Michael

for(i=0;i<str.length;i++)
	if(str.charAt(i)!="/")
	{
		if(parseInt(str.charAt(i),10)<=9)
			str1=str1+str.charAt(i)
	}
	else
	{//vijay 30 dec 2k3
	if (i==1)
	str1="0"+str1
	if(i==3 || i==4 && str1.length!=4)			 
	
	str1=str1.substring(0,2)+"0"+str1.substring(2,str1.length)
	//over 30 dec 2k3
	}
if(str1!="")
str=str1
if (str1.length<6)
return false
/*if (parseInt(str.substring(0,2),10)>12 && parseInt(str.substring(2,4),10)<=12)
			str1=str.substring(2,4)+"/"+str.substring(0,2)+"/"
else*/
	str1=str.substring(0,2)+"/"+str.substring(2,4)+"/"
if((str.substring(4,str.length)).length<=2)
	{
	if(parseInt(str.substring(4,str.length), 10)<=iDateRange)
		str2="20"+str.substring(4,str.length)
	else 
		str2="19"+str.substring(4,str.length)
	}
if (str2=="")
str2=str.substring(4,str.length)
str=str1+str2
obj.value=str
str=""
}

// New Email function FROM HPS SITE
// ******************* E-Mail *****************
function fnEmailFormat(objEMail)
{
	var EMailValue = objEMail.value;
	var a = "@";
	var b = ".";
	var a2 = 0;

    //----------------------------------------------------------------------------------------
    //   The '@' symbol should not be repeated more than once.
    //----------------------------------------------------------------------------------------
	var a1 = EMailValue.indexOf('@');
	var s2 = EMailValue.substring(a1+1, EMailValue.length);
	
	var a2 = s2.indexOf('@');

	if(a2!=-1)
	{
		window.alert(sEMailMessage + "'@' should not occur more than once.")
		objEMail.focus();
		return;
	}
    //----------------------------------------------------------------------------------------
    //   The '.' symbol should not be repeated more than once simultaneously.
    //----------------------------------------------------------------------------------------
	//var b1 = EMailValue.indexOf('.');
	//var s3 = EMailValue.substring(b1+1, EMailValue.length);

	//b2 = s3.indexOf('.');
  
	//if(b2!=-1)
	//{
	//	window.alert(sEMailMessage + "'.' should not occur more than once.")
	//	objEMail.focus();
	//	return;
	//}

	if(EMailValue!="")
	{
		var s2 = EMailValue.charAt(0);
		var dx = EMailValue.indexOf('@');
		var dx2 = EMailValue.indexOf('.');
		var t = EMailValue.substring(dx2+1,EMailValue.length)
        
	var s3="";   //FOR SPACE CHECKING
	var t1=0;
	var tem="";
	for(var i=0;i<EMailValue.length;i++)
	{
	s3=EMailValue.charAt(i);
	if(s3==" ")
	t1++;
	}
	
	if(!(((s2>='a')&&(s2<='z'))||((s2>='A')&&(s2<='Z'))))
	{
	alert("Invalid E-mail address.");
	objEMail.focus();
	return false
	}
	else if((dx<3)||(dx2<7))
	{
	alert("Invalid E-mail address.");
	objEMail.focus();
	return false
	}
	else if(t.length<2)
	{
	alert("Invalid E-mail address.");
	objEMail.focus();
	return false
	}
	else if(t1>0)
	{
	alert("Invalid E-mail address.");
	objEMail.focus();
	return false
	}
        
	else if(!((objEMail.value.indexOf("'")==-1) && (objEMail.value.indexOf('"')==-1 )))
	{
	alert("Cannot accept single or double quotes")
	objEMail.focus()
	return false
	}
   }
	else
	
	return true


 }




//Function Used for Text Area
function fnCheckMaxChars(taObject,sMaxChar)
{
	//to check for 255 characters as default
	
   if (sMaxChar==null)
    sMaxChar=225
    
   if (taObject.value.length>=sMaxChar)
    {         
      alert("Further entry is not allowed")
      taObject.focus()
      return false;
     }
}

//Function Used for Text Area
function fnRemoveExcessChars(taObject,sMaxChar) //Use Replace at ASP for single quote
{
	if (sMaxChar==null)
    sMaxChar=225
    
    taObj=vfnTrim(taObject)
    taObject.value=taObj.substring(0,sMaxChar)
}


//function used for Exten Area
function fnExtenCheck(obj)
{
obj.value=vfnTrim(obj)
if (obj.value=="")
return true
value=parseInt(obj.value,10)
if(value==0)
{
alert(msgZero)
obj.focus()
obj.select()
return false
}
}



//date compare
function vfnDateCompareNew(obj,obj1,Msg1,Msg2)
{
Date1=new Date(obj.value)
Date2=new Date(obj1.value)
if (Date1>Date2)
{
alert(Msg1+" should be greater than or equal to "+Msg2)
obj1.focus();
return false
}
}

function vfnCheckPageSize(obj)
{
var sPageSize = obj.value
	if(vfnIsNumber(obj)==true)
	{
		if(parseInt(sPageSize,10) >1000 || parseInt(sPageSize,10) < 1)
		{
			alert("Enter a number between 1 and 1000")
			obj.focus()
			obj.select()
		} 
	
	}

}



//****** To Check the USer Name ***


function fnIsValidUserName(r_varCtrl,sMsg)
{

	var Field
	r_varCtrl.value=vfnTrim(r_varCtrl)
	Field = r_varCtrl
	//Field.value = vfnTrim(Field);
    var length = Field.value.length;
   
   		
    for (var ct = 0; ct <= (Field.value.length - 1); ct++)
    {
		var Validchar = Field.value.substring(ct,ct+1);  // Check one Character at a
							    // time
		var character = 0;  // Set character as invalid alphanumeric value
		
		if (((Validchar >= "A") && (Validchar <= "Z")) || ((Validchar >= "a") && (Validchar <= "z")) || ((Validchar >= "0") && (Validchar <= "9")) || (Validchar == "-") || (Validchar == "_"))
		{
		
       		character = 1; //valid character
	  	}
		else
		{
		
			character = 0; //Invalid character
			alert("User ID -  Valid characters : [A-Z],[a-z],[0-9],underscore,hyphen");
			r_varCtrl.focus();
			r_varCtrl.select();
			return false;
		}
	     
	}
	
	if(Field.value!="" && Field.value.length<5)
	{
		alert(sMsg + " must have a minimum of 5 characters.")
		
		r_varCtrl.focus();
		r_varCtrl.select();
		return false
	}
		
	return true; //If valid character
}


//Function to validate whether the given ID is not Zero. - Gowrishankar - 02/26/2004
function fnChkID(obj, sMsg)
{
	if (parseInt(obj.value, 10) == 0)
	{
		alert(sMsg)
		obj.focus()
		obj.select()
	}
}


//MAR-02-2004
//UPDATED: JULY-14-2004
function vfnFocusSelect(obj)
{
	
	if (obj.type=="text" || obj.type=="password" || obj.type=="textarea" ||obj.type=="file")
	{
		obj.focus()
		obj.select()
		
	}
	else //JULY-14-2004  'Michael J
	{
		obj.focus()		
	}
}


function fnDateFormat(sDate)
{
if(vfnTrim(sDate)=="") 
return
str=vfnTrim(sDate)
str1=""
str2=""
var iDateRange=29

for(i=0;i<str.length;i++)
	if(str.charAt(i)!="/")
	{
		if(parseInt(str.charAt(i),10)<=9)
			str1=str1+str.charAt(i)
	}
	else
	{//vijay 30 dec 2k3
	if (i==1)
	str1="0"+str1
	if(i==3 || i==4 && str1.length!=4)			 
	
	str1=str1.substring(0,2)+"0"+str1.substring(2,str1.length)
	//over 30 dec 2k3
	}
if(str1!="")
str=str1
if (str1.length<6)
return false

/*if (parseInt(str.substring(0,2),10)>12 && parseInt(str.substring(2,4),10)<=12)
	str1=str.substring(2,4)+"/"+str.substring(0,2)+"/"
else*/
	str1=str.substring(0,2)+"/"+str.substring(2,4)+"/"

if((str.substring(4,str.length)).length<=2)
	{
	if(parseInt(str.substring(4,str.length), 10)<=iDateRange)
		str2="20"+str.substring(4,str.length)
	else 
		str2="19"+str.substring(4,str.length)
	}
if (str2=="")
str2=str.substring(4,str.length)
str=str1+str2
sDate=str
str=""
return sDate
}


/*---------------------------------------------------------------------------------------------------------------------
UDF: 04/May/2004 - Gowrishankar
FUNCTION NAME	-	vfnPopulatePatient
PURPOSE			-   To load Patient LastName, FirstName when PatientID is entered
ARGUMENTS		-	PatientID object, LastName Object, FirstName object, Message
RETURN VALUE	-   Nil
Changed			-   LastName, FirstName are merged to one Textbox
---------------------------------------------------------------------------------------------------------------------*/
function vfnPopulatePatient(objCode,obj1,obj2,sMsg)
{
	if(objCode.value!="")
	{
		var parser=new ActiveXObject("microsoft.xmldom")
		parser.async="false"
			
		//alert('jayaraj')
		
		//location.href="XMLCodeCheck.asp?Code=" + escape(objCode.value) + "&msg=" + sMsg
		//return	

		parser.load("XMLCodeCheck.asp?Code=" + escape(objCode.value) + "&msg=" + sMsg)

		
		nodes = parser.documentElement.childNodes
				//answer_text.innerHTML=nodes.item(0).text
		//alert(nodes.item(0).text)
		//alert(nodes.item(1).text)
 
  
		if (nodes.item(0).text=="NA")
		{
			alert("Patient ID not available.")
			obj1.value=""
			obj2.value=""
			objCode.focus()
			objCode.select();
		}
		else
		{
			obj1.value=nodes.item(1).text +", " + nodes.item(2).text + " " + nodes.item(3).text
//johnson			obj2.value=nodes.item(2).text
		}
	}
	else
		{
			obj1.value=""
		//	obj2.value=""
		}	
}


/*---------------------------------------------------------------------------------------------------------------------
UDF: 04/May/2004	-	S.Dinesh
FUNCTION NAME		-	openCenterWindow
PURPOSE				-   Open the new Window & place it on the center of the window
RETURN VALUE		-   Nil
---------------------------------------------------------------------------------------------------------------------*/

function openCenterWindow(filenameurl,widowname,widowwidth,windowheight)
{
 	 
 	var wwidth=window.screen.availWidth
	var wheight=window.screen.availHeight
	wwidth=(wwidth-widowwidth)/2 //left
	wheight=(wheight-windowheight)/2 //height
	var url = filenameurl
	var newwindowname=widowname
	var feau=arguments[4]
	var features
	if(feau==null)
	{
		features="toolbar=0,location=0,directories=0,status=0,menubar=0,scrollbars=0,resizable=0"+",width="+widowwidth+",height="+windowheight+",left="+wwidth+",top="+wheight
	}
	else
	{	
		features= feau + ",width="+widowwidth+",height="+windowheight+",left="+wwidth+",top="+wheight 
	}
	 
	var sealWin = window.open(url,newwindowname,features)
	sealWin.focus()
}


//Michael 
function  vfnIsValidCard(obj)
{
	var cardNo=new String(obj.value)
	var len= cardNo.length
	// AMEX -- 34 or 37 -- 15 length
	if  ( new RegExp(/^34|^37/).test(cardNo) && len==15 ){return true}
	// MasterCard -- 51 through 55 -- 16 length
	else if( new RegExp(/^51|^52|^53|^54|^55/).test(cardNo) && len==16)    {return true}
	// VISA -- 4 -- 13 and 16 length
	else if( new RegExp(/^4/).test(cardNo) && (len==13 || len==16) ){return true}
	// Diners Club -- 300-305, 36 or 38 -- 14 length
	else if( new RegExp(/^300|^301|^302|^303|^304|^305|^36|^38/).test(cardNo) && len==14 ){return true}
	// Discover -- 6011 -- 16 length
	else if( new RegExp(/^6011/).test(cardNo) && len==16 ){return true}
	// JCB -- 3 -- 16 length
	else if( new RegExp(/^3/).test(cardNo) && len==16 ){return true}
	// JCB -- 2131, 1800 -- 15 length
	else if( new RegExp(/^2131|^1800/).test(cardNo)   && len==15 ){return true}
	else
	{
		alert("Invalid Card Number.")
		vfnFocusSelect(obj)
		return false
	}
}

//Michael
function vfnDisableFormFields()
{
	for(var i=0; i<document.forms[0].elements.length; i++)
	{
		document.forms[0].elements[i].disabled=true;

	}
	
	//Enable disired fields
	for(var i=0; i<arguments.length; i++)
	{
		arguments[i].disabled=false;
	}
}

/*----------------------------------------------------------------------------------------------------------------------
UDF:
FUNCTION NAME	- vfnCheckID
PURPOSE			- To allow [A-Z], [a-z], numbers, space, check if its a number and not allow zeros
ARGUMENTS		- Field object, message
RETURN VALUE	- If valid returns true else displays alert
Changes			- Done by Johnson (Make changes To allow Numbers only) on 28-Sept-2004
-------------------------------------------------------------------------------------------------------------------------*/

function vfnCheckIDOLD(obj,sMsg)
{
	if(vfnIsValidAlphaNum(obj))
	{
		if(vfnIsNumber(obj,1))
		{
			if (parseInt(obj.value, 10) == 0)
			{
				alert(sMsg)
				obj.focus()
				obj.select()
				return true
			}	
			else
			{
				return false
			}
			return true
		}
		else
			return false
	}
	else
		return false;
}


//Added by Johnson on 29-Sept-2004

function vfnCheckID(obj,sMsg)
{
	if(vfnIsValidAlphaNum(obj))
	{
			if (parseInt(obj.value, 10) == 0)
			{
				alert(sMsg)
				obj.focus()
				obj.select()
				return false
			}
			else
				 return true
	}
	else
		return false
}


function vfnSecWarn()
{	
	alert("Warning!\n\nYou are not authorized to do this operation!!!")
}



function vfnHelp() //Old
{
	var objHelpWin
	//sFileName = sFileName + "?t=" + new Date().getTime();		
	objHelpWin = window.open("Help/HPS_Professional_on_Web_Help.htm#","Help","resize=1,toolbar=no,scrollbars=yes,menubar=no,height=500,width=730,top=20,left=30")	
	objHelpWin.location.href="Help/HPS_Professional_on_Web_Help.htm#"
	objHelpWin.focus()
}


//Edit the file whcsh_home.htm to get disired window with, it is in the folder Validation/
function vfnShowHelp()
{
	 
	var arTemp = vsHelpFileInfo.split("~~")
	var iHelpFileID
	var LayerElement
	
	for(i=0; i<arTemp.length; i=i+3) //0, 3
	{
		
		 
		LayerElement = document.getElementById(arTemp[i])		
		 
		if(LayerElement!=null && LayerElement.style.visibility == "visible")
		{	
			if(parseInt(arTemp[i+2],10)!=0 && vsHelpFileMode=="EDIT")
				iHelpFileID = arTemp[i+2]
			else			
				iHelpFileID = arTemp[i+1]				
				
			break;
		}
		else //if none of the layer is visible
		{
			if(parseInt(arTemp[i+2],10)!=0 && vsHelpFileMode=="EDIT")
				iHelpFileID = arTemp[i+2]
			else			
				iHelpFileID = arTemp[i+1]				
		}
	}
			
	RH_ShowHelp(0, 'Help/HPS_Professional_on_Web_Help.htm>myhelpwindow', HH_HELP_CONTEXT, iHelpFileID)
}



function vfnShowReportHelp()
{
	
	var arTemp = vsHelpFileInfo.split("~~")
	var iHelpFileID
	var LayerElement
	
	for(i=0; i<arTemp.length; i=i+3) //0, 3
	{
		
		
		LayerElement = document.getElementById(arTemp[i])
		
		if(LayerElement!=null && LayerElement.style.visibility == "visible")
		{	
			if(parseInt(arTemp[i+2],10)!=0 && vsHelpFileMode=="EDIT")
				iHelpFileID = arTemp[i+2]
			else			
				iHelpFileID = arTemp[i+1]				
				
			break;
		}
		else //if none of the layer is visible
		{
			if(parseInt(arTemp[i+2],10)!=0 && vsHelpFileMode=="EDIT")
				iHelpFileID = arTemp[i+2]
			else			
				iHelpFileID = arTemp[i+1]				
		}
	}
	
	RH_ShowHelp(0, '../Help/HPS_Professional_on_Web_Help.htm>myhelpwindow', HH_HELP_CONTEXT, iHelpFileID)
}








/*--------------------------------------------------------------------------
//The Helper function for WebHelp Context Sensitive Help - Start
--------------------------------------------------------------------------*/

var gbNav6=false;
var gbNav61=false;
var gbNav4=false;
var gbIE4=false;
var gbIE=false;
var gbIE5=false;
var gbIE55=false;

var gAgent=navigator.userAgent.toLowerCase();
var gbMac=(gAgent.indexOf("mac")!=-1);
var gbSunOS=(gAgent.indexOf("sunos")!=-1);
var gbOpera=(gAgent.indexOf("opera")!=-1);

var HH_DISPLAY_TOPIC = 0;
var HH_DISPLAY_TOC = 1;
var HH_DISPLAY_INDEX = 2;
var HH_DISPLAY_SEARCH = 3;
var HH_HELP_CONTEXT = 15;

var gVersion=navigator.appVersion.toLowerCase();

var gnVerMajor=parseInt(gVersion);
var gnVerMinor=parseFloat(gVersion);

gbIE=(navigator.appName.indexOf("Microsoft")!=-1);
if(gnVerMajor>=4)
{
	if(navigator.appName=="Netscape")
	{
		gbNav4=true;
		if(gnVerMajor>=5)
			gbNav6=true;
	}
	gbIE4=(navigator.appName.indexOf("Microsoft")!=-1);
}
if(gbNav6)
{
	document.gnPageWidth=innerWidth;
	document.gnPageHeight=innerHeight;
	var nPos=gAgent.indexOf("netscape");
	if(nPos!=-1)
	{
		var nVersion=parseFloat(gAgent.substring(nPos+10));
		if(nVersion>=6.1)
			gbNav61=true;
	}
}else if(gbIE4)
{
	var nPos=gAgent.indexOf("msie");
	if(nPos!=-1)
	{
		var nVersion=parseFloat(gAgent.substring(nPos+5));
		if(nVersion>=5)
			gbIE5=true;
		if(nVersion>=5.5)
			gbIE55=true;
	}
}

function RH_ShowHelp(hParent, a_pszHelpFile, uCommand, dwData)
{
	 
	
	// this function only support WebHelp
	var strHelpPath = a_pszHelpFile;
	var strWnd = "";
	var nPos = a_pszHelpFile.indexOf(">");
	if (nPos != -1)
	{
		strHelpPath = a_pszHelpFile.substring(0, nPos);
		strWnd = a_pszHelpFile.substring(nPos+1); 
	}
	
	
	
	if (isServerBased(strHelpPath))
		RH_ShowWebHelp_Server(hParent, strHelpPath, strWnd, uCommand, dwData);
	else
		RH_ShowWebHelp(hParent, strHelpPath, strWnd, uCommand, dwData);
}

function RH_ShowWebHelp_Server(hParent, strHelpPath, strWnd, uCommand, dwData)
{
	// hParent never used.
	ShowWebHelp_Server(strHelpPath, strWnd, uCommand, dwData);
}

function RH_ShowWebHelp(hParent, strHelpPath, strWnd, uCommand, dwData)
{
	// hParent never used.
	ShowWebHelp(strHelpPath, strWnd, uCommand, dwData);
}


function ShowWebHelp_Server(strHelpPath, strWnd, uCommand, nMapId)
{
	
	 
	
	
	var a_pszHelpFile = "";
	if (uCommand == HH_HELP_CONTEXT)
	{
		if (strHelpPath.indexOf("?") == -1)
			a_pszHelpFile = strHelpPath + "?ctxid=" + nMapId;
		else
			a_pszHelpFile = strHelpPath + "&ctxid=" + nMapId;
	}
	else
	{
		if (strHelpPath.indexOf("?") == -1)
			a_pszHelpFile = strHelpPath + "?ctxid=0";
		else
			a_pszHelpFile = strHelpPath + "&ctxid=0";
	}

	if (strWnd)
		a_pszHelpFile += ">" + strWnd;

	if (gbIE4)
	{
		a_pszHelpFile += "&cmd=newwnd&rtype=iefrm";
		loadData(a_pszHelpFile);
	}
	else if (gbNav4)
	{
		a_pszHelpFile += "&cmd=newwnd&rtype=nswnd";
		var sParam = "left="+screen.width+",top="+screen.height+",width=100,height=100";
		window.open(a_pszHelpFile, "__webCshStub", sParam);
	}
	else
	{
		var sParam = "left="+screen.width+",top="+screen.height+",width=100,height=100";
		if (gbIE5)
			window.open("about:blank", "__webCshStub", sParam);
		window.open(a_pszHelpFile, "__webCshStub");
	}
}


function ShowWebHelp(strHelpPath, strWnd, uCommand, nMapId)
{
	 
	
	var a_pszHelpFile = "";
	if (uCommand == HH_DISPLAY_TOPIC)
	{
		a_pszHelpFile = strHelpPath + "#<id=0";
	}
	if (uCommand == HH_HELP_CONTEXT)
	{
		a_pszHelpFile = strHelpPath + "#<id=" + nMapId;
	}
	else if (uCommand == HH_DISPLAY_INDEX)
	{
		a_pszHelpFile = strHelpPath + "#<cmd=idx";
	}
	else if (uCommand == HH_DISPLAY_SEARCH)
	{
		a_pszHelpFile = strHelpPath + "#<cmd=fts";
	}
	else if (uCommand == HH_DISPLAY_TOC)
	{
		a_pszHelpFile = strHelpPath + "#<cmd=toc";
	}
	
	if (strWnd)
		a_pszHelpFile += ">>wnd=" + strWnd;
	
	if (a_pszHelpFile)
	{
		if (gbIE4)
			loadData(a_pszHelpFile);
		else if (gbNav4)
		{
			var sParam = "left="+screen.width+",top="+screen.height+",width=100,height=100";
			window.open(a_pszHelpFile, "__webCshStub", sParam);
		}
		else
		{
			var sParam = "left="+screen.width+",top="+screen.height+",width=100,height=100";
			if (gbIE5)
				window.open("about:blank", "__webCshStub", sParam);
			window.open(a_pszHelpFile, "__webCshStub");
		}
	}
}

function isServerBased(a_pszHelpFile)
{
	if (a_pszHelpFile.length > 0)
	{
		var nPos = a_pszHelpFile.lastIndexOf('.');
		if (nPos != -1 && a_pszHelpFile.length >= nPos + 4)
		{
			var sExt = a_pszHelpFile.substring(nPos, nPos + 4);
			if (sExt.toLowerCase() == ".htm")
			{
				return false;
			}
		}
	}
	return true;
}

function getElement(sID)
{

	if(document.getElementById)
		{
		return document.getElementById(sID);
		}
	else if(document.all)
		return document.all(sID);
	return null;
}

function loadData(sFileName)
{
	if(!getElement("dataDiv"))
	{
		if(!insertDataDiv())
		{
			gsFileName=sFileName;
			return;
		}
	}
	var sHTML="";
	if(gbMac)
		sHTML+="<iframe name=\"__WebHelpCshStub\" src=\""+sFileName+"\"></iframe>";
	else
		sHTML+="<iframe name=\"__WebHelpCshStub\" style=\"visibility:hidden;width:0;height:0\" src=\""+sFileName+"\"></iframe>";
	
	var oDivCon=getElement("dataDiv");
	if(oDivCon)
	{
		if(gbNav6)
		{
			if(oDivCon.getElementsByTagName&&oDivCon.getElementsByTagName("iFrame").length>0)
			{
				oDivCon.getElementsByTagName("iFrame")[0].src=sFileName;
			}
			else
				oDivCon.innerHTML=sHTML;
		}
		else
		{
			//alert(sHTML)
			oDivCon.innerHTML=sHTML;			
		}
	}
}

function insertDataDiv()
{
	var sHTML="";
	if(gbMac)
		sHTML+="<div id=dataDiv style=\"display:none;\"></div>";
	else
		sHTML+="<div id=dataDiv style=\"visibility:hidden\"></div>";

	document.body.insertAdjacentHTML("beforeEnd",sHTML);
	return true;
}


/*----------------------------------------------------------------------------------------------------------------------
UDF:
FUNCTION NAME	-	vfnCheckEDIOrgName
PURPOSE			-	To allow [a-z], [A-Z], [0-9], comma, fullstop, forward slash, hyphen, underscore, hash, percentage, at, space and restricting other characters
ARGUMENTS		-	Field object
RETURN VALUE	-	If valid returns true else displays alert
-------------------------------------------------------------------------------------------------------------------------*/

function vfnCheckEDIOrgName(obj)          
{
	var Field
	obj.value=vfnTrim(obj)

	Field = obj
	
    var length = Field.value.length;
    
    for (var ct = 0; ct <= (Field.value.length - 1); ct++)
    {
		var Validchar = Field.value.substring(ct,ct+1);  // Check one Character at a time
		var character = 0;  // Set character as invalid alphanumeric value
		if (((Validchar >= "A") && (Validchar <= "Z")) || ((Validchar >= "a") && (Validchar <= "z")) || (Validchar == " ") || (Validchar == ",") || (Validchar == "-")|| (Validchar == ".")|| (Validchar == "/")|| (Validchar == "_")|| (Validchar == "#")|| (Validchar == "%")|| (Validchar == "@")||((Validchar >="0") && (Validchar <= "9")))
		{
       		character = 1; //valid character
	  	}
		else
		{
			character = 0; //Invalid character			
			obj.focus();
			obj.select();
			alert("Valid characters : [A-Z], [a-z], [0-9], comma, space, . , / , - , _ , # , % , @");
			return false;
		}
	}
	return true; //If valid character
}



function vfnReplaceAll(s, t, u) {
  /*
  **  Replace a token in a string
  **    s  string to be processed
  **    t  token to be found and removed
  **    u  token to be inserted
  **  returns new String
  */
 // alert(s)
  i = s.indexOf(t);
  r = "";
  if (i == -1) return s;
  r += s.substring(0,i) + u;
  if ( i + t.length < s.length)
    r += vfnReplaceAll(s.substring(i + t.length, s.length), t, u);
    return r;
  
  }

/*--------------------------------------------------------------------------
//The Helper function for WebHelp Context Sensitive Help - End
--------------------------------------------------------------------------*/


/*---------------------------------------------------------------------------------------------------------------------
UDF: 21/May/2004 - Rajesh
FUNCTION NAME	-	vfnXmlPopulate
PURPOSE			-   To load Patient LastName, FirstName when PatientID is entered
ARGUMENTS		-	PatientID object, LastName Object, FirstName object, Message
RETURN VALUE	-   Nil
Changed			-   LastName, FirstName are merged to one Textbox
---------------------------------------------------------------------------------------------------------------------*/
function vfnXmlUserIDExist(obj,qTN,qFN,qRV)
{
// TN - Table Name
// DF - Display Fields (with Comma Separator).
// FN - Field Name to be Filtered.
// RV - Record Value
	if(obj.value!="")
	{
		var parser=new ActiveXObject("Microsoft.XMLDOM")
		qryString="XMLCodeCheck.aspx?MN=IsRecordExists"+"&TN="+qTN+ "&FN="+qFN +"&RV="+qRV
		parser.async="false"
		parser.load(qryString)
		if (parser.parseError.reason=="")
		{
		nodes = parser.documentElement.childNodes
			if (nodes.item(0).text!="N/A")
			{
				alert("User ID Already Exists")
				obj.focus()
				obj.select()
			}
			else
			{
			alert("Congratulations!!\nYour Login ID is available for registration.\nPlease complete the rest of the form.")
			}
		}
	}
	else
	{
		obj.value=""
		alert("User ID is empty")
	}	
}
var NSparser
var sObj1,sObj2,sObj3
function fnNSFetchValue()
{
  	var k = NSparser.documentElement;
	var value = (k.childNodes[0].nodeValue);
	var city = value.substring(0,value.indexOf('_'))
	var state  = value.substring(value.indexOf('_')+1)		
	if(value!="N/A")
	{
		
		sObj2.value=city 
		sObj3.value=state
		return true
	}
	else
	{
		sObj2.value=""
		sObj3.value=""		
		alert("Zip Code not available in the list")
		sObj1.focus()
		sObj1.select()
		return false
	}
}

function vfnXmlFetchValueBackup(obj1,obj2,qTN,qDF,qFN,qCV)
{
// TN - Table Name
// DF - Display Fields (with Comma Separator).
// FN - Field Name to be Filtered.
// CV - Check Value
	if(obj1.value!="")
	{
		var parser=new ActiveXObject("Microsoft.XMLDOM")
		qryString="XMLCodeCheck.aspx?MN=Fetchvalue"+"&TN="+qTN+ "&DF="+qDF+ "&FN="+qFN+"&CV="+qCV
		parser.async="false"
		parser.load(qryString)
		
		if (parser.parseError.reason=="")
		{
		 nodes = parser.documentElement.childNodes
		 if (nodes.item(0).text!="N/A")
			{
				obj2.value=nodes.item(0).text
				return true
				//obj1.focus()
				//obj1.select()
			}
		  else
			{
				obj2.value=""
				alert("Zip Code not available in the list")
				obj1.focus()
				obj1.select()
				return false
			}
		}
	}
	else
	{
			obj2.value=""
			return false
			
	}	
}


function opencertdetails()
{
	thewindow=window.open('http://www.claredi.com/public/certdetails.php?username=Mohaideen','Mohaideen','height=400,width=450,toolbar=no,menubar=no,scrollbars=yes,resizable=no,location=no,directories=no,status=yes');
}


function vfnAlertFocus(e, obj, msg, sLayerName)
{
	if (!e) var e = window.event
	
	//e will be null for other than IE	
	if(IsIE || e==null || e==undefined || e.type=="click" || e.type=="submit" || e.type=="keydown")
	{

		if(sLayerName) 
		{
			vfnLayerFocus(sLayerName);
		}
		alert(msg);
		if(obj.disabled==false)
		{
		  obj.focus();		
		  obj.select();				
		 }
	}	
}

function vfnValidZipFormat(obj)
{	
	obj.value=vfnTrim(obj);	
	zip=obj.value;
		
	if(zip=="") return true;
		
		zip = vfnReplace(zip,"-")		
		obj.value = zip;
		
		if(vfnIsNumber(obj,false))
		{		
			if(zip.length==9 || zip.length==5)
			{				
			if( zip.substring(0,5)=="00000" || zip.substring(5,9)=="0000")
				{
				//	alert(msgNotValid + " Zip code");				
				//	obj.focus();
				//	obj.select();
					return false;
					
				}
			if(zip.length==9) obj.value = zip.substring(0,5) + "-" + zip.substring(5,9);
	
			}
			else
			{
			//	alert(msgZipFormat);				
			//	obj.focus();
			//	obj.select();
				return false;
			}
		}
		else{
			/*alert("Enter valid characters [Valid character set [0-9]]");
			obj.select();
			obj.focus();*/
			return false;
			}
		
		return true;
		//obj.value=left(zip
}

			

		
		