// Variables
var ESCAPE = 27;
var ENTER = 13;
var TAB = 9;
var coordinates = ToolMan.coordinates();

function join( name, isDoubleClick )
{
  var view = $( name + "View" );
  view.editor = $( name + "Edit" );

  var showEditor = function( event ) {
    event = fixEvent( event );

    var view = this;
    var editor = view.editor;

    if( !editor )
    {
      return true;
    }

    if( editor.currentView != null )
    {
      editor.blur();
    }

    editor.currentView = view;

    var topLeft = coordinates.topLeftOffset( view );
    topLeft.reposition(editor);
    
    if( editor.nodeName == 'TEXTAREA' )
    {
      editor.style['width'] = view.offsetWidth + "px";
      editor.style['height'] = view.offsetHeight + "px";
    }
    
    editor.value = view.innerHTML;
    editor.style['visibility'] = 'visible';
    view.style['visibility'] = 'hidden';
    editor.focus();
    return false;
  }

  if( isDoubleClick )
  {
    view.ondblclick = showEditor;
  }
  else
  {
    view.onclick = showEditor;
  }

  view.editor.onblur = function( event ) {
    event = fixEvent( event );

    var editor = event.target;
    var view = editor.currentView;

    if( !editor.abandonChanges )
    {
      if( editor.value == "" )
        editor.value = "(empty)";
      view.innerHTML = editor.value;
      // DB update
      var hiddenfield = $( name + "Id" );
      if( hiddenfield.value != "" )
      {
        save( 'id=' + hiddenfield.value + '&title=' + editor.value + '&model=' + $('model').value );
      }
    }
    
    editor.abandonChanges = false;
    editor.style['visibility'] = 'hidden';
    editor.value = ''; // fixes firefox 1.0 bug
    view.style['visibility'] = 'visible';
    editor.currentView = null;

    return true;
  }

  view.editor.onkeydown = function( event ) {
    event = fixEvent( event );

    var editor = event.target;
    
    if( event.keyCode == TAB || event.keyCode == ENTER )
    {
      editor.blur();
      return false;
    }
  }

  view.editor.onkeyup = function( event ) {
    event = fixEvent( event );

    var editor = event.target;
    
    if( event.keyCode == ESCAPE )
    {
      editor.abandonChanges = true;
      editor.blur();
      return false;
    }
    else if( event.keyCode == TAB || event.keyCode == ENTER )
    {
      return false;
    }
    else
    {
      return true;
    }
  }

  function fixEvent( event )
  {
    if( !event )
    {
      event = window.event;
    }

    if( event.target )
    {
      if( event.target.nodeType == 3 )
      {
        event.target = event.target.parentNode;
      }
    }
    else if( event.srcElement )
    {
      event.target = event.srcElement;
    }

    return event;
  }
}


function edit( name, isDoubleClick )
{
  var view = $( name + "View" );
  view.editor = $( name + "Edit" );
  var editor = view.editor;

  if( !editor )
  {
    return true;
  }

  if( editor.currentView != null )
  {
    editor.blur();
  }

  editor.currentView = view;

  var topLeft = coordinates.topLeftOffset( view );
  topLeft.reposition(editor);
    
  if( editor.nodeName == 'TEXTAREA' )
  {
    editor.style['width'] = view.offsetWidth + "px";
    editor.style['height'] = view.offsetHeight + "px";
  }
  
  editor.value = view.innerHTML;
  editor.style['visibility'] = 'visible';
  view.style['visibility'] = 'hidden';
  editor.focus();
  return false;

}


function save( var_string )
{
  var opt = {
      // Use POST
      method: 'post',
      // Send this lovely data
      postBody: var_string,
      // Handle successful response
      onSuccess: function( t ) {
        var msg = t.responseText;
        var pos = msg.indexOf('ERROR');

        if( pos != -1 )
        {
          var newmsg = msg.substr( (pos+5), msg.length );
          $( 'statusmessage' ).className = 'error';
          $( 'statusmessage' ).innerHTML = '<strong>Error:</strong><br/>' + newmsg;
        }
        else
        {
          //$( 'statusmessage' ).className = 'success';
          //$( 'statusmessage' ).innerHTML = '<strong>Success:</strong><br/>' + t.responseText;
        }
      },
      // Handle 404
      //on404: function( t ) {
      //  alert( 'Error 404: location "' + t.statusText + '" was not found.' );
      //},
      // Handle other errors
      onFailure: function( t ) {
        $( 'statusmessage' ).className = 'error';
        $( 'statusmessage' ).innerHTML = '<strong>Error:</strong><br/>' + t.status + ' -- ' + t.statusText;
      }
  }
  
  new Ajax.Request( '/admin/updater.php', opt );
}
