//
// Copyright(C) 2008 DJSOFT
//
var gCurrentInput;

function refineNumbers() {
	
	if (document.domain.indexOf("djsoft") < 0) {
		document.location.href = "http://www.djsoft.co.jp";
		return "";
	}
	
	var strNumbers = document.frm1.numbers.value;
	strNumbers = ReplaceAll(strNumbers, "\r\n", "\n");
	var arrNumbers = strNumbers.split("\n");
	var arrNumbersSub;
	var strResult = "";
	var s;
	var sSub;
	for (var i = 0; i < arrNumbers.length; i++) {
		s = arrNumbers[i];
		s = ReplaceAll(s, "｜", "|");
		if (s.length > 0) {
			arrNumbersSub = s.split("|");
			if (arrNumbersSub.length > 1) {
				sSub = "";
				for (var j = 0; j < arrNumbersSub.length; j++) {
					sSub = sSub + "|" + refineNumber(arrNumbersSub[j],"特開", "特許");
				}
				s = sSub.substring(1);
			} else {
				s = refineNumber(s, "特開", "特許");
			}
		}

		strResult = strResult + "\n" + s;
	}
	document.frm1.numbersResult.value = strResult.substring(1);

}

function removeKindcodes() {
	
	if (document.domain.indexOf("djsoft") < 0) {
		document.location.href = "http://www.djsoft.co.jp";
		return "";
	}
	
	var strNumbers = document.frm1.numbers.value;
	strNumbers = ReplaceAll(strNumbers, "\r\n", "\n");
	var arrNumbers = strNumbers.split("\n");
	var arrNumbersSub;
	var strResult = "";
	var s;
	var sItem;
	var sSub;
	for (var i = 0; i < arrNumbers.length; i++) {
		s = arrNumbers[i];
		s = ReplaceAll(s, "｜", "|");
		s = Trim(s);
		if (s.length > 0) {
			arrNumbersSub = s.split("|");
			if (arrNumbersSub.length > 1) {
				sSub = "";
				for (var j = 0; j < arrNumbersSub.length; j++) {
					sItem = arrNumbersSub[j]
					sItem = Trim(sItem);
					sSub = sSub + "|" + removeKindcode(sItem);
				}
				s = sSub.substring(1);
			} else {
				s = removeKindcode(s);
			}
		}

		strResult = strResult + "\n" + s;
	}
	document.frm1.numbersResult.value = strResult.substring(1);

}

function simpleReplace() {
	
	if (document.domain.indexOf("djsoft") < 0) {
		document.location.href = "http://www.djsoft.co.jp";
		return "";
	}
	
	var strInput = document.frm1.numbers.value;
	strInput = ReplaceAll(strInput, "\r\n", "\n");

	var strOld = document.frm1.txtOld.value;
	strOld = ReplaceAll(strOld, "\\n", "\n");
	strOld = ReplaceAll(strOld, "\\t", "\t");

	var strNew = document.frm1.txtNew.value;
	strNew = ReplaceAll(strNew, "\\n", "\n");
	strNew = ReplaceAll(strNew, "\\t", "\t");

	var arrLines = strInput.split("\n");
	var s;
	var strResult = "";
	for (var i = 0; i < arrLines.length; i++) {
		s = arrLines[i];
		s = ReplaceAll(s, strOld, strNew);
		strResult = strResult + "\n" + s;
	}
	document.frm1.numbersResult.value = strResult.substring(1);

}

function ExtractNumberBody(num)
{
    num = num.replace("第", "");

	if (num.substring(0,2) != "WO") {
	    p = num.indexOf("国際");
    	if (p < 0)
	    	p = num.indexOf("特");
    	if (p < 0)
	    	p = num.indexOf("実");
    	if (p < 0)
	    	p = num.indexOf("US");
    	if (p < 0)
	    	p = num.indexOf("WO");
    	if (p < 0)
	    	p = num.indexOf("EP");
		if (p > 0)
			num = num.substring(p);
	}
		
    p = num.indexOf("号");
    if (p > 0)
		num = num.substring(0, p);

    p = num.indexOf("（");
    if (p > 0)
		num = num.substring(0, p);

    p = num.indexOf("(");
    if (p > 0)
		num = num.substring(0, p);

	num = removeTail(num);
	num = Trim(num);
	return num;
}

function toWarekiYear(yyyy)
{
	if (yyyy.substring(0, 1) == "H")
		return yyyy;
	if (yyyy.substring(0, 1) == "S")
		return yyyy;
	if (yyyy > 1988)
		return "H" + String(yyyy - 1988);
	if (yyyy > 1925)
		return "S" + String(yyyy - 1925);
	return "";
}

function toSeireki(gee)
{
	if (gee.length > 3)
		return gee;

	var gengo = gee.substring(0, 1);
	var ee = gee.substring(1);
	var year = Number(ee);
	if (gengo == "H") {
		year += 1988;
	} else if (gengo == "S") {
		year += 1925;
	} else {
		return "";
	}
	return year.toString();
}


function EPNumToJPNum(num)
{
	num = removeKindcode(num);
	num = num.substring(2);
	
	var sY = "";
	var sN = "";
	
	if (num.length >= 10)
	{
		sY = num.substring(0, 4)
		if (IsDigitString(sY) == false)
			return "";
		sN = num.substring(4)
	}
	else
	{
		var len = num.length;
		sN = num.substring(len - 6);
		
		sY = num.substring(0, len - 6);

		var iYear = Number(sY);
		if (iYear > 40)
		{
			sY = "00" + iYear.toString();
			sY = sY.substring(sY.length - 2);
			if (IsDigitString(sY) == false)
				return "";
			sY = "昭" + sY;
			
		}
		else
		{
			sY = "00" + iYear.toString();
			sY = sY.substring(sY.length - 2);
			if (IsDigitString(sY) == false)
				return "";
			sY = "平" + sY;
		}
	}
	if (IsDigitString(sN) == false)
		return "";
	return "特開" + sY + "-" + sN;

}

function ReplaceAll2(s, oldStr, newStr)
{
	if (oldStr == null)
		return s;
	if (oldStr.length == 0)
		return s;

	var strRet = "";
	var idxStart = 0;
	var p = s.indexOf(oldStr);
	while (p >= 0)
	{
		//window.alert(s.substring(idxStart, p));
		strRet = strRet + s.substring(idxStart, p);
		strRet = strRet + newStr;
		idxStart = p + oldStr.length;
		p = s.indexOf(oldStr, idxStart);
	}
	strRet = strRet + s.substring(idxStart);
	return strRet;
	
}

function ReplaceAll(s, oldStr, newStr)
{
	if (oldStr == null)
		return s;
	if (oldStr.length == 0)
		return s;
	
	if (newStr.indexOf(oldStr) >= 0) {
		return ReplaceAll2(s, oldStr, newStr);
	}
	var p = s.indexOf(oldStr);
	while (p >= 0)
	{
		s = s.replace(oldStr, newStr);
		p = s.indexOf(oldStr);
	}
	return s;
}

function refineNumberJP(numParam)
{
	if (numParam == null)
		return "";
	if (numParam.length == 0)
		return "";
	var num = numParam;
	num = ReplaceAll(num, "\t", "");
	num = ReplaceAll(num, " ", "");
	num = ReplaceAll(num, "ー", "-");
	num = ReplaceAll(num, "―", "-");
	num = ReplaceAll(num, "−", "-");
    num = num.replace("年-", "-")
    if (num.indexOf("-") < 0) {
	    num = num.replace("年", "-");
    }
    num = num.replace("平成", "平");
    num = num.replace("昭和", "昭");
    num = num.replace("H", "平");
    num = num.replace("S", "昭");

	num = Trim(num);

    num = num.replace("登録願", "出願");
    num = num.replace("登録出願", "出願");

	num = num.replace("国際特許公開", "WO");
	num = num.replace("国際特許", "WO");
	num = num.replace("国際公開", "WO");

    num = num.replace("特許公報", "特許");
    num = num.replace("特許出願", "特願");
    num = num.replace("特許公開", "特開");
    num = num.replace("特許公表", "特表");
    num = num.replace("実用新案登録", "実用");
    num = num.replace("登録実用新案", "実用");
    num = num.replace("実用新案", "実用");
    num = num.replace("実登", "実用");
    num = num.replace("登実", "実用");
    num = num.replace("実用出願", "実願");
    num = num.replace("実用公開", "実開");
    num = num.replace("実用公表", "実表");
	num = num.replace("実用公告", "実公");
	num = num.replace("特許公告", "特公");
	num = num.replace("特告", "特公");
	num = num.replace("実告", "実公");
	num = num.replace("特登", "特許");
	num = num.replace("JP", "特開");

	num = num.toUpperCase();
    num = ToHalfDigits(num);
    num = ToHalfAlpha(num);
    
    num = ExtractNumberBody(num);
    
    var typeWO = false;
    
	num = num.replace("再公表WO", "再公表");
    num = num.replace("再公表", "WO");
    num = num.replace("再表", "WO");
    num = num.replace("/", "-");
	
	if (num.substring(0,2) == "JP")
	{
		var num2 = EPNumToJPNum(num);
		num = num2;
	}
	if ("平昭".indexOf(num.substring(0,1)) >= 0)
	{
		if (IsDigitString(num.substring(1))) {
			num = num.substring(0, 3) + "-" + num.subsgring(4);
		}
	}

	
	if (num.substring(0,2) == "WO")
    {
    	typeWO = true;
    	num = num.substring(2);
    	num = refineWONumber(num, true, false);
	    num = "WO" + num;
	    num = removeKindcode(num);
	    return num
    }
    
    var law = "";
    if (typeWO)
    {
		;
    }
    else
    {
	    p = num.indexOf("特");
	    if (p < 0)
		    p = num.indexOf("実");
	
	    law = num.substring(0, 1);
	    if (law != "特" && law != "実")
	    {
	        return "エラー(100) 番号を認識できません - " + gCurrentInput;
	    }
	}
    var type1 = false; // 年-連番 タイプの番号
    var typeA = false; // 出願番号
    
    kind = num.substring(1, 2);
    if ("開公表".indexOf(kind) < 0)
    {
		if (kind.substring(0, 1) == "願")
		{
			typeA = true;
		}
		else
	    if (law + kind != "特許" && law + kind != "実用")
	    {
	    	if (typeWO == false)
	    	{
		        return "エラー(110) 公報種別を認識できません - " + gCurrentInput;
			}
	    }
	} else {
		type1 = true;
	}
    num = num.substring(2);
    if (type1 || typeA || typeWO)
    {
		var p = num.indexOf("-");
		var num1 = num.substring(0, p);
		var num2 = num.substring(p + 1);
		if (IsDigitString(num2) == false)
		{
			return  "エラー(200) 連番部の書式が不正です - " + gCurrentInput;
		}
		if (num2.length > 6)
		{
			return "エラー(210) 連番部の書式が不正です - " + gCurrentInput;
		}
		num2 = "000000" + num2;
		num2 = num2.substring(num2.length - 6);
		var gengo = num1.substring(0, 1);
		if (gengo == "平")
		{
			gengo = "H";
			num1 = num1.substring(1);
			if (num1.length > 2 || num1.length == 0)
			{
				return "エラー(300) 年部の書式が不正です - " + gCurrentInput;
			}
			num1 = "00" + num1;
			num1 = num1.substring(num1.length - 2);
			if (num1 == "00")
			{
				return "エラー(310) 年部の書式が不正です - " + gCurrentInput;
			}
			if (IsDigitString(num1) == false)
			{
				return "エラー(320) 年部の書式が不正です - " + gCurrentInput;
			}
			//num1 = gengo + num1;
			num1 = "平" + num1;
		} else if (gengo == "昭")
		{
			gengo = "S";
			num1 = num1.substring(1);
			if (num1.length > 2 || num1.length == 0)
			{
				return "エラー(330) 年部の書式が不正です - " + gCurrentInput;
			}
			num1 = "00" + num1;
			num1 = num1.substring(num1.length - 2);
			if (num1 == "00")
			{
				return "エラー(340) 年部の書式が不正です - " + gCurrentInput;
			}
			if (IsDigitString(num1) == false)
			{
				return "エラー(350) 年部の書式が不正です - " + gCurrentInput;
			}
			num1 = "昭" + num1;
			//num1 = gengo + num1;
		} else
		{
			if (IsDigitString(num1) == false)
			{
				return "エラー(400) 年部の書式が不正です - " + gCurrentInput;
			}

			if (typeWO)
			{
				if (num1.length != 4 && num1.length != 2)
				{
					return "エラー(410) 年部の書式が不正です - " + gCurrentInput;
				}
			}
			else if (num1.length != 4)
	        {
				return "エラー(420) 年部の書式が不正です - " + gCurrentInput;
			}
		}
		if (typeA)
		{
			return law + "願" + num1 + "-" + num2;
		}
		else
		{
			if (kind == "開" && num2.substring(0, 1) == "5") {
				kind = "表";
			}
			return  law + kind + num1 + "-" + num2;
		}
	} else {
		if (num.substring(0,1) == "-") {
			num = num.substring(1);
			num = Trim(num);
		}
		if (IsDigitString(num) == false) {
			return "エラー(490) 番号を認識できません - " + gCurrentInput;
		}
		var numLong = parseInt(num, 10);
		if (numLong > 9999999) {
			return "エラー(491) 番号が大きすぎます - " + gCurrentInput;
		}
		num = "0000000" + numLong.toString();
		num = num.substring(num.length - 7);
		
		return law + kind + num;
	}
	return "???"
}

function IsAlpha(ch)
{
	if (ch == null) return false;
	if (ch.length == 0) return false;
	var ch2 = ch.charAt(0);
	if (ch2 >= 'a' && ch2 <= 'z') return true;
	if (ch2 >= 'A' && ch2 <= 'Z') return true;
	return false;
}

function IsDigitString(s)
{
	if (s == null) return false;
	var len = s.length;
	for (i = 0; i < len; i++)
	{
		c = s.charAt(i);
		p = "0123456789".indexOf(c);
		if (p < 0)
			return false;
	}
	return true;
}
function TrimLeft(str)
{
	if (str == null)
		return "";
	if (str.length < 1)
		return "";

	var i = 0;
	while (i < str.length)
	{
		if (str.charAt(i) != " ")
			if (str.charAt(i) != "\t")
				if (str.charAt(i) != "　")
					return str.substring(i);
		i++;
	}
	return str;
}
function TrimRight(str)
{
	if (str == null)
		return "";
	if (str.length < 1)
		return "";

	var i = str.length - 1;
	while (i > 0)
	{
		if (str.charAt(i) != " ")
			if (str.charAt(i) != "\t")
				if (str.charAt(i) != "　")
					return str.substring(0, i + 1);
		i--;
	}
	return str;
}
function Trim(str)
{
	return TrimLeft(TrimRight(str));
}

function ToHalfDigits(s)
{
	if (s == null) return null;
	var len = s.length;
	var sw = "";
	for (i = 0; i < len; i++)
	{
		c = s.charAt(i);
		p = "０１２３４５６７８９−／".indexOf(c);
		if (p >= 0)
			sw = sw + "0123456789-/".charAt(p);
		else
			sw = sw + c;
	}
	return sw;
}

function ToHalfAlpha(s)
{
	if (s == null) return null;
	var len = s.length;
	var sw = "";
	for (i = 0; i < len; i++)
	{
		c = s.charAt(i);
		p = "ＡＢＣＤＥＦＧＨＩＪＫＬＭＮＯＰＱＲＳＴＵＶＷＸＹＺ".indexOf(c);
		if (p >= 0)
			sw = sw + "ABCDEFGHIJKLMNOPQRSTUVWXYZ".charAt(p);
		else
			sw = sw + c;
	}
	return sw;
}
function ToHalf(s)
{
	s = ToHalfDigits(s);
	s = ToHalfAlpha(s);
	return s;
}

// 特許番号出現後の数字でない文字以降をカットする
function removeTail(num)
{
	if (num == null) return "";
	if (num.length == 0) return "";
	var strAllow = "年";
	var i = 0;
	while (i < num.length)
	{
		if (IsDigitString(num.charAt(i)))
		{
			i++;
			break;
		}
		i++;
	}
	while (i < num.length)
	{
		if (IsDigitString(num.charAt(i)) == false)
		{
			if(num.charAt(i) != "-" && num.charAt(i) != "/")
			{
				if (strAllow.indexOf(num.charAt(i)) < 0)
				{
					return num.substring(0, i);
				}
			}
		}
		i++;
	}
	return num;
}

function removeKindcode(num)
{
	if (num == null) return "";
	if (num.length == 0) return "";
	var i = 0;
	while (i < num.length)
	{
		if (IsDigitString(num.charAt(i)))
		{
			i++;
			break;
		}
		i++;
	}
	while (i < num.length)
	{
		if (IsDigitString(num.charAt(i)) == false)
		{
			if(num.charAt(i) != "-" && num.charAt(i) != "/" && num.charAt(i) != ",")
			{
				if (num.charAt(i) == "T")
					if (i == num.length - 1)
						return num.substring(0, i) + "T";
				if (num.charAt(i) == "U")
					if (i == num.length - 1)
						return num.substring(0, i) + "U";
				if (num.charAt(i) == "Y")
					if (i == num.length - 1)
						return num.substring(0, i) + "Y";
				return num.substring(0, i);
			}
		}
		i++;
	}
	return num;
}

// num : "US" を含まない数字のみの文字列
function refineUSPNumber(num, bUSFormat)
{

	var num1 = num.substring(0, 4);
	var num2 = "";
	var p = num.indexOf("-");
	if (p >= 0)
	{
		if (p != 4)
			return "";
		num2 = num.substring(5);
	}
	else
	{
		if (num.length <= 7)
			return num;
		num2 = num.substring(4);
	}

	if (num2.length == 0)
		return "";
	num2 = "0000000" + num2;
	if (bUSFormat)
	{
		num2 = num2.substring(num2.length - 7);
	}
	else
	{
		num2 = num2.substring(num2.length - 6);
	}
	
	return num1 + num2;
}

function refineNumberUS(numParam)
{
	if (numParam == null) return "";
	num = ExtractNumberBody(numParam)
	num = ReplaceAll(num, "\t", "");
	num = ReplaceAll(num, "，", "");
	num = ReplaceAll(num, "、", "");
	num = ReplaceAll(num, " ", "");
	num = ReplaceAll(num, ",", "");
    num = ToHalfDigits(num);
	num = num.toUpperCase();
    num = ToHalfAlpha(num);
	num = Trim(num);
	if (IsDigitString(num))
	{
		num = "US" + num;
	}
	else
	if (num.substring(0,2) != "US")
	{
		return "エラー(1000) 数字のみ または 'US' + 数字  で指定して下さい - " + gCurrentInput;
	}

	num = removeKindcode(num);
	if (num.substring(0,2) == "US")
		num = num.substring(2);

	num = refineUSPNumber(num, true);
	if (num.length == 0)
	{
		return "エラー(1100) 番号の書式が不正です - " + gCurrentInput;
	}
	return "US" + num;
}

// num : "WO" を含まない数字のみの文字列
function refineWONumber(num, bDelimit, bEspacenetSerial)
{
	var num1 = ""
	var num2 = "";
	num = num.replace("-", "/");
	var p = num.indexOf("/");
	if (p >= 0)
	{
		 num1 = num.substring(0, p);
		 num2 = num.substring(p + 1);
	}
	else
	{
		if (num.substring(0,2) == "20" || num.substring(0,2) == "19")
		{
			 num1 = num.substring(0, 4);
			 num2 = num.substring(4);
		}
		else
		{
			 num1 = num.substring(0, 2);
			 num2 = num.substring(2);
		}
	}

	
	var y = Number(num1);
	if (y < 60)
		y += 2000;
	else if (y < 100)
		y += 1900;
	
	num2 = "000000" + num2;
	num2 = num2.substring(num2.length - 6)
	if (bEspacenetSerial) {
		if (y == 2002)
		{
			var ser = Number(num2);
			if (ser < 51231)
				num2 = num2.substring(num2.length - 5)
		}
		else if (y < 2002)
		{
			num2 = num2.substring(num2.length - 5)
		}
	}
	
	if (y >= 2004)
	{
		num1 = String(y);
	}
	else
	{
		num1 = String(y);
		num1 = num1.substring(num1.length - 2);
	}
	if (bDelimit)
		return num1 + "/" + num2;
	return num1 + num2;
}
// num : "EP" を含まない数字のみの文字列
function refineEPNumber(num)
{
	var num2 = "000000" + num;
	num2 = num2.substring(num2.length - 7)
	return num2;
}



function JPtoEP(num)
{
	num = ReplaceAll(num, "\t", " ");
	num = ReplaceAll(num, " ", "");
	num = ReplaceAll(num, ",", "");
	num = ReplaceAll(num, "ー", "-");
	num = ReplaceAll(num, "―", "-");

	num = Trim(num);

    num = ExtractNumberBody(num);
    num = num.toUpperCase();
    num = ToHalfDigits(num);
    num = ToHalfAlpha(num);
    
    var typeWO = false;
    num = num.replace("国際特許公開", "WO")
    num = num.replace("国際特許", "WO")
    num = num.replace("再公表", "WO")
    num = num.replace("再表", "WO")
    num = num.replace("/", "-")
    num = num.replace("特許公開", "特開")
    num = num.replace("特許公表", "特表")
    num = num.replace("実用新案", "実用")
    num = num.replace("実用公開", "実開")
    num = num.replace("平成", "平")
    num = num.replace("昭和", "昭")
    num = num.replace("H", "平")
    num = num.replace("S", "昭")
    num = num.replace("年-", "-")
    if (num.indexOf("-") < 0) {
	    num = num.replace("年", "-")
    }

	if (num.substring(0,2) == "WO")
    {
    	typeWO = true;
    	num = num.substring(2);
    	num = refineWONumber(num, true);
	    //num = num.replace("/", "-")
	    num = num.replace("/", "")
	    num = "WO" + num;
	    return num;
    }
    
    var law = "";
    var kind = "";
	law = num.substring(0, 1);
    var type1 = false; // 年-連番 タイプの番号

    kind = num.substring(1, 2);
    if ("開公表".indexOf(kind) >= 0)
    {
    	type1 = true;
	}
    num = num.substring(2);
    if (type1)
    {
		var p = num.indexOf("-");
		var num1 = num.substring(0, p);
		var num2 = num.substring(p + 1);
		if (IsDigitString(num2) == false)
		{
			return "エラー(5000) 連番部の書式が不正です - " + gCurrentInput;
		}
		if (num2.length > 6)
		{
			return "エラー(5100) 番号が大きすぎます - " + gCurrentInput;
		}
		num2 = "000000" + num2;
		num2 = num2.substring(num2.length - 6);
		if (num2.substring(0, 1) == "5") {
			kind = "表";
		}
		
		var gengo = num1.substring(0, 1);
		if ("平昭".indexOf(gengo) >= 0)
		{
			var year = Number(num1.substring(1));
			if ("平".indexOf(gengo) >= 0) {
				if (year >= 12) {
					year += 1988;
				}
			}
			num1 = year.toString();
		}
		else
		{
			if (IsDigitString(num1) == false)
			{
				return "エラー(5200) 年部の書式が不正です - " + gCurrentInput;
			}
			if (num1.length != 4)
	        {
				return "エラー(5210) 年部の書式が不正です - " + gCurrentInput;
			}
			var y = Number(num1);
			if (y <= 1999) {
				if (y < 1989) {
					y -= 1925;
				} else {
					y -= 1988;
				}
			}
			num1 = y.toString();
		}

		if (law == "実")
			return "JP" + num1 + num2 + "U";

		if (kind == "表")
			return "JP" + num1 + num2 + "T";
		
		return "JP" + num1 + num2;
	} else {
		return "";
	}
}


function refineNumber(num, defaultJPKindA, defaultJPKindB)
{
	gCurrentInput = num;
	p = num.indexOf("Application");
	if (p >= 0) {
		p = num.indexOf(":");
		if ( p > 0 ) {
			num = num.substring(p + 1);
			num = Trim(num);
			gCurrentInput = num;
		}
	}
	num = ToHalf(num);
	num = Trim(num);
	num = ReplaceAll(num, "、", "");	
	num = ReplaceAll(num, "，", "");	
	num = ReplaceAll(num, ",", "");	
	if (num.length < 2)
		return "";

	if (IsDigitString(num)) {
		if (num.length == 7) {
			// 数字のみ７桁
			num = defaultJPKindB + num;
		} else if (num.substring(0, 2) == "20") {
			// 数字のみ10桁
			if (num.length == 11) {
				// US公開
				num = "US" + num.substring(0, 4) + "-" + num.substring(4);
			} else {
				num = defaultJPKindA + num.substring(0, 4) + "-" + num.substring(4);
			}
		}
	}
	
	num = num.toUpperCase();
	num = num.replace("米国", "US");	
	num = num.replace("US公開", "US");	
	num = num.replace("US特許公開", "US");	
	num = num.replace("US特許", "US");	
    num = num.replace("登実", "実用")
	num = ReplaceAll(num, "ー", "-");
	num = ReplaceAll(num, "―", "-");
	num = ReplaceAll(num, "−", "-");
    
	num = ExtractNumberBody(num);

	if (num.substring(0, 2) == "JP") {
		num2 = num.substring(2);
		p = num2.indexOf(" ");
		if (p > 0) {
			num2 = num2.substring(0, p);
		}
		if (num2.substring(num2.length - 1) == "T") {
			num2 = num2.substring(0, num2.length - 1);
		}
		if (IsDigitString(num2)) {
			if (num2.length == 11) { // esp@cenet 出願番号は 西暦 + 11桁
				num = "特願" + num2.substring(0, 4) + "-" + num2.substring(5);
			} else {
				num = "特開" + num2.substring(0, 4) + "-" + num2.substring(4);
			}
		}
		//window.alert(num);
		
	}

	if ("平昭HS".indexOf(num.substring(0,1)) >= 0) {
		num = defaultJPKindA + num;
	}

	// 2000-123456 形式は特開とする
	p = num.indexOf("-");
	if (p == 4) {
		if (IsDigitString(num.substring(0, 4))) {
			if (IsDigitString(num.substring(5))) {
				num = defaultJPKindA + num;
			}
		}
	}

	var isJP = false;
	if (num.indexOf("特") >= 0)
		isJP = true;
	else if (num.indexOf("実")  >= 0)
		isJP = true;
	else if (num.substring(0,2) == "JP")
		isJP = true;
	else if (num.indexOf("公") >= 0)
		isJP = true;
	else if (num.indexOf("再") >= 0)
		isJP = true;

	var isTypeA = false;
	if (num.indexOf("願")  >= 0)
		isTypeA = true;

	if (num.substring(0, 2) == "WO")
		isJP = true;

	var isUS = false;
	if (num.substring(0, 2) == "US")
		isUS = true;

	if (isUS) {
		return refineNumberUS(num);
	}
	if (isJP)
	{
		return refineNumberJP(num);
	}
	return "エラー(101) 番号を認識できません - " + gCurrentInput;
}


//=================================================

function convertDateString(d, convPattern)
{
    // convPattern : "$1"  d に含まれる最初の日付要素
    //               "$2"  d に含まれる２番目の日付要素
    //               "$3"  d に含まれる３番目の日付要素
    var s = d.replace(/([0-9]+)[\/-]([0-9]+)[\/-]([0-9]+)/, convPattern);
    return s;
}
function convertDateFormat(convType)
{
	if (document.domain.indexOf("djsoft") < 0) {
		document.location.href = "http://www.djsoft.co.jp";
		return "";
	}
	
	// convType 1 UStoJP  2 EPtoJP
	var convPattern;
	if (convType == 2)
		convPattern = "$3/$2/$1";
	else
		convPattern = "$3/$1/$2";
	
	var strInput = document.frm1.numbers.value;
	strInput = ReplaceAll(strInput, "\r\n", "\n");
	var arrLines = strInput.split("\n");
	var s;
	var strResult = "";
	for (var i = 0; i < arrLines.length; i++) {
		s = arrLines[i];
		s = convertDateString(s, convPattern);
		strResult = strResult + "\n" + s;
	}
	document.frm1.numbersResult.value = strResult.substring(1);

}
