/* This script is used for remote bookmarking functionality */

// Global bookmarking parameters
var bookmarkInfo = null;

// Represent common parameters for remote command
function CommandInfo()
{
  this.PendingWindowStatus = null;
  this.ActionTimeoutPeriod = 0;
  this.ErrorsOccuredMessage = null;
  this.TimeoutExpiredMessage = null;
  this.RemoteFunctionName = null;
}

// Reperesent common parameter for bookmarking
function BookmarkInfo()
{
  this.ResultError = null;
  this.ResultOK = null;
  this.StateBookmarked = null;
  this.StateNotBookmarked = null;
}
BookmarkInfo.prototype = new CommandInfo;
 
// AddBookmark / RemoveBookmark click action
// This function is used to call remote request for bookmarking
function bookmark_click(elementId, actionId, bookmarkUrl, bookmarkedViewId, notBookmarkedViewId, bookmarkButtonId, removeBookmarkButtonId)
{
  var command = remoteCommands[elementId];
  if (!command)
  {
    if (! bookmarkInfo )
    {
      if (! CreateBookmarkInfo )
      {
        return;
      }
      else
      {
        bookmarkInfo = CreateBookmarkInfo();
      }
    }
    var element = CreateDhtmlObject(elementId);
    command = new RemoteCommand(element);
    // Remote command specific
    command.PendingWindowStatus = bookmarkInfo.PendingWindowStatus;
    command.ActionTimeoutPeriod = bookmarkInfo.ActionTimeoutPeriod;
    command.ActionCallback = bookmark_callback;
    command.ErrorsOccuredMessage = bookmarkInfo.ErrorsOccuredMessage;
    command.TimeoutExpiredMessage = bookmarkInfo.TimeoutExpiredMessage; 
    // Bookmark specific
    command.BookmarkedView = CreateDhtmlObject(bookmarkedViewId);
    command.NotBookmarkedView = CreateDhtmlObject(notBookmarkedViewId);
    command.BookmarkButton = CreateDhtmlObject(bookmarkButtonId);
    command.RemoveBookmarkButton = CreateDhtmlObject(removeBookmarkButtonId); 
    command.ResultError = bookmarkInfo.ResultError;
    command.ResultOK = bookmarkInfo.ResultOK;
    command.StateBookmarked = bookmarkInfo.StateBookmarked;
    command.StateNotBookmarked = bookmarkInfo.StateNotBookmarked;
    // Add command to array
    remoteCommands[elementId] = command;
  }
  command.DoAction( bookmarkUrl, bookmarkInfo.RemoteFunctionName, actionId);
}

// This function is called after remote request for bookmarking successfully completed
function bookmark_callback(command, params)
{
  var resultParams = params.split(",");
  var bookmarkResult = parseInt(resultParams[0]);
  var bookmarkState = parseInt(resultParams[1]);
  var removeAllowedString = parseInt(resultParams[2]);
  var errorMessage = resultParams[3];
  if (bookmarkResult == command.ResultError && command.ErrorsOccuredMessage)
  {
    if (errorMessage)
      alert(errorMessage);
    else
      alert(command.ErrorsOccuredMessage);
  }
  var isRemoveBookmarkAllowed = removeAllowedString == 1 ? true : false;
  if (bookmarkResult != command.ResultOK)
    return;
  if (bookmarkState == command.StateBookmarked)
  {
    RefreshBookmarkingView(command, true, isRemoveBookmarkAllowed);
  }
  if (bookmarkState == command.StateNotBookmarked )
  {
    RefreshBookmarkingView(command, false, isRemoveBookmarkAllowed);
  }
}

// Refresh bookmarking view according to new bookmarking state
function RefreshBookmarkingView(command, isBookmarked, isRemoveBookmarkAllowed)
{
  if (isBookmarked)
  {
    if (isRemoveBookmarkAllowed)
    {
      command.RemoveBookmarkButton.Enable();
    }
    command.BookmarkButton.Disable();
    command.BookmarkedView.SetDisplay("inline");
    command.NotBookmarkedView.SetDisplay("none");
  }
  else
  {
    command.RemoveBookmarkButton.Disable();
    command.BookmarkButton.Enable();
    command.BookmarkedView.SetDisplay("none");
    command.NotBookmarkedView.SetDisplay("inline");
  }
}


