/****************************
login.js
Copyright Fortinet, Inc.
All rights reserved.
****************************/

var my_xmlhttp=null;
var buf_request_in_progress=false;
function login_string_table_t()
{
this.login_failed="Authentication failure";
this.lockout_msg="User lockout";
this.server_unreachable="Server unreachable";
}
var str_table=new login_string_table_t();
function get_xmlhttp(){
var xmlhttp=null;
try{
xmlhttp=new ActiveXObject("Msxml2.XMLHTTP");
}catch(e){
try{
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}catch(oc){
xmlhttp=null;
}
}
if(!xmlhttp&&typeof XMLHttpRequest!="undefined"){
xmlhttp=new XMLHttpRequest();
}
return xmlhttp;
}
function login_send_request(str_url,str_body) 
{ 
my_xmlhttp=get_xmlhttp();
my_xmlhttp.onreadystatechange=handle_buffer_statechange;
my_xmlhttp.open("POST",str_url,true);
my_xmlhttp.setRequestHeader("Pragma","no-cache");
my_xmlhttp.setRequestHeader("Cache-Control","no-store, no-cache, must-revalidate");
my_xmlhttp.setRequestHeader("If-Modified-Since","Sat, 1 Jan 2000 00:00:00 GMT");
my_xmlhttp.send(str_body);
}
function handle_buffer_statechange(ev)
{
if(my_xmlhttp.readyState==4){
handle_buffer_ready();
}
}
function try_login()
{
if(buf_request_in_progress)
{
throw("Avoid sending conflicting request\n");
return;
}
buf_request_in_progress=true;
var elm_username=document.getElementById("username");
var elm_secretkey=document.getElementById("secretkey");
var xstr="ajax=1&username="+encodeURIComponent(elm_username.value)+"&secretkey="+encodeURIComponent(elm_secretkey.value);
var elm_twofactor=document.getElementById("auth_two_factor");
var elm_authtoken=document.getElementById("auth_token");
if(elm_twofactor&&elm_authtoken)
{
xstr+="&auth_two_factor=1&auth_token="+encodeURIComponent(elm_authtoken.value);
}
clear_error_status_line();
disable_input();
try
{
login_send_request("/logincheck",xstr);
}
catch(e)
{
buf_request_in_progress=false;
update_error_status_line(str_table.server_unreachable);
reenable_input();
my_xmlhttp.abort();
delete my_xmlhttp;
my_xmlhttp=null;
}
}
function update_error_status_line(msg)
{
var elem=document.getElementById("err_msg_txt");
elem.style.color="black";
while(elem.childNodes.length)
{
elem.removeChild(elem.childNodes[0]);
}
var txt=document.createTextNode(msg);
elem.appendChild(txt);
setTimeout("var elem = document.getElementById(\"err_msg_txt\");  elem.style.color = \"red\";",100);
}
function clear_error_status_line()
{
var elem=document.getElementById("err_msg_txt");
elem.style.color="transparent";
}
function handle_buffer_ready()
{
if(!buf_request_in_progress)
return;
buf_request_in_progress=false;
var retval=my_xmlhttp.responseText;
my_xmlhttp=null;
if(retval.length==0)
{
update_error_status_line(str_table.server_unreachable);
reenable_input();
return;
}
var rv=retval.charAt(0); 
var rv2=retval.substring(1); 
if(rv=="1")
{
eval(rv2);
}
else if(rv=="2") 
{
update_error_status_line(str_table.lockout_msg);
setTimeout("reenable_input();",60*1000);
}
else
{
update_error_status_line(str_table.login_failed);
reenable_input();
}
}
function disable_input()
{
var elm_username=document.getElementById("username");
var elm_secretkey=document.getElementById("secretkey");
var elm_button=document.getElementById("login_button");
var two_factor_auth=(!!document.getElementById("auth_two_factor"));
if(!two_factor_auth)elm_username.value="";
elm_username.disabled=true;
elm_secretkey.value="";
elm_secretkey.disabled=true;
elm_button.disabled=true;
}
function reenable_input()
{
var elm_username=document.getElementById("username");
var elm_secretkey=document.getElementById("secretkey");
var elm_button=document.getElementById("login_button");
var two_factor_auth=(!!document.getElementById("auth_two_factor"));
elm_username.disabled=false;
elm_secretkey.disabled=false;
elm_button.disabled=false;
elm_username.blur();
if(two_factor_auth) 
elm_secretkey.focus();
else
elm_username.focus();
}
function login_get_cmd_kbd_event(evt_p)
{
if(evt_p)
return evt_p;
evt=window.event;
if(evt) 
return evt;
return null;
}
function login_crack_kbd_event(evt)
{
if(evt.which)
return evt.which;
else if(evt.keyCode)
return evt.keyCode;
else if(evt.charCode)
return evt.charCode;
return 0;
}
function key_pressdown(evt_p)
{
try
{
var evt=login_get_cmd_kbd_event(evt_p);
if(evt==null)return;
var key_code=login_crack_kbd_event(evt);
if(key_code==0)return;
if(key_code==13)
{
var elm_button=document.getElementById("login_button");
elm_button.click();
return false;
}
}
catch(e)
{
}
return true;
}
