var EMAIL_OK = 0;
var EMAIL_BLANK = 1;
var EMAIL_BAD_SYNTAX = 2;

function xb_get_element(id)
{
  var el = document.all ? document.all[id] : document.getElementById(id);
  if (el)
    return el;
  else
    return null;
}


function show_login(e, state, center)
{    
  var the_box = xb_get_element('login_box');
  var the_w = 310;
  var the_h = 150;
  var isie = (navigator.appName.indexOf("Microsoft")!=-1);
  if (state == 'login')
    the_h = 150;
  // show box near event
  if (e)
  {
    position_at_event('login_box', the_w, the_h, e);
  }
  else
  {
    if (center == true)
    {
      position_at_center('login_box', the_w, the_h);
    }
    else
    {
      the_box.style.right = '0px';
      the_box.style.top = '20px';
    }
    close_modals_except('login_box');
  }
  unhide('login_box');
  toggle_login_form(state);
  
  return false;
}


function position_at_event(box_id, the_w, the_h, e, y_nudge)
{
  if (typeof(y_nudge)=='undefined')
    y_nudge = 0;
    
  var the_box = xb_get_element(box_id);
  if (!the_box)
    return;
  var isie = (navigator.appName.indexOf("Microsoft")!=-1);
  var c = get_eloc(e);
  var ww = c.ww;
  var wh = c.wh;
  var scrollTop = c.scrollTop;
  var posx = c.x;
  var posy = c.y;
  // offset
  if (posx + the_w > ww)
    posx = ww - the_w;
  if (posy + the_h > wh + scrollTop)
    posy = wh + scrollTop - the_h + y_nudge;
  if (posx < 0)
    posx = 0;
  if (posy < 0)
    posy = 0;
  the_box.style.position = 'absolute';
  the_box.style.top = posy + 'px';
  the_box.style.left = posx + 'px';
  // if this is for IE, hide the selects
  hide_selects(posx, posy, the_w, the_h);
}


function position_at_center(box_id, the_w, the_h)
{
  var the_box = xb_get_element(box_id);
  if (!the_box)
    return;
  var zcx,zcy;
  var isie = (navigator.appName.indexOf("Microsoft")!=-1);
  if (isie)
  {
    zcx = (document.body.clientWidth - the_w) / 2 - 100;
    zcy = document.body.clientHeight / 2 - 200;
  }
  else
  {
    zcx = (window.innerWidth - the_w) / 2;
    zcy = window.innerHeight / 2 - 200;
  }
  if (zcy < 20)
    zcy = 20;
  the_box.style.right = zcx + 'px';
  the_box.style.top = zcy + 'px';
}


function unhide(f)
{
  if (document.getElementById(f))
    document.getElementById(f).style.display = 'inline';
}
function hide(f)
{
  if (xb_get_element(f))
    xb_get_element(f).style.display = 'none';
  // unhide selects
  if (navigator.appName.indexOf("Microsoft")!=-1)
    unhide_selects();
}

// show/hide login v. register forms
function toggle_login_form(force_state)
{
  var lt = xb_get_element('login_form_table');
  //var rt = xb_get_element('register_form_table');
  var pt = xb_get_element('password_form_table');
  
  var now_showing;
  
  //var l = xb_get_element('login_form_toggle_link');
  var ll = xb_get_element('login_form_toggle_label');
  //var reg_e = xb_get_element('email_field');
  //var reg_p = xb_get_element('password_field');
  var log_e = xb_get_element('login_email_field');
  var log_p = xb_get_element('login_password_field');
  //var pr_login = xb_get_element('login_prompt');
  //var label = xb_get_element('login_form_toggle_link_label');
  //clear_element('reg_box_msg_txt');
  clear_element('login_box_msg_txt');
  clear_element('password_box_msg_txt');
  hide('login_prompt');
  //hide('register_prompt');
  if (lt.style.display == 'inline')
    now_showing = 'login';
  else if (pt && pt.style.display == 'inline')
    now_showing = 'password';
  else
    now_showing = 'signup'; 
  
  function show_l()
  {
    //hide(rt.id);
    if (pt)
      hide(pt.id);
    unhide(lt.id);
    //unhide(l.id);
    //l.innerHTML = 'Sign up';
    ll.innerHTML = 'LogIn';
    //label.innerHTML = 'Don\'t have an account?';
    // pre-fill email address
    //if (is_valid_email(reg_e.value) == EMAIL_OK)
      //log_e.value = reg_e.value;
    if (log_e.value != '')
      log_p.focus();
    else
      log_e.focus();
  }
  function show_p()
  {
    if (!pt)
      return;
    hide(lt.id);
    //hide(rt.id);
    ll.innerHTML = 'Forgot your password?';
    //label.innerHTML = 'Enter your email and we\'ll email you a new password.';
    //hide(l.id);
    unhide(pt.id);
    
    var pw_e = xb_get_element('forgot_password_email_field');
    // pre-fill email address if valid
    //if (is_valid_email(reg_e.value) == EMAIL_OK)
      //pw_e.value = reg_e.value;
    if (is_valid_email(log_e.value) == EMAIL_OK)
      pw_e.value = log_e.value;
    pw_e.focus();
  }

  if (force_state)
  {
    switch(force_state)
    { 
      case 'login':
        show_l();
        break;
      case 'password':
        show_p();
       break;
    //  case 'signup':
      default:
        show_l();
        break;
    }
  }
  else
  {
    if (now_showing != 'login')
      show_l();
    //else 
      //show_s();
  }
}


//returns event location
function get_eloc(e)
{
  if (!e && window.event)
    e = window.event;
  var posx, posy, scrtop, scrleft, ww, wh;
  var c = new Object;
  var clientSize = f_clientSize();
  ww = clientSize.width;
  wh = clientSize.height;
  scrtop = clientSize.scrollTop;
  scrleft = clientSize.scrollLeft;
  if (e.pageX || e.pageY)
  {
    posx = e.pageX;
    posy = e.pageY;
  }
  else if (e.clientX || e.clientY)
  {
    posx = e.clientX + scrleft;
    posy = e.clientY + scrtop;
  }
  c.x = posx;
  c.y = posy;
  c.ww = ww;
  c.wh = wh;
  c.scrollTop = scrtop;
  c.scrollLeft = scrleft;
  return c;
}

function hide_selects(left, top, width, height)
{
  return;
  if (navigator.appName.indexOf("Microsoft")==-1)
    return;
  var s = document.getElementsByTagName('select');
  var x,y,w;
  for (var i = 0; i < s.length; ++i)
  {
    x = findPosX(s[i]);
    y = findPosY(s[i]);
    w = findWidth(s[i]);
    if (w == 'NaN' || w < 0)
      w = 0;
    if (x + w >= left && x <= left + width && y >= top && y <= top + height)
    {
      s[i].style.display = 'none';
    }
  }
}

function unhide_selects()
{
  return;
  var s = document.getElementsByTagName('select');
  for (var i = 0; i < s.length; ++i)
    s[i].style.display = 'inline';
}
function findPosX(obj)
{
  var curleft = 0;
  if (obj.offsetParent)
  {
    while (obj.offsetParent)
    {
      curleft += obj.offsetLeft
      obj = obj.offsetParent;
    }
  }
  else if (obj.x)
    curleft += obj.x;
  return curleft;
}
function findPosY(obj)
{
  var curtop = 0;
  if (obj.offsetParent)
  {
    while (obj.offsetParent)
    {
      curtop += obj.offsetTop
      obj = obj.offsetParent;
    }
  }
  else if (obj.y)
    curtop += obj.y;
  return curtop;
}
function findWidth(obj)
{
  var w = 0;
  if (obj.width && parseInt(obj.width) > 0)
    return parseInt(obj.width);
  else if (obj.style.width && parseInt(obj.style.width) > 0)
    return parseInt(obj.style.width);
  while (obj.parentNode || w <= 0)
  {
    if (obj.parentNode.style.width)
    {
      w = parseInt(obj.parentNode.style.width);
      return w;
    }      
    else if (obj.parentNode.width)
    {
      w = parseInt(obj.parentNode.width);
      return w;
    }
    else
    {
      obj = obj.parentNode;
    }
  }
  return w;
}
function f_clientSize()
{
  var c = new Object;
  c.width = f_clientWidth();
  c.height = f_clientHeight();
  c.scrollLeft = f_scrollLeft();
  c.scrollTop =  f_scrollTop();
  return c;
}
function f_clientWidth() 
{
  return f_filterResults 
  (
    window.innerWidth ? window.innerWidth : 0,
    document.documentElement ? document.documentElement.clientWidth : 0,
    document.body ? document.body.clientWidth : 0
  );
}
function f_clientHeight() 
{
  return f_filterResults 
  (
    window.innerHeight ? window.innerHeight : 0,
    document.documentElement ? document.documentElement.clientHeight : 0,
    document.body ? document.body.clientHeight : 0
  );
}
function f_scrollLeft() 
{
  return f_filterResults 
  (
    window.pageXOffset ? window.pageXOffset : 0,
    document.documentElement ? document.documentElement.scrollLeft : 0,
    document.body ? document.body.scrollLeft : 0
  );
}
function f_scrollTop() 
{
  return f_filterResults 
  (
    window.pageYOffset ? window.pageYOffset : 0,
    document.documentElement ? document.documentElement.scrollTop : 0,
    document.body ? document.body.scrollTop : 0
  );
}
function f_filterResults(n_win, n_docel, n_body) 
{
  var n_result = n_win ? n_win : 0;
  if (n_docel && (!n_result || (n_result > n_docel)))
    n_result = n_docel;
  return n_body && (!n_result || (n_result > n_body)) ? n_body : n_result;
}

function hide_boxes()
{
  hide('login_box');
  //restore_link('signup');
  restore_link();
}

// clear element and dependencies
function clear_element(element)
{
  if (e = document.getElementById(element))
  {
    e.innerHTML = '';
    if (element == 'email_message')
      hide('login_prompt');
    else if (element == 'login_email_message')
      hide('register_prompt');
  }
}

// misc. text-related functions
function trim(s)
{
  if (!s)
    return '';
  return s.replace(/^\s*|\s*$/g,"");
}
function is_valid_email(e)
{
  e = trim(e).toLowerCase();
  if (e == '')
    return EMAIL_BLANK;
  regex = /^\s*[a-z0-9-+\_\.]+@[a-z0-9-_\.]+\.[a-z]{2,4}\s*$/;
  if(!regex.test(e))
    return EMAIL_BAD_SYNTAX;
  return EMAIL_OK;
}

function add_bookmark(url, title)
{  
netscape="Netscape User's hit CTRL+D to add a bookmark to this site."
if (navigator.appName=='Microsoft Internet Explorer')
{
window.external.AddFavorite(url, title);
}
else {
if (navigator.userAgent.toLowerCase().indexOf('safari') > -1)
      alert('To bookmark this page, press the command key + D.');
    else    
      alert('Right-click anywhere on the page and select Bookmark This Page... in the popup menu.');
  }
}
function validate_LoginForm(frm)
{
  var log_e = xb_get_element('login_email_field');
  var log_p = xb_get_element('login_password_field');
  var valid = is_valid_email(log_e.value) ;
  var EMsg = "";
  if(valid == EMAIL_BLANK )
  EMsg += 'Email is required </br>';
  if(valid == EMAIL_BAD_SYNTAX )
  EMsg += 'Enter valid email </br>';
  if(log_p.value == "")
  EMsg += 'Password is required </br>'; 
  if(EMsg)
  {  
  show_error(EMsg);
  return false;
  }
  Email    = log_e.value;
  Password = log_p.value;
  Result   = HTML_AJAX.grab('/includes/ajax/login-ajax.php?Type=Login&Email='+Email+'&Password='+Password);
  if(isNaN(parseInt(Result)))
  {
        show_error(Result);
        return false;
  }
  else if(!isNaN(parseInt(Result)))
  {
        location.reload(true);
  }
  return false;
}


function validate_ForgotForm(frm)
{
  var log_e = xb_get_element('forgot_password_email_field');
  var log_n = xb_get_element('forgot_password_name_field');
  var valid = is_valid_email(log_e.value) ;
  var EMsg = "";
  if(valid == EMAIL_BLANK )
  EMsg += 'Email is required </br>';
  if(valid == EMAIL_BAD_SYNTAX )
  EMsg += 'Enter valid email </br>';
  if(EMsg != "")
  {
  show_error(EMsg);
  return false;
  }
  return true; 
}

function show_error(ErrorMessage)
{
   xb_get_element('login_box_msg_txt').className = 'ErrorMessage';  
   xb_get_element('login_box_msg_txt').innerHTML = ErrorMessage;
}