/* miniHustle v0.1

   The deformed step-cousin of kungFuHustle. 

   ~Tsudeki
*/

// Create a new XMLHttpRequest object to talk to the Web server

// Initialize
var xmlHttp = false;

// Begin IE Code
/*@cc_on @*/
/*@if (@_jscript_version >= 5)
try {
  xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
  try {
    xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
  } catch (e2) {
    xmlHttp = false;
  }
}
@end @*/
// End IE Code

if (!xmlHttp && typeof XMLHttpRequest != 'undefined') {
  // Mozilla and every other sane browser :)
  xmlHttp = new XMLHttpRequest();
}

function callServer(params,type) {
  // Call Server using the following url:
  showProgressBar();
  var url = '';
  switch (type) {
    case "login":
    case "logout":
      url = "/forums/login.php"+params;
    break;
  }
  // open connection.  usage: xmlHttp.open(METHOD,URL,ASYNC)
  xmlHttp.open("GET", url, true);
  // call a function when onreadystatechange updates
  xmlHttp.onreadystatechange = updatePage;
  // must send *something*, so send null
  xmlHttp.send(null);
}

function updatePage() {
  var response = '';
  if (xmlHttp.readyState == 4) {
    // if readState == 4 (page is complete), get responseText
    response = xmlHttp.responseText;
  }
  if(response != '') {
    doSomething(response);    
  }
}

/* End AJAX Functions */

/* Begin Site Functions */
function doSomething(res) {
  var i = res.split('::');
  if (i.length != 2) {
    alert('The pigeons have flown east for the Autumn.');
    showMemberLoginForm();
    return false; // something's wrong
  }
  var action = i[0];
  var response = i[1];
  switch (action) {
    case "login":
      if (response == 'invalid_pw') {
        showMemberLoginForm();
        alert('Invalid Password');
      } else if (response == 'invalid_accnt') {
        showMemberLoginForm();
        alert('That username does not exist.');
      } else if (response == 'logged_in_already') {
        showMemberLoginForm();
        alert('You appear to be logged in already.  If this continues, please contact me.');
      } else if (response != '') { 
        showMemberPanel(response); 
      }
    break;
    case "logout":
      showMemberLoginForm();
    break;
  }
}

function showMemberPanel(res) {
  var i = res.split(',');
  var u = i[0];
  var d = new Date(i[1] * 1000);
  d = parseInt(d.getMonth()+1) + '/'+d.getDate()+'/'+d.getFullYear();
  var p = i[2];
  var sid = i[3];
  var ava = i[4];
  var rc = (i[5] == '') ? 0 : i[5];
  ava = (ava.match(/http/)) ? ava : '/forums/images/avatars/'+ava;
  document.getElementById('ln_loginPanelCaption').innerHTML = 'Welcome, '+u;
  document.getElementById('ln_loginPanel_body').innerHTML = '<div id="memberAvatarDiv"><img src="'+ava+'" alt="'+u+'" id="memberAvatar" /></div><b>Posts:<img src="/images/spacer.gif" alt="spacer" width="58" height="1" />'+p+'</b><br /><b>Reviews: <img src="/images/spacer.gif" alt="spacer" width="40" height="1" />'+rc+'</b><br /><br /><span id="ln_lastLogin">Last Login: '+d+'</span><br />';
  if (u.match(/^tsudeki$/i)) {
    document.getElementById('ln_loginPanel_body').innerHTML += '<a href="/post_review.php" class="miscLink"><b>Post Review</b></a><br />';
    document.getElementById('ln_loginPanel_body').innerHTML += '<a href="/edit_review.php" class="miscLink"><b>Edit Reviews</b></a><br />';
  }
  document.getElementById('ln_loginPanel_body').innerHTML += '<a href="javascript: void(0);" onClick="javascript: userLogout(\''+sid+'\');" class="miscLink"><b>Logout</b></a>';
}

function showProgressBar() {
  document.getElementById('ln_loginPanelCaption').innerHTML = 'Member Panel - Wait';
  document.getElementById('ln_loginPanel_body').innerHTML = '<div style="text-align: center; padding: 20px;"><img src="/images/progress.gif" alt="Progressing!" /></div>';
}

function showMemberLoginForm() {
  document.getElementById('ln_loginPanelCaption').innerHTML = 'Member Panel - Login';
  document.getElementById('ln_loginPanel_body').innerHTML = '<form method="post" onSubmit="javascript: return postLogin(this);"> <input type="text" name="username" class="loginField" /> <input type="password" name="password" class="loginField" /> <input type="hidden" name="login" value="Log in" /> <input type="hidden" name="magic" value="1" /> <input type="submit" value="Log In" class="loginButton" /> <input type="reset" value="Reset" class="loginButton" /> </form> <a href="/forums/profile.php?mode=register" class="miscLink">Register</a> | <a href="/forums/profile.php?mode=sendpassword" class="miscLink">Lost Password?</a>';
}

function postLogin(form) {
  params = '?';
  for (var i=0,n=form.elements.length;i<n;i++) {
    params += form.elements[i].name +'=';
    params += (form.elements[i].name == 'password') ? encode64(form.elements[i].value) + '&' : form.elements[i].value + '&';
  }
  callServer(params,'login');
  return false;
}

function userLogout(sid) {
  params = '?logout=true&sid='+sid+'&magic=1';
  callServer(params,'logout');
}






/* functions that aren't mine */
// This code was written by Tyler Akins and has been placed in the
// public domain.  It would be nice if you left this header intact.
// Base64 code from Tyler Akins -- http://rumkin.com

var keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";

function encode64(input) {
   var output = "";
   var chr1, chr2, chr3;
   var enc1, enc2, enc3, enc4;
   var i = 0;

   do {
      chr1 = input.charCodeAt(i++);
      chr2 = input.charCodeAt(i++);
      chr3 = input.charCodeAt(i++);

      enc1 = chr1 >> 2;
      enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
      enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
      enc4 = chr3 & 63;

      if (isNaN(chr2)) {
         enc3 = enc4 = 64;
      } else if (isNaN(chr3)) {
         enc4 = 64;
      }

      output = output + keyStr.charAt(enc1) + keyStr.charAt(enc2) + 
         keyStr.charAt(enc3) + keyStr.charAt(enc4);
   } while (i < input.length);
   
   return output;
}
