function liveid($credentials, $options)
{
    $session =& JFactory::getSession();
    $mainframe =& JFactory::getApplication();
    $db = JFactory::getDBO();
    $db->setQuery('select p.apikey, p.secretkey, p.discovery_url as control_url, p.parameters from #__providers p where p.name=' . $db->Quote($credentials['provider']));
    $consumer = $db->loadObject();
    $appid = $consumer->apikey;
    $secret = $consumer->secret;
    $policyurl = JUri::base() . '/policy.html';
    $returnurl = JUri::base() . '/index.php';
    $wll = new WindowsLiveLogin($appid, $secret, 'wsignin1.0', null, $policyurl, $returnurl);
    $info = array();
    $token = @$_COOKIE['webauthtoken'];
    $info[EXTERNAL_ID] = null;
    $info[STATUS] = Auth_FAILURE;
    if ($token) {
        $user = $wll->processToken($token);
        if ($user) {
            $info[EXTERNAL_ID] = $user->getId();
            $info[STATUS] = Auth_SUCCESS;
        }
    } else {
        $hasbegun = $session->get('liveidhasbegun');
        if (isset($hasbegun) || $hasbegun == 'false') {
            $session->set('liveidhasbegun', 'true');
            $url = $consumer->control_url . '?appid=' . $appid . '&' . $consumer->parameters;
            $mainframe->redirect($url);
        }
        $session->set('liveidhasbegun', 'false');
        $action = $credentials['action'];
        if ($action == '' || $action == 'login') {
            $user = $wll->processLogin($credentials);
            if ($user) {
                if ($user->usePersistentCookie()) {
                    $cookieTtl = time() + 10 * 365 * 24 * 60 * 60;
                    setcookie('webauthtoken', $user->getToken(), $cookieTtl);
                } else {
                    setcookie('webauthtoken', $user->getToken());
                }
                $info[EXTERNAL_ID] = $user->getId();
                $info[STATUS] = Auth_SUCCESS;
            }
            $info[STATUS] = Auth_FAILURE;
        }
    }
    // todo: solicitar email
    $info[EMAIL] = '';
    $info[LABEL] = $info[EMAIL];
    return $info;
}