﻿
function Id(id){
	return document.getElementById(id);
}
function Name(name){
	return document.getElementsByName(name)[0];
}

/*** 初期化 ******************************************************************/

var initialized = false;
// IE
if (window.attachEvent) window.attachEvent("onload", function(){Initialize();});
// それ以外
if (window.addEventListener) window.addEventListener("load", function(){Initialize();}, false);

function Initialize(){
	if( initialized ){
		return;
	}
	
	Id("form_block").style.position = "relative";
	Id("form_sending").style.width = "100%";
	Id("form_sending").style.textAlign = "center";
	Id("form_sending").style.paddingTop = "150px";
	Id("form_sending").style.paddingBottom = "150px";
	Id("form_done").style.width = "100%";
	Id("form_done").style.textAlign = "center";
	Id("form_done").style.paddingTop = "150px";
	Id("form_done").style.paddingBottom = "150px";
	
	var obj;
	
	// 必須項目一覧
	var necessary_names = document.getElementById("input_necessary").value.split(",");
	for( var i=0 , length = necessary_names.length ; i<length ; i++ ){
		necessary_names[i] = "input_"+necessary_names[i];
	}
	
	// 必須項目の項目名に※をへばりつけろ
	for( var i=0,necessary_names_length=necessary_names.length ; i<necessary_names_length ; i++ ){
		obj = GetField( Name(necessary_names[i]) );
		AppendStar( obj );
	}
	
	initialized = true;
}

function GetField(obj){
	var field = Id("field_"+obj.name.substr( 6 ));
	return field;
}

function AppendStar( obj ){
	var span = document.createElement("span");
	span.innerHTML = "※";
	obj.appendChild( span );
}

/*** クリア ******************************************************************/
function FormClear(){
	
	Name("input_name").value = "";
	Name("input_name").style.backgroundColor = "white";
	Name("input_mail").value = "";
	Name("input_mail").style.backgroundColor = "white";
	if( Name("input_mail_check") ){
		Name("input_mail_check").value = "";
		Name("input_mail_check").style.backgroundColor = "white";
	}
	
	// input_paramXXを0から順に、存在するまで処理
	var i=0;
	while( 1 ){
		var input = document.getElementsByName( "input_param"+i );
		if( input.length==0 ){
			break;
		}
		
		for( var j=0,length=input.length ; j<length ; j++ ){
			var obj = input[j];
			// チェックの場合
			if( obj.type=="checkbox" || ( obj.type=="radio" && j!=0 ) ){
				obj.checked = false;
				obj.parentNode.style.backgroundColor = "white";
			}
			// ラジオボタンの場合
			else if( obj.type=="radio" && j==0 ){
				obj.checked = true;
			}
			// セレクトボックスの場合
			else if( obj.tagName.match(/select/i) ){
				obj.selectedIndex = 0;
			}
			// テキストの場合
			else{
				obj.value = "";
				obj.style.backgroundColor = "white";
			}
		}
		
		i++;
	}
	
	Id("input_error").style.visibility = "hidden";
}

/*** 必須項目 ****************************************************************/
function EmptyNecessary(){
	var out = false;
	var necessary_names = document.getElementById("input_necessary").value.split(",");
	for( var i=0 , length = necessary_names.length ; i<length ; i++ ){
		necessary_names[i] = "input_"+necessary_names[i];
	}
	
	for( var i=0,necessary_names_length=necessary_names.length ; i<necessary_names_length ; i++ ){
		var necessary = document.getElementsByName( necessary_names[i] );
		
		// ひとつの場合
		if( necessary.length==1 ){
			var obj = necessary[0];
			// チェックの場合
			if( obj.type=="checkbox" ){
				// 未入力
				if( obj.checked==false ){
					out = true;
					obj.parentNode.style.backgroundColor = "#ffcccc";
				}
				// 入力済み
				else{
					obj.parentNode.style.backgroundColor = "white";
				}
			}
			// テキストの場合
			else{
				// 未入力か<a href含んでいる
				if( obj.value=="" || obj.value.match(/<a.+href=/im) ){
					out = true;
					obj.style.backgroundColor = "#ffcccc";
				}
				// 入力済み
				else{
					obj.style.backgroundColor = "white";
				}
			}
		}
		
		// 複数の場合
		else{
			var ng = true;
			// ひとつ以上入力されているか確認
			for( var j=0,length=necessary.length ; j<length ; j++ ){
				if( necessary[j].type=="checkbox" ){
					if( necessary[j].checked!="" ){
						ng = false;
					}
				}else{
					if( necessary[j].value!="" ){
						ng = false;
					}
				}
			}
			// ひとつも未入力
			if( ng ){
				out = true;
				for( var j=0,length=necessary.length ; j<length ; j++ ){
					if( necessary[j].type=="checkbox" || necessary[j].type=="radio" ){
						necessary[j].parentNode.style.backgroundColor = "#ffcccc";
					}else{
						necessary[j].style.backgroundColor = "#ffcccc";
					}
				}
			}
			// ひとつ以上入力済み
			else{
				for( var j=0,length=necessary.length ; j<length ; j++ ){
					if( necessary[j].type=="checkbox" || necessary[j].type=="radio" ){
						necessary[j].parentNode.style.backgroundColor = "white";
					}else{
						necessary[j].style.backgroundColor = "white";
					}
				}
			}
		}
	}
	
	// メアド確認
	if( Name("input_mail_check") ){
		if( Name("input_mail_check").value != Name("input_mail").value ){
			out = true;
			Name("input_mail_check").style.backgroundColor = "#ffcccc";
		}else{
			Name("input_mail_check").style.backgroundColor = "white";
		}
	}
	
	return out;
}

/*** 確認ボタン **************************************************************/
function FormCheck(){
	
	// 必須項目チェック
	if( EmptyNecessary() ){
		Id("input_error").style.visibility = "visible";
		return;
	}
	Id("input_error").style.display = "none";
	
	Id("form_input").style.display = "none";
	
	var table = document.createElement("table");
	var tbody = document.createElement("tbody");
	Id("form_check").appendChild( table );
		table.appendChild( tbody );
	
	var tr_name = document.createElement("tr");
	var th_name = document.createElement("th");
	var td_name = document.createElement("td");
	th_name.innerHTML = document.getElementById("field_name").innerHTML.replace( /<SPAN>※<\/SPAN>|<span>※<\/span>/ , "" );
	td_name.innerHTML = ReplaceInvalidCode( Name("input_name").value );
	td_name.id = "check_name";
	tbody.appendChild( tr_name );
		tr_name.appendChild( th_name );
		tr_name.appendChild( td_name );
	
	var tr_mail = document.createElement("tr");
	var th_mail = document.createElement("th");
	var td_mail = document.createElement("td");
	th_mail.innerHTML = document.getElementById("field_mail").innerHTML.replace( /<SPAN>※<\/SPAN>|<span>※<\/span>/ , "" );
	td_mail.innerHTML = ReplaceInvalidCode( Name("input_mail").value );
	td_mail.id = "check_mail";
	tbody.appendChild( tr_mail );
		tr_mail.appendChild( th_mail );
		tr_mail.appendChild( td_mail );
	
	// check_paramXXを0から順に、存在するまで処理
	var i=0;
	while( 1 ){
		var check = Name( "input_param"+i );
		if( null == check )
			break;
		
		var input = document.getElementsByName( "input_param"+i );
		var str = "";
		
		for( var j=0,length=input.length ; j<length ; j++ ){
			var obj = input[j];
			// チェックの場合
			if( obj.type=="checkbox" || obj.type=="radio" ){
				if( obj.checked )
					str += ReplaceInvalidCode( obj.value ) + " , ";
			// テキストの場合
			}else{
				if( obj.value != "" )
					str += ReplaceInvalidCode( obj.value ) + " , ";
			}
		}
		str = str.substring(0,str.length-3);
		
		var tr = document.createElement("tr");
		var th = document.createElement("th");
		var td = document.createElement("td");
		th.innerHTML = document.getElementById( "field_param"+i ).innerHTML.replace( /<SPAN>※<\/SPAN>|<span>※<\/span>/ , "" );
		td.innerHTML = ReplaceInvalidCode( str );
		td.id = "check_param" + i;
		tbody.appendChild( tr );
			tr.appendChild( th );
			tr.appendChild( td );
		i++;
	}
	
	var div = document.createElement("div");
	div.setAttribute("class","buttons");
	div.className="buttons";
	Id("form_check").appendChild( div );
	var p = document.createElement("p");
	p.innerHTML = "上記の内容でよろしければ、送信ボタンを押してください。";
	div.appendChild( p );
	
	var back = document.createElement("input");
	back.setAttribute("value","戻る");
	back.value = "戻る";
	back.type = "button";
	if (back.attachEvent) back.attachEvent("onclick", function(){FormBack();});
	else if (back.addEventListener) back.addEventListener("click", function(){FormBack();}, false);
	div.appendChild( back );
	
	var send = document.createElement("input");
	send.setAttribute("value","送信");
	send.value = "送信";
	send.type = "button";
	if (send.attachEvent) send.attachEvent("onclick", function(){FormSend();});
	else if (send.addEventListener)send.addEventListener("click", function(){FormSend();}, false);
	div.appendChild( send );
	
}

function ReplaceInvalidCode( str ){
    var ngchr = [
        '①','②','③','④','⑤','⑥','⑦','⑧','⑨','⑩','⑪','⑫','⑬','⑭','⑮',
        '⑯','⑰','⑱','⑲','⑳','Ⅰ','Ⅱ','Ⅲ','Ⅳ','Ⅴ','Ⅵ','Ⅶ','Ⅷ','Ⅸ','Ⅹ',
        '㍉','㌔','㌢','㍍','㌘','㌧','㌃','㌶','㍑','㍗','㌍','㌦','㌣','㌫','㍊','㌻',
        '㎜','㎝','㎞','㎎','㎏','㏄','㎡','㍻',
        '〝','〟','№','㏍','℡','㊤','㊥','㊦','㊧','㊨','㈱','㈲','㈹','㍾','㍽','㍼','‐','－'
    ];
    var trnchr = [
        '(1)','(2)','(3)','(4)','(5)','(6)','(7)','(8)','(9)','(10)','(11)','(12)','(13)','(14)','(15)',
        '(16)','(17)','(18)','(19)','(20)','I','II','III','IV','V','VI','VII','VIII','IX','X',
        'ミリ','キロ','センチ','メートル','グラム','トン','アール','ヘクタール','リットル','ワット','カロリー','ドル','セント','パーセント','ミリバール','ページ',
        'mm','cm','km','mg','kg','cc','平方メートル','平成',
        '「','」','No.','K.K.','TEL','(上)','(中)','(下)','(左)','(右)','(株)','(有)','(代)','明治','大正','昭和','-','-'
    ];
    for(var i=0; i<ngchr.length;i++){
    	var regexp = new RegExp( ngchr[i] , 'gm' );
        str = str.replace( regexp , trnchr[i] );
    }
	return str;
}


/*** 戻るボタン **************************************************************/
function FormBack(){
	Id("form_input").style.display = "block";
	
	while( Id("form_check").childNodes.length ){
		for (var i =Id("form_check").childNodes.length-1; i>=0; i--) {
			Id("form_check").removeChild(Id("form_check").childNodes[i]);
		}
	}
}

/*** 送信ボタン **************************************************************/
function FormSend(){
	Id("form_sending").style.display = "block";
	Id("form_check").style.display = "none";
	
	SubmitSendMail();
}



/*** AJAX ********************************************************************/

function SubmitSendMail()
{
	httpObj = createXMLHttpRequest(dispSendMail);
	if( httpObj ){
		var query = "";
		
		// 送信文字列作成
		query += "name="+encodeURIComponent( Id("check_name").innerHTML )+"&";
		query += "mail="+encodeURIComponent( Id("check_mail").innerHTML )+"&";
		
		var i=0;
		while( 1 ){
			if( null == Id("check_param"+i) )
				break;
			
			query += "field"+i+"="+encodeURIComponent( Id("field_param"+i).innerHTML.replace( /<SPAN>※<\/SPAN>|<span>※<\/span>/ , "" ) )+"&";
			query += "param"+i+"="+encodeURIComponent( Id("check_param"+i).innerHTML )+"&";
			
			i++;
		}

		
		query = query.substr(0,query.length-1);
		
		httpObj.open("POST","./sendmail.cgi",true);
		httpObj.setRequestHeader("content-type", "application/x-www-form-urlencoded;charset=utf-8");
		httpObj.send(query);
	}
}

function dispSendMail(){
	if ((httpObj.readyState == 4) && (httpObj.status == 200)){
		Id("form_sending").style.display = "none";
		Id("form_done").style.display = "block";
	}else{
		Id("form_sending").style.display = "block";
	}
}


// HTTP通信用、共通関数
function createXMLHttpRequest(cbFunc)
{
	var XMLhttpObject = null;
	try{
		XMLhttpObject = new XMLHttpRequest();
	}catch(e){
		try{
			XMLhttpObject = new ActiveXObject("Msxml2.XMLHTTP");
		}catch(e){
			try{
				XMLhttpObject = new ActiveXObject("Microsoft.XMLHTTP");
			}catch(e){
				return null;
			}
		}
	}
	if (XMLhttpObject) XMLhttpObject.onreadystatechange = cbFunc;
	return XMLhttpObject;
}



