// copyright Proofile.org

// global variables
var paginations = new Array('Openid', 'Profile');
var requestId = new Array();
var paginationPage = new Array();
var paginationCount = new Array();
var paginationHalf = new Array();
var paginationTotal = new Array();
var paginationElPerPage = new Array();
var paginationUrl = new Array();
for (var item in paginations) {
  requestId[paginations[item]] = 0;
  paginationPage[paginations[item]] = 0;
  paginationCount[paginations[item]] = 0;
  paginationHalf[paginations[item]] = 0;
  paginationTotal[paginations[item]] = 0;
  paginationElPerPage[paginations[item]] = 0;
  paginationUrl[paginations[item]] = '';
}

$(document).ready(function () {
  document.getElementById('searchField').focus();
  $('.searchresult').hover(
    function () {$(this).addClass("searchresulthover"); },
    function () {$(this).removeClass("searchresulthover"); });
  
  if ($('#paginationOpenid .pagiPage0').length > 0)
    bindPagination('Openid');
  if ($('#paginationProfile .pagiPage0').length > 0)
    bindPagination('Profile');
  
});

// bind the pagination hooks
function bindPagination(name) {
  paginationCount[name] = parseInt($('#pagination'+name+' .scrollNext').prev().text());
  paginationHalf[name] = parseInt($('#pagination'+name+' .paginationHalf').text());
  paginationPage[name] = parseInt($('#pagination'+name+' .paginationActive').text());
  paginationTotal[name] = parseInt($('#paginationTotal'+name).text());
  paginationElPerPage[name] = -(eval($('#paginationDescription'+name).text()))+1;
  var url = $('#pagination'+name+' .pagiPage0').attr('href');
  paginationUrl[name] = url.substr(0, (url.length)-1);

  // bind go left
  $('#pagination'+name+' .scrollPrev').bind('click', function(e) {
    e.preventDefault();
    if (paginationPage[name] > 0)
      setPagination(name, paginationPage[name]-1);
  });
  // bind go right
  $('#pagination'+name+' .scrollNext').bind('click', function(e) {
    e.preventDefault();
    if (paginationPage[name] < paginationCount[name])
      setPagination(name, paginationPage[name]+1);
  });
  // bind go to element
  $('#pagination'+name+' .paginationElement').bind('click', function(e) {
    e.preventDefault();
    setPagination(name, parseInt($(this).text())-1);
  });
}

function setPagination(name, i) {
  if (i < 0)
    i = 0;
  else if (i >= paginationCount[name])
    i = paginationCount[name]-1;
  if (i == paginationPage[name])
    return;
  if (paginationPage[name] == 0)
    $('#pagination'+name+' .scrollPrev').removeClass('disabled');
  else if (paginationPage[name] == paginationCount[name]-1)
    $('#pagination'+name+' .scrollNext').removeClass('disabled');
  if (i == 0)
    $('#pagination'+name+' .scrollPrev').addClass('disabled');
  else if (i == paginationCount[name]-1)
    $('#pagination'+name+' .scrollNext').addClass('disabled');
    
  $('#pagination'+name+' .pagiPage'+paginationPage[name]).removeClass('currentPagination');
  paginationPage[name] = i;
  
  // write pagination again
  var inner = '';
  var half = paginationHalf[name];
  var count = paginationCount[name];
  var active_page = i+1;
  if (active_page - paginationHalf[name] > 2)
    inner += ' ...';
  for (var j = Math.max(2, Math.min(active_page - half, count-2*half-1)); j <= Math.min(Math.max(active_page+half, 2*half+2), count-1); j++) {
    if (j == active_page)
      inner += '<a href="'+paginationUrl[name]+(j-1)+'" class="paginationElement pagiPage'+(j-1)+' currentPagination">'+j+'</a>';
    else
      inner += '<a href="'+paginationUrl[name]+(j-1)+'" class="paginationElement pagiPage'+(j-1)+'">'+j+'</a>';
  }
  if (active_page + paginationHalf[name] < paginationCount[name]-1)
    inner += ' ... ';
  
  paginationCount[name];
  $('#pagination'+name+' .paginationInner').html(inner);
  // bind go to element
  $('#pagination'+name+' .paginationElement').bind('click', function(e) {
    e.preventDefault();
    setPagination(name, parseInt($(this).text())-1);
  });  
  
  $('#pagination'+name+' .pagiPage'+i).addClass('currentPagination');
  // description
  var x = i*paginationElPerPage[name];
  $('#paginationDescription'+name).text((x+1)+'-'+Math.min((x+paginationElPerPage[name]), paginationTotal[name]));
  
  // now finally do AJAX request
  requestId[name]++;
  $('#pagination'+name+' .loader').show();
  $.get('http://'+(document.domain)+'/getapi/search/'+(name).toLowerCase()+'/html', 
    { requestId: requestId[name],
      query: 'a', 
      page: i,
      entriesperpage: paginationElPerPage[name] }, 
    function (page) {
      // only display the request if it was the last
      if (parseInt($(page, '.requestId').html()) == requestId[name]) {
        $('#pagination'+name+' .loader').hide();
        $('#searchresultpage'+name).html(page);
      }
    }
  );
}
