var loading = 'Loading...';
var action = true;
var logged = false;

String.prototype.isEmail = function(){
  var filter = /^[\-|\_]*([a-z0-9]+(\.|\-|\_*)?)+@([a-z][a-z0-9\-]+(\.|\-*\.))+[a-z]{2,6}$/;
  return filter.test(this);
}
String.prototype.trim = function(){
  return this.replace(/(^\s*)|(\s*$)/g,'');
}
String.prototype.unescapeHTML = function(){
  var div = document.createElement('div');
  div.innerHTML = this;
  return div.childNodes[0] ? (div.childNodes.length > 1 ?
    $A(div.childNodes).inject('', function(memo, node) { return memo+node.nodeValue }) :
    div.childNodes[0].nodeValue) : '';
};

/* LOGIN */
function checklogin(link){
  if (!logged) link.setAttribute('href','/login.php?r='+link.href.escapeHTML());
  return true;
}
function login(email,password,remember) {
  $('login-status').update(loading);
  if (action) {
    action = false;
    new Ajax.Request('/ajax.php',{
      method:'post',
      parameters:'action=login&login_email='+email+'&login_password='+password+'&login_remember='+remember+'',
      requestHeaders:{accept:'application/json'},
      onSuccess:function(json){
        var response = json.responseText.evalJSON(true);
        if (response.login) {
          logged = true;
          $('login-status').update('');
          $('login-box').update(response.login.unescapeHTML());
          $('login-link').href = '/member/profile.php?mid='+response.id;
		  window.location.href = '/member/profile.php?mid='+response.id;
        }
        else {
          $('login-status').update('<span style="color:red;">Invalid Login!</span>');
        }
        action = true;
      }
    });
  }
}
function logout(){
  $('login-status').update(loading);
  if (action) {
    action = false;
    new Ajax.Request('/ajax.php',{
        method:'post',
        parameters:'action=logout',
        requestHeaders:{accept:'application/json'},
        onSuccess:function(json){
          var response = json.responseText.evalJSON(true);
          $('login-status').update('');
          $('login-box').update(response.logout.unescapeHTML());
          $('login-link').href = '/login.php';
          action = true;
          logged = false;
        }
    });
  }
}

/* MY-PROFILE */
function addFriend(id) {
  if (action) {
    action = false;
    new Ajax.Request('/ajax.php',{
      method:'post',
      parameters:'action=addfriend&friendid='+id,
      onComplete:function(){
        $('add_as_friend').update('<img src="/img/profile/add_as_friend.gif" /><span class="grey">Friend requested</span>');
        action = true;
      }
    });
  }
}

/* MY-FRIEND */
function cancelPendingInvite(id) {
  if (action) {
    action = false;
    new Ajax.Request('/ajax.php',{
      method:'post',
      parameters:'action=cancelpendinginvite&miid='+id,
      onComplete:function(){
        $('miid_'+id).update('<div style="text-align:center;">The request has been cancelled</div>');
        action = true;
      }
    });
  }
}
function cancelWaitingConfirmation(id) {
  if (action) {
    action = false;
    new Ajax.Request('/ajax.php',{
      method:'post',
      parameters:'action=cancelwaitingconfirmation&miid='+id,
      onComplete:function(){
        $('miid_'+id).update('<div style="padding:10px;text-align:center;">The request has been cancelled</div>');
        action = true;
      }
    });
  }
}
function confirmPendingRequest(id) {
  if (action) {
    action = false;
    new Ajax.Request('/ajax.php',{
      method:'post',
      parameters:'action=confirmpendingrequest&miid='+id,
      onComplete:function(){
        $('miid_'+id).update('<div style="padding:10px;text-align:center;">The request has been confirmed</div>');
        action = true;
      }
    });
  }
}
function ignorePendingRequest(id) {
  if (action) {
    action = false;
    new Ajax.Request('/ajax.php',{
      method:'post',
      parameters:'action=ignorependingrequest&miid='+id,
      onComplete:function(){
        $('miid_'+id).update('<div style="padding:10px;text-align:center;">The request has been ignored</div>');
        action = true;
      }
    });
  }
}
function inviteAgain(id) {
  if (id==0) {
    alert('Request cannot be sent again within 3 days.');
  }
  else if (action) {
    action = false;
    new Ajax.Request('/ajax.php',{
      method:'post',
      parameters:'action=inviteagain&miid='+id,
      onComplete:function(){
        $('miid_'+id).update('<div style="text-align:center;">The request has been sent again</div>');
        action = true;
      }
    });
  }
}
function requestAgain(id) {
  if (id==0) {
    alert('Request cannot be sent again within 3 days.');
  }
  else if (action) {
    action = false;
    new Ajax.Request('/ajax.php',{
      method:'post',
      parameters:'action=requestagain&miid='+id,
      onComplete:function(){
        $('miid_'+id).update('<div style="padding:10px;text-align:center;">The request has been sent again</div>');
        action = true;
      }
    });
  }
}
function removeFriend(id,name) {
  if (action) {
    action = false;
    var confirm_ans = confirm('Are you sure you want to remove '+name+' from your friend list?');
    if (confirm_ans) {
      new Ajax.Request('/ajax.php',{
        method:'post',
        parameters:'action=removefriend&friendid='+id,
        requestHeaders:{accept:'application/json'},
        onComplete:function(){
          $('friend-'+id).update('<div style="padding:5px;margin-top:42px;text-align:center;">Friend has been removed.</div>');
        }
      });
    }
    action = true;
  }
}

function checkKeyword(txt_id)
{
	var txtbox = document.getElementById(txt_id);
	var keyword = txtbox.value.replace(/^\s*|\s*$/g, '');
	
	var reg_exp = /[a-zA-Z0-9]/;
	var valid_chars_count = 0;
	for (var i = 0; i < keyword.length; i++)
	{
		if (reg_exp.test(keyword.substr(i, 1)))
			valid_chars_count++;
	}
	
	if (valid_chars_count < 3)
	{
		alert('Please enter at least 3 alphanumeric characters.');
		txtbox.focus();
		return false;
	}
	
	return true;
}
