/****************************
js/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 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.send(str_body);
}
function handle_buffer_statechange(ev)
{
if(my_xmlhttp.readyState==4) 
{
handle_buffer_ready();
}
}
function try_login()
{
if(buf_request_in_progress)
{
return;
}
buf_request_in_progress=true;
var elm_username=document.getElementById("username");
var elm_secretkey=document.getElementById("secretkey");
var xstr="ajax="+Math.random()+"&username="+encodeURIComponent(elm_username.value)+"&secretkey="+encodeURIComponent(elm_secretkey.value);
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 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");
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");
elm_username.disabled=false;
elm_secretkey.disabled=false;
elm_button.disabled=false;
elm_username.blur();
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;
}
