// sitecreation plugin formmail varidate script.
// http://plugin.edit.to/formmail/varidate.js

function sc_formmail_varidate( oForm )
{
	for( var i = 0 ; i < oForm.childNodes.length ; i++ )
	{
		if( oForm.childNodes[i].tagName == 'TABLE' )
		{
			var oTable = oForm.childNodes[i] ;
			break ;
		}
	}
	
	if( ! oTable )
	{
		alert( 'フォームメール用テーブル要素が見つかりません。' ) ;
		return false ;
	}
	
	var messageList = new Array() ;
	var confirmList = "";
	for( var i = 0 ; i < oTable.rows.length ; i++ )
	{
		var inputName = oTable.rows[i].getAttribute( '_sc_inputname' ) ;
		if( ! inputName )
			continue ;
		
		var oRow = oTable.rows[i] ;
		
		for( var j = 0 ; j < oRow.childNodes.length ; j++ )
		{
			if( oRow.childNodes[j].tagName == 'TD' )
			{
				if( oRow.childNodes[j].getAttribute( '_sc_input' ) )
				{
					break ;
				}
			}
		}
		
		var oCell = oRow.childNodes[j] ;
		
		var oInput = new Array() ;
		
		for( var j = 0 ; j < oCell.childNodes.length ; j++ )
		{
			if( oCell.childNodes[j].name == inputName )
			{
				oInput.push( oCell.childNodes[j] ) ;
			}
		}
		
		var value = new Array() ;
		// 入力値取得
		for( var j = 0 ; j < oInput.length ; j++ )
		{
			var itemName = 		oInput[j].getAttribute( '_sc_itemname' ) ;
			var checkType = 	oInput[j].getAttribute( '_sc_checktype' ) ;
			var minimum = 		oInput[j].getAttribute( '_sc_minimum' ) ;
			var maximum = 		oInput[j].getAttribute( '_sc_maximum' ) ;
			var require = 		oInput[j].getAttribute( '_sc_require' ) ;
	
			if( oInput[j].tagName == 'SELECT' )
			{
				if( oInput[j].value )
					value.push( oInput[j].value ) ;
			}
			else if( oInput[j].tagName == 'INPUT' )
			{
				if( oInput[j].type == 'text' )
				{
					if( oInput[j].value )
					{
						value.push( oInput[j].value ) ;
					}
				}
				else if( oInput[j].type == 'checkbox' || oInput[j].type == 'radio' )
				{
					if( oInput[j].checked )
					{
						value.push( oInput[j].value ) ;
					}
				}
			}
			else if( oInput[j].tagName == 'TEXTAREA' )
			{
				if( oInput[j].value )
				{
					value.push( oInput[j].value ) ;
				}
			}
		}
		confirmList = confirmList + itemName.replace( /<br>/i, '\n' ) + ' : ' + value + '\n' ;

		// 入力チェック
		var message = varidate( value, checkType, minimum, maximum, require, itemName ) ;
		if( message )
			messageList.push( message ) ;
		
		prevValue = value ;
		prevItemName = itemName ;
	}
	
	if( messageList.length )
	{
		var messageString = '' ;
		for( var i = 0 ; i < messageList.length ; i++ )
		{
			messageString += messageList[i] + '\n' ;
		}
		alert( messageString ) ;
		return false ;
	}

	oForm.jsDisabled.value = 0 ;

	var confirmMessage = '' ;
	confirmMessage += '以下の内容で送信します。宜しいですか？\n' ;
	confirmMessage += '---------------------------------\n' ;
	confirmMessage += confirmList ;
	
	return confirm( confirmMessage ) ;
}

function varidate(value, checkType, minimum, maximum, require, itemName )
{
	var message = false ;
	
	if( require && ! value.length )
		message = '「' + itemName + '」を入力してください。' ;
	else
	{
		switch( checkType )
		{
		case 'string':
			message = varidate_string( value, minimum, maximum, itemName ) ;
			break ;
		case 'numeric':
			message = varidate_numeric( value, minimum, maximum, itemName ) ;
			break ;
		case 'post':
			message = varidate_post( value, itemName ) ;
			break ;
		case 'tel':
			message = varidate_tel( value, itemName ) ;
			break ;
		case 'mail':
			message = varidate_mail( value, minimum, maximum, itemName ) ;
			break ;
		case 'same':
			message = varidate_same( value, itemName ) ;
			break ;
		}
	}
	
	return message ;
}

// 文字列
function varidate_string( value, minimum, maximum, itemName )
{
	for( var i = 0 ; i < value.length ; i++ )
	{
		if( minimum && maximum )
		{
			if( minimum == maximum )
			{
				if( minimum != value[i].length )
					return '「' + itemName + '」を' + minimum + '文字で入力してください。';
			}
			else if( minimum > value[i].length || maximum < value[i].length )
			{
				return '「' + itemName + '」を' + minimum + '文字以上' + maximum + '文字以下で入力してください。';
			}
		}
		else if( minimum && ! maximum )
		{
			if( minimum > value[i].length )
				return '「' + itemName + '」を' + minimum + '文字以上で入力してください。';
		}
		else if( ! minimum && maximum )
		{
			if( maximum < value[i].length )
				return '「' + itemName + '」を' + maximum + '文字以下で入力してください。';
		}
	}
	
	return false ;
}

// 数値
function varidate_numeric( value, minimum, maximum, itemName )
{
	if( minimum != '' )
		minimum = parseInt( minimum ) ;
	if( maximum != '' )
		maximum = parseInt( maximum ) ;
	
	for( var i = 0 ; i < value.length ; i++ )
	{
		if( ! value[i].match( /^\-?\d*$/ ) )
			return '「' + itemName + '」を半角数字で入力してください。' ;
		
		if( minimum != '' && maximum != '' )
		{
			if( minimum == maximum )
			{
				if( minimum != value[i] )
					return '「' + itemName + '」を' + minimum + 'で入力してください。' ;
			}
			else if( minimum > value[i] || maximum < value[i] )
			{
				return '「' + itemName + '」を' + minimum + '以上' + maximum + '以下で入力してください。' ;
			}
		}
		else if( minimum && ! maximum )
		{
			if( minimum > value[i] )
				return '「' + itemName + '」を' + minimum + '以上で入力してください。' ;
		}
		else if( ! minimum && maximum )
		{
			if( maximum < value[i] )
				return '「' + itemName + '」を' + maximum + '以下で入力してください。' ;
		}
	}
}

// 郵便番号
function varidate_post( value, itemName )
{
	for( var i = 0 ; i < value.length ; i++ )
	{
		if( ! value[i].match( /^\d{3}\-?\d{4}$/ ) )
			return '「' + itemName + '」の入力形式が正しくありません。' ;
	}
}

// 電話番号
function varidate_tel( value, itemName )
{
	for( var i = 0 ; i < value.length ; i++ )
	{
		if( ! value[i].match( /^\d{2,4}\-\d{2,4}\-\d{4}$/ ) )
			return '「' + itemName + '」の入力形式が正しくありません。' ;
	}
}

// メールアドレス
function varidate_mail( value, minimum, maximum, itemName )
{
	for( var i = 0 ; i < value.length ; i++ )
	{
		if( ! value[i].match( /^[\w\-\.]+\@[\w\-\.]+\.[a-zA-Z]+$/ ) )
			return '「' + itemName + '」の入力形式が正しくありません。' ;
		
		if( minimum && maximum )
		{
			if( minimum == maximum )
			{
				if( minimum != value[i].length )
					return '「' + itemName + '」を' + minimum + '文字で入力してください。';
			}
			else if( minimum > value[i].length || maximum < value[i].length )
			{
				return '「' + itemName + '」を' + minimum + '文字以上' + maximum + '文字以下で入力してください。';
			}
		}
		else if( minimum && ! maximum )
		{
			if( minimum > value[i].length )
				return '「' + itemName + '」を' + minimum + '文字以上で入力してください。';
		}
		else if( ! minimum && maximum )
		{
			if( maximum < value[i].length )
				return '「' + itemName + '」を' + maximum + '文字以下で入力してください。';
		}
	}
}

// 上の項目と同じ値
function varidate_same( value, itemName )
{
	for( var i = 0 ; i < value.length ; i++ )
	{
		if( value[i] != prevValue[i] )
			return '「' + itemName + '」が「' + prevItemName + '」と一致しません。' ;
	}
}

// 前項目の入力値保存用（チェックタイプ：「上の項目と同じ値」で使用）
var prevValue = '' ;
var prevItemName = '' ;

// GETパラメータに「_sc_formmail_finish」が含まれる場合は完了ダイアログを表示
if( (/_sc_formmail_finish/i).test( location.search ) )
{
	window.onload = new Function('alert("送信完了いたしました。\\nお問い合わせいただき、ありがとうございます。");') ;
}