// Place your application-specific JavaScript functions and classes here
// This file is automatically included by javascript_include_tag :defaults
//

function inline_edit(todo_id) {
  $('inline_edit_'+todo_id).show();
  $('body_wrap_'+todo_id).hide();
  $('due_'+todo_id).hide();
  $('alarm_'+todo_id).hide();

  // set value as original body to ignore cache by browser
  $('todo_body_' + todo_id).value = $('body_' + todo_id).innerHTML.strip();
}

function cancel_inline_edit(todo_id) {
  $('inline_edit_'+todo_id).hide();
  $('body_wrap_'+todo_id).show();
  $('due_'+todo_id).show();
  $('alarm_'+todo_id).show();
}

function focus_text_field(id, default_str)
{
  field = $(id);

  if(field.getValue() == default_str)
  {
    field.setValue('');
  }
    field.addClassName('active');
}

function init_new_todo(){
  $('todo_body').setValue($sample_body);
  $('todo_until').setValue($sample_due);
}

/* When user hit  enter key on todo_body,
 * do submit */
function on_keydown_edit_body(objEvent)
{
  var element = objEvent.element();
  var key = objEvent.keyCode;

  if(key == 13) {
    var btn_id = 'todo_submit_'+element.id.split('_')[2];
    var btn = $(btn_id);
    btn.click();
  }
}

/* When user hit  enter key on todo_body,
 * prevent submit and move focust to todo_until
 */
function on_keydown_todo_body(objEvent)
{
  if (!objEvent) var objEvent  = window.event;
  var iKeyCode = objEvent.keyCode || objEvent.which;
  /*
  var strKey = String.fromCharCode(iKeyCode);
  alert("KeyCode = " + iKeyCode + "\nCharacter =" + strKey);
  */

  if(iKeyCode == 13) { 
    if($('todo_body').value.strip()[0] == '@') {
      $('new_todo').submit();
    }
    else {
      $('todo_until').focus(); 
    }
    return false;
  }
  return true;
}

  

function on_keydown_todo_until(objEvent)
{
  /*
  if (!objEvent) var objEvent  = window.event;
  var iKeyCode = objEvent.keyCode || objEvent.which;

  if(iKeyCode == 13) { 
    $('new_todo').submit(); 
  }
  */
  return true;
}


/*
 * try to implement one key shortcut menu
 * but, How to stop key handler when user is editing on some text field
function on_document_keydown(objEvent)
{
  var iKeyCode = objEvent.keyCode || objEvent.which;
  var strKey = String.fromCharCode(iKeyCode);
  alert("KeyCode = " + iKeyCode + "\nCharacter =" + strKey);
}

Event.observe(document, 'keydown', on_document_keydown);
*/

function show_until_menu(todo_id)  {
  var pos;
  var menu = $('until_popup_menu');

  if(todo_id  > 0 )
  {
    /* update todo id in all link_to url */
    menu.innerHTML = menu.innerHTML.gsub('\''+$focus_id + '\'', '\'' + todo_id + '\'');
    menu.innerHTML = menu.innerHTML.gsub('_'+$focus_id + '\'', '_' + todo_id + '\'');
    menu.innerHTML = menu.innerHTML.gsub('/'+$focus_id + '/', '/' + todo_id + '/');

    pos = $('due_'+todo_id).cumulativeOffset();
    menu.setStyle({
        left:  10+pos['left'] + 'px',
        top:  15+pos['top'] + 'px'});

    $focus_id = todo_id;
  }

  /* highlight focus item */
  $('todo_'+$focus_id).addClassName('focus');


  /* show popup */
  $('until_popup_menu').show();
}

function hide_until_menu()  {
  if ($focus_id == 0) return ;

  $('until_popup_menu').hide();
  $('todo_'+$focus_id).removeClassName('focus');
}

/* alarm functions */

function show_alarm_menu(todo_id)  {
  var pos;
  var menu = $('alarm_popup_menu');

  if(todo_id  > 0 )
  {
    /* update todo id in references to this todo */
    menu.innerHTML = menu.innerHTML.gsub('\''+$focus_id + '\'', '\'' + todo_id + '\'');
    menu.innerHTML = menu.innerHTML.gsub('_'+$focus_id + '\'', '_' + todo_id + '\'');
    menu.innerHTML = menu.innerHTML.gsub('/'+$focus_id + '/', '/' + todo_id + '/');

    pos = $('alarm_'+todo_id).cumulativeOffset();
    menu.setStyle({
        left:  10+pos['left'] + 'px',
        top:  10+pos['top'] + 'px'});

    $focus_id = todo_id;
  }

  /* highlight focus item */
  $('todo_'+$focus_id).addClassName('focus');


  /* show popup */
  $('alarm_popup_menu').show();
}

function hide_alarm_menu()  {
  if ($focus_id == 0) return ;
  $('alarm_popup_menu').hide();
  $('todo_'+$focus_id).removeClassName('focus');
}

function show_due_edit_menu(todo_id) {
  $('due_'+todo_id).hide();
  $('alarm_'+todo_id).hide();
  hide_until_menu();
  $('due_edit_'+todo_id).show();
  $('todo_until_'+todo_id).focus();
}


/* commons */

function highlight_todo(todo_id)
{
  $('todo_'+todo_id).highlight({startcolor: '#ff7777', endcolor:'#ffffde'});
}


/* get more items (ajax) */

function more_items(list, category)
{
  var offset = $(list).getElementsByClassName('todo').length;

  new Ajax.Updater(list, '/todos/more?category=' + category + '&list=' + list + '&offset='+offset, 
        {asynchronous:true, evalScripts:true, insertion:'bottom', parameters:''}); 
  return false; 
}

  
