function vkInit(id) {

window.vkAsyncInit = function() {
  VK.init({
    apiId: id,
    nameTransportPath: '/xd_receiver.html'
  });
};

setTimeout(function() {
  var el = document.createElement("script");
  el.type = "text/javascript";
  el.src = "http://vkontakte.ru/js/api/openapi.js";
  el.async = true;
  document.getElementById("vk_api_transport").appendChild(el);
}, 0);

}

function vkLogin(options) {

VK.Auth.login(function(response) {
  if(response.session) {
    /* User is logged in */
    // need ajax request? $.post(url, response, "script" );
    response.user_session = response.session;
    delete response.session;      
    post(options['url'], response, options['authenticity_token'], options['session_key'], options['session_id']);
    if (response.settings){ /* Selected user access settings */ }
  }
  else { /* User pressed the Cancel button */ }
});
return false;

}

function post(url, params, token, session_key, session_id) {

var method = "post";

var form = document.createElement("form");
form.setAttribute("method", method);
form.setAttribute("action", url);

var authField = document.createElement("input");
authField.setAttribute("type", "hidden");
authField.setAttribute("name", "authenticity_token");
authField.setAttribute("value", token);
form.appendChild(authField);

var sessionField = document.createElement("input");
sessionField.setAttribute("type", "hidden");
sessionField.setAttribute("name", session_key);
sessionField.setAttribute("value", session_id);
form.appendChild(sessionField);

// recursively adds nested inputs to form 
var add_inputs = function (form, object, parent_name) {
  parent_name = parent_name || "";
  for (var key in object) {
    var hiddenField = document.createElement("input");
    hiddenField.setAttribute("type", "hidden");
    if (typeof(object[key]) == "object") add_inputs(form, object[key], parent_name ? parent_name + "[" + key + "]" : key);
    else {
      hiddenField.setAttribute("name", parent_name ? parent_name + "[" + key + "]" : key);
      hiddenField.setAttribute("value", object[key]);
    }
    form.appendChild(hiddenField);
  }
}

add_inputs(form, params);

document.body.appendChild(form);  // Not entirely sure if this is necessary
form.submit();

}