//リンクしているページのURLをアウトプットに表示する
//by sim
//2002-09-21:作成
//2002-11-06:キーに応じて抽出する拡張子を変更できるよう修正

var pnir = new ActiveXObject("Sleipnir.API");
if (pnir.GetCount() == 0) {
	pnir = null;
	WScript.Quit();
}

//押されているキーから、抽出に使用する正規表現を決定（または設定）する
var re;
if ((pnir.ShiftDown && pnir.CtrlDown) == true) {
	//設定
	setGroup(pnir);
	pnir = null;
	WScript.Quit();
}
else if (pnir.ShiftDown == true) {
	re = getGroup(pnir, 1);
}
else if (pnir.CtrlDown == true) {
	re = getGroup(pnir, 2);
}
else {
	re = getGroup(pnir, 0);
}

//アクティブなタブのdocumentオブジェクトからa要素の集合を抜き出す
var tabId = pnir.GetDocumentID(pnir.ActiveIndex);
var doc = pnir.GetDocumentObject(tabId);
//Sleipnirのタブに表示されるタイトルは親フレームのtitleだからここで取得
var title = doc.title;
try {
	while (doc.activeElement.tagName.match(/frame/i) != null) {
		doc = doc.activeElement.contentWindow.document;
	}
}
catch (e) {
	pnir.MessageBox("アクティブなdocumentオブジェクトを取得できませんでした。\n" + e);
	doc = null;
	pnir = null;
	WScript.Quit();
}
var anchors = new Enumerator(doc.body.getElementsByTagName("a"));

//アウトプットバーをクリアしてからURLを表示
pnir.OutputClear();
pnir.OutputVisible = true;
pnir.OutputScript = "$OnDoubleClick\\for_show_links.js";
//ダブルクリック時のために、URLでない行は#で始まるようにする
pnir.OutputAddString("#" + title + " がリンクしているページのURL");
for (; !anchors.atEnd(); anchors.moveNext()) {
	if ((anchors.item().href != null)
		&& (anchors.item().href.match(re) != null)) {
		pnir.OutputAddString(anchors.item().href);
	}
}
pnir.OutputAddString("#終了しました===================");

doc = null;
pnir = null;



//Shift+Ctrlが押されていた場合は設定
function setGroup(pnir) {
	var extGroup = new Array(3);
	var result;
	pnir.MessageBox("アウトプットにURL抽出スクリプトの設定を行います。\n何も押さないで実行、Shiftを押して実行、Ctrlを押して実行の順に\n入力ダイアログが表示されるので、それぞれに抽出する拡張子を入力してください。\n\n複数の拡張子を入力する場合は\"jpg|png\"のように\"|\"で拡張子を区切って入力してください。\nまた、\"?\"でその都度入力、\"\"（入力しないでOK）で全抽出になります。");
	var groupTitle = new Array(
		"何も押さないで", "Shiftキーを押して", "Ctrlキーを押して"
	);
	var i;
	for (i = 0; i < 3; i++) {
		extGroup[i] = pnir.GetProfileString("OutputExtractUrl", "Group_" + i, "");
		result = pnir.InputBox(groupTitle[i] + "実行のときの拡張子を入力してください。", extGroup[i]);
		if (pnir.Result == 1) {
			pnir.WriteProfileString("OutputExtractUrl", "Group_" + i, result);
		}
	}
}


//Script.iniに保存した設定から、抽出用正規表現オブジェクトを返す
//number : どの設定を取り出すか。0=何も押さない, 1=Shift, 2=Ctrl
function getGroup(Sleipnir, number) {
	var pattern = Sleipnir.GetProfileString("OutputExtractUrl", "Group_" + number, "?");
	var result
	if (pattern.length == 0) {
		pattern = ".*";
	}
	while (pattern.indexOf("?") == 0) {
		result = Sleipnir.InputBox("拡張子を入力してください。", "");
		if (Sleipnir.Result == 1) {
			pattern = result;
		}
	}
	
	var re =  new RegExp(".*\\.(" + pattern + ")$", "i");
	re.compile(".*\\.(" + pattern + ")$", "i");
	return re;
}