/**
 * Forge Web ID Tests
 *
 * @author Dave Longley
 *
 * Copyright (c) 2010 Digital Bazaar, Inc. All rights reserved.
 */
(function($)
{
   // load flash socket pool
   window.forge.socketPool = {};
   window.forge.socketPool.ready = function()
   {
      // init page
      init($);
   };
   swfobject.embedSWF(
      '/forge/SocketPool.swf', 'socketPool', '0', '0', '9.0.0',
      false, {}, {allowscriptaccess: 'always'}, {});
})(jQuery);

var init = function($)
{
   // logging category
   var cat = 'forge.tests.loginDemo';

   // local alias
   var forge = window.forge;
   try
   {
      // get query variables
      var query = new URL(window.location.href).searchParams;
      var domain = query.get('domain') || '';
      var auth = query.get('auth') || '';
      var redirect = query.get('redirect') || '';
      var pport = parseInt(query.get('pport')) || 843;
      redirect = 'https://' + domain + '/' + redirect;
      if(domain)
      {
         $('#domain').html('`' + domain + '`');
      }

      // for chosen webid
      var chosen = null;

      // init forge xhr
      forge.xhr.init({
         flashId: 'socketPool',
         msie: $.browser.msie,
         url: 'https://' + domain,
         policyPort: pport,
         connections: 1,
         caCerts: [],
         verify: function(c, verified, depth, certs)
         {
            // don't care about cert verification for test
            return true;
         },
         getCertificate: function(c)
         {
            forge.log.debug(cat, 'using cert', chosen.certificate);
            return chosen.certificate;
         },
         getPrivateKey: function(c)
         {
            //forge.log.debug(cat, 'using private key', chosen.privateKey);
            return chosen.privateKey;
         }
      });

      // get flash API
      var flashApi = document.getElementById('socketPool');

      // get web ids collection
      var webids = forge.util.getItem(
         flashApi, 'forge.test.webid', 'webids');
      webids = webids || {};

      var id = 0;
      var list = $('<ul/>');
      for(var key in webids)
      {
         (function(webid)
         {
            var cert = forge.pki.certificateFromPem(webid.certificate);
            var item = $('<li/>');
            var button = $('<button>');
            button.attr('id', '' + (webid + id++));
            button.html('Choose');
            button.click(function()
            {
               button.attr('disabled', 'disabled');

               // set chosen webid
               chosen = webid;

               // do webid call
               $.ajax(
               {
                  type: 'GET',
                  url: '/' + auth,
                  success: function(data, textStatus, xhr)
                  {
                     if(data !== '')
                     {
                        forge.log.debug(cat, 'authentication completed');
                        forge.log.debug(cat, data);
                        window.name = data;
                     }
                     else
                     {
                        forge.log.debug(cat, 'authentication failed');
                        window.name = '';
                     }
                     window.location = redirect;
                  },
                  error: function(xhr, textStatus, errorThrown)
                  {
                     forge.log.error(cat, 'authentication failed');
                  },
                  xhr: forge.xhr.create
               });
            });
            item.append(button);
            item.append(' ' + key + '<br/>');

            // display certificate attributes
            var attr;
            for(var n = 0; n < cert.subject.attributes.length; ++n)
            {
               attr = cert.subject.attributes[n];
               item.append(attr.name + ': ' + attr.value + '<br/>');
            }

            list.append(item);
         })(webids[key]);
      }
      if(list.html() === '<ul/>')
      {
         list.append('None');
      }

      $('#webids').append(list);
   }
   catch(ex)
   {
      forge.log.error(cat, ex);
   }
};
