49
AT&T IP Flexible Reach and IP Toll Free Cisco CallManager Configuration Guide (c) 2007 AT&T Intellectual Property. All rights reserved. AT&T, the AT&T logo and all other AT&T marks contained herein are trademarks of AT&T Intellectual Property and/or AT&T affiliated companies. All other marks contained herein are the property of their respective owners. Page 1 of 49 AT&T IP Flexible Reach And IP Toll Free Cisco Unified Communication Manager H.323 Configuration Guide Issue 2.17 3/3/2008

AT&T IP Flexible Reach And IP Toll Free Cisco Unified ... · AT&T IP Flexible Reach and IP Toll Free Cisco CallManager Configuration Guide (c) 2007 AT&T Intellectual Property. All

  • Upload
    others

  • View
    3

  • Download
    0

Embed Size (px)

Citation preview

  • AT&T IP Flexible Reach and IP Toll Free Cisco CallManager Configuration Guide

    (c) 2007 AT&T Intellectual Property. All rights reserved. AT&T, the AT&T logo and all other AT&T marks contained herein are trademarks of AT&T Intellectual Property and/or AT&T affiliated companies. All other marks contained herein are the property of their respective owners.

    Page 1 of 49

    AT&T IP Flexible Reach And IP Toll Free

    Cisco Unified Communication Manager H.323 Configuration Guide

    Issue 2.17 3/3/2008

  • AT&T IP Flexible Reach and IP Toll Free Cisco CallManager Configuration Guide

    (c) 2007 AT&T Intellectual Property. All rights reserved. AT&T, the AT&T logo and all other AT&T marks contained herein are trademarks of AT&T Intellectual Property and/or AT&T affiliated companies. All other marks contained herein are the property of their respective owners.

    Page 2 of 49

    TABLE OF CONTENTS

    1 Introduction................................................................................................................. 4 2 Special Notes .............................................................................................................. 4 3 Overview..................................................................................................................... 5

    3.1 Cisco Unified Communication Manager Site ..................................................... 5 3.2 TFTP and DHCP Configuration Guidelines ....................................................... 6 3.3 Call Manager Cluster Routing ............................................................................ 6

    3.3.1 Call Manager Initiated Calls ....................................................................... 6 3.3.2 AT&T Initiated Calls .................................................................................. 6

    4 Configuration Guide ................................................................................................... 7 4.1 Cisco Unified Communication Manager/Unity Version .................................... 8 4.2 Dual AT&T Border Element Connection ......................................................... 11

    4.2.1 Gateway .................................................................................................... 11 4.2.2 Route Group.............................................................................................. 14 4.2.3 Route List.................................................................................................. 16 4.2.4 Route Pattern............................................................................................. 17

    4.3 Calling Party Number Translation Configuration............................................. 19 4.4 Incoming Call Routing on Telephone Number................................................. 21 4.5 Region - WAN .................................................................................................. 23 4.6 Region – Default ............................................................................................... 24 4.7 Device Pool – WAN ......................................................................................... 25 4.8 Device Pool – Default ....................................................................................... 26 4.9 Media Resource Group ..................................................................................... 27 4.10 Media Resource Group List .............................................................................. 28 4.11 Conference Bridge ............................................................................................ 29 4.12 Transcoder......................................................................................................... 30 4.13 Phone Configuration ......................................................................................... 31 4.14 Service Parameters............................................................................................ 32

    5 IP Toll Free Specific Information ............................................................................. 33 5.1 Call Flow with IP Call Center........................................................................... 33 5.2 Examples: Cisco Unified Communication Manager Configuration for IPCC . 35

    5.2.1 CTI Route Points....................................................................................... 36 5.2.2 Incoming Call Routing for IP Toll Free.................................................... 37 5.2.3 JTAPI User Definitions............................................................................. 38

    6 Incremental Cluster Configuration ........................................................................... 39 6.1 Cisco Unified Communications Manager Servers used in the Cluster............. 39 6.2 Cisco Unified Communications Managers used in the Cluster ........................ 42 6.3 Cisco Unified Communications Manager Group used in the Cluster............... 44 6.4 Device Pool used in the Cluster ........................................................................ 45

    7 Appendix A: Router Version/Configuration for Transcoding and Fax .................... 46 7.1 Router Version .................................................................................................. 46 7.2 Transcoding Configuration ............................................................................... 46 7.3 T.38 Fax Configuration..................................................................................... 47

  • AT&T IP Flexible Reach and IP Toll Free Cisco CallManager Configuration Guide

    (c) 2007 AT&T Intellectual Property. All rights reserved. AT&T, the AT&T logo and all other AT&T marks contained herein are trademarks of AT&T Intellectual Property and/or AT&T affiliated companies. All other marks contained herein are the property of their respective owners.

    Page 3 of 49

    8 Appendix B: Firewall Rules...................................................................................... 48

  • AT&T IP Flexible Reach and IP Toll Free Cisco CallManager Configuration Guide

    (c) 2007 AT&T Intellectual Property. All rights reserved. AT&T, the AT&T logo and all other AT&T marks contained herein are trademarks of AT&T Intellectual Property and/or AT&T affiliated companies. All other marks contained herein are the property of their respective owners.

    Page 4 of 49

    1 Introduction This document provides a configuration guide to assist Cisco Unified Communication Manager administrators in connecting to AT&T IP Flexible Reach Services and IP Toll Free. Please consult your Cisco Unified Communication Manager service manual and user guides for more complete information.

    2 Special Notes Emergency 911/E911 Services Limitations While AT&T IP Flexible Reach services support E911/911 calling capabilities in certain circumstances, there are significant limitations on how these capabilities are delivered. Please review the AT&T IP Flexible Reach Service Guide in detail to understand these limitations and restrictions. AT&T Manual Codec Configuration Required Since Cisco Unified Communication Manager Unity Voice Mail does not support G.729B and AT&T’s default configuration for PSTN to IP calls uses G.729B, a manual configuration (to change from G.729B to G.729) is required on the AT&T side. This change is required for each telephone number that is ported to the IP Flexible Reach service. Please consult your customer care representative about this issue. It may take up to 2 weeks to schedule this activity. Fax Issues with the AT&T HIPCS Platform Fax calls from Cisco Unified Communication Manager H.323 to the AT&T HIPCS platform fail when the destination fax is a super G3 fax machine. This only affects customers in a HIPCS local serving area. Consult your sales representative to determine if you are in a HIPCS local serving area. AT&T IP Teleconferencing Service is not Supported when G.729 is configured on Cisco Unified Communication Manager Cisco Unified Communication Manager only supports a single codec on an IP trunk. Since the AT&T IP Teleconferencing (IPTC) Service supports G.711, a Cisco Unified Communication Manager configured for G.729 will not work with the IPTC service.

  • AT&T IP Flexible Reach and IP Toll Free Cisco CallManager Configuration Guide

    (c) 2007 AT&T Intellectual Property. All rights reserved. AT&T, the AT&T logo and all other AT&T marks contained herein are trademarks of AT&T Intellectual Property and/or AT&T affiliated companies. All other marks contained herein are the property of their respective owners.

    Page 5 of 49

    3 Overview This section provides a service overview of the Cisco Unified Communication Manager integration with AT&T IP Flexible Reach. The components are shown next.

    3.1 Cisco Unified Communication Manager Site The Cisco Unified Communication Manager site consists of the following components. • Cisco phones (customer managed) – These may be hard phones or soft

    phones. • Cisco switch (customer managed) – This is the Cisco switch to provide power

    to the phones. • Cisco Unified Communication Manager IP PBX (customer managed) – This is

    the Cisco Unified Communication Manager server. • Cisco analog gateway (customer managed) – This is a Cisco gateway running

    H.323. The gateway has analog ports for fax. The gateway uses the T.38 protocol to communicate to the Cisco Unified Communication Manager for fax. Note: Fax is supported at speeds up to 9.6kbps. In certain cases, speeds may be limited to 7.2kbps.

    • AT&T Managed Router (AT&T managed) – This is the router managed by AT&T. The router shall perform packet marking and QOS for voice. This router will support NAT (dynamic NAT for the phones, static NAT for the Cisco Unified Communication Manager) in the VoPNT VPN configuration.

    Cisco CallManager IP PBX

    Private Side

    Legacy Circuit

    PBX

    Cisco router With

    Voice GW

    Public Side

    FAX

    Cisco Switch

    AT&T Managed

    Router With NAT

    IP BorderElement

    NetworkGatewayBorder

    Element

    ApplicationServer

    PSTN

    Cisco GW H.323

  • AT&T IP Flexible Reach and IP Toll Free Cisco CallManager Configuration Guide

    (c) 2007 AT&T Intellectual Property. All rights reserved. AT&T, the AT&T logo and all other AT&T marks contained herein are trademarks of AT&T Intellectual Property and/or AT&T affiliated companies. All other marks contained herein are the property of their respective owners.

    Page 6 of 49

    3.2 TFTP and DHCP Configuration Guidelines The guidelines must be followed for TFTP configuration. Phones at the Cisco Unified Communication Manager must have their TFTP server set to the private address of the local Cisco Unified Communication Manager. This can be configured in the DHCP server used by the Cisco Unified Communication Manager site phones. 3.3 Call Manager Cluster Routing The customer must inform AT&T that they have a Call Manager cluster. The cluster can be handled by the AT&T IP Flexible Reach Service as described in the following subsections. 3.3.1 Call Manager Initiated Calls If the Cisco IP Phone’s primary CCM is unreachable, the phone will register with the alternate CCM and all calls will be completed using the alternate CCM. When the primary CCM recovers, the phones will re-register to the primary CCM. The AT&T IP Flexible Reach Service can be provisioned to accept calls from both the primary and alternate CCMs. IP Flexible Reach will support up to 5 servers in a cluster. 3.3.2 AT&T Initiated Calls AT&T will send calls to up to 5 clustered CCM servers in a round robin approach. If one server fails, one call will fail to that server. AT&T will send calls to the other servers exclusively for a period of 5 minutes. After this time, AT&T will then try the failed server.

  • AT&T IP Flexible Reach and IP Toll Free Cisco CallManager Configuration Guide

    (c) 2007 AT&T Intellectual Property. All rights reserved. AT&T, the AT&T logo and all other AT&T marks contained herein are trademarks of AT&T Intellectual Property and/or AT&T affiliated companies. All other marks contained herein are the property of their respective owners.

    Page 7 of 49

    4 Configuration Guide This configuration guide specifies the Cisco Unified Communication Manager screens that must be configured and updated to support the AT&T IP Flexible Reach.

  • AT&T IP Flexible Reach and IP Toll Free Cisco CallManager Configuration Guide

    (c) 2007 AT&T Intellectual Property. All rights reserved. AT&T, the AT&T logo and all other AT&T marks contained herein are trademarks of AT&T Intellectual Property and/or AT&T affiliated companies. All other marks contained herein are the property of their respective owners.

    Page 8 of 49

    4.1 Cisco Unified Communication Manager/Unity Version For IP Flexible Reach, the Cisco Unified Communication Manager must be running one of the following releases: 4.1.(3), 4.2.(1), 4.2.(3) or 4.3.1. The most recent service release is adequate. (See section 5 for IP Toll Free requirements.) You can check the version of Cisco Unified Communication Manager from the about option on the help menu and then selecting details as shown next.

  • AT&T IP Flexible Reach and IP Toll Free Cisco CallManager Configuration Guide

    (c) 2007 AT&T Intellectual Property. All rights reserved. AT&T, the AT&T logo and all other AT&T marks contained herein are trademarks of AT&T Intellectual Property and/or AT&T affiliated companies. All other marks contained herein are the property of their respective owners.

    Page 9 of 49

    The required Unity Voice Mail version is the following. Without this patch, the customer will experience “blank voice mail” when using Unity as an auto attendant. TSP 821ES4. Defects Fixed: CSCsj13401 - Unity failover results from OpenSSL errors CSCsk30869 - CME connection reset causes Unity network connectivity issues CSCsk33686 - RFC2833 digits from secure SIP phones don't work with Unity CSCsk73751 - Unity should able to record mismatch packetization size

    New Behavior: N/A

    Post Install Instructions: 1) Stop all Unity services. 2) Extract all files to some location on the Unity server's hard drive. 3) Run SkinnySetup.exe from that location, and follow all instructions.

  • AT&T IP Flexible Reach and IP Toll Free Cisco CallManager Configuration Guide

    (c) 2007 AT&T Intellectual Property. All rights reserved. AT&T, the AT&T logo and all other AT&T marks contained herein are trademarks of AT&T Intellectual Property and/or AT&T affiliated companies. All other marks contained herein are the property of their respective owners.

    Page 10 of 49

    4) When SkinnySetup.exe completes, reboot the Unity server. To remove this ES and revert to a previous TSP version, simply perform the installation of the previous version.

  • AT&T IP Flexible Reach and IP Toll Free Cisco CallManager Configuration Guide

    (c) 2007 AT&T Intellectual Property. All rights reserved. AT&T, the AT&T logo and all other AT&T marks contained herein are trademarks of AT&T Intellectual Property and/or AT&T affiliated companies. All other marks contained herein are the property of their respective owners.

    Page 11 of 49

    4.2 Dual AT&T Border Element Connection This section describes the procedure for connecting to dual AT&T Border Elements. 4.2.1 Gateway This screen specifies the parameters for connecting to each of the AT&T Border Elements. Two gateways must be configured (i.e. one for each border element). Note that only border element is shown. It is accessed from the Device menu. Key parameters are: Device Name: This is the IP address of the AT&T Border Element specified in this gateway screen. Two gateway screens are recommended (one for each AT&T Border Element). Sample IP addresses are shown in the screens. PLEASE CONTACT YOUR CUSTOMER CARE REPRESENTATIVE FOR THE AT&T IP BORDER ELEMENT IP ADDRESSES FOR YOUR SPECIFIC PBX. Device Pool: Device pool points to a region that specifies the codec and media resources (e.g. conference bridge, transcoder, etc) to be used. Significant Digits: Number of right most digits that will be extracted from the called number. For the virtual telephone number (VTN) feature, this field must be set to ALL. Wait for Far End H.245 Terminal Capability Set – This field must be unchecked. Enabled Inbound FastStart: This specifies that the Cisco Unified Communication Manager can accept the H.323 fast start element in the call setup messages. Calling Party Presentation – Must set to “Allowed”. Caller ID DN – Set this to the phone number prefix for this site. Cisco Unified Communication Manager will prepend this string to the extension when the calling number is generated. Calling Search Space – If the Cisco Unified Communication Manager phones are assigned to a calling search space, then the calling search space on the gateway form must be set to the same value.

  • AT&T IP Flexible Reach and IP Toll Free Cisco CallManager Configuration Guide

    (c) 2007 AT&T Intellectual Property. All rights reserved. AT&T, the AT&T logo and all other AT&T marks contained herein are trademarks of AT&T Intellectual Property and/or AT&T affiliated companies. All other marks contained herein are the property of their respective owners.

    Page 12 of 49

  • AT&T IP Flexible Reach and IP Toll Free Cisco CallManager Configuration Guide

    (c) 2007 AT&T Intellectual Property. All rights reserved. AT&T, the AT&T logo and all other AT&T marks contained herein are trademarks of AT&T Intellectual Property and/or AT&T affiliated companies. All other marks contained herein are the property of their respective owners.

    Page 13 of 49

  • AT&T IP Flexible Reach and IP Toll Free Cisco CallManager Configuration Guide

    (c) 2007 AT&T Intellectual Property. All rights reserved. AT&T, the AT&T logo and all other AT&T marks contained herein are trademarks of AT&T Intellectual Property and/or AT&T affiliated companies. All other marks contained herein are the property of their respective owners.

    Page 14 of 49

    4.2.2 Route Group The route group specifies a set of alternate routes. If the connection to one AT&T Border element fails, Cisco Unified Communication Manager will attempt a connection to the other border element. It is accessed from the Route Plan menu. Key fields are: Route Group Name: This is name of the route group. Distribution Algorithm: Set this to top down. The first BE will be primary and the second will be backup. Selected Devices: These are the gateway devices previously configured.

  • AT&T IP Flexible Reach and IP Toll Free Cisco CallManager Configuration Guide

    (c) 2007 AT&T Intellectual Property. All rights reserved. AT&T, the AT&T logo and all other AT&T marks contained herein are trademarks of AT&T Intellectual Property and/or AT&T affiliated companies. All other marks contained herein are the property of their respective owners.

    Page 15 of 49

  • AT&T IP Flexible Reach and IP Toll Free Cisco CallManager Configuration Guide

    (c) 2007 AT&T Intellectual Property. All rights reserved. AT&T, the AT&T logo and all other AT&T marks contained herein are trademarks of AT&T Intellectual Property and/or AT&T affiliated companies. All other marks contained herein are the property of their respective owners.

    Page 16 of 49

    4.2.3 Route List In order for the route group to be used in a route pattern, a route group must be put in a route list. It is accessed from the route plan menu. Key fields are: Route List Name: The name of the route list. Selected Groups: This is the route group previously defined for the 2 AT&T Border Elements.

  • AT&T IP Flexible Reach and IP Toll Free Cisco CallManager Configuration Guide

    (c) 2007 AT&T Intellectual Property. All rights reserved. AT&T, the AT&T logo and all other AT&T marks contained herein are trademarks of AT&T Intellectual Property and/or AT&T affiliated companies. All other marks contained herein are the property of their respective owners.

    Page 17 of 49

    4.2.4 Route Pattern This screen specifies the called number patterns that should be used to determine which calls are to be sent to the AT&T IP Flexible Reach. It is accessed from the Route Plan menu. Multiple route patterns may need to be configured (e.g. for site to site, US offnet and international offnet calls). Key fields include: Route Pattern: Specifies the dialing prefix and called number match. Gateway/Route List: Must be set to the route list configured for the dual AT&T Border Elements. Prefix Digits: These digits will be pre-pended to the calling party extension. The next section describes how to configure a calling party number translation from an internal extension to a completely different external number. Discard Digits: Discard the dialed digits before the dot.

  • AT&T IP Flexible Reach and IP Toll Free Cisco CallManager Configuration Guide

    (c) 2007 AT&T Intellectual Property. All rights reserved. AT&T, the AT&T logo and all other AT&T marks contained herein are trademarks of AT&T Intellectual Property and/or AT&T affiliated companies. All other marks contained herein are the property of their respective owners.

    Page 18 of 49

  • AT&T IP Flexible Reach and IP Toll Free Cisco CallManager Configuration Guide

    (c) 2007 AT&T Intellectual Property. All rights reserved. AT&T, the AT&T logo and all other AT&T marks contained herein are trademarks of AT&T Intellectual Property and/or AT&T affiliated companies. All other marks contained herein are the property of their respective owners.

    Page 19 of 49

    4.3 Calling Party Number Translation Configuration This section specifies how to configure a calling party number translation from an internal extension to a completely different external number. This configuration is required for the Virtual Telephone Number (VTN) feature. On the directory number screen for the internal extension, set the External Phone Number Mask to the desired external calling party number.

  • AT&T IP Flexible Reach and IP Toll Free Cisco CallManager Configuration Guide

    (c) 2007 AT&T Intellectual Property. All rights reserved. AT&T, the AT&T logo and all other AT&T marks contained herein are trademarks of AT&T Intellectual Property and/or AT&T affiliated companies. All other marks contained herein are the property of their respective owners.

    Page 20 of 49

    On each route pattern used to route to the AT&T network, check the Use Calling Party’s External Phone Number Mask field. You must remove the entries in the other calling party transformation fields.

  • AT&T IP Flexible Reach and IP Toll Free Cisco CallManager Configuration Guide

    (c) 2007 AT&T Intellectual Property. All rights reserved. AT&T, the AT&T logo and all other AT&T marks contained herein are trademarks of AT&T Intellectual Property and/or AT&T affiliated companies. All other marks contained herein are the property of their respective owners.

    Page 21 of 49

    4.4 Incoming Call Routing on Telephone Number When using the AT&T Virtual Telephone Number feature (VTN), the AT&T network will send the call to the PBX using a full E.164 public number. This number can be mapped to an internal extension on the following screen. When using a non virtual Telephone Number, the AT&T network will send the call to the PBX using 7 digits or less as requested by the customer. On the translation pattern screen, put the called number sent from AT&T in the translation pattern field and put the internal extension in the called party transform mask field. This example maps the public called number “7323684812” to the internal extension “6004” for internal routing.

  • AT&T IP Flexible Reach and IP Toll Free Cisco CallManager Configuration Guide

    (c) 2007 AT&T Intellectual Property. All rights reserved. AT&T, the AT&T logo and all other AT&T marks contained herein are trademarks of AT&T Intellectual Property and/or AT&T affiliated companies. All other marks contained herein are the property of their respective owners.

    Page 22 of 49

  • AT&T IP Flexible Reach and IP Toll Free Cisco CallManager Configuration Guide

    (c) 2007 AT&T Intellectual Property. All rights reserved. AT&T, the AT&T logo and all other AT&T marks contained herein are trademarks of AT&T Intellectual Property and/or AT&T affiliated companies. All other marks contained herein are the property of their respective owners.

    Page 23 of 49

    4.5 Region - WAN The region specifies the codec to be used for devices that point to this region. This particular region is used by devices associated with the AT&T Border Elements. This screen is accessed from the system menu. Key fields are: Default: Specifies that the G.729 codec to be used with the default region. WAN: Specifies that the G.729 codec to be used with other devices in this region.

  • AT&T IP Flexible Reach and IP Toll Free Cisco CallManager Configuration Guide

    (c) 2007 AT&T Intellectual Property. All rights reserved. AT&T, the AT&T logo and all other AT&T marks contained herein are trademarks of AT&T Intellectual Property and/or AT&T affiliated companies. All other marks contained herein are the property of their respective owners.

    Page 24 of 49

    4.6 Region – Default The region specifies the codec to be used for devices that point to this region. This particular region is used by devices associated with non AT&T components (i.e. phones). This screen is accessed from the system menu. Key fields are: Default: Specifies that the G.711 codec to be used with the default region. This means that G.711 will be used between the Cisco Unified Communication Manager phones at this site. WAN: Specifies that the G.729 codec to be used with devices in the WAN region. This means that G.729 will be used between the Cisco Unified Communication Manager phones and any endpoint reach via the AT&T Border Element.

  • AT&T IP Flexible Reach and IP Toll Free Cisco CallManager Configuration Guide

    (c) 2007 AT&T Intellectual Property. All rights reserved. AT&T, the AT&T logo and all other AT&T marks contained herein are trademarks of AT&T Intellectual Property and/or AT&T affiliated companies. All other marks contained herein are the property of their respective owners.

    Page 25 of 49

    4.7 Device Pool – WAN The device pool specifies parameters to be used by devices that point to this device pool. This particular device pool is used by devices associated with the AT&T Gatekeeper. This screen is accessed from the system menu. Key fields are: Region: The region specifies the codec to be used for this device pool. Media Resource Group List: This points to a media resource group that specifies media resources (i.e. conference bridges, transcoders, etc) to be used for this device pool.

  • AT&T IP Flexible Reach and IP Toll Free Cisco CallManager Configuration Guide

    (c) 2007 AT&T Intellectual Property. All rights reserved. AT&T, the AT&T logo and all other AT&T marks contained herein are trademarks of AT&T Intellectual Property and/or AT&T affiliated companies. All other marks contained herein are the property of their respective owners.

    Page 26 of 49

    4.8 Device Pool – Default The device pool specifies parameters to be used by devices that point to this device pool. This particular device pool is used by devices associated with non AT&T components (i.e. phones). This screen is accessed from the system menu. Key fields are: Region: The region specifies the codec to be used for this device pool. Media Resource Group List: This points to a media resource group that specifies media resources (i.e. conference bridges, transcoders, etc) to be used for this device pool.

  • AT&T IP Flexible Reach and IP Toll Free Cisco CallManager Configuration Guide

    (c) 2007 AT&T Intellectual Property. All rights reserved. AT&T, the AT&T logo and all other AT&T marks contained herein are trademarks of AT&T Intellectual Property and/or AT&T affiliated companies. All other marks contained herein are the property of their respective owners.

    Page 27 of 49

    4.9 Media Resource Group The media resource group specifies a grouping of media resources (i.e. conference bridge, transcoder, etc). This particular media resource group contains a conference bridge and a transcoder. This screen is accessed from the service/media resource menu. Key fields are: Selected Media Resources: Points to profiles for conference bridge (CFB) and transcoder (XCODE) resources to be used in this group.

  • AT&T IP Flexible Reach and IP Toll Free Cisco CallManager Configuration Guide

    (c) 2007 AT&T Intellectual Property. All rights reserved. AT&T, the AT&T logo and all other AT&T marks contained herein are trademarks of AT&T Intellectual Property and/or AT&T affiliated companies. All other marks contained herein are the property of their respective owners.

    Page 28 of 49

    4.10 Media Resource Group List The media resource group list is a grouping of media resource groups. This screen is accessed from the service/media resource menu.

  • AT&T IP Flexible Reach and IP Toll Free Cisco CallManager Configuration Guide

    (c) 2007 AT&T Intellectual Property. All rights reserved. AT&T, the AT&T logo and all other AT&T marks contained herein are trademarks of AT&T Intellectual Property and/or AT&T affiliated companies. All other marks contained herein are the property of their respective owners.

    Page 29 of 49

    4.11 Conference Bridge The conference bridge specifies the conferencing resources to be used by the Cisco Unified Communication Manager phone users when the phone’s conference button is selected. This screen is accessed from the service/media resource menu.

  • AT&T IP Flexible Reach and IP Toll Free Cisco CallManager Configuration Guide

    (c) 2007 AT&T Intellectual Property. All rights reserved. AT&T, the AT&T logo and all other AT&T marks contained herein are trademarks of AT&T Intellectual Property and/or AT&T affiliated companies. All other marks contained herein are the property of their respective owners.

    Page 30 of 49

    4.12 Transcoder The transcoder specifies the transcoding resources to be used to convert from the G.729 to G.711 codecs for conference calls that include a call leg to the AT&T IP Flexible Reach. This screen is accessed from the service/media resource menu. Key fields include: Host name: This is a pointer to the transcoding resource. The host name is the string “MTP” followed by the MAC address of the Cisco router or switch with the DSP resources being used for transcoding.

  • AT&T IP Flexible Reach and IP Toll Free Cisco CallManager Configuration Guide

    (c) 2007 AT&T Intellectual Property. All rights reserved. AT&T, the AT&T logo and all other AT&T marks contained herein are trademarks of AT&T Intellectual Property and/or AT&T affiliated companies. All other marks contained herein are the property of their respective owners.

    Page 31 of 49

    4.13 Phone Configuration This screen specifies the parameters for the Cisco Unified Communication Manager phones. It is accessed from the Device menu. Key parameters are: Device Pool: This phone will use the parameters in the “default” device pool. Media Resource Group List: This phone will use the resources specifies in the designated Media Resource Group List which include the conference bridge and transcoder.

  • AT&T IP Flexible Reach and IP Toll Free Cisco CallManager Configuration Guide

    (c) 2007 AT&T Intellectual Property. All rights reserved. AT&T, the AT&T logo and all other AT&T marks contained herein are trademarks of AT&T Intellectual Property and/or AT&T affiliated companies. All other marks contained herein are the property of their respective owners.

    Page 32 of 49

    4.14 Service Parameters This screen specifies the parameters for the Cisco Unified Communication Manager. It is accessed from the Service menu. Key parameters are: H225 TCP Timer: This specifies the amount of time Cisco Unified Communication Manager will wait after trying to open an H225 channel with the AT&T Border Element before attempting an alternate route. The recommended value is 2 seconds. Check Progress Indicator Before Establishing Media: This parameter specifies that Cisco Unified Communication Manager must check the progress indicator in an alerting or progress message prior to establishing a media channel. This parameter must be set to “true”. Max Call Duration: This parameter specifies how long a call should last in minutes. The default is 720 (i.e. 12 hours). AT&T recommends that this parameter be set to “0” (no max call duration limit). Duplex Streaming: This parameter specifies whether 2 way voice streaming will occur when music on hold is implemented. AT&T requires that the default setting of “true” be used.

  • AT&T IP Flexible Reach and IP Toll Free Cisco CallManager Configuration Guide

    (c) 2007 AT&T Intellectual Property. All rights reserved. AT&T, the AT&T logo and all other AT&T marks contained herein are trademarks of AT&T Intellectual Property and/or AT&T affiliated companies. All other marks contained herein are the property of their respective owners.

    Page 33 of 49

    5 IP Toll Free Specific Information This section provides information specific to IP Toll Free. 5.1 Call Flow with IP Call Center This section provides a typical call flow for the interaction between the AT&T IP Toll Free Service and the Cisco IP Call Center. Note that Cisco CVP (Cisco Voice Portal) is NOT currently supported. The components in this call flow include the following: • Cisco Unified Communication Manager - Cisco Unified Communication Manager is

    the Cisco IP PBX platform. Cisco Unified Communication Manager release 4.2.1 or 4.3.1 is supported for this application.

    • IP IVR – IP IVR is the Cisco IVR platform. This platform is used to play voice prompts as needed based on information based from ICM. IP IVR release 4.0.4 is supported for this application.

    • ICM – ICM is an IPCC scripting application. This application is used to script the flow of a customer’s IPCC application. ICM release 7.0 SR4 is supported for this application.

  • AT&T IP Flexible Reach and IP Toll Free Cisco CallManager Configuration Guide

    (c) 2007 AT&T Intellectual Property. All rights reserved. AT&T, the AT&T logo and all other AT&T marks contained herein are trademarks of AT&T Intellectual Property and/or AT&T affiliated companies. All other marks contained herein are the property of their respective owners.

    Page 34 of 49

    This call flow is shown in the following figure.

    The steps in a typical call flow are described next. 1. Call delivered from PSTN to AT&T BVOIP network. 2. AT&T BVOIP network sends H.323 setup to Cisco Unified Communication

    Manager. The AT&T network will always send these calls to Cisco Unified Communication Manager,

    3. Based on the called number, a JTAPI Route Request is sent to the ICM. 4. ICM runs a routing script. Based on the routing script, ICM determine what to do

    next. For example, if no available agent is found, the IP IVR label is returned from routing script.

    5. ICM instructs Cisco Unified Communication Manager to transfer call to IP IVR, and Cisco Unified Communication Manager does as instructed.

    6. IP IVR notifies ICM that call has arrived. 7. ICM instructs IP IVR to play queue announcements back through BVOIP network. 8. Agent becomes ready (completed previous call or just went ready). 9. ICM sends call data to selected agent screen and instructs the IP IVR to transfer the

    call to the agent phone. 10. IP IVR transfers the VoIP voice path to selected agent phone. 11. Call is answered by agent.

    PPuubblliicc NNeettwwoorrkk

    IP Phones & Agent Desktops

    IP TDM Call Control

    1

    2

    3 6

    1111 Call Answered

    4

    7

    7 , 7

    IP-

    Cisco CallManager

    IICCMM

    5

    5

    5

    10

    10 ,10

    AATT&&TT BBVVOOIIPP

    N t k

  • AT&T IP Flexible Reach and IP Toll Free Cisco CallManager Configuration Guide

    (c) 2007 AT&T Intellectual Property. All rights reserved. AT&T, the AT&T logo and all other AT&T marks contained herein are trademarks of AT&T Intellectual Property and/or AT&T affiliated companies. All other marks contained herein are the property of their respective owners.

    Page 35 of 49

    5.2 Examples: Cisco Unified Communication Manager Configuration

    for IPCC The following sections describe an example set of Cisco Unified Communication Manager configuration screens that can be used to access the Cisco IPCC application. However, these sections should be used as examples of how IP Toll Free dialed calls can be mapped to a Cisco IPCC application. The customer must consult Cisco documentation to determine the exact configuration they will require. In addition, this document does not cover configuration for ICM and IP IVR.

  • AT&T IP Flexible Reach and IP Toll Free Cisco CallManager Configuration Guide

    (c) 2007 AT&T Intellectual Property. All rights reserved. AT&T, the AT&T logo and all other AT&T marks contained herein are trademarks of AT&T Intellectual Property and/or AT&T affiliated companies. All other marks contained herein are the property of their respective owners.

    Page 36 of 49

    5.2.1 CTI Route Points A computer telephony integration (CTI) route point designates a virtual device that can receive multiple, simultaneous calls for application-controlled redirection. With Cisco IPCC, CTI route points are configured with Cisco Unified Communication Manager with associated directory numbers. The directory numbers correspond to the numbers received from the AT&T IP Toll Free Service. When a call is received, Cisco Unified Communication Manager matches the called number with a directory number. If that directory number corresponds to a CTI route point controlled by the JTAPI interface to ICM, then a route request is passed to ICM. Sample CTI route point and associated directory number screens are shown next. The CTI route point is accessed from the Cisco Unified Communication Manager Devices menu.

    The associated directory number screen is attached next.

    Cisco Unified CallManager 4_2 Administration - Directory Number Configuration.mht

    SystemRoute PlanServiceFeatureDeviceUserApplicationHelp

    Server

    Cisco CallManager

    Cisco CallManager Group

    Date/Time Group

    Device Defaults

    Region

    Device Pool

    Enterprise Parameters

    Location

    Physical Location

    SRST

    AAR Group

    Application Dial Rules

    Route Filter

    Class of Control                    

    Route/Hunt                    

    Translation Pattern

    External Route Plan Wizard

    Route Plan Report

    Time Period

    Time Schedule

    Partition

    Calling Search Space

    Route Group

    Route List

    Route Pattern

    Line Group

    Hunt List

    Hunt Pilot

    Cisco IPMA Configuration Wizard

    Cisco CM Attendant Console       

    Media Resource       

    Service Parameters

    Annunciator

    Conference Bridge

    Media Termination Point

    Music On Hold Audio Source

    Music On Hold Server

    Transcoder

    Media Resource Group

    Media Resource Group List

    Pilot Point

    Hunt Group

    Cisco CM Attendant Console User

    Cisco CM Attendant Console Server

    Call Park

    Directed Call Park

    Call Pickup Group

    Cisco IP Phone Services

    Client Matter Code

    Forced Authorization Code

    Meet-Me Number/Pattern

    Device Mobility                    

    Voice Mail                    

    Device Mobility Group

    Device Mobility Info

    Cisco Voice Mail Port

    Cisco Voice Mail Port Wizard

    Message Waiting

    Voice Mail Pilot

    Voice Mail Profile

    Add a New Device

    CTI Route Point

    Gatekeeper

    Gateway

    Phone

    Trunk

    Device Settings     

    Common Profile

    Device Profile Default

    Device Profile

    Firmware Load Information

    Phone Button Template

    Softkey Template

    CAPF Report

    Add a New User

    Global Directory

    Access Rights          

    Functional Group

    User Group

    Assign Privileges to User Group

    Configure MLA Parameters

    Install Plugins

    Update Plugin URL

    Cisco CallManager Serviceability

    No Applications Installed

    Contents and Index

    For this page

    Component Versions

    About Cisco CallManager

    Directory Number Configuration

    Configure Device (DN_000001030004) Dependency Records

    Associated With

    DN_000001030004 (Line 1)

    Directory Number:  000001030004

    Status:  ReadyNote: Any update to this Directory Number automatically resets the associated devices

    Directory Number

    Directory Number* Shared Line

    Partition< None >ATTIPBERemote Site 1 411

    Directory Number Settings

    Voice Mail Profile< None >DefaultNoVoiceMail

    (Choose to use default)

    Calling Search Space< None >ATTIPBERemote Site 1 411

    User Hold Audio Source< None >1 - SampleAudioSource

    Network Hold Audio Source< None >1 - SampleAudioSource

    Auto AnswerNot available on this device.

    AAR Settings

                                            Voice MailAAR Destination MaskAAR Group

    AAR< None >EYTESTEYTEST2

        Remove this destination from the call forwarding history

        Retain this destination in the call forwarding history

    Call Forward and Pickup Settings

    Voice Mail Coverage/ DestinationCalling Search Space

    Forward All    < None >ATTIPBERemote Site 1 411

    Forward Busy Internal< None >ATTIPBERemote Site 1 411

    Forward Busy External< None >ATTIPBERemote Site 1 411

    Forward No Answer Internal< None >ATTIPBERemote Site 1 411

    Forward No Answer External< None >ATTIPBERemote Site 1 411

    Forward No Coverage Internal< None >ATTIPBERemote Site 1 411

    Forward No Coverage External< None >ATTIPBERemote Site 1 411

    Forward Unregistered Internal< None >ATTIPBERemote Site 1 411

    Forward Unregistered External< None >ATTIPBERemote Site 1 411

    Forward On Failure Ext/Int< None >ATTIPBERemote Site 1 411

    No Answer Ring Duration (seconds)

    Call Pickup Group< None >

    (View Details)

    MLPP Alternate Party Settings

    Target (Destination)

    Calling Search Space< None >ATTIPBERemote Site 1 411

    No Answer Ring Duration (seconds)

    Line Settings for all Devices

    Alerting Name

    Line Settings for this Device

    Display (Internal Caller ID) 

    Line Text LabelNot available on this device.

    External Phone Number Mask 

    Message Waiting Lamp PolicyNot available on this device.

    Ring Setting (Phone Idle)Not available on this device.

    Ring Setting (Phone Active)**Not available on this device.

    Call Pickup Group Audio Alert Setting(Phone Idle)Not available on this device.

    Call Pickup Group Audio Alert Setting(Phone Active)Not available on this device.

    Multiple Call / Call Waiting Settings

    Maximum Number of Calls* (1 - 10000)

    Busy Trigger* (

  • AT&T IP Flexible Reach and IP Toll Free Cisco CallManager Configuration Guide

    (c) 2007 AT&T Intellectual Property. All rights reserved. AT&T, the AT&T logo and all other AT&T marks contained herein are trademarks of AT&T Intellectual Property and/or AT&T affiliated companies. All other marks contained herein are the property of their respective owners.

    Page 37 of 49

    5.2.2 Incoming Call Routing for IP Toll Free For IP Toll Free, the AT&T network will send the call to the PBX using called number digits requested by the customer. This number will be prefixed with 5 leading zeroes. This number can be mapped to an internal extension or a CTI route point directory number on the translation pattern screen (see section 4.4). On the translation pattern screen, put the IP Toll Free called number string in the translation pattern field and put the internal extension or CTI route point directory number in the called party transform mask field.

  • AT&T IP Flexible Reach and IP Toll Free Cisco CallManager Configuration Guide

    (c) 2007 AT&T Intellectual Property. All rights reserved. AT&T, the AT&T logo and all other AT&T marks contained herein are trademarks of AT&T Intellectual Property and/or AT&T affiliated companies. All other marks contained herein are the property of their respective owners.

    Page 38 of 49

    5.2.3 JTAPI User Definitions A number of JTAPI users must be defined by adding a user to the global directory. This is done by selecting “add user” from the User menu. A portion of the user screen is shown next.

    Based on the call flow described in the previous section, the following three user screens were used to configure a Cisco Unified Communication Manager that was tested with IPCC.

    Cisco Unified CallManager 4_2 Administration_ivradmin.mht

    Cisco Unified CallManager 4_2 Administration_ivruser1.mht

    Cisco Unified CallManager 4_2 Administration_pguser.mht

    BODY {BACKGROUND-COLOR: #ffffff}P {FONT-SIZE: 10pt; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif}H1 {FONT-WEIGHT: bold; FONT-SIZE: 18pt; COLOR: #990033; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif; TEXT-ALIGN: left}H2 {FONT-WEIGHT: bold; FONT-SIZE: 14pt; COLOR: #000099; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif; TEXT-ALIGN: left}H3 {FONT-WEIGHT: bold; FONT-SIZE: 12pt; COLOR: #003366; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif; TEXT-ALIGN: left}H4 {FONT-WEIGHT: bold; FONT-SIZE: 10pt; COLOR: #003333; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif; TEXT-ALIGN: left}CAPTION {FONT-WEIGHT: bold; FONT-SIZE: 10pt; COLOR: #003366; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif; TEXT-ALIGN: left}TD {FONT-SIZE: 10pt; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif}TH {FONT-WEIGHT: bold; FONT-SIZE: 10pt; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif; TEXT-ALIGN: left}.banner {MARGIN-TOP: 0pt; FONT-SIZE: 18pt; MARGIN-BOTTOM: 6pt}.content {FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif; BACKGROUND-COLOR: #ffffcc; valign: top}.icon {FONT-WEIGHT: bold; COLOR: #ffffff; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif; TEXT-DECORATION: none}.itemLink {FONT-SIZE: 10pt; COLOR: #990033; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif; TEXT-DECORATION: underline}.itemLinkNew {FONT-SIZE: 10pt; COLOR: #990033; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif; TEXT-DECORATION: underline}.label {FONT-WEIGHT: normal; FONT-SIZE: 10pt; COLOR: #003366}.tableHeading {FONT-WEIGHT: bold; FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif; BACKGROUND-COLOR: #999966; TEXT-ALIGN: left; TEXT-DECORATION: none}.tableContrast {FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif; BACKGROUND-COLOR: #cccc99; TEXT-DECORATION: none}.tableText {FONT-SIZE: 10pt; COLOR: #003366; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif; TEXT-DECORATION: none}.statusText {MARGIN-TOP: -3pt; FONT-WEIGHT: normal; FONT-SIZE: 8pt; MARGIN-BOTTOM: 3pt; COLOR: #800000; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif; TEXT-DECORATION: none}A.sideMenuItem {FONT-SIZE: 8pt; COLOR: #003333; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif; TEXT-DECORATION: none}APPLET {FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif}A.sideMenuItemSelected {FONT-WEIGHT: bold; FONT-SIZE: 8pt; COLOR: #003333; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif; TEXT-DECORATION: none}TABLE.outerTable {TABLE-LAYOUT: fixed; WIDTH: 745px}TABLE.innerTable {TABLE-LAYOUT: fixed; WIDTH: 720px; HEIGHT: 85%; VALIGN: top}BODY.secondary {MARGIN: 3px; BACKGROUND-COLOR: #ffffcc}TD.sideMenuText {FONT-SIZE: 8pt; COLOR: #000000; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif}.itemLinkList {FONT-SIZE: 10pt; COLOR: #990033; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif; TEXT-DECORATION: none}INPUT.disabled {COLOR: #333333; BACKGROUND-COLOR: #ffffcc}INPUT.radio {COLOR: black; BACKGROUND-COLOR: #ffffcc}TH.sideMenuHeading {FONT-SIZE: 8pt; COLOR: #000000; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif}.leftColumnListHeading {FONT-WEIGHT: bold; FONT-SIZE: 8pt; COLOR: #000000; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif; BACKGROUND-COLOR: #999966; TEXT-ALIGN: left}A.addNewItemLink {FONT-SIZE: 8pt; COLOR: #003333; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif; TEXT-DECORATION: underline}A.addNewItemLinkSelected {FONT-WEIGHT: bold; FONT-SIZE: 8pt; COLOR: #003333; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif; TEXT-DECORATION: underline}.tableTextDisabled {FONT-SIZE: 10pt; COLOR: #c0c0c0; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif}.example {FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New', Courier}

    .menuBar {MARGIN-TOP: 0pt; FONT-SIZE: 10pt; MARGIN-BOTTOM: 0pt; BACKGROUND-COLOR: #003333}.menuItem {FONT-SIZE: 10pt; COLOR: #ffffff; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif; BACKGROUND-COLOR: #003333; TEXT-DECORATION: none}.menuItemDisabled {FONT-SIZE: 8pt; COLOR: #cccccc; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif; BACKGROUND-COLOR: #003333; TEXT-DECORATION: none}#menuSystem {LEFT: 10px; VISIBILITY: hidden; POSITION: absolute; TOP: 25px; HEIGHT: 80px}#menuRoutePlan {LEFT: 76px; VISIBILITY: hidden; POSITION: absolute; TOP: 25px; HEIGHT: 80px}#menuTimeScheduleTimePeriod {LEFT: 275px; VISIBILITY: hidden; POSITION: absolute; TOP: 50px; HEIGHT: 80px}#menuRoutePlanRouteHunt {LEFT: 275px; VISIBILITY: hidden; POSITION: absolute; TOP: 70px; HEIGHT: 80px}#menuService {LEFT: 165px; VISIBILITY: hidden; POSITION: absolute; TOP: 25px; HEIGHT: 80px}#menuServiceMediaResources {LEFT: 380px; VISIBILITY: hidden; POSITION: absolute; TOP: 35px; HEIGHT: 80px}#menuFeature {LEFT: 225px; VISIBILITY: hidden; POSITION: absolute; TOP: 25px; HEIGHT: 80px}#menuFeatureVoiceMail {LEFT: 395px; VISIBILITY: hidden; POSITION: absolute; TOP: 70px; HEIGHT: 80px}#menuDevice {LEFT: 294px; VISIBILITY: hidden; POSITION: absolute; TOP: 25px; HEIGHT: 80px}#menuDeviceSettings {LEFT: 322pt; VISIBILITY: hidden; POSITION: absolute; TOP: 55pt}#menuUser {LEFT: 350px; VISIBILITY: hidden; POSITION: absolute; TOP: 25px; HEIGHT: 80px}#menuMLA {LEFT: 480px; VISIBILITY: hidden; POSITION: absolute; TOP: 50px; HEIGHT: 80px}#menuApplication {LEFT: 393px; VISIBILITY: hidden; POSITION: absolute; TOP: 25px; HEIGHT: 80px}#menuHelp {LEFT: 485px; VISIBILITY: hidden; POSITION: absolute; TOP: 25px; HEIGHT: 80px}A.menu {FONT-SIZE: 8pt; COLOR: #ffffff; TEXT-DECORATION: none}A.menu:visited {FONT-SIZE: 8pt; COLOR: #ffffff; TEXT-DECORATION: none}A.menu:active {FONT-SIZE: 8pt; COLOR: #ffffff; TEXT-DECORATION: none}A.menu:hover {FONT-SIZE: 8pt; COLOR: #ff0000; TEXT-DECORATION: none}A.menuDisabled {FONT-SIZE: 8pt; COLOR: #cccccc; TEXT-DECORATION: none}#menuAttendantConsole {LEFT: 380px; VISIBILITY: hidden; POSITION: absolute; TOP: 25px; HEIGHT: 80px}#menuDeviceMobility {LEFT: 405px; VISIBILITY: hidden; POSITION: absolute; TOP: 90px; HEIGHT: 80px}

    //
    // *** Do not edit in Design View ***
    //
    // This JavaScript library file contains functions common to
    // all pages in the CCM Administration application.
    //
    //

    // String validation error stings for isValidString (localize); @ is replaced at run-time by item name, # is replaced by friendly valid character descriptionvar msgValidCharacters = "@ contains one or more invalid characters. Valid characters for @ are \n#";var msgConjunction = " and "; // joins character names when more than one is validvar msgOtherValidChars = "the following character(s): \n\n"; // prefix for display of other valid characters (not named)var msgInvalidCharacters = "@ contains one or more invalid characters. Characters which are not valid for @ are \n#";

    // Description validation error strings for isValidTextData (localize); @ is replaced at run-time by item namevar jsErrInvalidDescription = "@ contains invalid characters. @ may not contain ampersand (&), double quotes (\"), \nbrackets ([ ]), less than (), nor the percent sign (%).";var lblDescription = "Description";var lblAnItem = "An item";var lblNextSetOfItems = "--- Next group of items ---";var lblPrevSetOfItems = "--- Previous group of items ---";

    // Standard messages for validation errorsvar jsErrDuplicate = "'#' is already in use. Please enter a unique value for @ to continue.";var jsErrIsRequired = "@ is a required field. Please enter the value for @ to continue.";var jsErrIsTooLong = "@ cannot contain more than # characters. Please correct the value for @ to continue.";var jsErrOutOfRange = "@ must be a value from # to % (inclusive). Please correct the value for @ to continue.";var jsMsgDNDependency = "The following Directory Numbers used by @ are in Pilot Hunt Groups: \n \n%list%" + "\nYou must remove the Directory Number(s) above from the listed Pilot Hunt Group(s) before deleting this device.";var jsMsgUsedin = " used in ";// Delete confirmation prompt (localize); @ is replaced at run-time by item namevar msgDeleteConfirm = "You are about to permanently delete this @. \nThis action cannot be undone.\n \nContinue?";var jsErrDeleteInUse = "@ could not be deleted because it is in use. \n" + "Click the Dependency Records link to view its dependencies.";var jsErrDeleteInUse_List = "@ could not be deleted because it is in use. Click on @ \n" + "and then click the Dependency Records link to view its dependencies.";var jsErrSpecialIP = " Value for @ is a special IP Address which is not valid. Do you want to continue with this value?";var jsErrDNSInvalidFirstChars = "The first character of a Host Name can only be a letter.\nPlease adjust your entry for @ to continue.";var jsErrDNSInvalidLastChars = "The last character of Host Name can only be a letter or a number.\nPlease adjust your entry for @ to continue.";var jsErrInvalidIP = "Value entered for @ is not a valid dotted-decimal IP address.\nIP Address should have four 8-bits numbers(Octets) seperated by periods \n(Ex: 192.0.0.26). The value of each octet should be between 0 and 255.\nPlease adjust your entry to continue.";var jsErrDNSInvalidChars = "Value entered for @ contain invalid characters.";var jsErrCouldNotResolveDNS = "Value entered for @ could not be resolved to an IP Address from DNS. Do you want to continue?";

    // Reset confirmation prompts (localize); # is replaced at run-time by number of affected devicesvar msgMultiDeviceResetNeeded = "# device(s) need to be reset for these changes to take effect. Calls \n" + "in progress on an affected gateway may be dropped when the gateway is reset. \n \n" + "To reset the affected devices, click the Reset Devices button when \n" + "the update is complete. If you don't want to reset the devices now, \n" + "you can return to this item at any time and click the Reset Devices \n" + "button to initiate the required device resets.";var msgMultiDeviceRestartNeeded = "# device(s) need to be restarted for these changes to take effect. Calls \n" + "in progress on an affected gateway may be dropped when the gateway is restarted. \n \n" + "To restart the affected devices, click the Restart Devices button when \n" + "the update is complete. If you don't want to restart the devices now, \n" + "you can return to this item at any time and click the Restart Devices \n" + "button to initiate the required device restarts.";var msgMultiDeviceResetConfirm = "You are about to reset # device(s) associated with this item. \n" + "Calls in progress on affected gateways will be dropped. \n" + "\nContinue?";var msgMultiDeviceRestartConfirm = "You are about to restart # device(s) associated with this item. \n" + "Calls in progress on affected gateways may be dropped. \n" + "\nContinue?"; var msgMultiDeviceResetInitiate = "Attempting to reset # device(s). The device(s) reset as soon \n" + "as possible; calls in progress on gateways will be dropped.";var msgMultiDeviceRestartInitiate = "Attempting to restart # device(s). The device(s) restart as soon \n" + "as possible; calls in progress on gateways might be dropped.";var msgMultiDeviceResetNoDevices = "There are no associated devices to restart.";

    // Generic error status message displayed in browser's status bar (localize)var jsStatusProcessing = "Processing...";var jsStatusValidating = "Validating...";var jsStatusError = "The form contains one or more errors";var jsMsgErrorNo = "Error No. ";var jsErrNoItemLeft = "No item is available for the given criteria, Please enter new search criteria";var jsErrInputNotString = "The specified form element (%S1) failed the test \"isValidStringData\" because it is the wrong type of form field (%S2) for this function.";// Remote Scripting support messages (localize)var lblRemoteScriptingError = "Remote Scripting Error";var lblErrorInfo = "Error Information"var lblSource = "Source";var lblDetails = "Details";var lblClose = "Close";

    // string validation character sets; concatenate these in scripts to form strings for // validation. E.g., validChars = maskAlphaNumeric + charUnderScore + charDashvar charAmpersand = "&";var charAsterisk = "*";var charBackSlash = "\\"; // double backslash here evaluates to single slash where usedvar charBang = "!";var charBraces = "{}";var charBrackets = "";var charCarrot = "^";var charComma = ",";var charColon = ":";var charDash = "-";var charDot = ".";var charDoubleQuote = "\"";var charForwardSlash = "/";var charParens = "()";var charPercent = "%";var charPlus = "+";var charQuestionMark = "?";var charSingleQuote = "'";var charSpace = " ";var charSquareBrackets = "[]";var charUnderscore = "_";var charX = "xX"; //these characters are used for route patternvar charN = "N"; //these characters are used for route patternvar charPound = "#"; //these characters are used for route patternvar charAtSign = "@"; //these characters are used for route patternvar charPrefixDigits = "[+]"; //these characters are used for route patternvar charSufixDigits = "!";var charEqual = "=";

    var maskAlpha = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; // base ASCII chars onlyvar maskNumeric = "1234567890";var maskHexDigits = "0123456789abcdefABCDEF";var maskAlphaNumeric = maskAlpha + maskNumeric;var maskMACAddress = maskHexDigits;var maskIPAddress = maskNumeric + charDot;var maskDate = maskNumeric + charForwardSlash;

    // Masks for validating characters in DNs and Patternsvar maskRangeNotation = "[^-]"; // allowable range or set of charsvar maskMultiChar = "+?"; // 0 or more, 1 or more of preceeding char/range

    var maskNumericDigits = maskNumeric; // 0-9var maskAllDigits = maskNumericDigits + charAsterisk + charPound; // 0-9 *#var maskMask = maskAllDigits + charX; // 0-9 *# Xvar maskPattern = maskMask + maskRangeNotation + maskMultiChar + charBang; // 0-9 *# X [^-] +? !var maskAtPattern = maskPattern + charDot + charAtSign; // 0-9 *# X [^-] +? ! .@var maskForMLAUserGrpBase = maskAlphaNumeric + charComma + charEqual + charDot + charSpace + charDash + charUnderscore;

    var flgInProcess = false; // used to prevent multiple calls to same remote scripting function

    //// functions to produce standard error message for common validation//

    function displayDeviceDNDependencies(deviceName, dependencies){ var msg = jsMsgDNDependency.replace(/@/, deviceName).toString(); var list = ""; for (var i = 0; i < dependencies.length; i++) { list += dependencies[i].dn; list += (dependencies[i].partition) ? ("/" + dependencies[i].partition) : ""; list += jsMsgUsedin + dependencies[i].pilot + "\n"; } alert( msg.replace(/%list%/, list).toString() ); return;}

    function getDeleteFailedInUseMessage(itemName, fromList){ var msg; if (fromList) { // message for delete failed from Find/List page msg = jsErrDeleteInUse_List.replace(/@/g, itemName).toString(); } else { // message for delete failed from configuration page msg = jsErrDeleteInUse.replace(/@/g, itemName).toString(); } return msg;}

    function getIsDuplicateNameMessage(duplicateName, itemName){ if (!itemName) itemName = lblAnItem; var msg = jsErrDuplicate.replace(/@/, itemName).toString(); return msg.replace(/#/, duplicateName).toString();}

    function getIsRequiredMessage(name){ return jsErrIsRequired.replace(/@/gi, name).toString();}

    function getIsTooLongMessage(name, len){ var msg = jsErrIsTooLong.replace(/@/gi, name).toString(); return msg.replace(/#/, len).toString();}

    function getOutOfRangeMessage(name, min, max){ var msg = jsErrOutOfRange.replace(/@/gi, name).toString(); msg = msg.replace(/#/, min).toString(); return msg.replace(/%/, max).toString();}

    function getNamedCharTests(){ var tests = new Array(); var count = 0 tests[count++] = { mask: maskHexDigits, friendlyName: "hexadecimal numbers", expression: maskHexDigits }; tests[count++] = { mask: maskAlpha, friendlyName: "letters", expression: maskAlpha }; tests[count++] = { mask: maskNumeric, friendlyName: "numbers", expression: maskNumeric }; tests[count++] = { mask: charX, friendlyName: "the letter X", expression: charX }; tests[count++] = { mask: charSpace, friendlyName: "spaces", expression: charSpace }; tests[count++] = { mask: charDash, friendlyName: "dashes", expression: "\\-" }; tests[count++] = { mask: charDot, friendlyName: "dots (periods)", expression: charDot }; tests[count++] = { mask: charComma, friendlyName: "commas", expression: charComma }; tests[count++] = { mask: charUnderscore, friendlyName: "underscores", expression: charUnderscore }; tests[count++] = { mask: charAmpersand, friendlyName: "ampersand (&)", expression: charAmpersand }; tests[count++] = { mask: charBraces, friendlyName: "braces ({})", expression: charBraces }; tests[count++] = { mask: charBrackets , friendlyName: "less than or greater than ()", expression: charBrackets }; tests[count++] = { mask: charPercent, friendlyName: "percent sign (%)", expression: charPercent }; tests[count++] = { mask: charDoubleQuote, friendlyName: "double quotes (\")", expression: charDoubleQuote }; return tests;}

    function getValidStringMessage(mask, displayName){ var friendlyNames = ""; var namedCharacters = ""; var namedCharTests = getNamedCharTests(); var charSets = new Array(); var lastCharSet; for (var i=0; i< namedCharTests.length; i++) { if (mask.indexOf(namedCharTests[i].mask) != -1) { // mask contains this named set of characters if (lastCharSet) { charSets[charSets.length] = lastCharSet; } lastCharSet = namedCharTests[i].friendlyName; } namedCharacters += namedCharTests[i].expression; } var reCharsNotTested = new RegExp("[^" + namedCharacters + "]","gi"); var arrayOtherValidChars = mask.match(reCharsNotTested); if (arrayOtherValidChars) { if (lastCharSet) { charSets[charSets.length] = lastCharSet; } lastCharSet = msgOtherValidChars + arrayOtherValidChars.join(" "); } // create friendly name string for named characters if (charSets.length > 0) friendlyNames = charSets.join(", ") + msgConjunction + lastCharSet; else friendlyNames = lastCharSet; var msg = msgValidCharacters.replace(/@/gi, displayName).toString(); msg = msg.replace(/#/, friendlyNames).toString(); if (!arrayOtherValidChars) msg += charDot; // add a period if only named sets are present return msg;}

    // This is a copy of getvalidStringMessage.

    function getInvalidStringMessage(mask, displayName){ var friendlyNames = ""; var namedCharacters = ""; var namedCharTests = getNamedCharTests(); var charSets = new Array(); var lastCharSet; for (var i=0; i< namedCharTests.length; i++) { if (mask.indexOf(namedCharTests[i].mask) != -1) { // mask contains this named set of characters if (lastCharSet) { charSets[charSets.length] = lastCharSet; } lastCharSet = namedCharTests[i].friendlyName; } namedCharacters += namedCharTests[i].expression; } var reCharsNotTested = new RegExp("[^" + namedCharacters + "]","gi"); var arrayOtherInvalidChars = mask.match(reCharsNotTested); if (arrayOtherInvalidChars) { if (lastCharSet) { charSets[charSets.length] = lastCharSet; } lastCharSet = msgOtherValidChars + arrayOtherInvalidChars.join(" "); } // create friendly name string for named characters if (charSets.length > 0) friendlyNames = charSets.join(", ") + msgConjunction + lastCharSet; else friendlyNames = lastCharSet; var msg = msgInvalidCharacters.replace(/@/gi, displayName).toString(); msg = msg.replace(/#/, friendlyNames).toString(); if (!arrayOtherInvalidChars) msg += charDot; // add a period if only named sets are present return msg;}

    // function isValidString:// checks the contents of a string (s) to make sure all characters // are in the set of specified valid characters (validChars).// Takes as input:// s - the string to validate. An empty string is always valid.// mask - the list of valid characters, which can include letters, number, symbols, // etc. Use the string validation character sets above to construct the mask.// displayName - (optional) name of the field being validated; if supplied, the function// displays standard validation error message using displayName.// Returns:// Boolean - true if all characters in s are valid, or if s is empty; false if any // characters in s are not in the specified valid character set.//function isValidString(s, mask, displayName, isRequired){ if ( (typeof(s) == "string") && (s.length > 0) ) { for (var i = 0; i < s.length; i++) { if (mask.indexOf(s.charAt(i)) == -1) { if (displayName) { alert(getValidStringMessage(mask, displayName)); } return false; // a character was found that is not valid } } } else if (isRequired && displayName) { alert(getIsRequiredMessage(displayName)); return false; } return true; // all characters in the string were valid}

    // function isValidStringData:// same as isValidString, but accepts element object as first parameter, and// takes care of error messages and selecting element on error condition.// Takes as input:// el - the text element to validate (INPUT type="text").// mask - the list of valid characters, which can include letters, number, symbols, // etc. Use the string validation character sets above to construct the mask.// displayName - (optional) name of the field being validated; if supplied, the function// displays standard validation error message using displayName.// maxLength - the maximum number of characters allowed in the string// isRequired - whether or not to allow zero-length string// Returns:// Boolean - true if all characters in el.value are valid, or if el.value is empty string; // false if any characters in el.value are not in the specified valid character set.//function isValidStringData(el, mask, displayName, maxLength, isRequired){ if (!el.type.match(/text|textarea|hidden|password/)) { msg = jsErrInputNotString.replace(/%S1/, el.name).toString(); showValidationError(el, msg.replace(/%S2/, el.type).toString(), 0); return false; // not text data } var s = jTrim(el.value); el.value = s;

    if (!maxLength) maxLength = 255; if (s.length > 0) { if (s.length > maxLength) { showValidationError(el, getIsTooLongMessage(displayName, maxLength), 1); return false; } if (!isValidString(s, mask, displayName)) { el.focus(); el.select(); return false; } } else if (isRequired) { showValidationError(el, getIsRequiredMessage(displayName), 0); return false; }

    return true;}

    function isValidDNOrPattern(pattern, type){ // // !!! Remote Scripting must be enabled on any page that calls this function !!! // // optional third parameter "fieldName" var fieldName; if (isValidDNOrPattern.arguments.length == 3) fieldName = isValidDNOrPattern.arguments[2]; var rs_result = RSExecute("_RemoteScripts/rs_numplan.asp", "isValidPatternSyntax", type, pattern); var err = getSafeReturnValue(rs_result); if (err) { alert(((fieldName) ? fieldName + ":\n" : "") + err); return false; } return true;}

    // function isValidTextData:// validates the contents of a Description field to make sure restricted characters // are not used (angle brackets, square brackets, ampersand, double quote and percent).// Takes as input:// el - the form element to validate (assumes a description, but can be any text input).// maxLength - maximum number of characters to accept.// displayName - (optional, string) name of the field being validated. Description is the default. // Returns:// Boolean - true if all characters in elDescription.value are valid, or if elDescription is empty; // false if any invalid (restricted) characters are present in elDescription.value.//function isValidTextData(el, maxLength, displayName, isRequired, invalidString){ if (invalidString) { var invalidChars = invalidString; } else { var invalidChars = charDoubleQuote + charPercent + charBrackets + charSquareBrackets + charAmpersand; } var s = jTrim(el.value); el.value = s; if (!displayName) displayName = lblDescription; if (s.length > 0) { if ( (maxLength) && (s.length > maxLength) ) { showValidationError(el, getIsTooLongMessage(displayName, maxLength), 1); window.status = jsStatusError; return false; } for (var i = 0; i < s.length; i++) { if (invalidChars.indexOf(s.charAt(i)) != -1) { if (!invalidString) { showValidationError(el, jsErrInvalidDescription.replace(/@/gi, displayName), 1); } else { var msg = getInvalidStringMessage(invalidChars, displayName) showValidationError(el, msg , 1); } window.status = jsStatusError; return false; } } } else if (isRequired) { showValidationError(el, getIsRequiredMessage(displayName), 0); window.status = jsStatusError; return false; } return true; // all characters in the string were valid}

    // function isDataInRange:// validates the contents of a numeric data field to make sure entered value falls // within the specified range.// Takes as input:// el - the form element to validate (assumes a description, but can be any text input).// displayName - name of the field being validated, used in alert on error.// maxLength - the maximum number of digits in the entry// minVal - the lower bound of the valid range// maxVal - the upper bound of the valid range // Returns:// Boolean - true if the value is within the range, or if it is empty and not required;// false if the value is out of range, too long, or missing when required.//function isDataInRange(el, displayName, maxLength, minVal, maxVal, isRequired){ window.status = jsStatusValidating; var s = jTrim(el.value); el.value = s; if (s.length == 0) { if (isRequired) { showValidationError(el, getIsRequiredMessage(displayName), 0); return false; } else return true; } if (!isValidString(s, maskNumeric, displayName)) { el.focus(); el.select(); return false; } if ( (Number(s) < minVal) || (Number(s) > maxVal) ) { showValidationError(el, getOutOfRangeMessage(displayName, minVal, maxVal), 1); return false; } // not really needed given prior tests which require an integer, but kept for backward compatibility if (s.length > maxLength) { showValidationError(el, getIsTooLongMessage(displayName, maxLength), 1); return false; } // not really needed given prior tests which require an integer, but kept for backward compatibility if (s.length > maxLength) { showValidationError(el, getIsTooLongMessage(displayName, maxLength), 1); return false; } window.status = ""; return true; }

    // function confirmDelete:// prompts user to confirm that they want to delete the specified item.// inputs:// item - a description of the type of item being deleted. For example, if // you are deleting a Device Pool, use "Device Pool". The user will see this // in the prompt ("You are about to permanently delete this Device Pool...").// returns:// Boolean - true if the user clicks Yes (continue); false if the user clicks No.//function confirmDelete(item){ if (confirm(msgDeleteConfirm.replace(/@/, item))) return true; else return false;}

    // function jLTrim:// javascript version of VBScript LTrim function// inputs:// s - a string object// returns:// s with leading spaces removed//function jLTrim(s){ if (typeof(s) == "string") { while ((s.length > 0) && (s.charAt(0) == " ")) { s = s.substring(1, s.length) } } return s;}

    // function jRTrim:// javascript version of VBScript RTrim function// inputs:// s - a string object// returns:// s with trailing spaces removed//function jRTrim(s){ if (typeof(s) == "string") { while ((s.length > 0) && (s.charAt(s.length -1) == " ")) { s = s.substring(0, s.length - 1) } } return s;}

    // function jTrim:// javascript version of VBScript Trim function// inputs:// s - a string object// returns:// s with leading and trailing spaces removed (spaces within string remain intact)//function jTrim(s){ if (typeof(s) == "string") s = jRTrim(jLTrim(s)); return s;}

    // function getBaseURL// utility function to get the virtual root for the project// inputs:// none// returns:// the base URL (virtual root) of the Cisco CallManager Admin web//function getBaseURL(){ var secondSlash, path; var projectBase = ''; if ((secondSlash = (path = window.location.pathname).indexOf('/',1)) != -1) projectBase = path.substring(0,secondSlash); // Check if we are running under ICS if (projectBase.toUpperCase() == "/ICS") projectBase += "/CCMAdmin" return projectBase;}

    function showErrorMessage(data){ // since IE and NN handle window positioning differently, do browser specific options if (document.all) var options = "status,resizable,scrollbars,top=" + (window.screenTop + 50) + ",left=" + (window.screenLeft + 150) + ",width=500,height=350"; else if (document.layers || document.getElementById ) var options = "status=yes,resizable=yes,scrollbars=yes,screenY=" + (window.screenY + 100) + ",screenX=" + (window.screenX + 150) + ",width=500,height=350";

    var errWin = window.open('blank.html','errWin', options); errWin.document.open(); errWin.document.write('\n'); errWin.document.write('\n'); errWin.document.write('' + lblRemoteScriptingError + '\n'); errWin.document.write('\n'); errWin.document.write('\n'); errWin.document.write('\n'); errWin.document.write('' + lblErrorInfo + '\n'); errWin.document.write(data); // user supplied HTML data errWin.document.write('\n'); errWin.document.write('\n'); errWin.document.write(''); errWin.document.close(); errWin.focus();}

    function rsCallSuccessful(rs_result){ if (rs_result.status == 0) return true; var data = '

    ' + rs_result.message + '

    \n'; data += '' + lblDetails + ':\n'; data += '

    ' + unescape(rs_result.data) + '

    '; showErrorMessage(data); return false;}

    function showDBLError(DBLErr){ var data = ''; if (DBLErr.dblNumber) { data += '

    ' + DBLErr.dblDescription + ' '; data += (DBLErr.context) ? DBLErr.context + ' ' : ''; data += '(' + DBLErr.dblNumber + ')

    \n'; } if (DBLErr.source) { data += '' + lblSource + ':\n'; data += '

    ' + DBLErr.source + '

    \n'; } data += '' + lblDetails + ':\n'; data += '

    ' + jsMsgErrorNo + DBLErr.number + ' (0x' + DBLErr.hexNumber + '):
    \n' data += DBLErr.description + '

    \n'; showErrorMessage(data);}

    // function getSafeReturnValue// utility function to convert remote scripting return values to// useful values// inputs:// rs_result - the result object from a remote scripting call// returns:// the return_value property of the remote scripting result object, with// "undefined" converted to the JavaScript undefined value if needed;// if errors occur on the remote scripting page, the actual error message// from the page is shown in a separate browser window.// function getSafeReturnValue(rs_result){ // utility routine for remote scripting var isUndefined; if (rs_result.status == -1) { var errWin = window.open('blank.html','errWin','height=300,width=500'); errWin.document.write(rs_result.data); errWin.focus(); } // convert string "undefined" to value undefined if (rs_result.return_value == "undefined") return isUndefined; else return rs_result.return_value;}

    // function getElement:// utility for accessing form elements// inputs:// formName - name of the form (string) containing the element// elName - name of the element to get// returns:// specified element, if it exists; null if element doesn't exist;//function getElement(formName, elName){ el = eval('document.' + formName + '.' + elName); if (typeof(el) == "object") return el; else return null;}

    // function getValue:// utility to get the value of any form element// inputs:// el - the form element object// returns:// value of the element object, or null if there is no// value defined for the element; in the case of multi-select// lists, returns an array of selected values;//function getValue(el){ var isUndefined; if (!el) return isUndefined; // element (el) doesn't exist // gets the specified elements value based on type switch (el.type) { case "select-one": { return el.options[el.selectedIndex].value; } case "select-multiple": { var hr = new Array(); for (var i = 0; i < el.options.length; i++) { if (el.options[i].selected) { hr[hr.length] = el.options[i].value; } } return hr; // array of selected values! } case "radio": { var buttonGroup = el.form.elements[el.name];

    if (typeof(buttonGroup.value) != "undefined") return buttonGroup.value; else { for (var i = 0; i < buttonGroup.length; i++) { if (buttonGroup[i].checked) return buttonGroup[i].value; } } return null; } case "checkbox": { if (el.checked) return el.value; else return null; } case "undefined": { return null; } default: { return el.value; } }}

    // function setValue:// utility to set the value of any form element// inputs:// formName - the name of the form object (object is not required)// elNameOrID - the name or unique ID of the element; unique ID is required if// the target element is a radio button in a group// newValue - the value to set for the form element// returns:// result - true if the value was set, false if not; for non-text elements (checkbox,// radio, select), and the selection state of the element is changed to true// if new value matches an existing value, or false if the values don't match// function setValue(formName, elNameOrID, newValue){ var el = eval('document.' + formName + '.' + elNameOrID); if (typeof(el) == "object") var type = el.type; else return false; switch (type) { case "checkbox": case "radio": { if (el.value == newValue) el.checked = true; else el.checked = false; return true; }

    case "select-one": case "select-multiple": { // sets the new value of the specified select list form element for (var i = 0; i < el.options.length; i++) { if (el.options[i].value == newValue) { el.selectedIndex = i; return true; } } return false; }

    default: { // sets the new value of the specified text or hidden form element el.value = newValue; return true; } }}

    // function selectItemByValue:// selects an item in a select list using a specified value.// Takes as input:// elSelectList - the selectList object by name/ID// newValue - the value to be selected// Returns:// nothing - if the value is found that item is selected// otherwise the list is not changed//function selectItemByValue(elSelectList, newValue){ if (!newValue) return; for (var i = 0; i < elSelectList.length; i++) { if (elSelectList.options[i].value == newValue) { elSelectList.selectedIndex = i; break; } } return;}

    // function selectItemByText:// selects an item in a select list using a text value. // Takes as input:// elSelectList - the selectList object by name/ID// newText - the text (display) string value to be selected// Returns:// nothing - if the value is found that item is selected// otherwise the list is not changed//function selectItemByText(elSelectList, newText){ if (newText.length == 0) return; for (var i = 0; i < elSelectList.length; i++) { if (elSelectList.options[i].text.toLowerCase() == newText.toLowerCase()) { elSelectList.selectedIndex = i; break; } } return;}

    // function selectItemByPartialText:// selects an item in a select list if it starts with a specified string (partial text). // Takes as input:// elSelectList - the selectList object by name/ID// partialText - the partial text string to match against// Returns:// nothing - if the partial text is found, the first item starting with that string is selected, // otherwise the first item greater than the partial text is selectedfunction selectItemByPartialText(elSelectList, partialText){ var strOption, strMatch; //holds temp strings if (partialText.length == 0) return; else strMatch = partialText.toLowerCase(); // make match case-insensitive for (var i = 0; i < elSelectList.length; i++) { strOption = elSelectList.options[i].text.toLowerCase(); // stop if exact match is found, or if the partial text is less than the current option text (no further match possible) if ( (strOption.indexOf(strMatch) == 0) || (strMatch < strOption.substring(0, strMatch.length)) ) { elSelectList.selectedIndex = i; break; } } return;}

    // function selectOptionByValue:// selects a radio button from a group of radio buttons using a value. // Takes as input:// buttonGroup - the radio button group name// newValue - the value of the button to selected// Returns:// nothing - if the value is found that button is selected// otherwise the button group is not changed//function selectOptionByValue(buttonGroup, newValue){ for (var i = 0; i < buttonGroup.length; i++) { if (buttonGroup[i].value == newValue) { buttonGroup[i].checked = true; break; } } return;}

    // // Utility functions for moving items between lists//function _switchItems(list, a, b){ var optionA = { text: list.options[a].text, value: