﻿// JScript File
/*********************************************************************
/// <summary>
// Name of File     : HelperFunctions.js
// Author           : Infosys
// Class Definition : The file contains javascript 
                      functions used through out the application 
// Create date      : 05 Sep 2006
// 
// Modification log:
//    Date(mm/dd/yyyy)    Author          Change Request #          Description
//    09/05/2005         Infosys                                    Created file
//    07/31/2007         Infosys          Added for DBP Online      Added the CheckServiceAccountNumber function
//                                                                  for masking the service account number
//    08/16/2007         Infosys          MOD001                    Added the CheckFaxPhoneFormat function for masking 
//                                                                  phone and fax numbers in the format XXX-XXX-XXXX
//    08/17/2007         Infosys          MOD002                    Added a check for Mozilla in the EnableDisableButton function
//    03/19/2007         Infosys          MOD003                    Added common functions CheckLeapYear() & GetDateDifference()
//    03/06/08           Infosys         03971705A                  Changes for 03971705A -CARE Categorical Enrollment
//    05/06/09           Infosys         SSOP0001                   Changes for SS Online Payment Project
//    07/30/09           Infosys         WCAG0002                   Changes for Web Accessibility Phase 2
//    06/10/2009         Infosys	 MOD - 200039227 	    EAF Changes
//    31/10/2009         Infosys         SSOP PYMT                  Changes for SSOP Payment Issue
/// </summary>
************************************************************************/

/*'******************************************************************************
'* Function Name    :   FormatAccountNumber
'*
'* Function Desc    :   Function to mask the account number in the format xx-xxx-xxxx
'******************************************************************************
*/
var strUserAgent = navigator.userAgent.toLowerCase();
var isIE = strUserAgent.indexOf("msie") > -1;
function FormatAccountNumber(objEvent)
{   
    var iKeyCode, strKey;
    var reValidChars = /\d/;
    var objInput = objEvent.srcElement;    

    if (isIE)
    {
        iKeyCode = objEvent.keyCode;
    }
    else
    {
        iKeyCode = objEvent.which; 
    }
    strKey = String.fromCharCode(iKeyCode);

    if (!reValidChars.test(strKey)) 
    {       
        //alert("Invalid Character Detected!\nKeyCode = " + iKeyCode + "\nCharacter =" + strKey);

        return false;
    }

    if(objInput.value.length==2 ||objInput.value.length==6 )
    {
        objInput.value=objInput.value + '-';
    }
}
/*******************************************************************************
/Function Name   :  GetControlId
/
/Description     :  Returns the control id 
*******************************************************************************/
var __controlId = '';
function GetControlId()
{
    if (__controlId=='')
    {
        var controlId = document.getElementById("controlID");
        if(controlId == null)
        {
            __controlId= '';
        }
        else
        {
            __controlId= controlId.value;
        }
    }
    return __controlId;
}
/*******************************************************************************
/Function Name   :  GetMasterPageId
/
/Description     :  This function gets the master page id.
*******************************************************************************/
var __masterPageId = null;
function GetMasterPageId()
{
    if (__masterPageId==null)
    {
        __masterPageId = document.getElementById("masterPageId").value;
    }
    return __masterPageId;
}
/*******************************************************************************
/Function Name   :  InvertImage
/
/Description     :  This function chanegs the image of the buttons dynamically.
*******************************************************************************/
function InvertImage(image)
{
    var path, base, name, cleanname, curState, newState, extn;
    path = image.src;
    base= path.substring(0, path.lastIndexOf('/') + 1);
    name = path.substring(path.lastIndexOf('/') + 1, path.length);
    cleanname = name.substring(0, name.lastIndexOf('-'));
    curState = name.substring(name.lastIndexOf('-') + 1, name.lastIndexOf('.'));
    newState = (curState.toLowerCase()=="up"?"over":"up");
    extn = name.substring(name.lastIndexOf('.') + 1, name.length);
    image.src = base + cleanname + '-' + newState + '.' + extn;
 }

/*******************************************************************************
/Function Name   :  InvertPlusMinusImage
/
/Description     :  This function chanegs the image of the buttons dynamically.
*******************************************************************************/
function InvertImage2(image, normalMode, invertedMode, requiredMode)
{
    var path, base, name, cleanname, curState, newState, extn;
    path = image.src;
    base= path.substring(0, path.lastIndexOf('/') + 1);
    name = path.substring(path.lastIndexOf('/') + 1, path.length);
    cleanname = name.substring(0, name.lastIndexOf('-'));
    curState = name.substring(name.lastIndexOf('-') + 1, name.lastIndexOf('.'));
    
    if (curState.toLowerCase()==requiredMode.toLowerCase())
        newState = curState;
    else
        newState = (curState.toLowerCase()==normalMode?invertedMode:normalMode);
    
    extn = name.substring(name.lastIndexOf('.') + 1, name.length);
    image.src = base + cleanname + '-' + newState + '.' + extn;
 }

 /*'******************************************************************************
'* Function Name    :   fnTrim
'*
'* Function Desc    :   This Function will be used to trim the spaces from
'*                      Both sides of the input string
'* Scope            :   NA
'* Input Parameters :   vString
'* Output Parameters:   N/A
'*
'* Return Type      :   String
'*
'******************************************************************************
*/
function fnTrim(vString)
{
	vString = fnLTrim(vString)
	
	vString = fnRTrim(vString)
	return(vString)
}

/*
'******************************************************************************
'* Function Name    :   fnLTrim
'*
'* Function Desc    :   This Function will left trim the passed variable
'* Scope            :   NA
'*
'* Input Parameters :   vString (Variable to left trim)
'*						vDelimiter (Delimiter to trim)
'* Output Parameters:   vString (Variable to left trim)
'*
'* Return Type      :   None
'******************************************************************************

*/

function fnLTrim(strInput)
{
	var strOutput;
	var strlen = strInput.length;
	for (i = 0; i < strlen;i++)
	{
	   if (strInput.charAt(i) != " ")
	   break;
	}
	strOutput = strInput.substring(i,strlen);
	return strOutput;
}

/*
'******************************************************************************
'* Function Name    :   fnRTrim
'*
'* Function Desc    :   This Function will right trim the passed string.
'* Scope            :   NA
'*
'* Input Parameters :   vString (Variable to left trim)
'*						vDelimiter (Delimiter to trim)
'* Output Parameters:   None
'* Return Type      :   None
'******************************************************************************

*/
function fnRTrim(strInput)
{
   var strOutput;
   var strlen = strInput.length;
   for (i=strlen-1; i > 0; i--)
   {
      if (strInput.charAt(i) != " ")
      break;
   }

   strOutput = strInput.substring(0,i+1);
   return strOutput;
}


//Start MOD - Added for DBP Online
     
     //Masking the Service Account Number entered in the Search page
    /*
    '******************************************************************************
    '* Function Name    :   CheckServiceAccountNumber
    '*
    '* Function Desc    :   Function to mask the service account number entered
    '*                      in the search page.
    '* Scope            :   NA
    '*
    '* Input Parameters :   
    '* Output Parameters:   None
    '* Return Type      :   None
    '******************************************************************************
    */
    
    function CheckServiceAccountNumber(objEvent)
     {
        var strUserAgent = navigator.userAgent.toLowerCase();
        var isIE = strUserAgent.indexOf("msie") > -1;
        var isMozilla = strUserAgent.indexOf("firefox") > -1;
         var iKeyCode, strKey;
         var reValidChars = /\d/;
         var controlID = document.getElementById("controlID").value;
        
         var objInput;
         if (isMozilla)
         {
	    objInput = objEvent.target;    
         }
         else
         {
	    objInput = objEvent.srcElement;    
         }

         if (isIE)
         {
           iKeyCode = objEvent.keyCode;
         }
         else
         {
           iKeyCode = objEvent.which; 
         }
         	
        var bCtrlKeyPressed = (objEvent.ctlrKey)?objEvent.ctlrKey : objEvent.modifiers & 2 > 0;
	    switch (iKeyCode)
	    {
		    case 8: //allow backspace
			    return true;
		    case 0: //allow delete and navigation arrow
			    return true;
		    case 118: //allow Ctrl+V
			    if (bCtrlKeyPressed)
				    return true;
		    case 120: //allow Ctrl+X
			    if (bCtrlKeyPressed)
				    return true;
	    }
         strKey = String.fromCharCode(iKeyCode);     

         if (!reValidChars.test(strKey))
         {       
           if (isIE)
		    objEvent.returnValue=false;
	       else
		    return false;		
         }       

        if(objInput.value.length==1 || objInput.value.length==5 ||objInput.value.length==10 )
          {
                 objInput.value=objInput.value + '-';
          }  
             
     }
/*******************************************************************************
/Function Name   :  EnableDisableButton
/
/Description     :  This function is called to change the cursor for enabled and disabled buttons                          
/                   
/Input Parameter :  None
*******************************************************************************/
function EnableDisableButton(buttonId,isEnabled)
{
   var button=buttonId;   
   if (button==null) return;   
   //Start - MOD002
   var strUserAgent = navigator.userAgent.toLowerCase();   
   var isMozilla = strUserAgent.indexOf("firefox") > -1;
   //End - MOD002
        
   if(!isEnabled)
   {        
        button.style.cursor='text';
        button.disabled = true;
   } 
   else 
   {    
        //Start - MOD002
        if (isMozilla) 
        {
            button.style.cursor='pointer';
        }
        else
        {
            button.style.cursor='hand';
        }
        //button.style.cursor='hand';
        //End - MOD002
        button.disabled = false;
   }
   
}
//End MOD - Added for DBP Online     
//Start MOD001
//Masking the Phone Number entered in the page
    /*
    '******************************************************************************
    '* Function Name    :   CheckFaxPhoneFormat
    '*
    '* Function Desc    :   Function to mask the Phone number entered
    '*                      in the  page.
    '* Scope            :   NA
    '*
    '* Input Parameters :   
    '* Output Parameters:   None
    '* Return Type      :   None
    '******************************************************************************
    */
    
    function CheckFaxPhoneFormat(objEvent)
     {
     
        var strUserAgent = navigator.userAgent.toLowerCase();
        var isIE = strUserAgent.indexOf("msie") > -1;
        var isMozilla = strUserAgent.indexOf("firefox") > -1;
         var iKeyCode, strKey;
         var reValidChars = /\d/;
         var controlID = document.getElementById("controlID").value;
        
         var objInput;
         if (isMozilla)
         {
	    objInput = objEvent.target;    
         }
         else
         {
	    objInput = objEvent.srcElement;    
         }

         if (isIE)
         {
           iKeyCode = objEvent.keyCode;
         }
         else
         {
           iKeyCode = objEvent.which; 
         }
         	
        var bCtrlKeyPressed = (objEvent.ctlrKey)?objEvent.ctlrKey : objEvent.modifiers & 2 > 0;
	    switch (iKeyCode)
	    {
		    case 8: //allow backspace
			    return true;
		    case 0: //allow delete and navigation arrow
			    return true;
		    case 118: //allow Ctrl+V
			    if (bCtrlKeyPressed)
				    return true;
		    case 120: //allow Ctrl+X
			    if (bCtrlKeyPressed)
				    return true;
	    }
         strKey = String.fromCharCode(iKeyCode);     

         if (!reValidChars.test(strKey))
         {       
           if (isIE)
		    objEvent.returnValue=false;
	       else
		    return false;		
         }       

        if(objInput.value.length==3 || objInput.value.length==7 )
          {
                 objInput.value=objInput.value + '-';
          }  
             
     }
//End MOD001

//Start MOD - Care Online
//Masking the Service Account Number entered in the Search page
    /*
    '******************************************************************************
    '* Function Name    :   NumericOnly
    '*
    '* Function Desc    :   Function to restrict non numeric inputs
    '* Scope            :   NA
    '*
    '* Input Parameters :   
    '* Output Parameters:   None
    '* Return Type      :   None
    '******************************************************************************
    */
    
    function NumericOnly(objEvent)
     {
        var strUserAgent = navigator.userAgent.toLowerCase();
        var isIE = strUserAgent.indexOf("msie") > -1;
        var isMozilla = strUserAgent.indexOf("firefox") > -1;
         var iKeyCode, strKey;
         var reValidChars = /\d/;
         var controlID = document.getElementById("controlID").value;
        
         var objInput;
         if (isMozilla)
         {
	    objInput = objEvent.target;    
         }
         else
         {
	    objInput = objEvent.srcElement;    
         }

         if (isIE)
         {
           iKeyCode = objEvent.keyCode;
         }
         else
         {
           iKeyCode = objEvent.which; 
         }
         	
        var bCtrlKeyPressed = (objEvent.ctlrKey)?objEvent.ctlrKey : objEvent.modifiers & 2 > 0;
	    switch (iKeyCode)
	    {
		    case 8: //allow backspace
			    return true;
		    case 0: //allow delete and navigation arrow
			    return true;
		    case 118: //allow Ctrl+V
			    if (bCtrlKeyPressed)
				    return true;
		    case 120: //allow Ctrl+X
			    if (bCtrlKeyPressed)
				    return true;
            //Start 200039227 EAF Changes
		    case 46: //allow dot
				    return true;
           //End 200039227 EAF Changes
	    }
         strKey = String.fromCharCode(iKeyCode);     

         if (!reValidChars.test(strKey))
         {       
           if (isIE)
		    objEvent.returnValue=false;
	       else
		    return false;		
         } 
             
     }
     /*
    '******************************************************************************
    '* Function Name    :   timeOut
    '*
    '* Function Desc    :   Function to show alert on session time out
    '* Scope            :   NA
    '*
    '* Input Parameters :   
    '* Output Parameters:   None
    '* Return Type      :   None
    '******************************************************************************
    */
     function timeOut()
    {
        alert("Your session has ended due to inactivity.");
        location.replace('/sc3/');
    }
//End MOD - Care Online     
//MOD003-Start
//These functions have been added as part of Online Payment Extension Project
/*******************************************************************************
/Function Name   :  GetDateDifference()
/Description     :  The function is called to find the difference between 
/                   the From date and the To date selected by user.
*******************************************************************************/   
function GetDateDifference(fromDate, toDate)
{
    fromDate = new Date(fromDate);
    toDate = new Date(toDate);

    //  1 day in milliseconds - 1000*60*60*24
    var oneDayMilliSec=86400000        

    //Calculate difference btwn the two dates, and convert to days        
    var dateDiff =Date.UTC(toDate.getYear(),toDate.getMonth(),toDate.getDate(),0,0,0)- Date.UTC(fromDate.getYear(),fromDate.getMonth(),fromDate.getDate(),0,0,0);
    dateDiff=dateDiff/oneDayMilliSec;        

        /* 
           This code is added because. Report which checks for maximum span to be 12 months
           the earlier validation fails if Start Date =1/1/2004 and 12/31/2004 i.e. for leap year,
           as in all places we check the datediff>=365. For leap years the date difference returned is 365.
        */                

    if(CheckLeapYear(toDate.getYear()) || CheckLeapYear(fromDate.getYear()))
    {
        if(dateDiff==365 && toDate.getDate()!=fromDate.getDate())
        {
            dateDiff=364;
        }           

        if(dateDiff==730)
        {
            if((toDate.getYear()-fromDate.getYear())==1)
                dateDiff=729;
        }
    }  
    return dateDiff;
}        

/*******************************************************************************
/Function Name   :  CheckLeapYear()
/Description     :  Function newly added to check leap year.
*******************************************************************************/
function CheckLeapYear(inputDate)
{
    inputDate = parseInt(inputDate);
    if(inputDate%4 == 0)
    {
        if(inputDate%100 != 0)
        {
            return true;
        }
        else
        {
            if(inputDate%400 == 0)
                return true;
            else
                return false;
        }
    }
    return false;
}
//MOD003-End

    //MOD - Start - 03971705A
    /*
    '******************************************************************************
    '* Function Name    :   CheckNumericFormat
    '*
    '* Function Desc    :   Function to check that the given input is in proper
    '*                      numeric format
    '* Scope            :   NA
    '*
    '* Input Parameters :   source
    '*						
    '* Output Parameters:   NA
    '*
    '* Return Type      :   None
    '******************************************************************************
    */
    function CheckNumericFormat(source)
    {
        var numericFormat = /\d/;
        return numericFormat.test(source);   
    }
    //MOD - End - 03971705A

//Mod: Start - SSOP0001
    /*
    '******************************************************************************
    '* Function Name    :   FormatCustomerAccountNumber
    '*
    '* Function Desc    :   Function to auto-format the input customer account
    '*                      Number
    '* Scope            :   NA
    '*
    '* Input Parameters :   objEvent
    '*						
    '* Output Parameters:   NA
    '*
    '* Return Type      :   None
    '******************************************************************************
    */
    function FormatCustomerAccountNumber(objEvent)
    {
        var strUserAgent = navigator.userAgent.toLowerCase();
        var isIE = strUserAgent.indexOf("msie") > -1;
        var isMozilla = strUserAgent.indexOf("firefox") > -1;
        var iKeyCode, strKey;
        var reValidChars = /\d/;
        var controlID = document.getElementById("controlID").value;
        var objInput;
        if (isMozilla)
        {
            objInput = objEvent.target;    
        }
        else
        {
            objInput = objEvent.srcElement;    
        }

        if (isIE)
        {
            iKeyCode = objEvent.keyCode;
        }
        else
        {
           iKeyCode = objEvent.which; 
        }
        var bCtrlKeyPressed = (objEvent.ctlrKey)?objEvent.ctlrKey : objEvent.modifiers & 2 > 0;
        switch (iKeyCode)
        {
	        case 8: //allow backspace
		        return true;
	        case 0: //allow delete and navigation arrow
		        return true;
	        case 118: //allow Ctrl+V
		        if (bCtrlKeyPressed)
			        return true;
	        case 120: //allow Ctrl+X
		        if (bCtrlKeyPressed)
			        return true;
        }
        strKey = String.fromCharCode(iKeyCode);     

        if (!reValidChars.test(strKey))
        {       
            if (isIE)
	            objEvent.returnValue=false;
            else
	            return false;		
        }       

        if(objInput.value.length==1 || objInput.value.length==4 ||objInput.value.length==8 )
        {
            objInput.value=objInput.value + '-';
        }
    }
    /*
    '******************************************************************************
    '* Function Name    :   DoubleOnly
    '*
    '* Function Desc    :   Function to restrict non numeric inputs
    '* Scope            :   NA
    '*
    '* Input Parameters :   event raised
    '* Output Parameters:   None
    '* Return Type      :   None
    '******************************************************************************
    */
    function DoubleOnly(objEvent)
    {
        var strUserAgent = navigator.userAgent.toLowerCase();
        var isIE = strUserAgent.indexOf("msie") > -1;
        var isMozilla = strUserAgent.indexOf("firefox") > -1;
        var iKeyCode, strKey;
        var reValidChars = /\d/;
        var controlID = document.getElementById("controlID").value;
        
        var objInput;
        //Start SSOP PYMT 001
        if (isIE)
        {
	        objInput = objEvent.srcElement;    
        }
        else
        {
	        objInput = objEvent.target;    
        }
        //End SSOP PYMT 001

        if (isIE)
        {
            iKeyCode = objEvent.keyCode;
        }
        else
        {
            iKeyCode = objEvent.which; 
        }
         	
        var bCtrlKeyPressed = (objEvent.ctlrKey)?objEvent.ctlrKey : objEvent.modifiers & 2 > 0;
	    switch (iKeyCode)
	    {
		    case 8: //allow backspace
			    return true;
		    case 0: //allow delete and navigation arrow
			    return true;
		    case 118: //allow Ctrl+V
			    if (bCtrlKeyPressed)
				    return true;
				else
				    return false;
		    case 120: //allow Ctrl+X
			    if (bCtrlKeyPressed)
				    return true;
				else
				    return false;
            case 46://allow decimal point
                var val = objInput.value;
                var pos = val.indexOf(".");
                if (pos == -1)
                {
                    return true;
                }
                else
                {
                    return false;
                }
	    }
        strKey = String.fromCharCode(iKeyCode);     

        if (!reValidChars.test(strKey))
        {       
            if (isIE)
		        objEvent.returnValue=false;
              else
                return false;         
        }
        else
        {           
            if(checkDecimal(objInput.value) == false)
            {
                if (isIE)
                        objEvent.returnValue=false;
                  else
                        return false;                       
            }
        }                 
    }
    
    /*
    '******************************************************************************
    '* Function Name    :   checkDecimal
    '*
    '* Function Desc    :   Function to validate the regular expression
    '* Scope            :   NA
    '*
    '* Input Parameters :   value to be checked
    '* Output Parameters:   None
    '* Return Type      :   boolean
    '******************************************************************************
    */
    function checkDecimal(val) 
    {    
        if (/\d*\.?\d{0,1}$/.test(val))
              return true;
        else              
              return false;
    }
    
    /*
    '******************************************************************************
    '* Function Name    :   checkDecimal
    '*
    '* Function Desc    :   Rounds the numeric field provided to the decimal places
    '*                      specified
    '* Scope            :   NA
    '*
    '* Input Parameters :   number to round, number of decimal places
    '* Output Parameters:   None
    '* Return Type      :   numeric
    '******************************************************************************
    */
    function RoundNumber(rnum, rlength) 
    { 
        var newnumber = Math.round(rnum*Math.pow(10,rlength))/Math.pow(10,rlength);
        return newnumber;
    }
    
    /******************************************************************************
    * Function Name    :   FormatNumber
    *
    * Function Desc    :   Function populates the formats the amount to append 
    *                       zeros to have 2 digits after decimal
    * Scope            :   NA
    *
    * Input Parameters :  src,args
    * Output Parameters:   None
    * Return Type      :   None
    ******************************************************************************/
    function FormatNumber(finalAmount)
    {
       var value = String(finalAmount);
       if (value.length > 0)
       {
           var position = value.indexOf(".");
           if (position != -1)
           {
              var digitsAfterDecimal = (value.length-1) - position;
              if ((digitsAfterDecimal >= 0) && (digitsAfterDecimal < 2))
              {
                if (digitsAfterDecimal == 0)
                {
                    value = value + "00";
                    finalAmount = value;
                }
                else if (digitsAfterDecimal == 1)
                {
                    value = value + "0";
                    finalAmount = value;
                }
              }
           }
           else
           {
               value = value + ".00";
               finalAmount = value;
           }
       }
       else
       {
            value = value + "0.00";
            finalAmount = value;
       }
       return finalAmount;
    }
    //Mod: End - SSOP0001
    
/* Start - MOD – WCAG0002 */
/******************************************************************************
* Function Name    :   RemoveUltraGridIssues
*
* Function Desc    :   Function removes the JAWs reading issues, Liquid Layout  
*                       from Infragistics UltraWebGrid
* Scope            :   NA
*
* Input Parameters :  ultraGridId
* Output Parameters:   None
* Return Type      :   None
******************************************************************************/
function RemoveUltraGridIssues(ultraGridId)
{                
	var controlID = GetControlId();
	var searchGridIdName = controlID + "_" + ultraGridId;
	var gridId = document.getElementById("G_" + searchGridIdName.replace(/_/gi,"x"));
    gridId.attributes("onmouseover").value = null;

	var searchGridIdMainName =  controlID + "_" + ultraGridId;
	searchGridIdMainName = searchGridIdMainName.replace(/_/gi,"x") + "_main";
	var gridmain = document.getElementById(searchGridIdMainName);
	gridmain.style.tableLayout = "auto";        
	
	var thhead = gridId.getElementsByTagName("thead")[0];
	thhead.attributes("onmouseover").value = null;
	
}
/* End - MOD – WCAG0002 */
