// PopMarks Blog Bookmarker v02
// http://www.greg-hill.id.au
// (CC) Attribution-ShareAlike 2.1
// See http://blogfresh.blogspot.com

if (typeof(popUser)=='undefined')
	popUser = "ycc2106";

if (typeof(popAnchor)=='undefined')
	popAnchor = "popmarks";

if (typeof(PostItemDiv)=='undefined')
	PostItemDiv = "post-body";

if (typeof(boxColBG)=='undefined')
	boxColBG = "powderblue";

if (typeof(boxColFG)=='undefined')
	boxColFG = "red";

if (typeof(promptStr)=='undefined')
	promptStr = 'PopMarks! Choose Bookmark';

if (typeof(closeStr)=='undefined')
	closeStr = 'Close PopMarks';

if (typeof(activURL)=='undefined')
	activURL = 'http://www.geocities.com/ycorret/popmarks-icons/popmarks-blue64.png';

if (typeof(activStyle)=='undefined')
	activStyle = 'height: 16px; width: 16px;';

if (typeof(defaultBtn)=='undefined')
	defaultBtn = 'http://www.geocities.com/ycorret/popmarks/popmarksdefault.png';

if (typeof(blogUrl)=='undefined')
	blogUrl = window.location.host;

if (typeof(blogTitle)=='undefined')
	blogTitle = document.title;

if (typeof(blogFeed)=='undefined')
{
	var links = document.getElementsByTagName('link');
	for(var i=0; i<links.length; i++)
	{
		var type = links[i].getAttribute('type');
		if (type.search(/application\/rss\+xml|application\/atom\+xml/)==0)
		{
			blogFeed = links[i].getAttribute('href');
			break;
		}
	}
	if (typeof(blogFeed)=='undefined')
		blogFeed='http://'+window.location.host+'/rss.xml';
}

var global_divID='';
var global_targCmd ='';
var btns=new Array();
var btnsFetched = false;

function fetchBtns()
{
var s=document.createElement('script');
s.type='text/javascript';
s.src='http://del.icio.us/feeds/json/'+popUser+'/'+popAnchor+'?count=100&callback=ProcBtns';
document.getElementsByTagName("head")[0].appendChild(s);

return;
}

function ProcBtns( obj )
{
btns = obj;

if (!global_divID || !global_targCmd)
{
	alert('Error: Callback failed.');
	return;
}

var div = document.getElementById('PopMarks'+global_divID).previousSibling;
div.parentNode.replaceChild(global_Btn, div);

btnsFetched = true;
popList(global_divID, global_targCmd);

return;
}

function makeMark(txtUrl, txtTitle, txtDate, txtTags)
{
var notes, d, i, l, t;
var p = new Array();

d=document.getElementsByTagName('div'); 
for(var i=0; i<d.length; i++)
	if(d[i].className.search(PostItemDiv)==0)
		p.push(d[i]); 

l=p[p.length-1].innerHTML;

var rexp=/(<[^>]+>)/ig;

var n=l.replace(rexp, ''); 
i=n.substr(0,255).lastIndexOf(' ');
n=n.substr(0,i);

if (!txtTags)
{
	var trex=/"tag">(\w+)</ig;
	var txtTags=l.match(trex); 
  	if (!txtTags)
		txtTags="";       
	for(var i=0; i<txtTags.length; i++) 
	txtTags[i]=txtTags[i].substring(6,txtTags[i].length-1);
}
else
	txtTags=txtTags.split(/[\s,\+]+/);

if (txtTags) 
	txtTags=txtTags.join(' ');

var txtNotes=txtDate+': '+n.replace(/\s+/g,' ').replace(/'/ig,'\\\'').replace(/"/ig,'\\\'');
txtTitle=txtTitle.replace(/'/ig,'\\\'').replace(/"/ig,'\\\'');

if (typeof(divID)=='undefined')
	divID = 0;
else
	divID++;

var targCmd = encodeURIComponent('txtUrl="'+txtUrl+'";txtTitle="'+txtTitle+'";txtTags="'+txtTags+'";txtNotes="'+txtNotes+'";');

document.write('<a href="javascript:popList(\''+divID+'\',\''+targCmd+'\'); " title="'+promptStr+'" onMouseOver="doMark(this);" onMouseOut="this.href=tempURL;"><img src="'+activURL+'" style="'+activStyle+'"/></a><div id="PopMarks'+divID+'"></div>');
}

function doMark( link )
{
var url=link.href;
tempURL = url;
var sel;

if (d=document.selection) 
	sel=d.createRange().text.toString();
else 
	sel=window.getSelection().toString();

if (sel)
{
	var newNotes=sel.replace(/\s+/g,' ').replace(/'/ig,'\\\'').replace(/"/ig,'\\\'').replace(/'/ig,'\\\'').replace(/"/ig,'\\\'');
	var pos = url.indexOf('txtUrl');
	var decCmd = decodeURIComponent(url.substring(pos, url.length-3));
	decCmd=decCmd.replace(/(txtNotes=[^:]+):([^&$]+)/i, '$1: '+newNotes+'";');
	url=url.substring(0,pos-1)+'\''+encodeURIComponent(decCmd)+'\');';
}

link.href=url;
return;
}

function popList(divID, targCmd)
{
var div=document.getElementById('PopMarks'+divID);

if (!btnsFetched)
{
	global_divID=divID;
	global_targCmd=targCmd;
	global_Btn=div.previousSibling.cloneNode(true);

	var l=document.createElement('img');
	l.src = 'http://ghill.customer.netspace.net.au/snake_transparent.gif';
	div.parentNode.replaceChild(l,div.previousSibling);

	fetchBtns();
	return;
}

if (div.firstChild)
{
	while (div.firstChild)
		div.removeChild(div.firstChild);
	return;
}

picOK = /^http:\/\/.+\.png|.gif|.jpeg|.jpg$/i;

eval(targCmd);	

var box=document.createElement('div');

box.style.width='60em';
box.style.left='10%';
box.style.position='absolute';
box.style.padding="5px";
box.style.margin="5px auto";
box.style.backgroundColor=boxColBG;
box.style.color=boxColFG;
box.style.border="outset 0.2em black";
box.style.zIndex="101";

if (btns.length==0)
	box.innerHTML='Error: PopMarks: No buttons loaded.';
else
	for(var i=0; i<btns.length; i++)
	{
		var lnk=document.createElement('a');
		var pic=document.createElement('img');

		var targURL = btns[i].u;
		targURL = targURL.replace(/!url!/ig, txtUrl).replace(/!title!/ig, txtTitle).replace(/!tags!/ig, txtTags).replace(/!notes!/ig, txtNotes).replace(/!blogUrl!/ig, blogUrl).replace(/!blogTitle!/ig, blogTitle).replace(/!blogFeed!/ig, blogFeed).replace('http:\/\/javascript\/', 'javascript:');

		if (targURL.search(/.js$/)>=0)	
			targURL ='javascript:var s=document.createElement("script");s.type="text/javascript";s.src="'+targURL+'";document.getElementsByTagName("head")[0].appendChild(s);';
		lnk.href=targURL;
		lnk.title=btns[i].d;
		lnk.target='_blank';
		lnk.style.padding='2px';

		if (picOK.test(btns[i].n))
			pic.src=btns[i].n;
		else
			pic.src=defaultBtn;

		lnk.appendChild(pic);
		box.appendChild(lnk);
	}

var closer=document.createElement('a');
closer.href='javascript: var x=document.getElementById("PopMarks'+divID+'"); while(x.firstChild) x.removeChild(x.firstChild); void(0);'; 
closer.innerHTML='[X]';
closer.title=closeStr;

box.appendChild(closer);

div.appendChild(box);

return;
}