// Copyright (c) 2011 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// Variable to track if a captcha challenge was issued. If this gets set to
// true, it stays that way until we are told about successful login from
// the browser. This means subsequent errors (like invalid password) are
// rendered in the captcha state, which is basically identical except we
// don't show the top error blurb "Error Signing in" or the "Create
// account" link.
var g_is_captcha_challenge_active = false;
// Taken from new_new_tab.js.
// TODO(tim): Can this be unified?
function url(s) {
// http://www.w3.org/TR/css3-values/#uris
// Parentheses, commas, whitespace characters, single quotes (') and
// double quotes (") appearing in a URI must be escaped with a backslash
var s2 = s.replace(/(\(|\)|\,|\s|\'|\"|\\)/g, '\\$1');
// WebKit has a bug when it comes to URLs that end with \
// https://bugs.webkit.org/show_bug.cgi?id=28885
if (/\\\\$/.test(s2)) {
// Add a space to work around the WebKit bug.
s2 += ' ';
}
return 'url("' + s2 + '")';
}
function gaia_setFocus() {
var form = document.getElementById("gaia-login-form");
if (form.email && (form.email.value == null || form.email.value == "")) {
form.email.focus();
} else if (form.passwd) {
form.passwd.focus();
}
}
function showGaiaLogin(args) {
document.getElementById('logging-in-throbber').style.display = "none";
document.getElementById('email').disabled = false;
document.getElementById('passwd').disabled = false;
var f = document.getElementById("gaia-login-form");
if (f) {
if (args.user != undefined) {
if (f.email.value != args.user)
f.passwd.value = ""; // Reset the password field
f.email.value = args.user;
}
if (!args.editable_user) {
f.email.style.display = 'none';
var span = document.getElementById('email-readonly');
span.appendChild(document.createTextNode(f.email.value));
span.style.display = 'inline';
setElementDisplay("create-account-div", "none");
}
f.accessCode.disabled = true;
}
if (1 == args.error) {
var access_code = document.getElementById('access-code');
if (access_code.value && access_code.value != "") {
setElementDisplay("errormsg-0-access-code", 'block');
showAccessCodeRequired();
} else {
setElementDisplay("errormsg-1-password", 'table-row');
}
setBlurbError(args.error_message);
} else if (3 == args.error) {
setElementDisplay("errormsg-0-connection", 'table-row');
setBlurbError(args.error_message);
} else if (4 == args.error) {
showCaptcha(args);
} else if (8 == args.error) {
showAccessCodeRequired();
} else if (args.error_message) {
setBlurbError(args.error_message);
}
document.getElementById("sign-in").disabled = false;
document.getElementById("sign-in").value = templateData['signin'];
gaia_setFocus();
}
function showCaptcha(args) {
g_is_captcha_challenge_active = true;
// The captcha takes up lots of space, so make room.
setElementDisplay("top-blurb", "none");
setElementDisplay("top-blurb-error", "none");
setElementDisplay("create-account-div", "none");
document.getElementById('create-account-cell').height = 0;
// It's showtime for the captcha now.
setElementDisplay("captcha-div", "block");
document.getElementById('email').disabled = true;
document.getElementById('passwd').disabled = false;
document.getElementById('captcha-value').disabled = false;
document.getElementById('captcha-wrapper').style.backgroundImage =
url(args.captchaUrl);
}
function showAccessCodeRequired() {
setElementDisplay("password-row", "none");
setElementDisplay("email-row", "none");
document.getElementById("create-account-cell").style.visibility =
"hidden";
setElementDisplay("access-code-label-row", "table-row");
setElementDisplay("access-code-input-row", "table-row");
setElementDisplay("access-code-help-row", "table-row");
document.getElementById('access-code').disabled = false;
}
function CloseDialog() {
chrome.send("DialogClose", [""]);
}
function showGaiaSuccessAndClose() {
document.getElementById("sign-in").value = templateData['success'];
setTimeout(CloseDialog, 1600);
}
function showGaiaSuccessAndSettingUp() {
document.getElementById("sign-in").value = templateData['settingup'];
}
/**
* DOMContentLoaded handler, sets up the page.
*/
function load() {
var acct_text = document.getElementById("gaia-account-text");
var translated_text = acct_text.textContent;
var posGoogle = translated_text.indexOf('Google');
if (posGoogle != -1) {
var ltr = templateData['textdirection'] == 'ltr';
var googleIsAtEndOfSentence = posGoogle != 0;
if (googleIsAtEndOfSentence == ltr) {
// We're in ltr and in the translation the word 'Google' is AFTER the
// word 'Account' OR we're in rtl and 'Google' is BEFORE 'Account'.
var logo_div = document.getElementById('gaia-logo');
logo_div.parentNode.appendChild(logo_div);
}
acct_text.textContent = translated_text.replace('Google','');
}
var loginForm = document.getElementById("gaia-login-form");
loginForm.onsubmit = function() {
sendCredentialsAndClose();
return false;
};
var gaiaCancel = document.getElementById("gaia-cancel");
gaiaCancel.onclick = function() {
CloseDialog();
};
var args = JSON.parse(chrome.dialogArguments);
showGaiaLogin(args);
}
function sendCredentialsAndClose() {
if (!setErrorVisibility())
return false;
document.getElementById('email').disabled = true;
document.getElementById('passwd').disabled = true;
document.getElementById('captcha-value').disabled = true;
document.getElementById('access-code').disabled = true;
document.getElementById('logging-in-throbber').style.display = "block";
var f = document.getElementById("gaia-login-form");
var result = JSON.stringify({"user" : f.email.value,
"pass" : f.passwd.value,
"captcha" : f.captchaValue.value,
"access_code" : f.accessCode.value});
document.getElementById("sign-in").disabled = true;
chrome.send("SubmitAuth", [result]);
}
function setElementDisplay(id, display) {
var d = document.getElementById(id);
if (d)
d.style.display = display;
}
function hideBlurb() {
setElementDisplay('top-blurb', 'none');
}
function setBlurbError(error_message) {
if (g_is_captcha_challenge_active)
return; // No blurb in captcha challenge mode.
if (error_message) {
document.getElementById('error-signing-in').style.display = 'none';
document.getElementById('error-custom').style.display = 'inline';
document.getElementById('error-custom').textContent = error_message;
} else {
document.getElementById('error-signing-in').style.display = 'inline';
document.getElementById('error-custom').style.display = 'none';
}
document.getElementById("top-blurb-error").style.visibility = "visible";
document.getElementById('email').disabled = false;
document.getElementById('passwd').disabled = false;
}
function resetErrorVisibility() {
setElementDisplay("errormsg-0-email", 'none');
setElementDisplay("errormsg-0-password", 'none');
setElementDisplay("errormsg-1-password", 'none');
setElementDisplay("errormsg-0-connection", 'none');
setElementDisplay("errormsg-0-access-code", 'none');
}
function setErrorVisibility() {
resetErrorVisibility();
var f = document.getElementById("gaia-login-form");
if (null == f.email.value || "" == f.email.value) {
setElementDisplay("errormsg-0-email", 'table-row');
setBlurbError();
return false;
}
if (null == f.passwd.value || "" == f.passwd.value) {
setElementDisplay("errormsg-0-password", 'table-row');
setBlurbError();
return false;
}
if (!f.accessCode.disabled && (null == f.accessCode.value ||
"" == f.accessCode.value)) {
setElementDisplay("errormsg-0-password", 'table-row');
return false;
}
return true;
}
function onPreCreateAccount() {
return true;
}
function onPreLogin() {
if (window["onlogin"] != null) {
return onlogin();
} else {
return true;
}
}
document.addEventListener('DOMContentLoaded', load);