getVmxState($exten,'unavail');
				
				// and vmx is enabled for this user
				if ($vmx_enabled !== false)
					$ret .= "
" . _("VmX™ Locator") . "
";
			}
		}
		
		return $ret;
	}
  /*
   * Acts on the user settings
   *
   * @param $args
   *   Common arguments
   * @param $a
   *   action
   */
  function action($args) {
	global $STANDALONE;
	global $ARI_ADMIN_USERNAME;
	global $SETTINGS_ALLOW_VMX_SETTINGS;
	// args
	$m = getArgument($args,'m');
	$a = getArgument($args,'a');
	$follow_me_disabled				= getArgument($args,'follow_me_disabled');
	$vmx_option_0_number			= getArgument($args, 'vmx_option_0_number');
	$vmx_option_0_system_default	= getArgument($args, 'vmx_option_0_system_default');
	$vmx_option_1_number			= getArgument($args, 'vmx_option_1_number');
	$vmx_option_1_system_default	= getArgument($args, 'vmx_option_1_system_default');
	$vmx_option_2_number			= getArgument($args, 'vmx_option_2_number');
	$vmx_unavail_enabled			= getArgument($args, 'vmx_unavail_enabled');
	$vmx_busy_enabled				= getArgument($args, 'vmx_busy_enabled');
	$vmx_play_instructions			= getArgument($args, 'vmx_play_instructions');
	$vmx_disabled					= getArgument($args, 'vmx_disabled');
	$exten = $_SESSION['ari_user']['extension'];
	// The action is 'update
	if ($a=='update') {
	
			$follow_me_disabled = ($this->getFollowMeListRingTime($exten) > 0)?0:1;
			
		
			$vmx_disabled = $this->getVmxState($exten,'unavail');
			if ($vmx_disabled === false) {
				$vmx_disabled = true;
				$SETTINGS_ALLOW_VMX_SETTINGS=false;
			} else {
				$vmx_disabled = false;
			}
			if ($vmx_disabled) {
			
				setcookie("ari_vmx_disabled", $vmx_disabled, time()+365*24*60*60);
				$vmx_disabled_delayed = $vmx_disabled;
				$_SESSION['ari_error'] = 
				_("Your Premium VmX Locator service has been disabled, REFRESH your browser to remove this message") . "
" .
				sprintf(_("Check with your Telephone System Administrator if you think there is a problem"));
			}
		
		if (! $vmx_disabled) {
		
			// set database
			$this->setVmxState($exten,'unavail',$vmx_unavail_enabled);
			$this->setVmxState($exten,'busy',$vmx_busy_enabled);
			$this->setVmxPlayInstructions($exten,'unavail',$vmx_play_instructions);
			$this->setVmxPlayInstructions($exten,'busy',$vmx_play_instructions);
			
			// store cookie
			setcookie("ari_vmx_unavail_enabled", $vmx_unavail_enabled, time()+365*24*60*60);
			setcookie("ari_vmx_busy_enabled", $vmx_busy_enabled, time()+365*24*60*60);
			setcookie("ari_vmx_play_instructions", $vmx_play_instructions, time()+365*24*60*60);
			
			$stripped_vmx_option_0_number = preg_replace('/-|\(|\)|\s/','',$vmx_option_0_number);
			
			if ($vmx_option_0_system_default) {
				$this->setVmxOptionNumber($exten,'0','unavail',"");
				$this->setVmxOptionNumber($exten,'0','busy',"");
				setcookie("ari_vmx_option_0_system_default", $vmx_option_0_system_default, time()+365*24*60*60);
				if (is_numeric($stripped_vmx_option_0_number) || !$stripped_vmx_option_0_number) {
					$stripped = preg_replace('/-|\(|\)|\s/','',$_COOKIE['ari_vmx_option_0_number']);
					if ($vmx_option_0_number && $stripped!=$stripped_vmx_option_0_number) {
						setcookie("ari_vmx_option_0_number", $call_vmx_option_0_number, time()+365*24*60*60);
					}
				}
			} else {
				if (!is_numeric($stripped_vmx_option_0_number) && $stripped_vmx_option_0_number) {
					$_SESSION['ari_error'] = 
					_("Option 0 not changed") . "
" .
					sprintf(_("Number %s must contain dial numbers (characters like '(', '-', and ')' are ok)"),$vmx_option_0_number);
				}
				else {
					
					// set database
					$this->setVmxOptionNumber($exten,'0','unavail',$stripped_vmx_option_0_number);
					$this->setVmxOptionNumber($exten,'0','busy',$stripped_vmx_option_0_number);
					
					// store cookie
					$stripped = preg_replace('/-|\(|\)|\s/','',$_COOKIE['ari_vmx_option_0_number']);
					if ($vmx_option_0_number && $stripped!=$stripped_vmx_option_0_number) {
						setcookie("ari_vmx_option_0_number", $call_vmx_option_0_number, time()+365*24*60*60);
					}
				}
			}
			
			$stripped_vmx_option_1_number = preg_replace('/-|\(|\)|\s/','',$vmx_option_1_number);
			if ($vmx_option_1_system_default && !$follow_me_disabled) {
				$this->setVmxOptionFollowMe($exten,'1','unavail');
				$this->setVmxOptionFollowMe($exten,'1','busy');
				setcookie("ari_vmx_option_1_system_default", $vmx_option_1_system_default, time()+365*24*60*60);
				if (is_numeric($stripped_vmx_option_1_number) || !$stripped_vmx_option_1_number) {
					$stripped = preg_replace('/-|\(|\)|\s/','',$_COOKIE['ari_vmx_option_1_number']);
					if ($vmx_option_1_number && $stripped!=$stripped_vmx_option_1_number) {
						setcookie("ari_vmx_option_1_number", $call_vmx_option_1_number, time()+365*24*60*60);
					}
				}
			}
			else {
			
				if (!is_numeric($stripped_vmx_option_1_number) && $stripped_vmx_option_1_number) {
					$_SESSION['ari_error'] = 
					_("Option 1 not changed") . "
" .
					sprintf(_("Number %s must contain dial numbers (characters like '(', '-', and ')' are ok)"),$vmx_option_1_number);
				}
				else {
					
					// set database
					$this->setVmxOptionNumber($exten,'1','unavail',$stripped_vmx_option_1_number);
					$this->setVmxOptionNumber($exten,'1','busy',$stripped_vmx_option_1_number);
					
					// store cookie
					$stripped = preg_replace('/-|\(|\)|\s/','',$_COOKIE['ari_vmx_option_1_number']);
					if ($vmx_option_1_number && $stripped!=$stripped_vmx_option_1_number) {
						setcookie("ari_vmx_option_1_number", $call_vmx_option_1_number, time()+365*24*60*60);
					}
				}
			}
			
			$stripped_vmx_option_2_number = preg_replace('/-|\(|\)|\s/','',$vmx_option_2_number);
			if (!is_numeric($stripped_vmx_option_2_number) && $stripped_vmx_option_2_number) {
				$_SESSION['ari_error'] = 
				_("Option 2 not changed") . "
" .
				sprintf(_("Number %s must contain dial numbers (characters like '(', '-', and ')' are ok)"),$vmx_option_2_number);
			}
			else {
				
				// set database
				$this->setVmxOptionNumber($exten,'2','unavail',$stripped_vmx_option_2_number);
				$this->setVmxOptionNumber($exten,'2','busy',$stripped_vmx_option_2_number);
				
				// store cookie
				$stripped = preg_replace('/-|\(|\)|\s/','',$_COOKIE['ari_vmx_option_2_number']);
				if ($vmx_option_2_number && $stripped!=$stripped_vmx_option_2_number) {
					setcookie("ari_vmx_option_2_number", $call_vmx_option_2_number, time()+365*24*60*60);
				}
			}
		} // vmx_disabled false
	}
	// redirect to see updated page
	$ret .= "
	  
		
	";
  
	return $ret;
  }
  /*
   * Displays stats page
   *
   * @param $args
   *   Common arguments
   */
  function display($args) {
	global $SETTINGS_ALLOW_VMX_SETTINGS;
	global $loaded_modules;
	// args
	$m		= getArgument($args,'m');
	$q		= getArgument($args,'q');
	$start	= getArgument($args,'start');
	$span	= getArgument($args,'span');
	$displayname	= $_SESSION['ari_user']['displayname'];
	$exten			= $_SESSION['ari_user']['extension'];
	$display = new DisplaySearch();
	$follow_me_listring_time = $this->getFollowMeListRingTime($exten);
	//TODO: Set this better than this?
	$follow_me_disabled = ($follow_me_listring_time > 0)?0:1;
	setcookie("ari_follow_me_disabled", $follow_me_disabled, time()+365*24*60*60);
	$vmx_unavail_enabled=$this->getVmxState($exten,'unavail');
	if ($vmx_unavail_enabled === false) {
		$vmx_disabled = true;
		setcookie("ari_vmx_disabled", $vmx_disabled, time()+365*24*60*60);
		$SETTINGS_ALLOW_VMX_SETTINGS=false;
	} else {
		$vmx_disabled = false;
		setcookie("ari_vmx_disabled", false, time()+365*24*60*60);
		$vmx_busy_enabled=$this->getVmxState($exten,'busy');
		$vmx_play_instructions=$this->getVmxPlayInstructions($exten);
		$vmx_option_0_number=$this->getVmxOptionNumber($exten,'0');;
		$vmx_option_1_number=$this->getVmxOptionNumber($exten,'1');;
		$vmx_option_2_number=$this->getVmxOptionNumber($exten,'2');;
		
		if (is_numeric($vmx_option_0_number)) {
			$vmx_option_0_system_default='';
			$vmx_option_0_number_text_box_options='';
		} else {
			$vmx_option_0_system_default='checked';
			$vmx_option_0_number_text_box_options="disabled style='background: #DDD;'";
		}
		
		// if follow-me is enabled then the options are a numberic value (dial a phone number)
		// or a followme target (FMnnn) which should not be displayed but means the box is checked
		// or otherwise blank (or garbage in which case blank it)
		//
		if (!$follow_me_disabled) {
			$vmx_option_1_system_default=$this->getVmxOptionFollowMe($exten,'1');
			if ($vmx_option_1_system_default) {
				$vmx_option_1_number = '';
				$vmx_option_1_number_text_box_options="disabled style='background: #DDD;'";
			}
		}
	}
		
	$set_vmx_text .= 
		"
		
		
		
		
		
		
		
		
		";
	// Now we should be ready to build the page
	$ret .= checkErrorMessage();
	$headerText = sprintf(_("VmX Locator™ Settings for %s (%s)"),$displayname,$exten);
	$ret .= $display->displayHeaderText($headerText);
	$ret .= $display->displayLine();
	$ret .= 
		"";
	$ret .= 
		"";
	return $ret;
  }
  /*
   * Gets VMX option FollowMe
   *
   * @param $exten
   *   Extension to get information about
   * @param $digit
   *   Option number to get
   * @param $mode
	 *	Mode to get (unavail/busy)
   * @return $response
   *   checked if set to got to extesion's follow-me on this option
   */
  function getVmxOptionFollowMe($exten, $digit, $mode='unavail') {
	global $asterisk_manager_interface;
		$digit = trim($digit);
	$response = $asterisk_manager_interface->Command("Action: Command\r\nCommand: database get AMPUSER $exten/vmx/$mode/$digit/ext\r\n\r\n");
	return (($response == 'FM'.$exten) ? 'checked':'');
  }
  /*
   * Sets VMX option FollowMe
   *
   * @param $exten
   *   Extension to set information about
   * @param $digit
   *   Option number to set
   * @param $mode
	 *	Mode to set (unavail/busy)
   * @param $context
	 *	Context to set ext to (default from-findmefollow)
   * @param $priority
	 *	Priority to set ext to (default 1)
   */
  function setVmxOptionFollowMe($exten, $digit, $mode, $context='ext-findmefollow', $priority='1') {
	global $asterisk_manager_interface;
	$value_opt = "FM$exten";
	$response = $asterisk_manager_interface->Command("Action: Command\r\nCommand: database put AMPUSER $exten/vmx/$mode/$digit/ext $value_opt\r\n\r\n");
	$response = $asterisk_manager_interface->Command("Action: Command\r\nCommand: database put AMPUSER $exten/vmx/$mode/$digit/context $context\r\n\r\n");
	$response = $asterisk_manager_interface->Command("Action: Command\r\nCommand: database put AMPUSER $exten/vmx/$mode/$digit/pri $priority\r\n\r\n");
  }
  /*
   * Gets VMX option number
   *
   * @param $exten
   *   Extension to get information about
   * @param $digit
   *   Option number to get
   * @param $mode
	 *	Mode to get (unavail/busy)
   * @return $number
   *   Number to use or blank if disabled
   */
  function getVmxOptionNumber($exten, $digit, $mode='unavail') {
	global $asterisk_manager_interface;
	$number = '';
		$digit = trim($digit);
	$response = $asterisk_manager_interface->Command("Action: Command\r\nCommand: database get AMPUSER $exten/vmx/$mode/$digit/ext\r\n\r\n");
	if (is_numeric($response)) {
	  $number = $response;
	}
	$stripped = preg_replace('/-|\(|\)|\s/','',$_COOKIE["ari_vmx_option_${digit}_number"]);
	if ($stripped==$number) {
	  $number = $_COOKIE["ari_vmx_option_${digit}_number"];
	}
	return $number;
  }
  /*
   * Sets VMX option number
   *
   * @param $exten
   *   Extension to set information about
   * @param $digit
   *   Option number to set
   * @param $mode
	 *	Mode to set (unavail/busy)
   * @param $number
	 *	Number to set ext to (blank will delete it)
   * @param $context
	 *	Context to set ext to (default from-internal)
   * @param $priority
	 *	Priority to set ext to (default 1)
   */
  function setVmxOptionNumber($exten, $digit, $mode, $number, $context='from-internal', $priority='1') {
	global $asterisk_manager_interface;
	$value_opt = trim($number);
		if (is_numeric($value_opt)) {
		$response = $asterisk_manager_interface->Command("Action: Command\r\nCommand: database put AMPUSER $exten/vmx/$mode/$digit/ext $value_opt\r\n\r\n");
		$response = $asterisk_manager_interface->Command("Action: Command\r\nCommand: database put AMPUSER $exten/vmx/$mode/$digit/context $context\r\n\r\n");
		$response = $asterisk_manager_interface->Command("Action: Command\r\nCommand: database put AMPUSER $exten/vmx/$mode/$digit/pri $priority\r\n\r\n");
		} else {
		$response = $asterisk_manager_interface->Command("Action: Command\r\nCommand: database deltree AMPUSER $exten/vmx/$mode/$digit\r\n\r\n");
		}
  }
  /*
   * Sets VMX State
   *
   * @param $exten
   *   Extension to modify
   * @param $mode
	 *	Mode to set (unavail/busy)
   * @param $vmx_state
   *   enabled/disabled state based on check box value
   */
  function setVmxState($exten,$mode,$vmx_state) {
	global $asterisk_manager_interface;
	$value_opt = ($vmx_state)?'enabled':'disabled';
	$response = $asterisk_manager_interface->Command("Action: Command\r\nCommand: database put AMPUSER $exten/vmx/$mode/state $value_opt\r\n\r\n");
  }
  /*
   * Gets VMX State
   *
   * @param $exten
   *   Extension to get information about
   * @param $mode
	 *	Mode to get (unavail/busy)
   * @return $data
   *   state of variable (checked/blank) or false if no poper value
   */
  function getVmxState($exten, $mode='unavail') {
	global $asterisk_manager_interface;
	$response = $asterisk_manager_interface->Command("Action: Command\r\nCommand: database get AMPUSER $exten/vmx/$mode/state\r\n\r\n");
	if (preg_match("/enabled/",$response)) {
			$response='checked';
	} 
	elseif (preg_match("/disabled/",$response)) {
			$response='';
	}
		else {
			$response = false;
		}
	//TODO: really need to check for a bogus response, see how other side does it
	//
	return $response;
  }
  /*
   * Sets VMX Play Instructions
   *
   * @param $exten
   *   Extension to modify
   * @param $vmx_play_instructions
   *   play instructions or just beep (checked, blank)
   * @param $mode
	 *	Mode to set (unavail/busy)
   */
  function setVmxPlayInstructions($exten,$mode,$vmx_play_instructions) {
	global $asterisk_manager_interface;
	$value_opt = ($vmx_play_instructions)?'""':'s';
	$response = $asterisk_manager_interface->Command("Action: Command\r\nCommand: database put AMPUSER $exten/vmx/$mode/vmxopts/timeout $value_opt\r\n\r\n");
  }
  /*
   * Get VMX Play Instructions
   *
   * @param $exten
   *   Extension to get information about
   * @param $mode
	 *	Mode to get (unavail/busy)
   * @return $data
   *   state of variable (checked/blank) or false if no poper value
   */
  function getVmxPlayInstructions($exten, $mode='unavail') {
	global $asterisk_manager_interface;
	$response = $asterisk_manager_interface->Command("Action: Command\r\nCommand: database get AMPUSER $exten/vmx/$mode/vmxopts/timeout\r\n\r\n");
	if (preg_match("/s/",$response)) {
			$response='';
	} 
		else {
			$response='checked';
		}
	//TODO: really need to check for a bogus response, see how other side does it
	//
	return $response;
  }
  /*
   * Gets Follow Me List-Ring Time if set
   *
   * @param $exten
   *   Extension to get information about
   * @return $number
   *   follow me list-ring time returned if set
   */
  function getFollowMeListRingTime($exten) {
	global $asterisk_manager_interface;
	$number = '';
	$response = $asterisk_manager_interface->Command("Action: Command\r\nCommand: database get AMPUSER $exten/followme/grptime\r\n\r\n");
	if (is_numeric($response)) {
	  $number = $response;
	}
	$stripped = preg_replace('/-|\(|\)|\s/','',$_COOKIE['ari_follow_me_listring_time']);
	if ($stripped==$number) {
	  $number = $_COOKIE['ari_follow_me_listring_time'];
	}
	return $number;
  }
} // class
?>