
var finished = 0;
var search = 0;
var domains = new Array('.com','.net','.org','.info','.biz','.ac.jp','.ad.jp','.co.jp','.ed.jp','.go.jp','.gr.jp','.ne.jp','.or.jp','.jp','.to','.nu','.ac','.st');

// 非同期通信メイン処理
function domainsearch(q){
	
	
	// テキスト入力時
	if (q && q == document.getElementById("domainname").value) {
	
		// エラーチェック
		if ( q.match(/[^A-Za-z0-9-\.]+/gi) ) {
			alert ("検索に使用出来る文字は半角英数字とハイフンだけです。");
			return;
		}
		
		// トップドメイン指定記入時
		if ( q.match(/\./g) ) {
			

			var matched;
			for (i = 0 ; i < 18 ; i++) {
				var tourokudomain = new RegExp('[A-Za-z0-9-]+' + domains[i] + '$');
				if (q.match(tourokudomain)) {
					matched = domains[i];
					break;
				}
			}
			if (!matched) {
				alert ("検索に使用出来る文字は半角英数字とハイフンだけです。");
				return;
			}
			q = q.replace(matched, "");
			if ( q.match(/\./g) ) {
				alert ("検索に使用出来る文字は半角英数字とハイフンだけです。");
				return;
			}
			
			
			// ボタン使用不可
			document.forms["f1"].elements["search_button"].disabled=true;
			document.forms["f1"].elements["allclear_button"].disabled=true;
			document.forms["f1"].elements["allselect_button"].disabled=true;
			search = 1;
			finished = 0;
			
			matched = matched.replace("\.","");
			
			//指定ドメイン以外の結果とチェックを外した後指定ドメインを検索＆チェック
			for(k = 0; k < domains.length; k++) {
				var doms = domains[k];
				doms = doms.replace("\.", "");
				if (matched == doms) {
					for (var i = 0 ; i < (document.getElementById("f1")).length ; i++) {
						if (document.getElementById("f1")[i].type == "checkbox") {
							document.getElementById("f1")[i].checked = false;
							var domain_area = document.getElementById("f1")[i].value+"_area";
							document.getElementById(domain_area).innerHTML = "";
						}
					}
					document.getElementById(doms).checked = true;
					domainname_get(q, doms); 
				}
			}
			
			
			return;
		}
		
		// エラーチェック
		if ( q.match(/[^A-Za-z0-9-]+/gi) ) {
			alert ("検索に使用出来る文字は半角英数字とハイフンだけです。");
			return;
		}
		
		
		disable_set();
		
		
		for(k = 0; k < domains.length; k++) {
			var doms = domains[k];
			doms = doms.replace("\.", "");
			if (document.getElementById(doms).checked == true) {
				domainname_get(q, doms); 
			}
		}
	}
	// テキスト未記入時
	else if (q == "") {
		// ボタン使用可
		document.forms["f1"].elements["search_button"].disabled=false;
		document.forms["f1"].elements["allclear_button"].disabled=false;
		document.forms["f1"].elements["allselect_button"].disabled=false;
	}
	
	// チェックボックス操作時
	else {
		
		var topdomain = q;
		var topdomain_area = topdomain+"_area";
		var domainname = document.getElementById("domainname").value;
		
		// チェックを入れた場合の処理
		if (document.getElementById(topdomain).checked == true) {

			// エラーチェック
			if ( domainname.match(/\./g) ) {
				var domaincheck = new RegExp('.' + topdomain + '$');
				if ( domainname.match(domaincheck)  ) {
					domainname = domainname.replace('.'+topdomain, "");
				}
				else {
					document.getElementById(topdomain).checked = false;
					alert ("検索に使用出来る文字は半角英数字とハイフンだけです。");
					return;
				}
			}
			if ( domainname.match(/[^A-Za-z0-9-]+/gi) ) {
				document.getElementById(topdomain).checked = false;
				alert ("検索に使用出来る文字は半角英数字とハイフンだけです。");
				return;
			}
		
			if (domainname) {
				
				// リクエストオブジェクト生成
				if (window.XMLHttpRequest) {
					var httpObject0 = new XMLHttpRequest();
				}
				else if (window.ActiveXObject) {
					var httpObject0 = new ActiveXObject("Msxml2.XMLHTTP");
				}
				
				if (httpObject0) {

					// リクエストデータを受け取れなかった場合リトライ
					var tryAgain = function () {
						domainsearch(q);
					}
					var timer0 = setTimeout(
						function() {
							httpObject0.abort();
							httpObject0.onreadystatechange = null;
							setTimeout(tryAgain, 1*1000);
						},
					10*1000);
				
					// リクエストに状態変化が起きれば状態別に処理
					httpObject0.onreadystatechange = function () {

						if (httpObject0.readyState == 4) {
							clearTimeout(timer0);
							if (httpObject0.status == 200) {
								document.getElementById(topdomain_area).innerHTML = httpObject0.responseText;
								httpObject0.abort();
							}
							else if (httpObject0.status==304) {
								// "Not Modified": No change to display
							}
							else if (httpObject0.status >= 400 && r.status < 500) {
								// Client error, probably bad URI
								document.getElementById(topdomain_area).innerHTML = "<img src=\"img/uncertainty.gif\">";
								httpObject.abort();
							}
							else if (httpObject0.status >= 500 && r.status < 600) {
								// Server error, try again after delay
								setTimeout(tryAgain, 1*1000);
							}
							else {
								document.getElementById(topdomain_area).innerHTML = "<img src=\"img/uncertainty.gif\">";
								httpObject0.abort();
							}
						}
						else {
							document.getElementById(topdomain_area).innerHTML = "<img src=\"img/searching_new.gif\">";
							return;
						}

					}
				}
				httpObject0.open("POST", "./domainsearch.cgi", true);
				httpObject0.setRequestHeader("content-type", "application/x-www-form-urlencoded;charset=UTF-8");
				httpObject0.send(q+"="+domainname);

			}
		}
		// チェックを外した場合の処理
		else {
			var domainid = document.getElementById(topdomain).value;
			var domain_area = domainid+"_area";
			document.getElementById(domain_area).innerHTML = "";
		}
	}

}


// 各ドメインの非同期通信処理
function domainname_get (q, domain_name) {
	var topdomain = document.getElementById(domain_name).value;
	var topdomain_area = topdomain+"_area";
	if (window.XMLHttpRequest) {
		var httpObject1 = new XMLHttpRequest();
	}
	else if (window.ActiveXObject) {
		var httpObject1 = new ActiveXObject("Msxml2.XMLHTTP");
	}
	if (httpObject1) {

		var tryAgain = function () {
			domainname_get(q, domain_name);
		}
		var timer1 = setTimeout(
			function() {
				httpObject1.abort();
				httpObject1.onreadystatechange = null;
				setTimeout(tryAgain, 1*1000);
			},
		10*1000);

		httpObject1.onreadystatechange = function () {

			if (httpObject1.readyState == 4) {
				clearTimeout(timer1);
				if (httpObject1.status == 200) {
					document.getElementById(topdomain_area).innerHTML = httpObject1.responseText;
					httpObject1.abort();
				}
				else if (httpObject1.status==304) {
					
				}
				else if (httpObject1.status >= 400 && r.status < 500) {
					document.getElementById(topdomain_area).innerHTML = "<img src=\"img/uncertainty.gif\">";
				}
				else if (httpObject1.status >= 500 && r.status < 600) {
					setTimeout(tryAgain, 1*1000);
				}
				else {
					document.getElementById(topdomain_area).innerHTML = "<img src=\"img/uncertainty.gif\">";
					httpObject1.abort();
				}
				
				finished++;
				if (finished == search) {
					document.forms["f1"].elements["search_button"].disabled=false;
					document.forms["f1"].elements["allclear_button"].disabled=false;
					document.forms["f1"].elements["allselect_button"].disabled=false;
				}
			}
			else {
				document.getElementById(topdomain_area).innerHTML = '<img src="img/searching_new.gif">';
			}
		
		}
	}
	httpObject1.open("POST", "./domainsearch.cgi", true);
	httpObject1.setRequestHeader("content-type", "application/x-www-form-urlencoded;charset=UTF-8");
	httpObject1.send(topdomain+"="+q);
	
}






// 画面操作

// チェックボタン＆検索結果全削除
function allreset (f) {
	for (var i = 0 ; i < f.length ; i++) {
		if (f[i].type == "checkbox") {
			f[i].checked = false;
			var domain_area = f[i].value+"_area";
			document.getElementById(domain_area).innerHTML = "";
		}
	}
}

// チェックボタン＆検索結果全投入
function allselect (f) {
	for (var i = 0 ; i < f.length ; i++) {
		if (f[i].type == "checkbox") {
			f[i].checked = true;
		}
	}
}

// 検索結果のメッセージを別ウインドウで表示
function newwindow (domain) {
	newWin = window.open("whois.cgi?domain="+domain,"","width=765,height=530,scrollbars=1,resizable=1,toolber=no,location=no,directories=no,status=no,menubar=0");
}

function disable_set () {

	search = 0;
	finished = 0;
	// チェックボックスの数を取得
	var obj = document.forms["f1"].elements;
	obj["search_button"].disabled=true;
	document.forms["f1"].elements["allclear_button"].disabled=true;
	document.forms["f1"].elements["allselect_button"].disabled=true;
	for(i=0;i<obj.length;i++){
		if (obj[i].type == "checkbox") {
	        if(obj[i].checked == true){
	            search++;
	        }
		}
    }
	
	if (!search) {
		obj["search_button"].disabled=false;
		document.forms["f1"].elements["allclear_button"].disabled=false;
		document.forms["f1"].elements["allselect_button"].disabled=false;
	}
}
