/*
** click-to-call.js
** AJAX file for XML communication
**
** Copyright(C) TNZ Group Ltd - All rights reserved
** http://www.tnz.co.nz
*/

function is_number(text)
{
   var ValidChars = "0123456789";
   var IsNumber=true;
   var Char;

   for (i = 0; i < text.length && IsNumber == true; i++)
   {
      Char = text.charAt(i);
      if (ValidChars.indexOf(Char) == -1)
      {
         IsNumber = false;
      }
   }
   return IsNumber;
}

function getHttpRequest()
{
  var object = null;

  try
  {
    object = new XMLHttpRequest();
  }
  catch(e)
  {
    try
    {
      object = new ActiveXObject("Msxml2.XMLHTTP");
    }
    catch(e)
    {
      try
      {
        object = new ActiveXObject("Microsoft.XMLHTTP");
      }
      catch(e)
      {
        return false;
      }
    }
  }
  return object;
}

function CallRequestQuery(object,request)
{
  if( request && request.readyState == 4 )
  {
    if( request.status != 200 )
    {
      alert(request.statusText);
    }
    if( request.status == 200 )
    {
      var type = request.getResponseHeader('Content-Type');

      var vars = request.responseText.split("\r\n");

      var isrunning = 0, i = 0;

      for( i = 0; i < vars.length; i++ )
      {
        var value = vars[i].split("=");

        if( value[0] == 'isrunning' )
        {
          isrunning = parseInt(value[1]);
        }
        object[value[0]] = value[1];
      }

      if( isrunning )
      {
        var s = 'ACTION=Query';

        s += '&id='+object['id'];

        s += '&callstate='+object['callstate'];

        s += '&user='+object['user'];

        var request = getHttpRequest();

        request.onreadystatechange = function(){CallRequestQuery(object,request);};

        request.open('POST','/include/xml/call-request.php',true);

        request.setRequestHeader("Content-Type","application/x-www-form-urlencoded");

        request.send(s);
      }
      if( object.onupdate )
      {
        object.onupdate();
      }
      if( object.oncomplete && !isrunning )
      {
        object.oncomplete();
      }
    }
  }
}

function CallRequest(object)
{
  var s = 'ACTION=Callback';

  s += '&number='+object['number'];
  s += '&region='+object['region'];
  s += '&extension='+object['extension'];
  s += '&user='+object['user'];

  var request = getHttpRequest();

  request.open('POST','/include/xml/call-request.php',false);

  request.setRequestHeader("Content-Type","application/x-www-form-urlencoded");

  request.send(s);

  if( request.status == 200 )
  {
    if( request.responseText.indexOf("DuplicateFound") > -1 )
    {
        alert("Sorry, your call cannot be established at this time - To prevent fraud\r\nPlease try again after 5 minutes");
        onCallComplete();
    }
    else
    if( request.responseText.indexOf("CannotFindServer") > -1 )
    {
        alert("Calls cannot be made at this time.\r\nPlease try again later");
        onCallComplete();
    }
    else
    {
        CallRequestQuery(object,request);
    }
    return true;
  }
  return false;
}

var call_duration_started = false;
var call_duration = 0;

function onCallUpdate()
{
  document.getElementById('call-state-div').style.display = 'block';
  document.getElementById('call-state').innerHTML = this['callstate'];

  if( this['callstate'] == 'CallOutConnected' && call_duration_started == false )
  {
    call_duration_started = true;
    document.getElementById('call-duration-div').style.display = 'block';
    display_call_duration();
  }
}

function display_call_duration()
{
    if( call_duration_started == true )
    {
        document.getElementById('call-duration').innerHTML = call_duration;
        call_duration++;
        setTimeout("display_call_duration();",1000);
    }
    else
    {
        document.getElementById('call-duration-div').style.display = 'none';
        call_duration=0;
    }
}

function onCallComplete()
{
  call_duration_started = false;
  document.getElementById('call-duration-div').style.display = 'none';
  
  document.getElementById('action-div').style.display = 'block';
  document.getElementById('total-call-duration').innerHTML = this['callout-duration'];
  document.getElementById('total-call-duration-div').style.display = 'block';
}

function submitCallRequest()
{
  if( document.getElementById('call-number').value == "" )
  {
    alert('Please enter your phone number');
    document.getElementById('call-number').focus();
    return;
  }
  else
  if( !is_number(document.getElementById('call-number').value) )
  {
    alert('Only numbers to be entered for a phone number!');
    document.getElementById('call-number').focus();
    return;
  }
  else
  if( !is_number(document.getElementById('call-extension').value) )
  {
    alert('Only numbers to be entered for extension number!');
    document.getElementById('call-extension').focus();
    return;
  }
  else
  {
    if( document.getElementById('call-number').value.length >= 6 || document.getElementById('call-number').value.length <= 8 )
    {
        document.getElementById('action-div').style.display = 'none';
        document.getElementById('total-call-duration-div').style.display = 'none';

        var callinfo =
        {
          'user'      : document.getElementById('user').value,
          'region'    : document.getElementById('area-code').value,
          'number'    : document.getElementById('area-code').value+document.getElementById('call-number').value,
          'extension' : document.getElementById('call-extension').value,
          'onupdate'  : onCallUpdate,
          'oncomplete': onCallComplete
        };

        if( !CallRequest(callinfo) )
        {
          alert('Error occurred while processing');
        }
    }
    else
    {
        alert("Invalid phone number length - must be between 6 and 8 digits");
        document.getElementById('call-number').focus();
    }
  }
}

function country_changed()
{
    for( var prop in area_code )
    {
        if( prop == document.getElementById('country').value )
        {
            innerHTML = "<select id='area-code'>"
            for (var id in area_code[prop])
            {
                innerHTML += "<option value='"+area_code[prop][id]+"'>"+id+"</option>";
            }
            innerHTML += "</select>&nbsp;";
            innerHTML += "<input type=text' id='call-number' size='10' maxlength='10'>";
            innerHTML += "&nbsp;&nbsp;ext.<input type='text' id='call-extension' size='4' maxlength='5'>";

            document.getElementById('area-code').parentNode.innerHTML = innerHTML;
        }
    }
}