sm2loaded = false;
soundManager.url = '/js/swf/';
soundManager.debugMode = false;
soundManager.onload = function() {
  sm2loaded = true;
}

$.ajaxSetup({
  cache: false
});

function l(val) {
  if (typeof(lang) != 'undefined') {
    return (lang[val] != null) ? lang[val] : val;
  }
  return val;
}

String.format = function(text)
{
  if (arguments.length <= 1)
    return text;

  var tokenCount = arguments.length - 2;
  for (var token = 0; token <= tokenCount; token++)
    text = text.replace(new RegExp("\\{" + token + "\\}", "gi"), arguments[token+1]);

  return text;
};

﻿function truncate(s, len) {
  if (s.length > len) {
    s = s.substring(0, len);
    s = s.replace(/\w+$/, '') + '...';
  }
  return s;
}

function msg(type, txt)
{
  $msg = $('#msg');
  $msg.css('top', $(document).scrollTop()+35);
  $msg.attr('class', type);
  $msg.find('span').html(txt);
  $msg.show();
  
  setTimeout(function() { $('#msg').hide(); }, 4000);
}

function dialog(title, txt, options) {
  $dlg = $('#dialog');
  $dlg.attr('title', title).html(txt);
  settings = jQuery.extend({
    modal: true,
    overlay: {
      backgroundColor: '#000',
      opacity: 0.15
    },
    buttons: {
		  Ok: function() {
				$(this).dialog('close');
			}
	  },
	  close: function () {
	    $(this).dialog('destroy');
	  }
	}, options);
  
  $('#dialog').dialog(settings);
}

jQuery.toolbar = function(toolbar, params) {
  $(toolbar+' a.dropmenu').live('click', function() {
    offset = $(this).offset();
    offset.top += $(this).outerHeight(true);
    width = $(this).outerWidth(true);
    
    $(this).next()
      .css('top', offset.top)
      .css('left', offset.left)
      .css('min-width', width)
      .toggle();
    return false;
  });
  $(toolbar+' a.btn, '+toolbar+' .dropmenu-content a').live('click', function() {
    $(toolbar+' .dropmenu-content').hide();
    
    action = $(this).get(0).hash.substring(1);
    data = null;
    if (params._init_ != null)
      data = params._init_(action, $(this));
    
    if (params[action] != null)
      params[action](data);
    return false;
  });
}

jQuery.fn.media = function() {
  return this.each(function() {
    $(this).find('span.mp3').each(function() {
      url = $(this).attr('title');
      snd = soundManager.createSound({
        id: url,
        url: url
      });
      $html = $('<img src="/gfx/ico/sound.png" />');
      $html.data('sound', snd);
      
      $html.click(function(e) {
        $(this).data('sound').play();
        e.stopPropagation();
      });      
      $(this).append($html);
    });
  });
}

jQuery.fn.pagination = function(currentPage, itemsPerPageCount, allItemCount, callback) {
  return this.each(function() {
    pageCount = parseInt((allItemCount-1) / itemsPerPageCount) + 1;
    itemsOnPageCount = itemsPerPageCount;
    if (currentPage == pageCount-1)
      itemsOnPageCount = allItemCount % itemsPerPageCount;
    
    if (itemsOnPageCount > 0) {
      nextPage = (currentPage < pageCount-2);
      prevPage = (currentPage > 1);
      lastPage = (currentPage < pageCount-1);
      firstPage = (currentPage > 0);

      s = String.format('<strong>{0}</strong> - <strong>{1}</strong> '+l('of')+' <strong>{2}</strong>', currentPage*itemsPerPageCount+1, currentPage*itemsPerPageCount+itemsOnPageCount, allItemCount);
      if (prevPage)
        s = '<a href="#p'+(currentPage-1)+'">Prev</a> ' + s;
      if (firstPage)
        s = '<a href="#p0">First</a> ' + s;
      if (nextPage)
        s = s + ' <a href="#p'+(currentPage+1)+'">Next</a>';
      if (lastPage)
        s = s + ' <a href="#p'+(pageCount-1)+'">Last</a>';
      
      s = $(s);
      s.filter('a').click(function() {
        if (callback != null)
          callback(parseInt($(this).attr('href').substring(2)));
        return false;
      });      
      return $(this).html(s);
    }
    else {
      return $(this).html('');
    } 
  });
}

jQuery.fn.folderMenu = function() {
  var select = null;
  var autoSelect = false;
  
  if (arguments.length > 0) {
    if (arguments[0] == 'val') {
      if (arguments.length > 1) {
        val = arguments[1];
        
        $folders = $(this).next().find('a');
        $folders.filter('.selected').removeClass('selected');
        
        $a = $folders.filter('[href="#'+val+'"]');
        $a.addClass('selected');
        path = $a.text();
        
        lastIndent = parseInt($a.css('padding-left'));
        for (i = $folders.index($a); i > 0; --i) {
          indent = parseInt($folders.eq(i).css('padding-left'));
          if (indent < lastIndent) {
            path = $folders.eq(i).text() + '/' + path;
            lastIndent = indent;          
          }  
        }
        if (path.substring(0, 1) != '/')
          path = '/' + path;
        $(this).find('span').text(path);
        $(this).data('folder.id', val);
        return $(this);
      }
      else {
        return $(this).data('folder.id');
      }
    }      
  }
  
  if (arguments.length > 0) {
    settings = arguments[0];
    if (settings.select != null)
      select = settings.select;
    if (settings.autoSelect != null)
      autoSelect = settings.autoSelect;
  }
  return this.each(function() {
    $(this).data('folder.id', '0');
    $(this).click(function() {
      offset = $(this).offset();
      offset.top += $(this).outerHeight(true);
      width = $(this).outerWidth(true);
      
      folderId = $(this).data('folder.id');
      $a = $(this).next()
        .css('top', offset.top)
        .css('left', offset.left)
        .css('min-width', width)
        .toggle().find('a[href="#'+folderId+'"]');
      $(this).next().scrollTop($a.position().top);
      return false;
    });
    $(this).next().click(function(e) {
      $(this).hide();
      val = $(e.target).attr('href').substring(1)
      
      if (select != null)
        select(val);
      if (autoSelect)
        $(this).prev().folderMenu('val', val); 
      return false;
    });        
    return $(this);
  });
}

function previewCard(itemId) {
  Boxy.load('/manage/qprev/'+itemId, {title: l('Quick Preview'), unloadOnHide: true, afterShow: function() {
    $('#q, #a').media();
  }}); 
}
//-*- page handlers -*-

if (page == 'manage')
{
  var $tabs;
  var documentScrollTop = 0;

  function getId(s) { return s.substring(1); }
  function getIdType(s) { return s[0]; } 
  
  function currentFolder(value) {
    if (value)
      $('#current-folder').data('folder.id', value);
    else
      return $('#current-folder').data('folder.id');
  }
  
  function changePage(pageNo) {
    listFolder(currentFolder(), pageNo);
  }
  
  var currPageNo = 0;
  function reloadCurrentFolder() {
    listFolder(currentFolder(), currPageNo);
  }
  
  function listFolder(ssid, pageNo)
  {
    if (pageNo == null)
      pageNo = 0;
    
    $('table.items td').fadeTo('normal', 0.4);
    $('.loading').show(); $('.loading img').css('top', $('#item-block').height()/2+'px');
    
    $.getJSON('/manage/ls/'+ssid+'/'+pageNo, function(json) {
      $('#current-folder').folderMenu('val', ssid);
      currPageNo = pageNo;
      $('#select-all').removeAttr('checked');
      
      var s = [];
      var i = 0;
      if (json.p != null && json.p[0] != null) {
        s[i++] = '<tr class="folder" id="f';
        s[i++] = json.p[1];
        s[i++] = '"><td>&nbsp;</td><td class="name">...</td><td>N/A</td><td>&nbsp;</td></tr>';
      }
      var length = json.f.length;
      for (var a = 0; a < length; a += 1) {
        s[i++] = '<tr class="folder';
        if (json.f[a].s != '')
          s[i++] = ' shared';
        s[i++] = '" id="f';
        s[i++] = json.f[a].i;
        s[i++] = '"><td><input type="checkbox" /></td><td class="name">';
        s[i++] = json.f[a].n;
        s[i++] = '</td><td>N/A</td><td class="action"><img alt="edit" class="act-edit" src="/gfx/ico/pencil.png" /></td></tr>';
      }
      length = json.i.length;
      for (var a = 0; a < length; a += 1) {
        s[i++] = '<tr class="item" id="i';
        s[i++] = json.i[a].i;
        s[i++] = '"><td><input type="checkbox" /></td><td class="name">';
        s[i++] = json.i[a].q;
        s[i++] = '</td><td>';
        s[i++] = json.i[a].r;
        s[i++] = '</td><td class="actions"><img alt="edit" class="act-edit" src="/gfx/ico/pencil.png" /><img alt="quick preview" class="act-qprev" src="/gfx/ico/page_white_magnify.png" /></td></tr>';
      }
      $('#items-tbody').empty().append(s.join('')).find('tr:odd').addClass('odd');
      
      $('.pagination').pagination(json.c, json.o, json.a, changePage);

      $('table.items td').fadeTo('normal', 1);
      $('.loading').hide();
    });
  }
  
  function updateFolderMenus() {
    $('.foldermenu-content').load('/manage/getflist');
  }
  
  function initTab($tab) {
    $tab.find('.foldermenu-content').html($('#main-foldermenu-content').html());
    $tab.find('.foldermenu').folderMenu({ autoSelect: true });
    $tab.find('.foldermenu').folderMenu('val', $('#current-folder').folderMenu('val'));
    $('.ui-tabs-nav a[href="'+tabName+'"]').click(function(e) {
      if ($(e.target).is('.close'))
        closeTab($tabs.find('.ui-tabs-nav a').index($(this)));
      return false;
    });
  }
  
  var lastTabIndex = 0;
  function openItemTab(itemId, tabLabel) {
    tabName = '#t'+lastTabIndex++;
    
    // TODO: check if tab exists
    
    s = '<div class="toolbar item-toolbar"> \
           <a href="#save" class="btn act-save"><span>'+l('Save')+'</span></a> \
           <a href="#saveAndNew" class="btn act-save-new"><span>'+l('Save & New')+'</span></a> \
           <a href="#saveAndClose" class="btn act-save-close"><span>'+l('Save & Close')+'</span></a> | \
           <a href="#preview" class="btn act-preview"><span>'+l('Quick Preview')+'</span></a> | \
           '+l('Folder')+': <a href="#" class="foldermenu"><span>/</span></a><div class="foldermenu-content"></div> \
        </div> \
        <div class="tab-content"> \
           <table width="100%" class="tab-form"> \
             <tr><td class="q"><strong>'+l('Question')+':</strong><br /><textarea class="editor"></textarea></td></tr> \
             <tr><td class="a"><strong>'+l('Answer')+':</strong><br /><textarea class="editor"></textarea></td></tr> \
          </table> \
         </div>';
        
    if (!tabLabel)
      tabLabel = '...';
    
    $tabs.tabs('add', tabName, tabLabel);
    $tab = $(tabName).append(s);
    
    $tab.find('.editor').markItUp(markitupSettings);
    $tab.find('.editor').keydown(function(e) {
      keyCode = (window.event) ? e.keyCode : e.which;
      if (keyCode == 9) {
        if ($(e.target).parents('td').is('.q'))
          $tab.find('.a .editor').focus();
        else
          $tab.find('.q .editor').focus();
        e.preventDefault();
      }
      else if (keyCode == 83 && e.ctrlKey && e.shiftKey && !e.altKey) {
        $tab.find('.act-save-new').click();
        e.preventDefault();
      }
      else if (keyCode == 83 && e.ctrlKey && !e.altKey) {
        $tab.find('.act-save').click();
        e.preventDefault();
      }
    });
    
    $tab.data('type', 'card');
    $tab.data('id', null);
    initTab($tab);
        
    if (itemId != null) {
      $.getJSON('/manage/get/'+itemId, function(json) {
          $tab.data('id', json.i);
          $tab.find('.q textarea.editor').text(json.q).focus();
          $tab.find('.a textarea.editor').text(json.a);
          changeTabId($tab.get(0).id, 'I'+json.i);
      });
    }
  }
  
  function openFolderTab(folderId, tabLabel) {
    tabName = '#t'+lastTabIndex++;
    
    s = '<div class="toolbar folder-toolbar"> \
           <a href="#save" class="btn act-save"><span>'+l('Save')+'</span></a> \
           <a href="#saveAndClose" class="btn act-save-close"><span>'+l('Save & Close')+'</span></a> <span class="sep">|</span> \
           '+l('Folder')+': <a href="#" class="foldermenu"><span>/</span></a><div class="foldermenu-content"></div> \
        </div> \
        <div class="tab-content"> \
          <form> \
          <table width="100%" class="tab-form"> \
            <tr><td class="tf">'+l('Folder name')+':</td><td><input class="folder-name txt" /></td></tr> \
            <tr><td class="tf">'+l('Description')+':</td><td><textarea class="folder-description txt" /></td></tr> \
            <tr><td class="sep" colspan="2">&nbsp;</td></tr> \
            <tr><td class="tf">'+l('Share')+':</td><td><label><input name="folder-share" checked="checked" value="" type="radio" /> '+l('do not share')+'</label> <label><input name="folder-share" value="everyone" type="radio" /> '+l('to everyone')+'</label> <label><input name="folder-share" value="friends" type="radio" disabled="disabled" /> '+l('to friends')+'</label> <label><input name="folder-share" value="users" type="radio" disabled="disabled" /> '+l('to users on the list below')+'</label></td></tr> \
            <tr><td class="tf">'+l('Share as')+':</td><td><input disabled="disabled" class="folder-share-name txt" /></td></tr> \
          </table> \
          </form> \
        </div>';
      
    if (!tabLabel)
      tabLabel = '...';
    
    $tabs.tabs('add', tabName, tabLabel);
    $tab = $(tabName).append(s);
    $tab.data('type', 'folder');
    $tab.data('id', null);
    $tab.find('input[name=folder-share]').change(function() {
      val = $(this).val();
      if (val == '')
        $tab.find('.folder-share-name').attr('disabled', 'disabled');
      else
        $tab.find('.folder-share-name').removeAttr('disabled');
    });
    initTab($tab);
    
    if (folderId != null) {
      $.getJSON('/manage/getf/'+folderId, function(json) {
        $tab.data('id', json.i);
        $tab.find('.folder-name').val(json.n);
        $tab.find('.folder-description').val(json.d);
        $tab.find('.folder-share-name').val(json.m);
        $tab.find('input[name=folder-share]').val([json.s]);
      });
    }
  }
  
  function closeTab(index) {
    if (index == null)
      index = $tabs.data('selected.tabs');
    if ($tabs.data('selected.tabs') == index)  
      $tabs.tabs('select', 0); 
    $tabs.tabs('remove', index);
  }
  
  function changeTabId(oldName, newName) {
    $('a[href="#'+oldName+'"]').attr('href', '#'+newName);
    return $('#'+oldName).attr('id', newName);
  }
  function renameTab(tabId, tabLabel) {
    return $('a[href="#'+tabId+'"] span:not(.close)').text(tabLabel);
  }
  function getTabIdByIndex(index) {
    return $tabs.find('.ui-tabs-nav a').eq(index)[0].hash.substring(1);
  }
  function getTabIndexById(tabId) {
    $links = $tabs.find('.ui-tabs-nav a')
    return $links.index($links.filter('[href="#'+tabId+'"]'));    
  }
  
  function saveItemTab(tabId, onAfterSave) {
    $tab = $('#'+tabId);
    itemId = $tab.data('id'); 
    
    newLabel = $tab.find('.q textarea').val().split('\n')[0];
    $.ajax({
      url: '/manage/save',
      type: 'POST',
      data: {id: itemId, q: $tab.find('.q textarea').val(), a: $tab.find('.a textarea').val(), f: $tab.find('.foldermenu').data('folder.id')},
      success: function(data) {
        reloadCurrentFolder();
        msg('ok', l('Card saved.'));
        
        if (onAfterSave == 'new') {
          $tab.find('.q textarea').val('').focus();
          $tab.find('.a textarea').val('');
          $tab.data('id', null);
          renameTab(tabId, '...');
          changeTabId(tabId, 't'+lastTabIndex++);
        } else if (onAfterSave == 'close') {
          closeTab(getTabIndexById(tabId));
        } else {
          $tab.data('id', data);
          renameTab(tabId, getLabel(newLabel));
        }
      }     
    });
  }
  
  function saveFolderTab(tabId, onAfterSave) {
    $tab = $('#'+tabId);
    folderId = $tab.data('id');
    
    folder = {
      name: $tab.find('.folder-name').val(),
      parentFolderId: $tab.find('.foldermenu').data('folder.id'),
      description: $tab.find('.folder-description').val(),
      shareType: $tab.find('input[name=folder-share]:checked').val(),
      shareName: $tab.find('.folder-share-name').val()     
    };
    $.post('/manage/savef', {id: folderId, n: folder.name, f: folder.parentFolderId, d: folder.description, s: folder.shareType, m: folder.shareName}, function(data) {
      msg('ok', l('Folder saved.'));
      updateFolderMenus();
      
      if (currentFolder() == folder.parentFolderId)
        reloadCurrentFolder();
        
      if (onAfterSave == 'close')
        closeTab(getTabIndexById(tabId));
      else
        renameTab(tabId, getLabel(folder.name));
    });
  }
  
  function previewItemTab(tabId) {
    $tab = $('#'+tabId);
    q = $tab.find('.q .editor').val();
    a = $tab.find('.a .editor').val();
    
    $.post('/manage/qprev', {q: q, a: a}, function(data) {
      html = $(data).media();
      new Boxy(html, { title: l('Quick Preview'), closeable: true });
    });
  }
  
  function folderClick() {
    listFolder(getId($(this).parent().attr('id')));
  } 
  
  function itemClick() {
    itemId = getId($(this).parents('tr').attr('id'));
    openItemTab(itemId, getLabel($(this).text()));
    return false;
  }
  
  function getLabel(text) {
    return truncate(text, 16);
  }  
  function getSelectedRows() {
    return $('#items-tbody input:checked').parent().parent();
  }
  
  function getRowIds($rows) {
    rows = [];
    $rows.each(function() {
      rows.push($(this).get(0).id);
    });
    return rows;
  }
  
  var moveToBoxy = null;
  $(document).ready(function() {
    $tabs = $('#tabs').tabs({
      tabTemplate: '<li><span class="r"><a href="#{href}"><span>#{label}</span><span class="close"></span></a></span></li>',
      add: function(e, ui) {
        $tabs.tabs('select', ui.panel.id);
      },
      select: function(e, ui) {
        if ($tabs.data('selected.tabs') <= 0) {
          documentScrollTop = $(document).scrollTop();
          $(document).scrollTop(0);
        }
      },
      show: function(e, ui) {
        if (ui.panel.id != 'cards')
          $(ui.panel).find('.editor:first').focus();
        else {
          $(document).scrollTop(documentScrollTop);
        }
      }
    });
    
    $('table.items tr.folder td.name').live('click', folderClick);
    $('table.items tr.folder img.act-edit').live('click', function() {
      $row = $(this).parents('tr');
      folderId = getId($row.attr('id'));
      folderName = $row.find('td.name').text();
      openFolderTab(folderId, truncate(folderName, 16), folderName);
    });
    $('table.items tr.item td.name, table.items tr.item img.act-edit').live('click', itemClick);
    $('table.items tr.item img.act-qprev').live('click', function() {
      itemId = getId($(this).parents('tr').attr('id'));
      previewCard(itemId);
      return false;
    });

    
    moveToBoxy = new Boxy('#moveto-dialog', {show: false, title: l('Move To')});
    $.toolbar('.list-toolbar', {
      newItem: function() { openItemTab(null); },
      newFolder: function() { openFolderTab(null); },
      'delete': function() {
        $items = getSelectedRows();
        if ($items.length > 0) {
          if (confirm(l('Do you want to delete selected items?'))) {
            $.post('/manage/rm', { items: getRowIds($items).join(',') }, function(data) {
              reloadCurrentFolder();
              updateFolderMenus();
            });
          }
        } else {
          msg('warning', l('No items selected.'));
        }
      },
      moveTo: function() {
        $('#moveto-content').html($('#main-foldermenu-content').html()).find('a').click(function() {
          moveToBoxy.hide();

          folderId = $(this).attr('href').substring(1);
          if (folderId == currentFolder()) {
            msg('warning', l('Cannot move to same folder.'));
            return false;           
          }
          $items = getSelectedRows();
          $.post('/manage/moveto', { folder: folderId, items: getRowIds($items).join(',') }, function(data) {
            reloadCurrentFolder();
            updateFolderMenus();
            if (data == '1') {
              msg('ok', l('Items moved.'));
            }
          });
          return false;
        });
        $items = getSelectedRows();
        if ($items.length == 0) {
          msg('warning', l('No items selected.'));
          return;
        }
        moveToBoxy.show();        
      }
    });
    $.toolbar('.item-toolbar', {
      _init_: function(action, item) {
        tabId = $(item).parents('.ui-tabs-panel').attr('id');
        return {
          tabId: tabId
        };
      },
      save: function(data) { saveItemTab(data.tabId); },
      saveAndNew: function(data) { saveItemTab(data.tabId, 'new');  },
      saveAndClose: function(data) { saveItemTab(data.tabId, 'close'); },
      preview: function(data) { previewItemTab(data.tabId); } 
    });
    $.toolbar('.folder-toolbar', {
      _init_: function(action, item) {
        tabId = $(item).parents('.ui-tabs-panel').attr('id');
        return {
          tabId: tabId,
          itemId: getId(tabId)         
        };
      },
      save: function(data) { saveFolderTab(data.tabId); },
      saveAndClose: function(data) { saveFolderTab(data.tabId, 'close'); }
    });
    $('#current-folder').folderMenu({
      select: function(folderId) {
        listFolder(folderId);
      }
    });
    $('#select-all').click(function() {
      $checkboxes = $('#items-tbody :checkbox');
      if ($(this).is(':checked'))
        $checkboxes.attr('checked', 'checked');
      else
        $checkboxes.removeAttr('checked');
    });
    $('#msg').click(function() { $(this).hide(); });
    listFolder('0');
  });
}
else if (page == 'study') {
  var itemid = 0;
  var finaldrill = 0;
  var blockHotkeys = false;
  
  function toggleAnswer() {
    if (blockHotkeys)
      return;
    
    if ($('#a').text() == '')
      return;
    
    $a = $('#a');
    if (!$a.is(':visible')) autoPlay('#a');

    ($a.is(':visible')) ? $('#show-answer').removeClass('checked') : $('#show-answer').addClass('checked');
    $a = $a.slideToggle('fast');
  }
  
  function setFinalDrill(state) {
    if (blockHotkeys)
      return;
    
    (state) ? $('#final-drill').addClass('checked') : $('#final-drill').removeClass('checked');
    finaldrill = (state) ? 1 : 0;
  }  

  function autoPlay(item) {
    $(item).find('span.mp3.autoplay img').each(function() {
      $(this).data('sound').play();
    });  
  }

  function next(grade, reload)
  {
    if (blockHotkeys || (grade > 0 && $('#a').text() != '' && $('#a').is(':hidden')))
      return;
    
    $('#a').hide();
    $('#q').fadeTo('fast', 0);
    $('#show-answer').removeClass('checked');
    
    itemData = {'item_id': itemid, 'grade': grade, 'finaldrill': finaldrill?1:0};
    if (reload == 1)
      itemData['reload'] = 't';
    
    $.ajax({
      url: '/study/next',
      type: 'POST',
      dataType: 'json',
      data: itemData,
      success: function(json){
        if (json.i != 0) {
          itemid = json.i;
          $('#q').html(json.q).media();
          $('#a').html(json.a).media();
          $('#folder').html(json.c);
          $('#itemsToReviewCount').html(String(json.s[2]));
          $('#itemsToLearnCount').html(String(json.s[1]));
          $('#allItemCount').html(String(json.s[0]));
          $('#itemsForFinalDrill').html(String(json.s[3]));
          $('#q').fadeTo('fast', 1);
          (json.r > 0) ? $('#folder').removeClass('learning') : $('#folder').addClass('learning');
          finaldrill = json.f;
          (finaldrill) ? $('#final-drill').addClass('checked') : $('#final-drill').removeClass('checked');
          if (json.a != '')
            $('#answer').show();
          else
            $('#answer').hide();
          autoPlay('#q');       
        }
        else {
          Boxy.alert(l('There are no more cards you can study. Please go to <em>Mangage</em> page and add new ones.'), function() {
            location.href = '/manage';
          }, { title: l('End of learning process') }); 
        }  
      }
    });
    return false;
  }
  
  var boxy = null;
  function editItem() {
    $.getJSON('/manage/get/'+itemid, function(json) {
      $('.q textarea.editor').val(json.q);
      $('.a textarea.editor').val(json.a);
      blockHotkeys = true;
      boxy.show();
    });
  }
  function saveItem() {
    $.post('/manage/save', { id: itemid, q: $('.q textarea').val(), a: $('.a textarea').val() }, function(data) {
      blockHotkeys = false;
      next(0, 1);
      boxy.hide();
    }); 
  }

  $(document).ready(function() {
    //$('#footer').hide();

    $(document)
      .bind('keydown', 'Space', function() { toggleAnswer(); })
      .bind('keydown', 'f', function() { setFinalDrill(!finaldrill); })

      .bind('keydown', 'j', function() { next(1); })
      .bind('keydown', 'l', function() { next(3); })
      .bind('keydown', 'k', function() { next(2); })
      .bind('keydown', 'u', function() { next(4); })
      .bind('keydown', 'i', function() { next(5); })
      .bind('keydown', 'o', function() { next(6); })

      .bind('keydown', '1', function() { next(1); })
      .bind('keydown', '2', function() { next(2); })
      .bind('keydown', '3', function() { next(3); })
      .bind('keydown', '4', function() { next(4); })
      .bind('keydown', '5', function() { next(5); })
      .bind('keydown', '6', function() { next(6); })
      
      .bind('keydown', 'r', function() { next(0); })
      .bind('keydown', 'q', function() { next(0, 1); });
      
    $.toolbar('#toolbar', {
      showAnswer: function() { toggleAnswer(); },
      finalDrill: function() { setFinalDrill(!finaldrill); },
      grade1: function() { next(1); },
      grade2: function() { next(2); },
      grade3: function() { next(3); },
      grade4: function() { next(4); },
      grade5: function() { next(5); },
      grade6: function() { next(6); },
      edit:   function() { editItem(); }
    });
    $('#question, #answer').click(function() { toggleAnswer(); });
    $('.editor').markItUp(markitupSettings);
    $('#quickedit button').click(function() { saveItem(); });
    boxy = new Boxy('#quickedit', {title: l('Quick Edit'), show: false, closeText: 'X', afterHide: function() { blockHotkeys = false; }});
    
    next(0);
  });
}
else if (page == 'home') {
  $(document).ready(function() {
    $('table.items img.act-qprev').live('click', function() {
      itemId = $(this).parents('tr').attr('id');
      previewCard(itemId);
      return false;
    });
  });  
}
else if (page == 'signup') {
  $(document).ready(function() {
    $('form.std p span.error').parents('p').addClass('error');
  });
}
$(document).ajaxError(function(event, request, settings) {
  msg('error', l('Ups..., an error has occoured.'));
});


