
var edit_status_visible = false;
var edit_select_visible = false;

var status_set = true;
var status_cleared = true;
var status_blur = false;
var status_reblur = false;
var status_init = false;
var status_keepopen = false;
var status_text = '';
var default_status = ' | Update your status...';

function editStatus() {
  if (!edit_status_visible) {
    if (ge('su_text').firstChild) {
      status_text = ge('su_text').firstChild.nodeValue;
    }

    if (status_text == "  | Update your status...") {
			status_text = "is ";
		}
		
    ge('edit_status_text').value = status_text;
    hideEditStatusSelect();
    show('status_editor');
    ge('edit_status_text').focus();
    //ge('edit_status_text').select();
    status_blur = true;
    edit_status_visible = true;
  } else {
    ge('edit_status_text').focus();
  }
}

function hideEditStatus() {
  edit_status_visible = false;
  status_blur = false;
  status_init = false;
  status_keepopen = false;
  hideEditStatusSelect();
  hide('status_editor');
}

function editStatusBlur() {
  if (status_reblur) {
    ge('edit_status_text').focus();
    status_reblur = false;
    return false;
  }
  if (status_blur) {
    if (ge('edit_status_text').value && (ge('edit_status_text').value != status_text)) {
      submitStatus(ge('edit_status_text').value);
    } else {
      if (status_keepopen) {
        status_init = true;
        hideEditStatusSelect();
      } else {
        hideEditStatus();
      }
    }
  }
  return true;
}

function toggleEditStatusSelect() {
  if (status_init) {
    if (isSafari()) {
      status_reblur = true;
    }
    status_init = false;
    ge('edit_status_text').focus()
  } else if (isSafari() || isIE()) {
    status_reblur = true;
  }
  edit_select_visible = !edit_select_visible;
  if (edit_select_visible) {
    showEditStatusSelect();
  } else {
    hideEditStatusSelect();
  }
}

function showEditStatusSelect() {
  edit_select_visible = true;
  ge('edit_status_select').style.display='block'; 
}

function hideEditStatusSelect() {
  edit_select_visible = false;
  hide('edit_status_select');
}

function statusSelect(element) {
  toggleEditStatusSelect();
  ge('edit_status_text').value = element.innerHTML;
  ge('edit_status_text').focus();
  ge('edit_status_text').select();
}

function clearStatus(uId) {
  status_cleared = false;
  status_keepopen = false;
  showClearingMessage(uId);
  hideEditStatus();
 
}

function showClearingMessage(uId) {
  if (!status_cleared) {
    hide('su_name');
    ge('su_text').innerHTML = '<span style="color:gray;">Clearing status...</span>';
    
		$do = melodicaSetStatus(uId.toString(), "");
	
	  if ($do == 1) {
	    statusCleared();
	    
	  } else {
	  	statusUpdated(null);
	  }
    
  }
}

function statusCleared() {
  status_cleared = true;
  hide('su_name');
  ge('su_placeholder').innerHTML = '<BR /><BR />Your status has been cleared.';
  show('su_placeholder');
  hide('su_edit');
  ge('su_text').innerHTML = default_status;
}

function submitStatus(uId, status) {
  if (status == null || status == '') {
    return;
  }
  status_keepopen = false;
  status_set = false;
  window.setTimeout('showUpdatingMessage()', 200);
	
	$do = melodicaSetStatus(uId, status);

  if ($do == 1) {
    statusUpdated(status);
    //hide
	  hideEditStatusSelect();
	  hide('status_editor');
    
  } else {
  	statusUpdated(null);
	  hideEditStatusSelect();
	  hide('status_editor');
  }
}

function showUpdatingMessage() {
  if (!status_set) {
    hide('su_name');
    hide('su_placeholder');
    ge('su_text').innerHTML = '<span style="color:gray;">Updating status...</span>';
  }
}

function statusUpdated(status) {
  status_set = true;
  if (status != null && status != '') {
    show('su_name');
    show('su_edit');
    hide('su_placeholder');
    ge('su_text').innerHTML = status;
    ge('edit_status_text').value = '';
  } else if (status == null) {
    hide('su_name');
    ge('su_placeholder').innerHTML = '<BR /><BR /><span style="color:red;">Error updating status, try again later.</span>';
    show('su_placeholder');
    hide('su_edit');
    ge('su_text').innerHTML = default_status;
  }
}

function statusTextKeyPress(event) {
  if (!event) {
    event = window.event;
  }
  if (event.keyCode) {
    keyPressed = event.keyCode;
  } else if (event.which) {
    keyPressed = event.which;
  }

  // Tab
  if (keyPressed == 9) {
    return false;
  }

  // Enter
  if (keyPressed == 13) {
    submitStatus(ge('edit_status_id').value, ge('edit_status_text').value);
    return false;
  }

  // Escape
  if (keyPressed == 27) {
    hideEditStatus();
    return false;
  }

  return true;
}

