Indisponivel

By edu78.poa Last update Sep 2, 2007 — Installed 168 times.
// ==UserScript==
// @name          Indisponivel
// @description	  Interface Alternativa
// @include       http://disponivel.com/*
// @include        http://*.disponivel.com/*
// ==/UserScript==

const StringMagica = 'levinopsid';
const AutoNavegaTimeout = 3000;
const NomeAutoNav = 'chkAutoNav';

/*
	ESTRUTURA DE UMA PÁGINA DE PERFIL
	
	http://somos2safados.disponivel.com/
		<frame name="head" 
			src="http://disponivel.com/relacionamento/headf.asp"
			>
			
		<frame name="conteudo"
			src="http://disponivel.com/relacionamento/perfil.asp?nome=somos2safados&codigo="
			>
			
			<iframe name="album"
				src="http://disponivel.com/relacionamento/album.asp?end=http://1.disponivel.com/serv/serv20/img/p735627-395969.jpg"
				>
			
			<!-- FOTOS -->
			<a target="album"
				href="http://disponivel.com/relacionamento/album.asp?end=http://1.disponivel.com/serv/serv20/img/p735627-395969.jpg"
				> Foto Principal </a>
			<a target="FrmFotos"
				href="http://disponivel.com/relacionamento/perfilnfotos1.asp?conta=1&codigo=395969&album=1&apelido=Somos2Safados"
				> Ver + </a>
			<iframe name="FrmFotos"
				src="http://disponivel.com/relacionamento/perfilnfotos1.asp?codigo=395969&apelido=Somos2Safados&conta=1&principal=http://1.disponivel.com/serv/serv20/img/p735627-395969.jpg"
				>
				
				<a target="album"
					href="http://disponivel.com/relacionamento/album.asp?codap=395969&foton=960571&numero=433&apelido=Somos2Safados&t=n&album=s&arqu=433872831-395969.jpg&servidor=21"
					> <img/> </a>
				...
				
				# Ver + #
				1: href = http://disponivel.com/relacionamento/perfilnfotos1.asp?intPagina=1&codigo=395969&conta=&album=1&apelido=Somos2Safados
				2: href = http://disponivel.com/relacionamento/perfilnfotos1.asp?intPagina=2&codigo=395969&conta=&album=1&apelido=Somos2Safados
				...
			
			<!-- VÍDEOS -->
			<a target="FrmVideos"
				href="http://disponivel.com/relacionamento/perfilnvideos1.asp?codigo1=395969&apelido1=Somos2Safados&conta=1"
				> Ver + </a>
			<iframe name="FrmVideos"
				src="http://disponivel.com/relacionamento/perfilnvideos1.asp?codigo=395969&apelido=Somos2Safados&conta=1"
				>
				
				<a target="album"
					href="http://disponivel.com/relacionamento/video.asp?codap=395969&codigo=%202448&apelido=Somos2Safados&arquivo=590087395969.wmv&fs=2"
					> <img/> </a>
				...
				
				# Ver + #
				1: href = http://disponivel.com/relacionamento/perfilnvideos1.asp?intPagina=1&codigo1=395969&conta=1&album=&apelido1=Somos2Safados
				2: href = http://disponivel.com/relacionamento/perfilnvideos1.asp?intPagina=2&codigo1=395969&conta=1&album=&apelido1=Somos2Safados
				...
			
			<!-- FAVORITOS -->
			<a target="FrmFavoritos"
				href="http://disponivel.com/relacionamento/perfilfav.asp?codigo=395969&apelido=Somos2Safados&conta=1"
				> Ver + </a>
			<iframe name="FrmFavoritos"
				src="http://disponivel.com/relacionamento/perfilnfavoritos.asp?codigo=395969&apelido=Somos2Safados&conta=1"
				>
				
				<a target="_top"
					href="http://blacksarado1.disponivel.com/"
					> <img/> </a>
				...
				
				# Ver + #
				1: href = http://disponivel.com/relacionamento/perfilfav.asp?intPagina=1&codigo=395969&conta=&album=&apelido=Somos2Safados
				2: href = http://disponivel.com/relacionamento/perfilfav.asp?intPagina=2&codigo=395969&conta=&album=&apelido=Somos2Safados
				...
*/
var m;


if(document.location.href.match(/\/headf\.asp/)) {
	var node;
	
	node = document.evaluate("//TABLE", document.body, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null);
	node.singleNodeValue.width = '100%'
	
	node = document.evaluate("//TABLE//TABLE//TABLE", document.body, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null);
	node.singleNodeValue.width = '100%'
	
	node = document.evaluate("//TABLE//TABLE//TABLE//TR[2]/TD", document.body, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null);
	node.singleNodeValue.width = '100%'
	
	node = document.evaluate("//TABLE//TABLE//TABLE//TR[2]/TD/TABLE", document.body, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null);
	node.singleNodeValue.width = '100%'
	
	node = document.evaluate("//IFRAME", document.body, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null);
	node.singleNodeValue.width = '100%'
}


if(document.location.href.match(/\/marquee\.asp/)) {
	// Recria marquee para poder ter 100% de largura  :-O
	var nodes = document.getElementsByTagName('MARQUEE');
	var marquee = nodes.item(0);
	var html = marquee.innerHTML;
	marquee.parentNode.removeChild(marquee);
	
	marquee = document.createElement('MARQUEE');
	marquee.innerHTML = html;
	document.body.appendChild(marquee);
}


m = document.location.href.match(/\/perfil\.asp\?(.+&)?nome=([^&]+)/);
if(m) {
	document.title = m[2] + ' - Disponivel.com';
	
	
	var node;
	
	node = document.evaluate("//TR[2]/TD[2]", document.body, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null);
	node.singleNodeValue.width = 354;
	
	node = document.evaluate("//TABLE", document.body, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null);
	node.singleNodeValue.width = '100%';
	
	
	var nodes;
	
	nodes = document.evaluate("//IFRAME", document.body, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
	for(var i = 0; i < nodes.snapshotLength; i++) {
		node = nodes.snapshotItem(i);
		node.width = '100%';
		switch(node.name) {
			case 'FrmFavoritos':
				node.height = '138';
				break;
			case 'FrmFotos':
				node.height = '117';
				break;
		}
	}
	
	nodes = document.evaluate("//A[B/text()='Ver +']", document.body, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
	for(var i = 0; i < nodes.snapshotLength; i++) {
		node = nodes.snapshotItem(i);
		var url    = node.href;
		var target = node.target;
		
		var frame = document.getElementsByName(target).item(0);
		frame.src = url;
	}
	
	
	nodes = document.evaluate("//A[normalize-space(B/text())='Foto Principal']", document.body, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
	for(var i = 0; i < nodes.snapshotLength; i++) {
		node = nodes.snapshotItem(i);
		node.addEventListener('click', function() { desabilitaAutoNav(window); }, true);
	}
}

m = document.location.href.match(/perfil(nfotos1|nvideos1|fav)\.asp/);
//m = document.location.href.match(/perfil(fav)\.asp/);
//m = document.location.href.match(/perfil(nfotos1|nvideos1)\.asp/);
//m = document.location.href.match(/perfil(nfotos1)\.asp/);
if(m  &&  document.location.href.indexOf(StringMagica) < 0) {
	var pagina = m[1];
	
	var xpathLista, xpathLinks;
	if(pagina != 'fav') {
		xpathLista = ".//TR[1]";
		xpathItens = "//A[IMG]";
		xpathLinks = ".//TR[2]";
	} else {
		xpathLista = ".//TABLE[1]/TBODY/TR";
		xpathItens = "//TD/TABLE";
		xpathLinks = ".//TABLE[2]";
	}
	
	var numPaginas = 1;
	var paginasCarregadas = 1;
	var nodes = document.evaluate("//A[contains(@href,'?intPagina=')]", document.body, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
	for(var i = 0; i < nodes.snapshotLength; i++) {
		var node = nodes.snapshotItem(i);
		m = node.href.match(/intPagina=(\d+)/);
		if(m) {
			url = node.href + '';
			
			var n = parseInt(m[1]);
			if(n > numPaginas) {
				numPaginas = n;
			}
		}
	}
	
	// Força o número de páginas
//	numPaginas = 2;
	
	
	var links = document.evaluate(xpathLinks, document.body, null, XPathResult.ANY_UNORDERED_NODE_TYPE, null).singleNodeValue;
	if(links) {
		links.parentNode.removeChild(links);
	}

/*
	function criaSombra(nodo) {
		nodo.style.zIndex = 2;
		
		var nodoSombra = nodo.cloneNode(true);
		nodoSombra.style.bottom = parseInt(nodoSombra.style.bottom) + 1;
		nodoSombra.style.left   = parseInt(nodoSombra.style.left  ) + 1;
		nodoSombra.style.color = 'rgb(255, 253, 201)';
		nodoSombra.style.zIndex = 1;
		var tmps = nodoSombra.getElementsByTagName('*');
		for(var i = 0; i < tmps.length; i++) {
			// Somente elementos SPAN devem ter sombra
			var tmp = tmps[i];
			if(tmp.tagName == 'INPUT') {
				tmp.style.visibility = 'hidden';
			}
		}
		document.body.appendChild(nodoSombra);
		return nodoSombra;
	}
*/
	
	var rodapeEsquerda;
	var rodapeDireita;
	{
		rodapeEsquerda = document.createElement('TD');
		rodapeEsquerda.align = 'left';
		
		rodapeDireita = document.createElement('TD');
		rodapeDireita.align = 'right';
		
		var tr = document.createElement('TR');
		tr.appendChild(rodapeEsquerda);
		tr.appendChild(rodapeDireita);
		
		var rodape = document.createElement('TABLE');
		rodape.style.position = 'fixed';
		rodape.style.bottom = '0';
		rodape.style.left = '0';
		rodape.style.width = '100%';
		rodape.style.fontFamily = 'Verdana,Arial,Helvetica,sans-serif';
		rodape.style.fontSize = '11px';
		rodape.style.color = 'black';
		
		rodape.appendChild(tr);
		document.body.appendChild(rodape);
	}
/*
	rodapeEsquerda.innerHTML = 'Esquerda';
	rodapeDireita.innerHTML = 'Direita';
*/	
	
	
	var numItens = 0;
	var num = 0;	// Item atual
	
	var preCarregador = new Object();
	if(pagina == 'nfotos1') {
		preCarregador.itensPreCarregados = 0;
		preCarregador.img = new Image();
		preCarregador.atualiza = function() {
			if(preCarregador.itensPreCarregados < numItens) {
				var num = preCarregador.itensPreCarregados + 1;
				GM_log('Pré-carregando imagem ' + num);
				var link = document.getElementById(num);
				var url = link.href;
				var m = url.match('&arqu=([^&]+).*&servidor=([^&]+)');
				preCarregador.img.src = 'http://1.disponivel.com/serv/serv' + m[2] + '/img/' + m[1];
			}
		};
		var preCarregou = function() {
			preCarregador.itensPreCarregados++;
			//GM_log('Pré-carregou imagem ' + preCarregador.itensPreCarregados);
			setTimeout(preCarregador.atualiza, 1);
		};
		preCarregador.img.addEventListener('load', preCarregou, true);
	} else {
		preCarregador.atualiza = function() { /* nada */ };
	}
	
	function preparaItens(doc) {
		var itens = new Array();
		
		var nodes = doc.evaluate(xpathItens, doc, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
		for(var i = 0; i < nodes.snapshotLength; i++) {
			var node = nodes.snapshotItem(i);
			++numItens;
			
			if(pagina != 'fav') {
				node.id = numItens;
				node.addEventListener('click', function(evt) { atualizaAlbum(evt, this.id); }, true);
				
				if(pagina != 'nfotos1') {
					node.addEventListener('click', function() { desabilitaAutoNav(window.parent); }, true);
				}
				
				var img = node.getElementsByTagName('IMG')[0];
				img.style.borderColor = 'white';
				img.border = 2;
			} else {
				var links = doc.evaluate("//A", node, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
				for(var j = 0; j < links.snapshotLength; j++) {
					var link = links.snapshotItem(j);
					link.target = '_top';
				}
			}
			
			itens.push(node);
		}
		
		preCarregador.atualiza();
		
		return itens;
	};
	
	
	var divContador = rodapeDireita;
	
	function atualizaContadores() {
		var strItens = '';
		if(pagina != 'fav') {
			strItens += num + '/';
		}
		strItens += numItens;
		
		var strPaginas = '';
		if(paginasCarregadas < numPaginas) {
			strPaginas += paginasCarregadas + '/';
		}
		strPaginas += numPaginas;
		
		strPaginas = strItens + '[' + strPaginas + ']';
		divContador.innerHTML       = strPaginas;
	}	
	
	
	preparaItens(document);
	atualizaContadores();
	
	
	var slideShow;
	var timeoutSlideShow;
	
	var navega = function(n) {
		atualizaAlbum(null, n);
		window.getSelection().removeAllRanges();
	};
	var navegaAnt  = function() { navega(parseInt(num)-1); };
	var navegaProx = function() { navega(parseInt(num)+1); };
	var autoNavega = function() { if(slideShow.checked) { navegaProx() } };
	
	function atualizaAlbum(evt, n) {
		var link = document.getElementById(num);
		if(link) {
			var img = link.getElementsByTagName('IMG')[0];
			img.style.borderColor = 'white';
		}
		
		num = parseInt(n);
		if(num > numItens) {
			num = 1;
		} else if(num < 1) {
			num = numItens;
		}
//		alert('atualizando para ' + num);
		
		var link = document.getElementById(num);
		var url = link.href;
		
		var frame = window.parent.document.getElementsByName('album').item(0);
		try {
			// Tenta somente recarregar a imagem ou o vídeo em vez de recarregar o frame. 
			var paginaAtual    = extraiPath(frame.src);
			var paginaDesejada = extraiPath(url);
			if(paginaAtual != paginaDesejada) {
				GM_log('Carregando outra página');
				throw 'recarregar frame';
			}
			
			//GM_log('Página desejada já carregada');
			var doc = frame.contentDocument;
			var obj;
			
			switch(pagina) {
				case 'nfotos1':
					obj = doc.getElementsByTagName('IMG')[0];
					var m = url.match('&arqu=([^&]+).*&servidor=([^&]+)');
					url = 'http://1.disponivel.com/serv/serv' + m[2] + '/img/' + m[1];
					break;
					
				case 'nvideos1':
					obj = doc.getElementsByTagName('EMBED')[0];
					var m = url.match('&arquivo=([^&]+)');
					url = 'http://1.disponivel.com/video/' + m[1];
					break;
					
				default:
					alert('????' + pagina + '????');
			}
			
			if(!obj) {
				throw 'recarregar frame';
			}
			
			var novoObj = obj.cloneNode(false);
			if(slideShow  &&  slideShow.checked) {
				var carregou = function() {
					if(timeoutSlideShow) {
						clearTimeout(timeoutSlideShow);
					}
					timeoutSlideShow = setTimeout(autoNavega, AutoNavegaTimeout);
				};
				novoObj.addEventListener('load', carregou, true);
			}
			novoObj.src = url;
			//novoObj.addEventListener('load', listenerRecarrega, true);
			
			obj.parentNode.replaceChild(novoObj, obj);
		} catch(ex if ex == 'recarregar frame') {
			GM_log('Recarregando frame');
			frame.src = url;
		}
		atualizaContadores();
		
		var img = link.getElementsByTagName('IMG')[0];
		img.style.borderColor = 'red';
		
		if(evt) {
			evt.stopPropagation();
			evt.preventDefault();
		} else {
			var maxScrollLeft = document.body.scrollWidth - document.body.clientWidth;
			//	num = 1  ->  scrollLeft = 0
			//	num = numItens  ->  scrollLeft = maxScrollLeft
			document.body.scrollLeft = maxScrollLeft * (num - 1) / (numItens - 1);
		}
	};
	
	if(pagina != 'fav') {
		if(numItens > 1) {
			var nav = rodapeEsquerda;
			
			var a = document.createElement('SPAN');
			a.style.cursor = 'pointer';
			a.addEventListener('click', navegaAnt, true);
			a.textContent = '<Anterior'
			nav.appendChild(a);
			
			nav.appendChild(document.createTextNode(' '));
			
			var a = document.createElement('SPAN');
			a.style.cursor = 'pointer';
			a.addEventListener('click', navegaProx, true);
			a.textContent = 'Seguinte>'
			nav.appendChild(a);
			
			nav.appendChild(document.createTextNode(' '));
			
			if(pagina == 'nfotos1') {
				slideShow = document.createElement('INPUT');
				slideShow.id = NomeAutoNav;
				slideShow.type = 'checkbox';
				var ss = function() {
					if(timeoutSlideShow) {
						clearTimeout(timeoutSlideShow);
					}
					if(slideShow.checked) {
						navegaProx();
					}
				};
				slideShow.addEventListener('click', ss, true);
				nav.appendChild(slideShow);
				
				var texto = document.createElement('SPAN');
				texto.innerHTML = 'auto';
				texto.style.cursor = 'pointer';
				texto.addEventListener('click', function() { slideShow.click(); }, true);
				nav.appendChild(texto);
			}
		}
	}
	
	if(numPaginas > 1) {
		var lista = document.evaluate(xpathLista, document.body, null, XPathResult.ANY_UNORDERED_NODE_TYPE, null).singleNodeValue;
		
		// Cria IFRAME temporário para carregar as outras páginas
		var frameTemp = document.createElement('IFRAME');
		frameTemp.style.display = 'none';
		document.body.appendChild(frameTemp);
		frameTemp.addEventListener('load',
					function() {
						var contador = document.createElement('TD');
						contador.innerHTML = '<b>' + paginasCarregadas + '</b>';
						lista.appendChild(contador);
						
						var doc = frameTemp.contentDocument;
						if(pagina == 'fav') {
							ajustaLinks(doc);
						}
						
						var novosItens = preparaItens(doc);
						for(var i = 0; i < novosItens.length; i++) {
							var td = document.createElement('TD');
							td.appendChild(novosItens[i]);
							if(pagina != 'fav') {
								td.vAlign = 'top';
							} else {
								td.align  = 'center';
								td.vAlign = 'middle';
								td.width  = '327';
								td.height = '75';
							}
							lista.appendChild(td);
						}
						
						++paginasCarregadas;
						if(paginasCarregadas < numPaginas) {
							setTimeout(
										function() {
											frameTemp.src = document.location.href + '&intPagina=' + (1 + paginasCarregadas) + '&' + StringMagica;
										},
										1);
						} else {
							// Não tem mais páginas pra carregar
							var contador = document.createElement('TD');
							contador.innerHTML = '<b>' + paginasCarregadas + '</b>';
							lista.appendChild(contador);
							setTimeout(
										function() {
											document.body.removeChild(frameTemp);
										},
										1);
						}
						
						atualizaContadores();
					},
					true
				);
		frameTemp.src = document.location.href + '&intPagina=' + (1 + paginasCarregadas) + '&' + StringMagica;
	}
}

function extraiPath(url) {
	var pos = url.indexOf('?');
	if(pos >= 0) {
		return url.substring(0, pos);
	} else {
		return url;
	}
}




var styleObj = document.createElement("STYLE");
styleObj.innerHTML = ".indisponivel { color: black; } .indisponivel:visited{ color: red; }";
document.body.insertBefore(styleObj, document.body.firstChild);



var urlREs = [
			'^http://([^\\.]+)\\.disponivel\\.com/?$',
			'^http://disponivel\\.com/sites/([^\\?]+)',
			'^http://disponivel\\.com/relacionamento/site\\.asp\\?(?:.+&)?apelido=([^&]+)',
			'^http://disponivel\\.com/relacionamento/perfil\\.asp\\?(?:.+&)?nome=([^&]+)',
		];

var caracsSubst = new Array();
caracsSubst['%5f'] = '_';
caracsSubst['%2d'] = '-';

function extraiApelido(url) {
	for(var j = 0; j < urlREs.length; j++) {
		var re = urlREs[j];
		var m = url.match(re);
		
		if(m) {
			var apelido = m[1].toLowerCase();
			for(var c1 in caracsSubst) {
				var c2 = caracsSubst[c1];
				apelido = apelido.replace(c1, c2, 'g');
			}
			
			return apelido;
		}
	}
	
	return null;
}


{
	var apelido = extraiApelido(document.location.href);
	if(apelido) {
		document.title = apelido + ' - Disponivel.com';
	}
}


		
		
/*
{
	var teste = 'http://kadutesaopass.disponivel.com/';
	alert('TESTE: ' + teste.match(urlREs[0]));
}
*/

function ajustaLinks(doc) {
	var nodes = doc.evaluate("//A", doc.body, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
	for(var i = 0; i < nodes.snapshotLength; i++) {
		var node = nodes.snapshotItem(i);
		
		var apelido = extraiApelido(node.href);
		if(apelido) {
			node.target = '_top';
			node.className = 'indisponivel';
			
			//node.href = 'http://' + apelido + '.disponivel.com/';
			node.href = 'http://disponivel.com/sites/' + apelido;
			//node.href = 'http://disponivel.com/relacionamento/site.asp?apelido=' + apelido;
			//node.href = 'http://disponivel.com/relacionamento/perfil.asp?nome=' + apelido;	// Sem cabeçalho
		}
	}
}

ajustaLinks(document);



function desabilitaAutoNav(wnd) {
	var doc = wnd.document.getElementsByName('FrmFotos')[0].contentDocument;
	var chk = doc.getElementById(NomeAutoNav);
	chk.checked = false;
};