function oc(a) {
  // by Jonathan Snook.
  var o = {};
  for(var i=0;i<a.length;i++) { o[a[i]]=''; }
  return o;
}

function externalLinks(autoExternal,fileexts) {
	// checks standard 'external' classes and wrapped anchors.
	$('a[rel="external"],.external a').each(function (){
		$(this).attr("target","_blank");
	});
	// checks file extensions in submitted array.
	// checks for offsite links if auto is TRUE. 
	if (fileexts || autoExternal) {
		$('a').each(function (){
			var url = String($(this).attr("href"));
			if (fileexts) {
				var start = url.lastIndexOf(".");             				  		
				if (start != -1){                                				 
					start++;                                       				  	
					extension = url.substring(start, url.length).toLowerCase();
					if (extension in oc(fileexts)){
						$(this).attr("target","_blank");
					}
				}
			}
			if (autoExternal) {
				var hn = String(window.location.hostname);
				var linkArray = url.split('/');
				var linkHN = String(linkArray[2]); // assuming http://
				var linkProtocol = linkArray[0];
				var linkHNStart = linkHN.lastIndexOf(":"); // find port info.
				if (linkHNStart!=-1) var linkHN = linkHN.substr(0,linkHNStart);
				if (hn!=linkHN && (linkProtocol=="http:" || linkProtocol=="https:") && url!="#") {
					$(this).attr("target","_blank"); 
				}
			}
		});
	}
	// checks 'internal' classes and wrapped anchors.
	$('a[rel="internal"],.internal a').each(function (){
		$(this).attr("target","");
	});
}  
