var full = "アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲンァィゥェォッャュョー０１２３４５６７８９－ａｂｃｄｅｆｇｈｉｊｋｌｍｎｏｐｑｒｓｔｕｖｗｘｙｚＡＢＣＤＥＦＧＨＩＪＫＬＭＮＯＰＱＲＳＴＵＶＷＸＹＺ　．";
var fullArr = new Array("ヴ","ガ","ギ","グ","ゲ","ゴ","ザ","ジ","ズ","ゼ","ゾ","ダ","ヂ","ヅ","デ","ド","バ","ビ","ブ","ベ","ボ","パ","ピ","プ","ペ","ポ");

var half = "ｱｲｳｴｵｶｷｸｹｺｻｼｽｾｿﾀﾁﾂﾃﾄﾅﾆﾇﾈﾉﾊﾋﾌﾍﾎﾏﾐﾑﾒﾓﾔﾕﾖﾗﾘﾙﾚﾛﾜｦﾝｧｨｩｪｫｯｬｭｮｰ0123456789-abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ .";
var halfArr = new Array("ｳﾞ","ｶﾞ","ｷﾞ","ｸﾞ","ｹﾞ","ｺﾞ","ｻﾞ","ｼﾞ","ｽﾞ","ｾﾞ","ｿﾞ","ﾀﾞ","ﾁﾞ","ﾂﾞ","ﾃﾞ","ﾄﾞ","ﾊﾞ","ﾋﾞ","ﾌﾞ","ﾍﾞ","ﾎﾞ","ﾊﾟ","ﾋﾟ","ﾌﾟ","ﾍﾟ","ﾎﾟ");

var formValidationMasks = new Array();
formValidationMasks['email'] = /\b[A-Z0-9._%-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b/gi;
formValidationMasks['numeric'] = /^[0-9]+$/gi;
formValidationMasks['zip'] = /^[0-9]{3}\-[0-9]{4}$/gi;
//formValidationMasks['kana'] = /^[ァ-ヶー]*$/gi;
formValidationMasks['kana'] = /^[ぁ-んァ-ン]*$/gi;
formValidationMasks['tel'] = /\d{2,4}-\d{1,4}-\d{4}$/gi;
formValidationMasks['alnum'] = /^[a-z\d -.]+$/gi;
formValidationMasks['card'] = /^[0-9-]+$/gi

var formElementArray = new Array();

function convertInput(inputObj){
    if(!formElementArray[inputObj.name]['conv']) return;
	var mode = formElementArray[inputObj.name]['conv'];

	var inVal = inputObj.value;
	var outVal='';

	if(mode == 'han2zen'){
		for(i=0; i<fullArr.length; i++){
	    	var reg = new RegExp(halfArr[i],"g"); 
	    	inVal = inVal.replace(reg, fullArr[i]);
	  	}
		for(i=0; i<inVal.length; i++){
		    var tmp = inVal.charAt(i);
		    num = half.indexOf(tmp,0);
		    tmp = num >= 0 ? full.charAt(num) : tmp;
		    outVal += tmp;
	    }
	}else if(mode=="zen2han"){
		for(i=0; i<halfArr.length; i++){
	    	var reg = new RegExp(fullArr[i],"g"); 
	    	inVal = inVal.replace(reg, halfArr[i]);
	  	}
		for(i=0; i<inVal.length; i++){
		    var tmp = inVal.charAt(i);
		    num = full.indexOf(tmp,0);
		    tmp = num >= 0 ? half.charAt(num) : tmp;
		    outVal += tmp;
	    }
	}else if(mode=="lower2upper"){
		for(i=0; i<halfArr.length; i++){
	    	var reg = new RegExp(fullArr[i],"g"); 
	    	inVal = inVal.replace(reg, halfArr[i]);
	  	}
		for(i=0; i<inVal.length; i++){
		    var tmp = inVal.charAt(i);
		    num = full.indexOf(tmp,0);
		    tmp = num >= 0 ? half.charAt(num) : tmp;
		    outVal += tmp;
	    }
		var tmmp = outVal;
		outVal = tmmp.toUpperCase();
	}else{
		return;
	}
	inputObj.value = outVal;
};
function getErrorMsg(mode){
	if(mode == 'kana') return "※カタカナかひらがなで入力してください。";
	if(mode == 'tel') return "※入力形式が正しくありません。";
	return "※入力形式が正しくありません。";
};
function validateInput(e,inputObj)
{
	if(!inputObj)inputObj = this;

	convertInput(inputObj);

	var errMsg = "";
	var inputValidates = true;

	if(formElementArray[inputObj.name]['required'] && inputObj.tagName=='INPUT' && inputObj.value.length==0){
		inputValidates = false;
		errMsg += "※必須入力項目です。<br />";
	}
    if(formElementArray[inputObj.name]['required'] && inputObj.tagName=='SELECT' && inputObj.selectedIndex==0){
        inputValidates = false;
		errMsg += "※必須入力項目です。<br />";
    }
    if(formElementArray[inputObj.name]['required'] && inputObj.tagName=='TEXTAREA' && inputObj.value.length==0){
        inputValidates = false;
		errMsg += "※必須入力項目です。<br />";
    }
	
    //if(formElementArray[inputObj.name]['mask'] && !inputObj.value.match(formValidationMasks[formElementArray[inputObj.name]['mask']])){
    if(formElementArray[inputObj.name]['mask']) {
		if( !inputObj.value.match(formValidationMasks[formElementArray[inputObj.name]['mask']]) ){
			inputValidates = false;
			errMsg += getErrorMsg(formElementArray[inputObj.name]['mask']);
		}
	}
    if(formElementArray[inputObj.name]['freemask']){
        var tmpMask = formElementArray[inputObj.name]['freemask'];
        tmpMask = tmpMask.replace(/-/g,'\\-');
        tmpMask = tmpMask.replace(/S/g,'[A-Z]');
        tmpMask = tmpMask.replace(/N/g,'[0-9]');
        tmpMask = eval("/^" + tmpMask + "$/gi");
        if(!inputObj.value.match(tmpMask)){
			inputValidates = false
			errMsg += "※入力形式が正しくありません。";
		}
    }

    if(formElementArray[inputObj.name]['regexpPattern']){
        var tmpMask = eval(formElementArray[inputObj.name]['regexpPattern']);
        if(!inputObj.value.match(tmpMask)){
			inputValidates = false
			errMsg += "※入力形式が正しくありません。";
		}
    }
    if(!formElementArray[inputObj.name]['required'] && inputObj.value.length==0 && inputObj.tagName=='INPUT'){
		inputValidates = true;
	}

	// count表示
	// var cntArea = document.getElementById('cnt_' + inputObj.name);	
	var cntArea = document.getElementById('cnt_' + inputObj.name);	
	if ( cntArea ){
			var v = inputObj.value.replace(/\r\n|\n\n|\n/gm,'a');
		var inputValue = escape(v);	
		cntArea.innerHTML = countTextLength(inputValue);
		//cntArea.innerHTML = inputValue.length;
	}
	// max
	var max = formElementArray[inputObj.name]['max'];  
	if( max ){
			var v = inputObj.value.replace(/\r\n|\n\n|\n/gm,'a');
		var inputValue = escape(v);
		var len = countTextLength(inputValue);
		//if(inputValue.length > max){
		if(len > max){
			inputValidates = false;
			errMsg += "文字数オーバーです。";
		}
	}
	// min
	var min = formElementArray[inputObj.name]['min'];  
	if( min ){
			var v = inputObj.value.replace(/\r\n|\n\n|\n/gm,'a');
		var inputValue = escape(v);
		var len = countTextLength(inputValue);
		//if(inputValue.length < min){
		if(len < min){
			inputValidates = false;
			errMsg += "文字数が足りません。";
		}
	}
    if(inputValidates){
		inputObj.className='validInput';
    }else{
        inputObj.className='invalidInput'
    }

	setErrorMsg(inputObj, errMsg);
	setSubmitDisable();
};
function countTextLength(t){
	dlen = t.length;
	moji = 0;
	for(i=0;i<dlen;i++){
		if(t.charAt(i) == "%") { i=i+5; }
		moji++;
	}
	return moji;
};
function setErrorMsg(inputObj, errMsg){
	var fieldName = inputObj.name;
    var errField = 'err_' + fieldName; 
	var errElem = document.getElementById(errField);
	if(!errElem) return;
	errElem.innerHTML=errMsg;
	inputObj.setAttribute('tooltipText', errMsg);
};

function setSubmitDisable(){
	var submitButton = document.getElementById('sub1');
	var msgArea = document.getElementById('msgArea');
	submitButton.disabled = !isFormValid();
	msgArea.innerHTML = "※入力が完了するまで確認ボタンは押せません。";
	if(isFormValid()){
		msgArea.innerHTML = "";
	}	
};

function isFormValid()
{
    var inputFields = document.getElementsByTagName('INPUT');
    var selectBoxes = document.getElementsByTagName('SELECT');
    var textAreas = document.getElementsByTagName('TEXTAREA');
    var inputs = new Array();

    for(var no=0; no<inputFields.length; no++){
        inputs[inputs.length] = inputFields[no];
    }
    for(var no=0; no<selectBoxes.length; no++){
        inputs[inputs.length] = selectBoxes[no];
    }
    for(var no=0; no<textAreas.length; no++){
        inputs[inputs.length] = textAreas[no];
    }
	for(var no=0;no<inputs.length;no++){
		if(inputs[no].className=='invalidInput')return false;
	}
	return true;
};

function initFormValidation()
{
    var inputFields = document.getElementsByTagName('INPUT');
    var selectBoxes = document.getElementsByTagName('SELECT');
    var textAreas = document.getElementsByTagName('TEXTAREA');
    var inputs = new Array();
    for(var no=0; no<inputFields.length; no++){
        inputs[inputs.length] = inputFields[no];
    }
    for(var no=0; no<selectBoxes.length; no++){
        inputs[inputs.length] = selectBoxes[no];
    }
    for(var no=0; no<textAreas.length; no++){
        inputs[inputs.length] = textAreas[no];
    }
    for(var no=0; no<inputs.length; no++){
        var className = inputs[no].parentNode.className;
        if(className && className.indexOf('validInput')>=0)continue;
        var required = inputs[no].getAttribute('required');
        if(!required)required = inputs[no].required;

        var mask = inputs[no].getAttribute('mask');
        if(!mask){ mask = inputs[no].mask; }

        var freemask = inputs[no].getAttribute('freemask');
        if(!freemask)freemask = inputs[no].freemask;

        var regexpPattern = inputs[no].getAttribute('regexpPattern');
        if(!regexpPattern)regexpPattern = inputs[no].regexpPattern;

		var max = inputs[no].getAttribute('max');
		if(!max) max = inputs[no].max;

		var min = inputs[no].getAttribute('min');
		if(!min) min = inputs[no].min;

		var conv = inputs[no].getAttribute('conv');
		if(!conv) conv = inputs[no].conv;

		var type = inputs[no].type;
		if(type!='text' && type!='select-one' && type!='textarea') continue;
		inputs[no].className = 'invalidInput';

	    inputs[no].onblur = validateInput;
	    inputs[no].onchange = validateInput;
	    inputs[no].onpaste = validateInput;
	    inputs[no].onkeyup = validateInput;

	    formElementArray[inputs[no].name] = new Array();
	    formElementArray[inputs[no].name]['mask'] = mask;
	    formElementArray[inputs[no].name]['freemask'] = freemask;
	    formElementArray[inputs[no].name]['required'] = required;
	    formElementArray[inputs[no].name]['regexpPattern'] = regexpPattern;
	    formElementArray[inputs[no].name]['max'] = max;
	    formElementArray[inputs[no].name]['min'] = min;
	    formElementArray[inputs[no].name]['conv'] = conv;
	    validateInput(false,inputs[no]);
    }
};
