/**************************************

  deskDo -- todolist on your desktop

  (c) 2005 Pixel-Apes.

 **************************************/


function deskDoServer( desk ) 
{
  this.desk = desk;
  desk.server = this;

  // cpaint ajax 
  this.cp = new cpaint();
  this.cp.deskDoServer = this;
  this.cp.set_transfer_mode('post');

  // using "https"
  var protocol = location.href.match(/^.+?(?=:)/);
  if (protocol == "https")
    this.cp_url = this.cp_url.replace( "http", protocol );

  //this.cp.set_debug(true);
}

deskDoServer.prototype = 
{
    contentStack : [],

    cp_url : "http://deskdo.yandex-nano.ru/ajax",

    doCheckAuth : function()
    {
      this.cp.call( this.cp_url, 'userSendData', deskDoServer_onLogin );
    },
    doLogin : function( login, pwd )
    {
      this.cp.call( this.cp_url, 'userLogin', deskDoServer_onLogin,
                    login, pwd );
    },
    doLogout : function()
    {
      this.cp.call( this.cp_url, 'userLogout', deskDoServer_onLogout );
    },
    doStore : function( login, tag, patch, start, end )
    {
      if (start !== this.undef()) return alert( "Incremental patch not implemented." );
      this.cp.call( this.cp_url, 'deskPatch', deskDoServer_onPatch,
                    login, tag, patch, 0, -1 );
    },

    doLoad : function( tag )
    {
      this.cp.call( this.cp_url, 'deskLoad', deskDoServer_onLoad, tag );
    },
    doUndo : function( tag, version )
    {
      this.cp.call( this.cp_url, 'deskUndo', deskDoServer_onUndo, tag, version );
    },


    // recognition
    recognizeDesks : function( cpaintDesks )
    {
      var desks = [];
      for( var i in cpaintDesks[0].desk )
      {
        var desk = {
                      tag       : cpaintDesks[0].desk[i].tag[0].data,
                      prettyUrl : cpaintDesks[0].desk[i].pretty_url[0].data,
                      supertag  : cpaintDesks[0].desk[i].supertag[0].data,
                      isPublic  : cpaintDesks[0].desk[i].is_public[0].data
                   };
        desks[desks.length] = desk;
      }
      return desks;
    },


    // simple function to end the class definition.
    undef : function( param ) { return param; }
}


function deskDoServer_onLogout( result, cpaint )
{
}
function deskDoServer_onLogin( result, cpaint )
{
  if (!result) alert( "onLogin failed" );
  if (result.ajaxResponse &&
      result.ajaxResponse[0].isAuth[0].data == "true")
  {
    var user = { login : result.ajaxResponse[0].login[0].data,
                 name  : result.ajaxResponse[0].name[0].data,
                 email : result.ajaxResponse[0].email[0].data,
                 isMultidesk : result.ajaxResponse[0].deskdo_multidesk[0].data
               };
    user.desks = cpaint.deskDoServer.recognizeDesks( result.ajaxResponse[0].desks );
    cpaint.deskDoServer.desk.wrapper.onLoginComplete( user );
  }
  else cpaint.deskDoServer.desk.wrapper.onLoginCancel();
}
function deskDoServer_onPatch( result, cpaint )
{
  if (!result) alert( "onPatch failed" );
  if (result.ajaxResponse && result.ajaxResponse[0])
  {
    cpaint.deskDoServer.desk.storage.onPatchComplete(
      result.ajaxResponse[0].success[0].data,
      result.ajaxResponse[0].version[0].data,
      result.ajaxResponse[0].editedLogin[0].data,
      result.ajaxResponse[0].editedDatetime[0].data
      );
  }
}

function deskDoServer_onLoad( result, cpaint )
{
  if (!result) alert( "onLoad failed" );
  if (result.ajaxResponse && result.ajaxResponse[0])
  {
    cpaint.deskDoServer.desk.storage.onLoadComplete(
      result.ajaxResponse[0].body[0].data,
      result.ajaxResponse[0].version[0].data,
      result.ajaxResponse[0].editedLogin[0].data,
      result.ajaxResponse[0].editedDatetime[0].data,
      result.ajaxResponse[0].version[0].data
      );
  }
}


function deskDoServer_onUndo( result, cpaint )
{
  if (!result) alert( "onUndo failed" );
  if (result.ajaxResponse && result.ajaxResponse[0])
  {
    // @todo: make correct undo

    cpaint.deskDoServer.desk.storage.onLoadComplete(
      result.ajaxResponse[0].body[0].data,
      result.ajaxResponse[0].version[0].data,
      result.ajaxResponse[0].editedLogin[0].data,
      result.ajaxResponse[0].editedDatetime[0].data,
      result.ajaxResponse[0].maxVersion[0].data
      );
  }
}


