// ==UserScript==
// @name            url_breaker+
// @namespace       http://piro.sakura.ne.jp/
// @description     URL Breaker Modified Version
// @include         *
// ==/UserScript==

(function () {
	function urlBreakerPlus() {
		var ff3 = false;
		if(navigator.userAgent.indexOf('Firefox/') >= 0) {
			var tmp = navigator.userAgent.split('Firefox/');
			var ver = tmp[1].substring(0, tmp[1].indexOf('.'));
			if(ver >= 3) ff3 = true;
		}
		
		if(navigator.appName == 'Netscape' && !ff3) {
			var resolver = document.createNSResolver(document.documentElement);
			var nodes = document.evaluate(
				'/descendant::*[not(contains(" TITLE STYLE SCRIPT TEXTAREA XMP ", concat(" ", local-name(), " ")))]/child::text()',
				document.documentElement,
				resolver,
				XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,
				null
			);
			//var regexp = new RegExp("([!-%'-/:=\\?@\\[-`\\{-~]|&amp;)");
			var regexp = new RegExp("([!-%'\\)-/:=\\?@\\\\-`\\|-~]|&amp;)");
			var range  = document.createRange();
			var wbr    = document.createElement('wbr');
			var lastIndex;
			var node;
			for(var i = 0; i < nodes.snapshotLength; i++) {
				node = nodes.snapshotItem(i);
				range.selectNode(node);
				while (node && (lastIndex = range.toString().search(regexp)) > -1) {
					range.setStart(node, lastIndex+RegExp.$1.length);
					range.insertNode(wbr.cloneNode(true));
					node = node.nextSibling.nextSibling;
					range.selectNode(node);
				}
			}
			range.detach();
		}
	}
	
	function addEvent(elem, event, func){
		if(elem.addEventListener) {
			elem.addEventListener(event, func, false);
		}else if(elem.attachEvent) {
			elem.attachEvent("on" + event, func);
		}
	}
	
	addEvent(window, "load", urlBreakerPlus);
})();

/*
	Original Script:
		url_breaker (made by asukaze)
		http://www.asukaze.net/soft/url_breaker/url_breaker.user.js
*/
