<?xml version="1.0" encoding="UTF-8"?>
<Module>
  <ModulePrefs title="Voxalot Google Gadget" 
    author="Peter Truman" 
    author_email="falcon+widget@gothtech.co.uk"
    author_location="UK" 
    singleton="true"
    height="200"
    width="320"
    description="Voxalot Google Gadget.  EXPERIMENTAL.  Author has NO connection to Voxalot!">
    <Require feature="analytics"/>
  </ModulePrefs>
  <UserPref name="VoxUID" display_name="Voxalot Username" />
  <UserPref name="VoxPass" display_name="Voxalot Password" />
  <UserPref name="VoxPrefServ" display_name="Voxalot Default Server" default_value="US" datatype="enum">
    <EnumValue value="US"/>
    <EnumValue value="EU"/>
    <EnumValue value="AU"/>
  </UserPref>
  <UserPref name="VoxMainURI" display_name="Your URI" default_value="" />

<Content type="html"><![CDATA[
<script> _IG_Analytics("UA-4102998-1", "/VoxCallGadget");</script>
<img name="VoxLogo"/>
<div id="VoxForm">
<FORM NAME="VoxDialler" ACTION="" METHOD="GET">Number To Call:
<INPUT TYPE="text" NAME="VoxNumToCall" VALUE=""><br/>
<BUTTON id="button" onClick="VoxDial(this.form)" disabled>Dial</BUTTON>
</FORM>
</div>
<div id="VoxStatusDiv"></div>
<script>
  // Load Voxalot Logo from cache
  _gel("VoxLogo").src = _IG_GetImage('http://www.voxalot.com/imgs/logo.gif').src;
  var VoxSessionID = '';
  var VoxCallSuccess = false;
  var VoxLogoutSuccess = false;
  var VoxLoginSuccess = false;
  var VoxSessionSuccess = false;
  var VoxSessionID = '';
  
  function UpdateStatus(textmsg) {
    _gel("VoxStatusDiv").innerHTML = "<b>Status:</b>" + textmsg;
  }

  function CheckVoxPrefs() {
    var prefs = new _IG_Prefs();
    var PrefsOk = true;
    var MissingPrefs = '';
    if (prefs.getString("VoxUID").length < 6) {
      MissingPrefs = MissingPrefs + '<li>Username not set</li>';
      PrefsOk = false;
    }
    if (prefs.getString("VoxPass").length == 0) {
      MissingPrefs = MissingPrefs + '<li>Password not set</li>';
      PrefsOk = false;
    }
    if (prefs.getString("VoxMainURI").length == 0) {
      MissingPrefs = MissingPrefs + '<li>Main URI not set</li>';
      PrefsOk = false;
    }
    if (PrefsOk == true) {
      VoxLogoutWrapper();
    } else {
      UpdateStatus("Preferences not set!<br><ul>" + MissingPrefs + "</ul>");
    }
  }

  function GetVoxSessID() {
    UpdateStatus("Establishing Voxalot session...");      
    var VoxSessURL = 'http://mobile.voxalot.com/action/home';
    if (VoxSessionSuccess == false) {
      _IG_FetchContent(VoxSessURL,function(responseText) {
        if (responseText == null) {
          UpdateStatus("Establishing Voxalot session...");      
        } else {
          VoxSessionSuccess = true;
          var jSessLocStart = responseText.indexOf("jsessionid");
          var jSessLocEnd = responseText.indexOf("\"",jSessLocStart+13);
          VoxSessionID = responseText.substring(jSessLocStart+11,jSessLocEnd); 
          VoxLoginWrapper();
          return false;
        }
      },{refreshInterval: 0});
    }
  }

  function VoxCall() {
    var prefs = new _IG_Prefs();
    UpdateStatus("Setting up call..."); 
    var VoxCallURL = 'http://mobile.voxalot.com/action/webCall;jsessionid=' + VoxSessionID + '?task=call&fromNumber=' + prefs.getString("VoxMainURI") + '&fromPeerOID=-1&toNumber=' + _gel("VoxNumToCall").value + '&toPeerOID=-1&delay=0&login=Call';  
    _IG_FetchContent(VoxCallURL, function(responseText) {
      if (responseText == null) {
        UpdateStatus("Re-attempting call....");      
      } else {
        VoxCallSuccess = true;
        UpdateStatus("Call placed. Check Voxalot logs for details.");
        _IG_Analytics('UA-4102998-1', '/VoxCallGadget/PlacedCall');
        return false;
      }
    },{refreshInterval: 0});
  }

  function VoxLogin() {
    var prefs = new _IG_Prefs();
    UpdateStatus("Attempting login...");
    var VoxLoginURL = 'http://mobile.voxalot.com/action/login;jsessionid=' + VoxSessionID + '?userid=' + prefs.getString("VoxUID") + '&password=' + prefs.getString("VoxPass") + '&login=User+Login';
    _IG_FetchContent(VoxLoginURL, function(responseText) {
      if (responseText == null) {
        UpdateStatus("Attempting login....");      
      } else {
        VoxLoginSuccess = true;
        VoxEnable();
        return false;
      }
    },{refreshInterval: 0});
  }

  function VoxEnable() {
    _gel("button").disabled=false;
  }

  function VoxLogout() {
    UpdateStatus("Forcing logout...");      
    var VoxLogoutURL = 'http://mobile.voxalot.com/action/logout';
    _IG_FetchContent(VoxLogoutURL, function(responseText) {
      if (responseText == null) {
        UpdateStatus("Forcing logout...");      
      } else {
        VoxLogoutSuccess = true;
        VoxSessionWrapper();
        return false;
      }
    },{refreshInterval: 0});
  }

  function VoxCallWrapper() {
    if(!VoxCallSuccess ) {
      VoxCall();
      setTimeout('VoxCallWrapper()',1000);
    } else {
      UpdateStatus("Call in progress...?");
    }
  }

  function VoxSessionWrapper() {
    if(!VoxSessionSuccess ) {
      GetVoxSessID();
      setTimeout('VoxSessionWrapper()',1000);
    } else {
      UpdateStatus("Established Voxalot session!");
    }
  }

  function VoxLoginWrapper() {
    if(!VoxLoginSuccess ) {
      VoxLogin();
      setTimeout('VoxLoginWrapper()',1000);
    } else {
      UpdateStatus("Login successful!");
    }
  }

  function VoxLogoutWrapper() {
    if(!VoxLogoutSuccess ) {
      VoxLogout();
      setTimeout('VoxLogoutWrapper()',1000);
    } else {
      UpdateStatus("Forced logout complete.");
    }
  }

  function VoxDial(form) {
    var prefs = new _IG_Prefs();
    VoxCall();
  }

  UpdateStatus("Starting up!");
  CheckVoxPrefs();
</script>

]]></Content>
</Module>






