// By Richard Harrison for S8Design.co.uk

function ViralLinkManager(target, imgDir, rows, showAdvice, adviceType, styles) {
	// construction arguments are optional with defaults - if not given or only placeholder 
	// elements (empty string '')* are provided, the following "vl" prefixed values apply
	// variable, global, default, configuration parameters start here - - - - - - - - - - - - -
	// id(s) of HTML div element to which to write viral linking HTML after composing it;
	// default is one target per page with id="_vlTarget_"...multiple are allowed, but current 
	// handling presumes same layout for all instances
	// NOTE: showAdvice must be true/false

	// variable, global, default, configuration parameters start here - - - - - - - - - - - - -
	var vlTarget = ['_vlTarget_'];			// HTML target element's (probably a div) id
	var vlImgDir = 'images/';					// subdirectory from which to retrieve images for viral links
	var vlRows = 1;								// how many rows of icons for display layout
	var vlShowAdvice = true;					// whether to display advice text
	var vlAdviceType = 'inline';				// where to show advice, if used...inline or top
	var vlStyles = 'viralLinking.css';		// style-sheet for viral linking
	// variable, global, default, configuration parameters end here - - - - - - - - - - - - - -
	
	// utility functions
	function get(eid) { return document.getElementById(eid); }
	function getBT(tag) { return document.getElementsByTagName(tag); }
	
	// add viral linking styles to page
	var s = document.createElement('LINK');
	s.rel = 'stylesheet';
	s.type = 'text/css';
	s.media = 'screen';
	s.href = vlStyles;
	var h = getBT('HEAD')[0];
	h.appendChild(s);
	
	// top type advice strings vary by number of rows of icons as: 1 row ==> [0], 2 rows ==> [1], 3 rows ==> [2], etc.
	var vlAdvice = [
		['Social bookmarking and email links...',	'&nbsp;share this page via social sites or email&nbsp;'	],
		['Spread the word...',							'&nbsp;tell others about page&nbsp;'							],
		['Send a link...',								'&nbsp;notify others&nbsp;'										],
		['Share it...', 									'&nbsp;send links&nbsp;'											],
		['Share...', 										'&nbsp;link this&nbsp;'												]
	]
	
	// control data to construct anchors for viral linking
	var vlLinksArray = [
	// URL to request								parameters to add to (implicit) GET										display name		display image
	// ----------------------------------	-------------------------------------------------------------	----------------	-------------------
		['blogmarks.net/my/new.php', 			'mini=1&amp;simple=1&amp;url=_vlUrl_%2F&amp;title=_vlTitle_"',	'blogmarks', 		'blogmarks.png'		],
		['del.icio.us/post', 					'url=_vlUrl_%2F&amp;title=_vlTitle_', 									'del.icio.us', 	'delicious.png'		],
		['digg.com/submit', 						'phase=2&amp;url=_vlUrl_%2F&amp;title=_vlTitle_', 					'Digg', 				'digg.png'				],
		['www.facebook.com/sharer.php', 		'u=_vlUrl_%2F&amp;t=_vlTitle_',											'Facebook', 		'facebook.png'			],
		['www.furl.net/storeIt.jsp', 			'u=_vlUrl_%2F&amp;t=_vlTitle_', 											'Furl', 				'furl.png'				],
		['www.google.com/bookmarks/mark',	'op=edit&amp;bkmk=_vlUrl_%2F&amp;title=_vlTitle_',					'Google',			'googlebookmark.png'	],
		['www.mixx.com/submit',					'page_url=_vlUrl_%2F&amp;title=_vlTitle_', 							'Mixx',				'mixx.png'				],
		['www.indianpad.com/submit.php',		'url=_vlUrl_%2F', 															'IndianPad',		'indianpad.png'		],
		['reddit.com/submit',					'url=_vlUrl_%2F&amp;title=_vlTitle_', 									'Reddit',			'reddit.png'			],
		['www.sphere.com/search',				'q=sphereit:_vlUrl_%2F&amp;title=_vlTitle_', 						'SphereIt',			'sphere.png'			],
		['sphinn.com/submit.php',				'url=_vlUrl_%2F&amp;title=_vlTitle_', 									'Sphinn',			'sphinn.png'			],
		['www.spurl.net/spurl.php',			'url=_vlUrl_%2F&amp;title=_vlTitle_', 									'Spurl',				'spurl.png'				],
		['www.stumbleupon.com/submit',		'url=_vlUrl_%2F&amp;title=_vlTitle_', 									'StumbleUpon',		'stumbleupon.png'		],
		['technorati.com/faves',				'add=_vlUrl_%2F', 															'Technorati',		'technorati.png'		],
		['mailto:',									'subject=Check%20this%20site:%20_vlUrl_',								'Email a Friend',	'email.gif'				]
	]
	
	// capture info for current page
	var vlUrl = encodeURI(window.location.toString());
	var vlTitle = encodeURI(getBT('TITLE')[0].innerHTML.toString().replace(/ /g, '+'));
	
	function addViralLinking(){
		// create HTML for viral links 
		var last = vlLinksArray.length;
		var w = Math.ceil(20*last/vlRows + (('inline' == vlAdviceType && vlShowAdvice)?60:0)) + 'px';
		var vl = '<div class="viral" style="width:' + w + ';">';
		if (vlShowAdvice) {
	  		if ('top' == vlAdviceType) {
		  		vl += '<span class="advice"><strong>' + vlAdvice[vlRows - 1][0] +
		  		'</strong><span>' + vlAdvice[vlRows - 1][1] + '</span></span>';
		  	}
		  	else vl += '<strong>Share: </strong>';
		}
	   vl += '<ul>';
		var prot = 'http://';
		for (var i = 0; i < last; i++) {
			var l = vlLinksArray[i];
			var p = l[1].replace(/_vlUrl_/, vlUrl);
			p = p.replace(/_vlTitle_/, vlTitle);
			vl += '<li><a href="' + (('mailto:' != l[0])?prot:'') + l[0] + '?' + p + '"><img src="' + vlImgDir + l[3] + '" ' +
			'alt="' + l[2] + '" title="' + l[2] + '" /></a></li>';
		}
		vl += '</ul></div>';
		// insert to target container{s} in HTML	
		var last = vlTarget.length;
		for (var i = 0; i < last; i++) {
	   	get(vlTarget[i]).innerHTML = vl;
	   }
	}
	// process arguments: target, imgDir, rows, showAdvice, adviceType, styles
	if ('undefined' != typeof targets && '' != targets) vlTarget = targets;
	if ('undefined' != typeof imgDir && '' != imgDir) vlImgDir = imgDir;
	if ('undefined' != typeof rows && '' != rows) vlRows = rows;
	if ('undefined' != typeof showAdvice) vlShowAdvice = showAdvice;
	if ('undefined' != typeof adviceType && '' != adviceType) vlAdviceType = adviceType;
	if ('undefined' != typeof styles && '' != styles) vlStyles = styles;
	// write link contents to page
	addViralLinking();
}

function initVL() {
	// arguments: target, imgDir, rows, showAdvice, adviceType, styles
	ViralLinkManager('','/images/viralLinking/',1,false,'inline','viralLinking.css');	
}

window.onload = initVL;	// if other onload handling is required, add this to a general handler