Kolter / Carga de paginas asíncronas

// ==UserScript==
// @name         Carga de paginas asíncronas 
// @namespace    http://plataformalol.tk/demigrantScript/
// @version      0.2
// @description  Script para mejorar la experiencia en forocoches que permite la carga asíncrona de las páginas de los temas de forooches sin tener que esperar a recargar la página
// @author       Kolter
// @include      http://www.forocoches.com*
// @include      http://forocoches.com*
// @grant           GM_log
// @grant           GM_getValue
// @grant           GM_setValue
// @grant           GM_deleteValue
// @grant           GM_xmlhttpRequest
// @grant           GM_registerMenuCommand
// @grant           GM_addStyle
// @grant           GM_getResourceText
// @grant           GM_getResourceURL
// @grant           GM_getMetadata
// @resource cssX http://plataformalol.tk/resources/forocoches.ajax.css
// @require      http://code.jquery.com/jquery-latest.js
// @require   http://plataformalol.tk/resources/uri/src/URI.js
// ==/UserScript==
var carme =  GM_getResourceText ("cssX");
GM_addStyle (carme);
if (location.href.indexOf('?p=')!=-1){
    var pepe = $("a[class*='mfont']").attr('href');   
    pepe = new URI (pepe);
    pepe = pepe.removeQuery ('page');
    pepe = "http://www.forocoches.com/foro/"+pepe.toString();
    urlentera= new URI(pepe);
    paginaactual = URI.parseQuery(pepe);
    urlforocoches =new URI(pepe);
}else{
urlforocoches = new URI (location.href);  
urlentera= new URI(location.href);
paginaactual =URI.parseQuery(location.href);
}
urlnativa = urlentera;
var paginaactual = Number(paginaactual.page);
urlforocoches =urlforocoches.hostname().toString();
urlforocoches = urlforocoches+"/foro/";

if (isNaN(paginaactual)){
    paginaactual=1;
}
var limit=0;
var arrayPaginas =[];
if (urlentera.toString().indexOf('showthread')!=-1){
$("td[class*='vbmenu_control']").parent('tr').parent('tbody').parent("table[class*='tborder']").each(function(){
    if (limit==0 || limit==2){
		paginasTotal = $(this).children('tbody').children('tr').children('td').html();
		arrayPaginas.push($(this));
    }
    ++limit;
})

var reg = /Pág (\w+) de (\w+)/g;
var match = paginasTotal.replace(reg, "$2");
nTotalPaginas=Number(match);
    $("<div style='position:fixed;bottom:0;opacity:0.8;right:12%;background-color:#FFF;padding:5px;border:1px solid #777' class='paginacion'></div>").appendTo('body');
$('.paginacion').append('<ul>');
paginacion();

$('.pagina').click(function(e){
	e.preventDefault();
	var thisurl = $(this).attr('href');
	$("html, body").animate({ scrollTop: 0 }, "slow");
	loadPage(thisurl); 
    
})

function obtenerPaginas (n,v){
    result = false;

    if ((n>v && n<(v+5)) || n==v || (n<v && n>(v-5)) || n==nTotalPaginas || n==1){
        result = true;
        }

    return result;
}
function obtenerPaginaPorUrl(url){
pagina = URI.parseQuery(url);
    return pagina.page;
}
function loadPage(thishref){
    $('#posts').css('opacity','0.5');  
    $('.paginacion').children('ul').find('strong').each(function(){
     $(this).parent('li').css('background-color',"#FFF");   
     $(this).contents().unwrap(); 
    })
    var paginaNueva = obtenerPaginaPorUrl(thishref);
    if (typeof paginaNueva == 'undefined'){
     paginaNueva = 1;   
    }
    $("#pagina"+paginaNueva).parent('li').css('background-color',"#DDD");
     $("#pagina"+paginaNueva).wrap('<strong></strong>');
    $.get(thishref,function(data){
    history.pushState({}, '', thishref);
    var tempDom = $('<output>').append($.parseHTML(data));
    var appContainer = $('#posts', tempDom).each(function(){
    $('#posts').html($(this).html());
        })  
    $('#posts').css('opacity','1'); 
        }) 
         paginaactual=  $("#pagina"+paginaNueva).data('pagina');
   urlentera= urlentera.setSearch('page',paginaactual);
    
    nuevaPaginacion();
}

$(document).ready(function(){
    if($('#posts').length){
        $('#posts').before("<a href='#' style='display:none;position:fixed;bottom:5px;right:80px' id='scrollTop'><img src='http://php.net/images/to-top@2x.png'  width='48' /></a><a style='position:fixed;bottom:5px;border:1px solid #000;right:25px;opacity:0.8;padding:5px; border-radius:15px;background-color: #FFF; font-family: Fjalla One, sans-serif;' href='#' id='recargaPagina'><img width='32' src='http://png-3.findicons.com/files/icons/2671/jigsoar/64/64_refresh.png' /></a>");  
    }
    
    $(window).scroll(function (event) {
    var scroll = $(window).scrollTop();
        if (scroll>500){
         $('#scrollTop').show();   
        }else{
         $('#scrollTop').hide();        
        }
    })
    $('#scrollTop').click(function(){
        $("html, body").animate({ scrollTop: 0 }, "slow"); 
    })
    $("#goPagina").click(function(e){
      e.preventDefault();
      var paginaIr = $("#irPagina").val();
 
        if (Number(paginaIr)>0 && Number(paginaIr)<68){
            var urlentera2 = urlentera;
           var thisUrl = urlentera2.setQuery('page',paginaIr).toString();
            loadPage(thisUrl);
        }
    })
 $('#recargaPagina').click(function(e){
    e.preventDefault();
  loadPage(location.href);  
})      })  


function paginacion(){

var paginaAnterior =paginaactual-1;
var paginaSiguiente = paginaactual+1;
    var urlentera2= urlentera;
     $('.paginacion').children('ul').html('');
 $('.paginacion').children('ul').append("<li><a class='pagina'  data-pagina='"+paginaAnterior+"' id='prevPagina' href='"+urlentera2.setSearch('page',paginaAnterior).toString()+"'><</a></li>");
for(var i=1;i<(Number(match)+1);i++){
    var htmlpaginas =$("<li><a class='pagina' id='pagina"+i+"' data-pagina='"+i+"' href='"+urlentera2.setSearch('page',i).toString()+"'>"+i+"</a></li>");
    if(i==paginaactual){
    	htmlpaginas.children('a').wrap('<strong></strong>');
    	htmlpaginas.css('background-color','#DDD');                   
    }
    if (obtenerPaginas(i,paginaactual)){
     htmlpaginas.css('display','inline');
    $('.paginacion').children('ul').append(htmlpaginas);
    }else{
      htmlpaginas.css('display','none');
    $('.paginacion').children('ul').append(htmlpaginas);   
    }
}
$('.paginacion').children('ul').append("<li><a class='pagina'  data-pagina='"+paginaSiguiente+"' id='nextPagina' href='"+urlentera2.setSearch('page',paginaSiguiente).toString()+"'>></a></li>");
$('.paginacion').children('ul').append('<li style="border:0px"><input type="text" id="irPagina" style="margin-left:1px" size="1" /><input type="button" value="ir" id="goPagina" /></li>');
}


function nuevaPaginacion(){

var paginaAnterior =paginaactual-1;
var paginaSiguiente = paginaactual+1;
var urlentera2 = urlentera;
for(var i=1;i<(Number(match)+1);i++){
    if (obtenerPaginas(i,paginaactual)){
     $('#pagina'+i).parent('li').css('display','inline');
    }else{
      $('#pagina'+i).parent('li').css('display','none');
    }
}
    var urlNext = urlentera2.setSearch('page',paginaSiguiente).toString();
    var urlPrev = urlentera2.setSearch('page',paginaAnterior).toString();
   $('#nextPagina').attr('href',urlNext);
   $('#prevPagina').attr('href',urlPrev);
       if (paginaactual==nTotalPaginas){
        $('#nextPagina').parent('li').css('display','none');
    }else{
    $('#nextPagina').parent('li').css('display','inline');    
    }
    if (paginaactual==1){
        $('#prevPagina').parent('li').css('display','none');
    }else{
    $('#prevPagina').parent('li').css('display','inline');  
    }

}
 }