Orkut - AJAX Style Album

By rahul286 Last update Jun 1, 2008 — Installed 3,680 times. Daily Installs: 0, 2, 2, 0, 0, 1, 3, 0, 0, 1, 0, 0, 3, 2, 3, 1, 0, 0, 0, 1, 3, 3, 2, 2, 0, 0, 0, 1, 3, 1, 2, 1
// ==UserScript==
// @name           Orkut - AJAX Style Album 
// @namespace      http://www.devilsworkshop.org/2007/07/04/ajax-style-orkut-album-navigate-albums-the-fastest-and-simplest-way/
// @description    Album navigation changed forever
// @include        http://*.orkut.*/Album.aspx*
// @author	   Rahul Bansal
// ==/UserScript==

//Auxillary Functions
function xpath(query) {
    return document.evaluate(query, document, null,
        XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
}

function addGlobalStyle(css) {
    var head, style;
    head = document.getElementsByTagName('head')[0];
    if (!head) { return; }
    style = document.createElement('style');
    style.type = 'text/css';
    style.innerHTML = css;
    head.appendChild(style);
}

function addGlobalJSfun(func) {
    var head, jsfun;
    head = document.getElementsByTagName('head')[0];
    if (!head) { return; }
    jsfun = document.createElement('script');
    jsfun.type = 'text/javascript';
    jsfun.innerHTML = func;
    head.appendChild(jsfun);
}

function createXMLHttpRequest() {
            try {
                return new XMLHttpRequest;
            } catch (e) {
                try {
                    return new ActiveXObject("Msxml2.XMLHTTP");
                } catch (e) {
                    try {
                        return new ActiveXObject("Microsoft.XMLHTTP");
                    } catch (e) {
                        alert("Its navigating n \ xE3o possesss support \ xE0 technology AJAX!");
                        return false;
                    }
                }
            }
        }


//Lets REEL ITTTTT
window.addEventListener(
	'load',
	function() {

//START
//ADD CSS to take care of scrolling effect
addGlobalStyle('#dscroll {width:190px; height:' + (window.screen.height * .65 ) +  ' ; overflow:scroll; overflow-y: auto; overflow-x:hidden;}');

addGlobalStyle( '#dscroll img:hover {border:medium solid #BFD0EA;}' );

//ADD createXMLHttpRequest function
addGlobalJSfun('function createXMLHttpRequest() {'
+ 'try { return new XMLHttpRequest; } catch (e) {'
+ 'try { return new ActiveXObject(\"Msxml2.XMLHTTP\"); '
+ '} catch (e) { try { return new ActiveXObject(\"Microsoft.XMLHTTP\"); ' 
+ '} catch (e) { return false;'
+ '}}}'
+ '} ');

//ADD Load-img function
addGlobalJSfun('function load_image(path, txt ) {'
+ 'var xml = createXMLHttpRequest();'
+ 'xml.open(\"GET\", path, true);'
+ 'xml.onreadystatechange = function () {if (xml.readyState == 4) {var xmlr = xml.responseText;'
+ 'xmlr = xmlr.split(\'id=\"image\"\');'
+ 'xmlr = xmlr[1].split(\'src=\');'
+ 'xmlr = xmlr[1].split(\'\"\');'
+ 'document.getElementById(\"dwimg\").src = xmlr[1] ;'
+ 'document.getElementById(\"dwtext\").innerHTML = txt ;'
+ '}};'
+ 'xml.send(null);'
+ '} ');

//Make new Panel Header

//New Table
	var newtable = document.createElement("table");
	newtable.width = "100%"
	newtable.innerHTML = '<tr>';
	var oldpan = xpath('/html/body/table[2]/tbody/tr/td[3]/table[1]/tbody/tr[1]');

	newtable.innerHTML += '<td class=\"panelHeader\"><span style=\"text-transform: none;\">AJAX Style Orkut Album by : <a href=\"http://www.devilsworkshop.org\">Devils Workshop</a></span></td>'
		+ oldpan.snapshotItem(0).innerHTML
		+ '<td class=\"panelHeader\"><span style=\"text-transform: none;\"><a href=\"http://www.devilsworkshop.org/2007/07/04/ajax-style-orkut-album-navigate-albums-the-fastest-and-simplest-way/\">Contact US (Help, Suggestion, etc...) </a></span></td>'
		+'</tr>';

	var targetname = oldpan.snapshotItem(0).innerHTML;
	targetname = targetname.split(">");
	targetname = targetname[2].split("<")[0];

	var targetlink = location.href.split("uid=")[1];

			//Make new subpanel for backlinks
	newtable.innerHTML += '<tr>';
	newtable.innerHTML += '<td colspan="2" class=\"panelHeader\"><span style=\"text-transform: none; text-align: center\">View '+ targetname + '\'s \- '
	+ '<a href=\"/Profile.aspx?uid='+targetlink+'\">Profile</a> | '
	+ '<a href=\"/Scrapbook.aspx?uid='+targetlink+'\">Scrapbook</a> | '
	+ '<a href=\"/FriendsList.aspx?uid='+targetlink+'\">Friends</a> | '
	+ '<a href=\"/FavoriteVideos.aspx?uid='+targetlink+'\">Videos</a> | '
	+ '<a href=\"/ProfileF.aspx?uid='+targetlink+'\">Fans</a> || '
	+ '<a href=\"/FriendAdd.aspx?uid='+targetlink+'\">Add '+ targetname + ' as a friend</a>'
	+'</td>'
	+'<td class=\"panelHeader\"><span style=\"text-transform: none\"><a href=\"http://www.orkut.com/Community.aspx?cmm=19587001\">Devils Workshop ORKUT Community</a>'
	+'</td>';
	newtable.innerHTML += '</tr>';

	var maintab = xpath('/html/body/table[1]');
  maintab.snapshotItem(0).parentNode.insertBefore(newtable,maintab.snapshotItem(0).nextSibling);




//Make vertical bar
//First prepare some variable for complex HTML
	var picarr = xpath('/html/body/table[3]/tbody/tr/td[3]/table/tbody/tr[2]/td/table/tbody/tr/td') ;


//check if object is null - NO PICS 
//Also Check if album is urs
var testself = xpath ('//input[@name=\'uploadPicture\']');
if (!testself.snapshotLength) {
if (picarr.snapshotLength){
//Create a Scrolling DIV Element i.e. SIDEBAR
	var picroll = document.createElement("div");
	picroll.id = "dscroll";



//Main Loop to Create REEL

	for (var i=0; i<picarr.snapshotLength; i++)
	{
		//skip item 0,4,8,12
		if ( (i+1) % 4) {
		var tmpcell = picarr.snapshotItem(i).innerHTML;
		tmpcell = tmpcell.split('<br>');
		var imgtxt = tmpcell[1];
		var getsrc = tmpcell[0].split('"');

//		var newa = document.createElement("a");
//		newa.href =  getsrc[1];

		var newimg = document.createElement("img");
		newimg.src = getsrc[3];
		GM_log (getsrc[1]);
		imgtxt = imgtxt.toSource();
		imgtxt = imgtxt.split('"');		
		imgtxt = imgtxt[1].replace(/\'/g,"\\\'");

		newimg.setAttribute('onclick' , 'load_image(\'' + getsrc[1] + '\'' + ', '+ '\''+ imgtxt + '\')\;');

		picroll.innerHTML += '<tr><td>' ;

	//	newa.appendChild(newimg);
		picroll.appendChild(newimg);

		picroll.innerHTML += '<br>' + tmpcell[1] + '<br><br>' + '</td></tr>';
		//GM_log ( newimg );
		}
	}

//CLOSE DIV

//Replace Profile with vertical Bar
	var sidepan = xpath('/html/body/table[3]/tbody/tr/td') ;

	sidepan.snapshotItem(0).parentNode.replaceChild(picroll, sidepan.snapshotItem(0));

//Open First pic on right side
	var mainpan = xpath('/html/body/table[3]/tbody/tr/td[2]/table/tbody');
	
	var maindiv = document.createElement("div");
	maindiv.align = "center";
	maindiv.class = ""

//add image
	var mainimg = document.createElement("img");
	mainimg.id = "dwimg";
	mainimg.valign = "middle";
	maindiv.appendChild(mainimg);

//add text
	var maintext = document.createElement("p");
	maintext.id = "dwtext";
	maindiv.appendChild(maintext);
	mainpan.snapshotItem(0).parentNode.insertBefore(maindiv, mainpan.snapshotItem(0));
	mainpan.snapshotItem(0).parentNode.removeChild(mainpan.snapshotItem(0));

//Call of fun
//calculate image
var init_img = picarr.snapshotItem(0).innerHTML;
init_img = init_img.split('<br>');
var init_text = init_img[1];
init_img = init_img[0].split('"');
init_img = init_img[1];
//GM_log(init_img);
var xml = createXMLHttpRequest();
xml.open("GET", init_img, true);
xml.onreadystatechange = function () {if (xml.readyState == 4) {var xmlr = xml.responseText;
xmlr = xmlr.split('id="image"');
xmlr = xmlr[1].split('src=');
xmlr = xmlr[1].split('"');
document.getElementById("dwimg").src = xmlr[1];
document.getElementById("dwtext").innerHTML = init_text;
}};
xml.send(null);

//Small fix
var fixbg = xpath('/html/body/table[3]/tbody/tr/td[2]/table');
fixbg.snapshotItem(0).setAttribute('class','');
//END
}
}
	},
	true);