﻿// JavaScript Document
// このソースは改変も商用利用も自由ですが、
// その自由を護るために著作権は放棄しません。
//---------------------------------------------------------------------
// 石本光明 2007.05.13
tool = {
	setUp:{
		newL:"",
		ua: window.navigator.userAgent,
		getNewL: function (){
			if(tool.setUp.ua.indexOf("Firefox") != -1){
				tool.setUp.newL = "%0A";
			}else{tool.setUp.newL = "%0D%0A";}
		},
		lkana: new Array("ガ","ギ","グ","ゲ","ゴ","ザ","ジ","ズ","ゼ","ゾ","ダ","ヂ","ヅ","デ","ド","バ","ビ","ブ","ベ","ボ","パ","ピ","プ","ペ","ポ","ア","イ","ウ","エ","オ","カ","キ","ク","ケ","コ","サ","シ","ス","セ","ソ","タ","チ","ツ","テ","ト","ナ","ニ","ヌ","ネ","ノ","ハ","ヒ","フ","ヘ","ホ","マ","ミ","ム","メ","モ","ヤ","ユ","ヨ","ラ","リ","ル","レ","ロ","ワ","ヲ","ン","ァ","ィ","ゥ","ェ","ォ","ャ","ュ","ョ","ッ","ー"),
		skana: new Array("ｶﾞ","ｷﾞ","ｸﾞ","ｹﾞ","ｺﾞ","ｻﾞ","ｼﾞ","ｽﾞ","ｾﾞ","ｿﾞ","ﾀﾞ","ﾁﾞ","ﾂﾞ","ﾃﾞ","ﾄﾞ","ﾊﾞ","ﾋﾞ","ﾌﾞ","ﾍﾞ","ﾎﾞ","ﾊﾟ","ﾋﾟ","ﾌﾟ","ﾍﾟ","ﾎﾟ","ｱ","ｲ","ｳ","ｴ","ｵ","ｶ","ｷ","ｸ","ｹ","ｺ","ｻ","ｼ","ｽ","ｾ","ｿ","ﾀ","ﾁ","ﾂ","ﾃ","ﾄ","ﾅ","ﾆ","ﾇ","ﾈ","ﾉ","ﾊ","ﾋ","ﾌ","ﾍ","ﾎ","ﾏ","ﾐ","ﾑ","ﾒ","ﾓ","ﾔ","ﾕ","ﾖ","ﾗ","ﾘ","ﾙ","ﾚ","ﾛ","ﾜ","ｦ","ﾝ","ｧ","ｨ","ｩ","ｪ","ｫ","ｬ","ｭ","ｮ","ｯ","ｰ"),
		lalpha: new Array("Ａ","Ｂ","Ｃ","Ｄ","Ｅ","Ｆ","Ｇ","Ｈ","Ｉ","Ｊ","Ｋ","Ｌ","Ｍ","Ｎ","Ｏ","Ｐ","Ｑ","Ｒ","Ｓ","Ｔ","Ｕ","Ｖ","Ｗ","Ｘ","Ｙ","Ｚ","ａ","ｂ","ｃ","ｄ","ｅ","ｆ","ｇ","ｈ","ｉ","ｊ","ｋ","ｌ","ｍ","ｎ","ｏ","ｐ","ｑ","ｒ","ｓ","ｔ","ｕ","ｖ","ｗ","ｘ","ｙ","ｚ","１","２","３","４","５","６","７","８","９","０","－","―"),
		salpha: new Array("A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","1","2","3","4","5","6","7","8","9","0","-","-"),
		lsymboles: new Array("%uFF01","%uFF03","%uFF04","%uFF05","%uFF06","%u2019","%uFF08","%uFF09","%uFF0C","%uFF1A","%uFF1B","%uFF1C","%uFF1D","%uFF1E","%uFF1F","%uFF3B","%uFFE5","%uFF3D","%uFF3E","%u2018","%uFF5B","%uFF5C","%uFF5D"),
		ssymboles: new Array("%21","%23","%24","%25","%26","%27","%28","%29","%2C","%3A","%3B","%3C","%3D","%3E","%3F","%5B","%5C","%5D","%5E","%60","%7B","%7C","%7D"),
		lsymbol: new Array("＿","＋","－","．","＊","／","＠"),
		ssymbol: new Array("_","\\+","-","\\.","\\*","/","@"),
		lspace: new Array("%u3000"),
		sspace: new Array("%20"),
		lbrakets: new Array("（","［","＜","｛","）","］","＞","｝"),
		sbrakets: new Array("(","[","<","{",")","]",">","}")
	},
	userSet:{
		objForm: null,
		readyPerform: function(){
			tool.userSet.objForm = document.forms[0];
		}
	},
	performance:{
		main: function(){
			var contents = String(tool.userSet.objForm.elements["original"].value);/*一応文字列に*/
			var letters = contents.length;//judge the length of letters
			if(tool.userSet.objForm.elements["replaceText"].checked){
				var before = tool.userSet.objForm.elements["replacedWord"].value;
				var after = tool.userSet.objForm.elements["replaceWord"].value;
				contents = tool.performance.convertAll(contents,before,after);
			}//replace a text to another one
			contents = tool.performance.convertSystemOfAry(contents,tool.userSet.objForm.katakana,tool.setUp.lkana,tool.setUp.skana);//convert katakana
			contents = tool.performance.convertSystemOfAry(contents,tool.userSet.objForm.alphabet,tool.setUp.lalpha,tool.setUp.salpha);//convert alphabet
			contents = tool.performance.convertSystemOfAry(contents,tool.userSet.objForm.symbol,tool.setUp.lsymbol,tool.setUp.ssymbol);//convert symbols
			contents = escape(contents);/*通常の文字列からURL形式に*/
			contents = tool.performance.convertSystemOfAry(contents,tool.userSet.objForm.symbol,tool.setUp.lsymboles,tool.setUp.ssymboles);//convert Escaped symbols
			contents = tool.performance.convertSystemOfAry(contents,tool.userSet.objForm.space,tool.setUp.lspace,tool.setUp.sspace);//convert Escaped symbols
			if(tool.userSet.objForm.elements["newline"].checked){
				contents = tool.performance.convertAll(contents,tool.setUp.newL,"");//delete newL
			}
			if(tool.userSet.objForm.elements["tab"].checked){
				contents = tool.performance.convertAll(contents,"%09","");//delete TAB
			}
			if(tool.userSet.objForm.elements["delspace"].checked){
				contents = tool.performance.convertAll(contents,"%u3000","");//delete large space
				contents = tool.performance.convertAll(contents,"%20","");//delete small space
			}
			if(tool.userSet.objForm.elements["jcomma"].checked){
				contents = tool.performance.convertAll(contents,"%u3001","");//delete Janese comma
				contents = tool.performance.convertAll(contents,"%u3002","");//delete Japanese period
			}
			if(tool.userSet.objForm.elements["spaceline"].checked){//delete space,tab on the front of newL before delete newL
				contents = tool.performance.convertAll(contents,"(?:%u3000){1,}"+tool.setUp.newL,tool.setUp.newL);
				contents = tool.performance.convertAll(contents,"(?:%20){1,}"+tool.setUp.newL, tool.setUp.newL);
				contents = tool.performance.convertAll(contents,"(?:%09){1,}"+tool.setUp.newL, tool.setUp.newL);
				contents = tool.performance.convertAll(contents,"(?:"+tool.setUp.newL+"){1,}"+tool.setUp.newL,tool.setUp.newL);
			}
			if(tool.userSet.objForm.elements["wastespace"].checked){//delete White Space Before And After Lines
				contents = tool.performance.convertAll(contents,tool.setUp.newL+"(?:%u3000){1,}",tool.setUp.newL);
				contents = tool.performance.convertAll(contents,tool.setUp.newL+"(?:%20){1,}",tool.setUp.newL);
				contents = tool.performance.convertAll(contents,tool.setUp.newL+"(?:%09){1,}",tool.setUp.newL);
				contents = tool.performance.convertAll(contents,"(?:%u3000){1,}"+tool.setUp.newL,tool.setUp.newL);
				contents = tool.performance.convertAll(contents,"(?:%20){1,}"+tool.setUp.newL,tool.setUp.newL);
				contents = tool.performance.convertAll(contents,"(?:%09){1,}"+tool.setUp.newL,tool.setUp.newL);
			}
			contents = unescape(contents);
			contents = tool.performance.convertBracket(contents,tool.setUp.lbrakets,tool.setUp.sbrakets);
			tool.userSet.objForm.elements["complete"].value = contents;
			if(tool.userSet.objForm.elements["numberOfLetters"].checked){
				alert(contents.length + "文字変換しました。");
			}
			
		},
		convertAll: function(TXT,BEFORE,AFTER){
			var reg = new RegExp(BEFORE,"g");
			TXT = TXT.replace(reg,AFTER);
			return TXT;
		},
		convertSystemOfAry: function(TXT,RADIO,ARY1,ARY2){
			for(var i=0; i<3; i++){
				if(RADIO[i].checked){
					if(i==1){
						for(var s=0; s<ARY1.length; s++){TXT = tool.performance.convertAll(TXT,ARY1[s],ARY2[s]);}
					}
					else{
						if(i==2){
							for(var s=0; s<ARY2.length; s++){TXT = tool.performance.convertAll(TXT,ARY2[s],ARY1[s]);}
						}
						else{TXT = TXT;}
					}
				}
			}
			return TXT;
		},
		reverseText: function(TXT){
			TXT = TXT.split("");
			TXT = TXT.reverse();
			TXT = TXT.join("");
			return TXT;
		},
		convertBracket: function(TXT,ARY1,ARY2){
			if(tool.userSet.objForm.elements["bracketssize"].checked){
				for(i in ARY1){
					var tmp = "\\" + ARY2[i];
					TXT = tool.performance.convertAll(TXT,tmp,ARY1[i]);
				}
				for(var i=0; i<4; i++){
					var tmp = "(" + tool.setUp.skana.join(")|(") + ")";
					var reg = ARY1[i] + "(?=" + tmp + tool.setUp.salpha.join("|") + ")";
					var reg1 = RegExp(reg,"g");
					TXT = TXT.replace(reg1,ARY2[i]);
				}
				TXT = tool.performance.reverseText(TXT);
				for(var i=4; i<ARY1.length; i++){
					var tmp = "(" + tool.setUp.skana.join(")|(") + ")";
					var reg = ARY1[i] + "(?=" + tmp + tool.setUp.salpha.join("|") + ")";
					var reg2 = RegExp(reg,"g");
					TXT = TXT.replace(reg2,ARY2[i]);
				}
				TXT = tool.performance.reverseText(TXT);
			}
			return TXT;
		}
	},
	appendFunc:{
		displayflag: true,
		display: function(){//高度な機能を表示させる関数
			if(tool.appendFunc.displayflag){
				document.getElementById("highfunction").style.display = "block";
				tool.appendFunc.displayflag = !tool.appendFunc.displayflag;
			}
			else{
				document.getElementById("highfunction").style.display = "none";
				tool.appendFunc.displayflag = !tool.appendFunc.displayflag;
			}
		},
		clearFlag: true,
		contents: null,
		textClear: function(){//文字をクリアする関数
			if(tool.appendFunc.clearFlag){
				tool.appendFunc.contents = document.forms[0].elements["original"].value;
				document.forms[0].elements["original"].value = "";
				document.forms[0].elements["complete"].value = "";
				tool.appendFunc.clearFlag = !tool.appendFunc.clearFlag;
			}
		},
		recallText: function(){//文字を誤ってクリアした時に元に戻す
			if(tool.appendFunc.contents != null && !tool.appendFunc.clearFlag){
				document.forms[0].elements["original"].value = tool.appendFunc.contents;
				tool.appendFunc.clearFlag = !tool.appendFunc.clearFlag;
			}
			else{alert("このボタンは入力した文字を誤ってクリアした時に使う機能です。");}
		}
	}
}
tool.setUp.getNewL();

