function array_indexOf(ar,v){
	for(i=0;i<ar.length;++i){
		if(ar[i]===v){
			return i;
		}
	}
	return -1;
}
function getLinkInHtml(html){
	var	flags=Context.tabFlags
		,pos=Context.NewTabPosition
		,re=/<\s*a\s+.*?href\s*=\s*['"]?[A-z0-9$-_.+!*'(),\;\/?:@&=%~#]+['"]?.*?>.*?<\s*\/\s*a\s*>/gi
		,urls=[];
	html=html.replace(/[\r\n]/g,"");
	while(true){
		ret=re.exec(html);
		if(!ret){
			break;
		}
		// extract href
		var	href=/href\s*=\s*['"]?[A-z0-9$-_.+!*'(),\;\/?:@&=%~#]+['"]?/gi.exec(ret[0]);
		if(href){
			href=href[0];
			var	iEq=href.indexOf("=");
			href=href.substr(iEq+1);
			// trim
			href=href.replace(/^(\s|\u00A0|'|")+|(\s|\u00A0|'|")+$/g,"");
			// no open javascript
			if(href.match(/javascript:/i)){
				continue;
			}
			href=href.replace(/&amp;/g,"&");
			// is relative?
			if(! href.match(/^https?:\/\//i)){
				var	l=document.location,url,firstChar=href.charAt(0);
				if("/"!==firstChar){
					if("#"===firstChar){
						url=l.href+href;
					}else{
						var	lastSlash=l.href.lastIndexOf("/");
						url=l.href.substr(0,lastSlash+1)+href;
					}
				}else{
					url=l.protocol+"//"+l.hostname+href;
				}
				href=url;
			}
			if(-1===array_indexOf(urls,href)){
				urls.push(href);
			}
		}
	}
	return urls;
}
function open(url,flags,pos){
	var tab=App.CmdExec("go",url,pos,flags|0x1);
	if(pos<0){
		// get tab index
		pos = App.tabIndex(tab.id);
	}
	return pos;
}
var	html=DataObject.selectionHtml;
if(!html)html=DataObject.text;
var	urls=getLinkInHtml(html);
if(urls.length){
	(function(){
		if(urls.length>=10){
			var	msg=urls.length+" 個のURLが選択されています。開きますか？\n\n";
			for(i=0;i<5;++i){
				msg+=urls[i]+"\n";
			}
			msg+="...";
			if(urls.length>=25){
				msg+="\n\n開くタブ数は、最大で 25 個までに制限されます。";
			}
			if(6!=App.MsgBox(msg,"多量なURLのオープン確認",0x4|0x100)){
				return ;
			}
		}
		var flags=Context.tabFlags,pos=Context.NewTabPosition
		for(i=0;i<urls.length;++i){
			pos=open(urls[i],flags,pos);
			flags&=~0x2;
			flags|=0x4;
			++pos;
		}
	})();
}