Abstract:
An embodiment includes one or more call systems and a computer processor communicatively coupled with the one or more call systems. The computer processor is configured to receive a communication from a first call system of the one or more call systems. The computer processor is further configured to retrieve recipient data from a second call system of the one or more call systems. The recipient data includes one or more receiver conditions. The computer is additionally configured to determine if the one or more receiver conditions have been met, and if they have been met, the computer processor forwards the communication to the second call system.

Description:
BACKGROUND 
     The present invention relates generally to call management and more specifically to configurable dynamic call management and display. 
     When making a phone call, a caller may expect the recipient to be alone or in a quiet environment when the recipient picks up the call. A recipient may, however, be unavailable, or in an environment that is too noisy to support a telephone conversation. In addition, the recipient may only have a short time to conduct a phone call, such as during a break from a meeting, and therefore may not be able or willing to take a lengthy telephone call. One or the other party is unaware of these conditions prior to the call being connected. Consider the following example. One spouse calls the other for something urgent while the other spouse is in a meeting. The recipient&#39;s phone shows the caller ID to be that of their spouse, however, the recipient is unaware of the urgency of the call. The recipient does not answer the phone because the recipient is in a meeting. The caller could either keep calling until the recipient picks up the phone, or call the office hoping to reach a coworker that can help to locate the spouse. 
     In an additional example, a meeting attendee may set their telephone to forward all calls to a teleconference number. The call forwarding will forward all calls to the conference number, including any personal calls. This may result in lost meeting time, and can also result in an embarrassing situation if a personal call is connected to the meeting. 
     SUMMARY 
     An embodiment includes a system, which includes one or more call systems and a computer processor communicatively coupled with the one or more call systems. The computer processor is configured to receive a communication from a first call system of the one or more call systems. The computer processor is further configured to retrieve recipient data from a second call system of the one or more call systems. The recipient data includes one or more receiver conditions. The computer is additionally configured to determine if the one or more receiver conditions have been met, and if they have been met, the computer processor forwards the communication to the second call system. 
     Another embodiment is a method of dynamic call management and display. The method includes receiving, at a computer, a communication from a caller. The method further includes retrieving, at the computer, recipient data from a recipient. The recipient data includes one or more receiver conditions. The method further includes determining, at the computer, if the one or more receiver conditions have been met, and if they have been met the method forwards the communication to the recipient. 
     Additional features and advantages are realized through the techniques of the present embodiment. Other embodiments and aspects are described herein and are considered a part of the claimed invention. For a better understanding of the invention with its advantages and features, refer to the description and to the drawings. 
    
    
     
       BRIEF DESCRIPTION OF THE SEVERAL VIEWS OF THE DRAWINGS 
       The subject matter that is regarded as the invention is particularly pointed out and distinctly claimed in the claims at the conclusion of the specification. The foregoing and other features, and advantages of the invention are apparent from the following detailed description taken in conjunction with the accompanying drawings in which: 
         FIG. 1  illustrates a block diagram of a system for dynamic call management and display in an embodiment; 
         FIG. 2  illustrates a block diagram of a system and network for dynamic call management in accordance with an embodiment; 
         FIG. 3  illustrates a process flow for configuring a call manager in an embodiment; and 
         FIG. 4  illustrates a process flow for processing a call using the call manager in an embodiment. 
     
    
    
     DETAILED DESCRIPTION 
     An embodiment provides a dynamic caller display, which shows not just the caller&#39;s name but also a condition the caller expects the recipient to meet. In an embodiment, the recipient can be notified of the expectations of the caller prior to receiving the call. In an embodiment, the caller ID on the recipient&#39;s telephone shows a dynamic message such as, for example, “Spouse Urgent Private” that indicates that the calling spouse is calling regarding something urgent and expects privacy for the call. In an embodiment, when the recipient spouse sees this information on their caller ID display on the telephone, the recipient spouse knows to pick up the phone right away and to find a location to speak privately. 
     In an embodiment, when the recipient receives the call, the caller will be automatically notified of the recipient&#39;s condition. In an additional embodiment, the caller is notified of the recipient&#39;s condition prior to the recipient receiving the call. If the caller is satisfied with the recipient&#39;s condition, the call is placed; otherwise, the call is terminated. 
     In another embodiment, a condition checker module checks the condition of the caller and the condition of the recipient and automatically determines if the call will be placed or not. In an embodiment, if the condition check module determines that the call will not be placed, the condition checker module will continue to monitor the conditions of both the recipient and the caller until both conditions match and will then place the call. 
     In yet another embodiment, the caller display shown on the recipient&#39;s telephone is a secret code that is understood by the recipient. In an embodiment, a caller display manager module enables the recipient to pre-map a list of secret codes to a particular caller. In an embodiment, the recipient can pre-map the caller&#39;s identity to a list of secret code such as “Pizza Order,” “Pickup Ready,” “Deli Order,” etc. In an embodiment, the caller&#39;s identity can be randomly mapped to one of the secret codes set by the recipient. 
     Turning now to  FIG. 1 , a system  100  for implementing dynamic call management and display will now be described. In an embodiment, the system  100  includes one or more host system computers  102  executing computer instructions for dynamic call management and display. The one or more host system computers  102  may operate in any type of environment that is capable of executing a software application. One or more host system computers  102  may comprise a high-speed computer processing device, such as a mainframe computer, to manage the volume of operations governed by an entity for which a dynamic call management and display  108  process is executing. In an embodiment, the one or more host system computers  102  are part of an enterprise (e.g., a commercial business) that implements the dynamic call management and display  108 . 
     In an embodiment, the system  100  depicted in  FIG. 1  includes one or more caller systems  104  and recipient systems  106  through which users at one or more geographic locations may contact the one or more host system computers  102 . The caller systems  104  are coupled to the one or more host system computers  102  via one or more networks  110 . In an embodiment, the caller systems  104  communicate with the recipient systems  106  over the one or more networks  110 . Each of the caller systems  104  and the recipient systems  106 , collectively call systems, may be implemented using a general-purpose computer executing a computer program for carrying out the processes described herein. In an embodiment, the caller systems  104  and the recipient systems  106  are telephone handsets including one or more of a standard telephone, a cellular telephone, a smart phone, a voice over IP (VOIP) telephone, or any such communication device as is known in the art. In an embodiment, the caller systems  104  and/or the recipient systems  106  are GPS enabled and generate GPS information including coordinates and speed. In another embodiment, the caller systems  104  and/or recipient systems  106  include one or more accelerometers for detecting movement and acceleration. The caller systems  104  and the recipient systems  106  may be personal computers (e.g., a laptop, a personal digital assistant, a mobile device) or host attached terminals. It will be understood that in an embodiment, the caller systems  104  and the recipient systems  106  may be heterogeneous systems. By way of non-limiting example, a caller system  104  may be a computer operating over a VOIP system, and the recipient may be a standard telephone system. In an embodiment, the caller system  104  and recipient system  106  are homogeneous systems such as cellular telephones, or any other telephonic device as is known in the art. 
     The networks  110  may be any type of known network including, but not limited to, a wide area network (WAN), a local area network (LAN), a global network (e.g., the Internet), a virtual private network (VPN), an intranet and a telephone network. The networks  110  may be implemented using a wireless network or any kind of physical network implementation known in the art. The caller systems  104  and the recipient systems  106  may be coupled to the one or more host system computers  102  through multiple networks (e.g., intranet and Internet) so that not all caller systems  104  are coupled to the one or more host system computers  102  through the same network. One or more of the caller systems  104 , one or more recipient systems  106 , and the one or more host system computers  102  may be connected to the networks  110  in a wireless fashion. In one embodiment, the networks  110  include an intranet and one or more caller systems  104  and recipient systems  106  executing an application (e.g., a web browser) to contact the one or more host system computers  102  through the networks  110 . 
     In an embodiment, the storage device  112  includes a data repository with data relating to the dynamic call management and display  108  by the system  100 , as well as other data/information desired by the entity representing the one or more host system computers  102  of  FIG. 1A . The storage device  112  is logically addressable as a consolidated data source across a distributed environment that includes networks  110 . Information stored in the storage device  112  may be retrieved and manipulated via the one or more host system computers  102 , the caller systems  104 , and/or the recipient systems  106 . In an embodiment, the storage device  112  includes one or more databases containing, e.g., dynamic call management and display data, and corresponding configuration parameters, values, methods, and properties, as well as other related information as will be discussed more fully below. It will be understood by those of ordinary skill in the art that the storage device  112  may also comprise other structures, such as an XML file on the file system or distributed over a network (e.g., one of networks  110 ), or from a data stream from another server located on one of the one or more networks  110 . In addition, all or a portion of the storage device  112  may alternatively be located on one of the caller systems  104 , and or the recipient systems  106 . 
     The one or more host system computers  102  depicted in the system of  FIG. 1  may be implemented using one or more servers operating in response to a computer program stored in a storage medium accessible by the server. The one or more host system computers  102  may operate as a network server (e.g., a web server) to communicate with the caller systems  104  and the recipient systems  106 . The one or more host system computers  102  handle sending and receiving information to and from the caller systems  104  and the recipient systems  106  and can perform associated tasks. The one or more host system computers  102  may also include a firewall to prevent unauthorized access to the one or more host system computers  102  and enforce any limitations on authorized access. For instance, an administrator may have access to the entire system and have authority to modify portions of the system. A firewall may be implemented using conventional hardware and/or software as is known in the art. 
     The one or more host system computers  102  may also operate as an application server. The one or more host system computers  102  execute one or more computer programs to provide dynamic call management and display  108 . In an alternate embodiment, the caller systems  104  and/or recipient systems  106  may include a stand-alone software application for performing a portion or all of the processing described herein. As previously described, it is understood that separate servers may be utilized to implement the network server functions and the application server functions. Alternatively, the network server, the firewall, and the application server may be implemented by a single server executing computer programs to perform the requisite functions. 
     It will be understood that the execution of the call management and display processes and methods described in  FIG. 1  may be implemented as modules in hardware, software executing on hardware, or a combination thereof. 
       FIG. 2  illustrates a block diagram of a call manager  200  in accordance with an embodiment. The call manager  200  is executed by the caller management and display  108 . In an additional embodiment, the call manager  200  is executed on the host system  102  directly. The call manager  200  includes a caller display manager module  202 . In an embodiment, the caller display manager module  202  executes within the dynamic call management and display  108  of  FIG. 1 . The caller display manager module  202  manages information that is displayed on a caller system  104  and/or a recipient system  106 . In an embodiment, the caller display manager module  202  includes a condition checker module  204 . In an embodiment, the condition checker module  204  executes within the dynamic call management and display  108  of  FIG. 1 . The condition checker module  204  manages a call between the caller system  104  and the recipient system  106 . The condition checker module  204  matches call conditions set at the caller system  104  with call conditions set at the recipient system  106 , and, if the conditions match, the condition checker module  204  will connect the call from the caller system  104  to the recipient system  106 . In an embodiment, if the conditions do not match the condition checker module  204  presents the caller system  104  with options to either terminate the call, connect the call at a future time, or other options as will be described in more detail below. In an embodiment, the condition checker module  204  terminates the call if the conditions do not match. In an embodiment, the caller display manager module  202  includes both the caller display manager module  202  and the condition checker module  204 . 
     In an embodiment, a caller system  104  initiates a call to a recipient system  106  through the network  208 . The condition checker module  204  receives the call and receives the caller&#39;s conditions. The caller&#39;s conditions indicate one or more of: the reason for the call, the urgency of the call, the caller&#39;s emotional state, the condition that the caller needs the recipient, or the recipient&#39;s environment to be in, and any other information that the caller may need to transmit to the recipient. In an embodiment, the condition checker module  204  communicates with the recipient and retrieves the recipient&#39;s condition from the recipient system  106 . In an alternate embodiment, the recipient sets their condition in the call manager  200  prior to the caller initiating the call, and the condition checker module  204  receives the recipient&#39;s condition from, for example, the storage device  112  of the call manager  200 . In an additional embodiment, the condition checker module  204  determines the recipient&#39;s condition automatically. In an embodiment, the condition checker module  204  may determine that the recipient is driving by accessing GPS and/or accelerometer information provided by the recipient system  106 . If the GPS information indicates that the recipient is moving at a high rate of speed, the condition checker module  204  will deduce that the recipient is driving and will process the call according to how it has been configured. In an embodiment, the condition checker module  204  is configured to notify the caller that the recipient cannot currently take the call and may terminate the call. The condition checker module  204  compares the condition requirements of the caller and the recipient, and manages the call accordingly as will be discussed in more detail below. 
     In an embodiment, the caller display manager module  202  receives the caller&#39;s conditions, and, based on the recipient&#39;s settings, displays the caller&#39;s condition information on the recipient system  106 . In an embodiment, the caller&#39;s condition is displayed on the caller ID display of the recipient&#39;s phone. In an additional embodiment, the caller&#39;s condition is displayed on a screen on the recipient system  106 . In an embodiment, the caller&#39;s condition information is transmitted to the recipient when the call is connected to the recipient system  106 . In an additional embodiment, the caller&#39;s condition is sent to the recipient system  106  and the recipient is given the option to allow the call to be connected, or to deny the call. If the call is denied, the recipient system  106  may transmit a message to the calling system. 
     The illustration of  FIG. 2  is a simplified representation of the various components of the call manager  200  for purposes of clarity. It will be understood by those of ordinary skill in the art that additional or fewer components may be used in alternate embodiments. In additional embodiments, the layout and configuration of the components may differ from those of  FIG. 2  without affecting the functionality of the call manager  200 . In additional embodiment, the various components may be located in separate modules. In further embodiments, the functionality of various components may be incorporated into a single hardware or software module. 
       FIG. 3  illustrates a process flow for configuring a call manager  200  in an embodiment. In an embodiment the process flow of  FIG. 3  is executed on the call manager  200  of  FIG. 2 . At block  302  a user (recipient or caller) initializes the system configuration. In an embodiment, the user initializes the system configuration from a telephone. In additional embodiment, the recipient initializes the system configuration at a computer connected to the call manager  200  of  FIG. 2 . At block  304  the user either selects a predefined condition or creates a new set of conditions. In an embodiment, the recipient establishes a plurality of condition settings that the user can choose from when the user sets their condition. Where the user is a caller, the user sets conditions for their call to be received. Where the user is a recipient, the user sets conditions for receiving any incoming calls. If the user chooses to select a predefined condition, at block  306 , the user selects the current condition from the predefined conditions. In an embodiment, the user is provided a list of predefined conditions from the call manager  200  of  FIG. 2 . In an embodiment, the user listens to a list of predefined conditions over a telephone call connected to the call manager  200 . In an embodiment, the call manager  200  “reads” a list of predefined conditions either by a prerecorded voice, or by using a computer generated voice as is known in the art. In an embodiment, the recipient selects the predefined condition interactively using touch-tones on the telephone. In yet another embodiment, the call manager  200  is configured to execute voice recognition technology and recipient selects predefined conditions by speaking them into the telephone. In yet another embodiment the user connects to the call manager  200  over a computer network via, for example, a web browser or an application executing on the computer or a smart phone and selects a predefined condition. Once the user selects the predefined condition, at block  308  the call manager  200  enters call management mode, and any telephone calls placed to the recipient are intercepted by the call manager  200  and processed as described in more detail below. 
     Returning to block  304 , if the user chooses to set a new configuration, processing continues at block  310 . At block  310  the user sets one or more conditions. When the user is a caller, the user sets one or more conditions for their call to be received. When the user is a recipient, the user sets one or more conditions for receiving the incoming calls. In an embodiment, the caller can set any condition such as “private call”, “long call”, “urgent”, or “need answer by 3 pm today”. In an embodiment, the recipient can set any condition such as, “In a meeting,” “Driving,” “Out to dinner,” “Accepting Urgent Calls Only,” or any other condition. It will be understood that these are non-limiting examples provided for clarity only and that in an embodiment, any condition can be set by the recipient or the caller. In an embodiment, the caller associates one or more conditions with a recipient of his call. In an embodiment, the recipient associates one or more conditions with a caller. A recipient may, for example, set a condition of “In a meeting” for a particular caller, or set of callers, and set a condition of “Accepting urgent calls only” for all other callers. A caller can place calls of the same nature to particular recipients. For example, a husband calls his wife at 4 pm on daily basis to ask her what&#39;s for dinner, or a woman calls her boyfriend regularly asking where he is. Both callers and recipients can set secret codes to call conditions. In an embodiment, the caller sets their notes and maps one or more secret codes to one or more of their notes. For example, a caller may map their note, such as, “I&#39;m looking for you, tell me where you are”, to a secret code “location?” or, a number code, or an emoticon, or other symbol as is known in art. The caller selects the secret code to be sent to his recipient. The caller display manager module  202  of  FIG. 2  converts the secret code to the mapped caller note before the call is sent. In an embodiment, the recipient sets caller notes and maps one or more secret codes to one or more caller notes, and further maps the one or more secret codes to one or more callers. For example, a recipient may map a caller note, such as, “I&#39;m looking for you, tell me where you are.” to a secret code such as “look?” or, a numeric code, or an emoticon, or other symbol as is known in the art. In an embodiment the recipient maps the secret code to a caller. When the caller mapped to the secret code calls, the caller&#39;s note, such as “I&#39;m looking for you, tell me where you are.”, is handled by the caller display manager module  202  of  FIG. 2  prior to delivery of the call to the recipient. In an additional embodiment, the caller display manager module  202  of  FIG. 2  converts the caller&#39;s message back to the recipient&#39;s secret code and sends the secret code, in this case “look?” to the recipient&#39;s telephone. The recipient can review the secret code and react to the code accordingly. In an embodiment, if the caller note is not mapped to a secret code, the caller display manager module  202  sends the text of the caller note to the recipient. It will be understood that in embodiments the caller notes, and secret codes can include any text or symbols and that the examples provided are for purposes of clarity. 
     At block  310  of  FIG. 3 , once the one or more conditions are set, one or more exceptions can be set. In an embodiment, the caller sets exceptions including one or more recipients are allowed to override the conditions. In an embodiment, the caller does not set any exceptions. In an embodiment, the recipient sets exceptions including one or more callers that are allowed to override the conditions. In an embodiment, the recipient sets an exception to send all calls from one or more callers directly to voice mail regardless of the recipient&#39;s current condition. In an additional embodiment, the recipient sets an exception to indicate that one or more callers are not allowed to make calls to the recipient. In an embodiment, the recipient does not set any exceptions and the set conditions will apply to all callers. It will be understood that in embodiments the exceptions can include any type of exception including without limitations, providing a message to the caller, disconnecting the call, forwarding the call to another line, or any other exception action. 
     Once the exceptions are set, at block  308 , the call manager  200  enters call management mode, and any telephones call placed to the recipient are received by the call manager  200  and processed as described in more detail below. 
     In an embodiment, the call manager  200  is configured to automatically determine conditions without input from the recipient. In an embodiment, the call manager  200  determines an activity of the recipient, such as that the recipient is driving, by accessing sensors such as GPS and/or accelerometer data from the recipient&#39;s system and sets conditions accordingly. In an alternate embodiment the call manager  200  retrieves calendar information from the recipient&#39;s telephone or computer system and sets conditions based on the recipient&#39;s availability. In a further embodiment, the call manager  200  uses the recipient&#39;s GPS information to determine the recipient&#39;s condition based on the recipient&#39;s geographic location. For example, if the recipient&#39;s GPS information indicates that the recipient is in the office, the call manager  200  sets conditions indicating that the recipient is working. 
       FIG. 4  illustrates a process flow for processing a call using the call manager  200  in an embodiment. In an embodiment, the process flow of  FIG. 4  is executed on the call manager  200  of  FIG. 2 . At block  402  a caller selects a caller&#39;s phone number. In an embodiment the caller selects the recipient&#39;s phone number from a phone book application. In an alternate embodiment the caller dials the caller&#39;s number directly. In yet another embodiment the caller initiates communication with the recipient from a computer application. At block  404  the caller sets a caller condition as described in  FIG. 3 . In an embodiment, the caller condition includes one or more of the time window in which the caller would like to make the call, the caller&#39;s availability, the urgency of the call, one or more messages that the caller would like to make sure the recipient receives, or any other information that the caller would like to provide to the recipient. 
     At block  406 , the caller may set the caller&#39;s emotional state. In an embodiment the caller selects the emotional state from a list of states including angry, worried, happy, excited, etc. In an additional embodiment, the caller chooses not to set an emotional status. At block  408  the caller places the call. In an embodiment, the caller places the call automatically after setting one or both of the caller&#39;s condition and the caller&#39;s emotional status. In an additional embodiment, the caller is already connected to the call manager  200  and at block  408 , the caller is chooses to complete the call to the recipient. At block  410  the call manager  200  receives the call and the associated caller conditions and/or emotional state. At block  412  the call manager  200  retrieves the recipient&#39;s condition. In an embodiment, the call manager  200  retrieves the one or more conditions set by the recipient from the storage device  112 . In an additional embodiment, the call manager  200  retrieves the recipient&#39;s state from the recipient&#39;s telephone. In yet another embodiment, the call manager  200  retrieves the recipient&#39;s condition from the recipient&#39;s calendar application. At block  414 , the call manager  200  determines if the recipient and the caller&#39;s conditions match. In an embodiment the call manager  200  retrieves all available information including the recipient&#39;s condition, telephone status, GPS and movement information, and calendar information and is configured to use all of the data to determine if the recipient will receive the call using one or more pieces of the available information. In yet another embodiment, the call manager  200  poles the recipient and the recipient interactively sets the recipient&#39;s condition. In an embodiment, the call manager  200  determines that the recipient will only accept urgent calls and allows the call to go through if the caller indicates that the call is urgent. It will be understood that these embodiments are lists for purposes of clarity and that in other embodiments the call manager  200  may match any of the caller&#39;s conditions with the one or more of the recipient&#39;s conditions before allowing the call to complete. 
     If the caller&#39;s and the recipient&#39;s conditions match, the caller display manager module  202  of  FIG. 2  generates a dynamic caller ID data. In an embodiment, the caller display manager module  202  uses the caller&#39;s conditions and emotional state to generate the dynamic caller ID data. At block  418  the call manager  200  places the call that includes the dynamic caller ID data to the recipient. At block  420 , the dynamic caller ID data is displayed on the recipient&#39;s device and the recipient receives the call. 
     Returning to block  414 , if the caller and recipient conditions do not match, the caller is provided with one or more options. In an embodiment the options include, hold for an amount of time, a call back option which provides the caller with a time when the recipients condition will match the caller&#39;s conditions, a connect me option which allows the call manager  200  to call the caller when the recipient is available, an option to disconnect the call, and/or the call manager  200  may provide the caller with a message based on the recipient&#39;s condition settings, or a message provided by the recipient in real time. In an embodiment, the caller may provide a call back window to the call manger indicating the acceptable time that the caller will be available. At block  424 , based on the caller&#39;s selection, the call manager  200  terminates the call. 
     Technical effects and benefits include a mechanism for providing dynamic caller conditions to a recipient before the recipient answers the call. An additional benefit is the ability to create conditions at a per caller level that will automatically allow a caller to be connected or to prevent a caller from being connected to the recipient. Yet another benefit is the automatic setting of recipient conditions based on the recipient&#39;s current status based on GPS data, and/or calendar information. 
     The terminology used herein is for the purpose of describing particular embodiments only and is not intended to be limiting of the invention. As used herein, the singular forms “a”, “an” and “the” are intended to include the plural forms as well, unless the context clearly indicates otherwise. It will be further understood that the terms “comprises” and/or “comprising,” when used in this specification, specify the presence of stated features, integers, steps, operations, elements, and/or components, but do not preclude the presence or addition of one or more other features, integers, steps, operations, element components, and/or groups thereof. 
     The corresponding structures, materials, acts, and equivalents of all means or step plus function elements in the claims below are intended to include any structure, material, or act for performing the function in combination with other claimed elements as specifically claimed. The description of the present invention has been presented for purposes of illustration and description, but is not intended to be exhaustive or limited to the invention in the form disclosed. Many modifications and variations will be apparent to those of ordinary skill in the art without departing from the scope and spirit of the invention. The embodiment was chosen and described in order to best explain the principles of the invention and the practical application, and to enable others of ordinary skill in the art to understand the invention for various embodiments with various modifications as are suited to the particular use contemplated 
     As will be appreciated by one skilled in the art, aspects of the present invention may be embodied as a system, method or computer program product. Accordingly, aspects of the present invention may take the form of an entirely hardware embodiment, an entirely software embodiment (including firmware, resident software, micro-code, etc.) or an embodiment combining software and hardware aspects that may all generally be referred to herein as a “circuit,” “module” or “system.” Furthermore, aspects of the present invention may take the form of a computer program product embodied in one or more computer readable medium(s) having computer readable program code embodied thereon. 
     Any combination of one or more computer readable medium(s) may be utilized. The computer readable medium may be a computer readable signal medium or a computer readable storage medium. A computer readable storage medium may be, for example, but not limited to, an electronic, magnetic, optical, electromagnetic, infrared, or semiconductor system, apparatus, or device, or any suitable combination of the foregoing. More specific examples (a non-exhaustive list) of the computer readable storage medium would include the following: an electrical connection having one or more wires, a portable computer diskette, a hard disk, a random access memory (RAM), a read-only memory (ROM), an erasable programmable read-only memory (EPROM or Flash memory), an optical fiber, a portable compact disc read-only memory (CD-ROM), an optical storage device, a magnetic storage device, or any suitable combination of the foregoing. In the context of this document, a computer readable storage medium may be any tangible medium that can contain, or store a program for use by or in connection with an instruction execution system, apparatus, or device. 
     A computer readable signal medium may include a propagated data signal with computer readable program code embodied therein, for example, in baseband or as part of a carrier wave. Such a propagated signal may take any of a variety of forms, including, but not limited to, electro-magnetic, optical, or any suitable combination thereof, A computer readable signal medium may be any computer readable medium that is not a computer readable storage medium and that can communicate, propagate, or transport a program for use by or in connection with an instruction execution system, apparatus, or device. 
     Program code embodied on a computer readable medium may be transmitted using any appropriate medium, including but not limited to wireless, wire line, optical fiber cable, RF, etc., or any suitable combination of the foregoing. 
     Computer program code for carrying out operations for aspects of the present invention may be written in any combination of one or more programming languages, including an object oriented programming language such as Java, Smalltalk, C++ or the like and conventional procedural programming languages, such as the “C” programming language or similar programming languages. The program code may execute entirely on the user&#39;s computer, partly on the user&#39;s computer, as a stand-alone software package, partly on the user&#39;s computer and partly on a remote computer or entirely on the remote computer or server. In the latter scenario, the remote computer may be connected to the user&#39;s computer through any type of network, including a local area network (LAN) or a wide area network (WAN), or the connection may be made to an external computer (for example, through the Internet using an Internet Service Provider). 
     Aspects of the present invention are described below with reference to flowchart illustrations and/or block diagrams of methods, apparatus (systems) and computer program products according to embodiments of the invention. It will be understood that each block of the flowchart illustrations and/or block diagrams, and combinations of blocks in the flowchart illustrations and/or block diagrams, can be implemented by computer program instructions. These computer program instructions may be provided to a processor of a general purpose computer, special purpose computer, or other programmable data processing apparatus to produce a machine, such that the instructions, which execute via the processor of the computer or other programmable data processing apparatus, create means for implementing the functions/acts specified in the flowchart and/or block diagram block or blocks. 
     These computer program instructions may also be stored in a computer readable medium that can direct a computer, other programmable data processing apparatus, or other devices to function in a particular manner, such that the instructions stored in the computer readable medium produce an article of manufacture including instructions which implement the function/act specified in the flowchart and/or block diagram block or blocks. 
     The computer program instructions may also be loaded onto a computer, other programmable data processing apparatus, or other devices to cause a series of operational steps to be performed on the computer, other programmable apparatus or other devices to produce a computer implemented process such that the instructions which execute on the computer or other programmable apparatus provide processes for implementing the functions/acts specified in the flowchart and/or block diagram block or blocks. 
     The flow diagrams depicted herein are just one example. There may be many variations to this diagram or the steps (or operations) described therein without departing from the spirit of the invention. For instance, the steps may be performed in a differing order or steps may be added, deleted or modified. All of these variations are considered a part of the claimed invention. 
     While the preferred embodiment to the invention had been described, it will be understood that those skilled in the art, both now and in the future, may make various improvements and enhancements which fall within the scope of the claims which follow. These claims should be constructed to maintain the proper protection for the invention first described.