

// 正しい値が入力された時の枠線の色
var tBorder = "";
// 誤った値が入力された時の枠線の色
var eBorder = "red";

function dataCheck(dcElem, dcMsg, dcType, dcDigit, dcFill){

        if(!isNaN(dcElem)){
                // オブジェクト番号が渡ってきた場合
                var dcObj = document.forms[0].elements[dcElem];
        }else if(typeof(dcElem) == 'object'){
                // オブジェクトが渡ってきた場合
                var dcObj = dcElem;
        }

        // 必須入力のチェック
        if(dcFill){
                if(!isBlank(0,dcObj,dcMsg)) return false;
        }else if(dcType!='blank'){
                if(dcObj.value == ""){
                        alertBorder(null);
                        return true;
                }
        }

        switch (dcType){
                case 'number':
                // 数値チェック
                        if(!isPureNum(dcObj,dcMsg)) return false;
                        if(!isTag(dcObj,dcMsg)) return false;
                        break;

                case 'intCode':
                // 数値チェック(固定桁)
                        if(!isPureNum(dcObj,dcMsg)) return false;
                        if(!isDigit(0,dcObj,dcMsg,dcDigit)) return false;
                        if(!isTag(dcObj,dcMsg)) return false;
                        break;

                case 'code':
                // 半角チェック(固定桁)
                        if(!isFull(0,dcObj,dcMsg)) return false;
                        if(!isLen(0,dcObj,dcDigit,dcMsg)) return false;
                        //if(!isDigit(0,dcObj,dcMsg,dcDigit)) return false;
                        if(!isTag(dcObj,dcMsg)) return false;
                        break;

                case 'name':
                // 名称チェック
                        if(!isLen(0,dcObj,dcDigit,dcMsg)) return false;
                        //if(!isTag(dcObj,dcMsg)) return false;
                        break;

				case 'url':
				// ＵＲＬチェック
						//if(!isURL(dcObj)) return false;
						if(!isLen(0,dcObj,dcDigit,dcMsg)) return false;
						break;

                case 'date':
                // 日付変換(＋送る)※ここでのdcDigitは送り先
                        if(!changeDate(dcObj,dcMsg)) return false;
                        //if(dcDigit!=null) dataSend(dcObj,dcDigit);
                        if(!isTag(dcObj,dcMsg)) return false;
                        break;

        }

        alertBorder(null);
        return true;
}

var dcOldObj;
var dcNowObj;
function alertBorder(dcObj){
        if(dcOldObj) dcOldObj.style.borderColor = tBorder;
        dcNowObj = dcOldObj = dcObj;
        if(!dcNowObj) return;
        dcTenmetu = setTimeout("borderRed1()",0);
}

function borderRed1(){
        if(dcNowObj){
                dcNowObj.style.borderColor = eBorder;
                dcTenmetu = setTimeout("borderWhite1()",500);
        }
}

function borderWhite1(){
        if(dcNowObj){
                dcNowObj.style.borderColor = tBorder
                dcTenmetu = setTimeout("borderRed2()",500);
        }
}

function borderRed2(){
        if(dcNowObj){
                dcNowObj.style.borderColor = eBorder;
                dcTenmetu = setTimeout("borderWhite2()",500);
        }
}

function borderWhite2(){
        if(dcNowObj) dcNowObj.style.borderColor = tBorder;
        dcTenmetu = setTimeout("borderRed3()",500);
}

function borderRed3(){
        if(dcNowObj){
                dcNowObj.style.borderColor = eBorder;
                dcTenmetu = setTimeout("borderWhite3()",500);
        }
}

function borderWhite3(){
        if(dcNowObj){
                dcNowObj.style.borderColor = tBorder;;
                dcTenmetu = setTimeout("borderRed4()",500);
        }
}

function borderRed4(){
        if(dcNowObj){
                dcNowObj.style.borderColor = eBorder;
                dcTenmetu = setTimeout("borderWhite4()",500);
        }
}

function borderWhite4(){
        if(dcNowObj){
                dcNowObj.style.borderColor = tBorder;
                dcTenmetu = setTimeout("borderRed5()",500);
        }
}

function borderRed5(){
        if(dcNowObj){
                dcNowObj.style.borderColor = eBorder;
                dcTenmetu = setTimeout("borderWhite5()",500);
        }
}

function borderWhite5(){
        if(dcNowObj) dcNowObj.style.borderColor = tBorder;
}

//----------------------------------------------------------------------

function isBlank(dcFormNum,dcObj,dcMsg){

        if(dcObj.value == ""){
                alert(dcMsg + "を入力してください。");
                alertBorder(dcObj);
                return false;
        }

        return true;
}

function isTag(dcObj,dcMsg){

        dcVal = dcObj.value;
        dcLength = dcVal.length;
        dcTag = "<>";
        for(dcCnt=0; dcCnt<dcLength; dcCnt++){
                dcChar = dcVal.charAt(dcCnt);
                dcNum = dcTag.indexOf(dcChar,0);
                if(dcNum>=0){
                        alert(dcMsg + "は禁止文字『<>』以外で入力してください。");
                        alertBorder(dcObj);
                        return false;
                }
        }
        return true;
}

function isURL(dcObj){

		dcVal = dcObj.value;
		if(dcVal.length==0) return true;
		if(dcVal.substr(0,7)!="http://") dcVal = "http://" + dcVal;
		//ﾌﾟﾛﾄｺﾙ付きで値を戻す
		dcObj.value = dcVal;
		return true;
}

function isPureNum(dcObj, dcMsg){

        dcChkValue = dcObj.value;
        //符号チェック
        if(dcChkValue.charAt(0) == "+"){
                alert(dcMsg + "は半角数値で入力してください。");
                alertBorder(dcObj);
                return false;
        }
        //eチェック
        if((dcChkValue.indexOf("e") >= 0) || (dcChkValue.indexOf("E") >= 0)){
                alert(dcMsg + "は半角数値で入力してください。");
                alertBorder(dcObj);
                return false;
        }
        //数値チェック
        if(isNaN(dcObj.value)){
                alert(dcMsg + "は半角数値で入力してください。");
                alertBorder(dcObj);
                return false;
        }
        if((dcObj.value.indexOf(".") > -1) || (dcObj.value.indexOf(" ") > -1)){
                alert(dcMsg + "は半角数値で入力してください。");
                alertBorder(dcObj);
                return false;
        }
        //非負チェック
        dcFirst = dcObj.value.charAt(0);
        if(dcFirst == '-'){
                alert(dcMsg + "は半角数値で入力してください。");
                alertBorder(dcObj);
                return false;
        }
        return true;
}

function isDigit(dcFormNum, dcObj, dcMsg, dcDigit){

        dcChkValue = dcObj.value.length;

        //桁数チェック
        if(dcChkValue != dcDigit){
                alert(dcMsg + "は" + dcDigit + "桁で入力してください。");
                alertBorder(dcObj);
                return false;
        }
        return true;
}

function isFull(dcFormNum, dcObj, dcMsg){

        var dcChkValue = dcObj.value;

        //半角チェック
        if(dcChkValue != escape(dcChkValue)){
                alert(dcMsg + "は半角英数字で入力してください。");
                alertBorder(dcObj);
                return false;
        }
        return true;
}

function isLen(dcFormNum, dcObj, dcStrLen, dcMsg) {

        dcStr = dcObj.value;

        var dcSum = 0;
        for (var dcCnt = 0; dcCnt < dcStr.length; dcCnt++) {
                var dcChar = dcStr.charCodeAt(dcCnt);
                // Shift_JIS: 0x0 〜 0x80, 0xa0  , 0xa1   〜 0xdf  , 0xfd   〜 0xff
                // Unicode  : 0x0 〜 0x80, 0xf8f0, 0xff61 〜 0xff9f, 0xf8f1 〜 0xf8f3
                if((dcChar >= 0x0 && dcChar < 0x81) || (dcChar == 0xf8f0) || (dcChar >= 0xff61 && dcChar < 0xffa0) || (dcChar >= 0xf8f1 && dcChar < 0xf8f4)) {
                        dcSum += 1;
                } else {
                        dcSum += 2;
                }
        }

        if(dcSum > dcStrLen) {
                alert(dcMsg + "は全角" + (dcStrLen/2) + "文字、半角" + dcStrLen + "文字以下で入力してください。");
                alertBorder(dcObj);
                return false;
        }
        //if(dcStrLen < dcStr.length){
        //        alert(dcMsg + "は" + dcStrLen + "文字以下で入力してください。");
        //        alertBorder(dcObj);
        //        return false;
        //}

        return true;

}

function dataSend(dcBase, dcSend){

        if(dcSend.value == ""){
                dcSend.value = dcBase.value;
        }
}

function changeDate(dcObj, dcMsg){

        // 処理準備
        dcInpDate = dcObj.value;
        dcLength = dcInpDate.length;

        // 全角から半角へ ****************************************
        dcHan = "0123456789/ ";
        dcZen = "０１２３４５６７８９／　";
        dcStr = "";
        for(dcCnt=0; dcCnt<dcLength; dcCnt++){
                dcChar = dcInpDate.charAt(dcCnt);
                dcNum = dcZen.indexOf(dcChar,0);
                if (dcNum >= 0) dcChar = dcHan.charAt(dcNum);
                dcStr += dcChar;
        }
        dcInpDate = dcStr;

        // スラッシュ数獲得 *************************************
        dcSlash = 0;
        for(dcCnt=0; dcCnt<dcLength; dcCnt++){
                dcChar = dcInpDate.charAt(dcCnt);
                // スラッシュチェック
                if(dcChar == "/") {
                        dcSlash++;
                }else if(isNaN(dcChar) || (dcChar == " ")) {
                // 数値チェック & スペースチェック
                        alert(dcMsg + "には正しい値を入力してください。");
                        alertBorder(dcObj);
                        return false;
                }
        }

        // スラッシュが多すぎる場合 ****************************
        if(dcSlash > 2) {
                alert(dcMsg + "には正しい値を入力してください。");
                alertBorder(dcObj);
                return false;
        }

        // スラッシュがない場合 ********************************
        if(dcSlash == 0) {
                // 8桁よりも大きい場合
                if(dcLength > 8) {
                        alert(dcMsg + "には正しい値を入力してください。");
                        alertBorder(dcObj);
                        return false;
                }
                // 日にちの取得
                dcToday = new Date();
                dcInpDate = "0" + dcInpDate;
                dcTheDate = dcInpDate.substr(dcLength-1,2);
                // 月、年の取得
                // 1,2桁の場合
                if(dcLength <= 2) {
                        dcTheMonth = dcToday.getMonth()+1;
                        dcTheYear = dcToday.getYear();
                // 3,4桁の場合
                } else if(dcLength <= 4) {
                        // システム月の取得
                        idMonth = dcToday.getMonth()+1;
                        dcTheMonth = dcInpDate.substr(dcLength-3,2);
                        // システム月が７月より前の場合
                        if(idMonth < 7) {
                                // 入力月が１０月より前の場合は現在の年を取得する
                                if(dcTheMonth < 10) {
                                        dcTheYear = dcToday.getYear();
                                // 入力月が１０月以降の場合は昨年の年を取得する
                                } else if(dcTheMonth >= 10) {
                                        dcTheYear = dcToday.getYear()-1;
                                }
                        // システム月が７月以降の場合
                        } else {
                                // 入力月が４月より前の場合は翌年を取得する
                                if(dcTheMonth < 4) {
                                        dcTheYear = dcToday.getYear()+1;
                                // 入力月が４月以降の場合は現在の年を取得する
                                } else if(dcTheMonth >= 4) {
                                        dcTheYear = dcToday.getYear();
                                }
                        }
                // 5,6桁の場合
                } else if(dcLength <= 6) {
                        dcTheMonth = dcInpDate.substr(dcLength-3,2);
                        dcTheYear = '20' + dcInpDate.substr(dcLength-5,2);
                // 8桁の場合
                } else if(dcLength == 8) {
                        dcTheMonth = dcInpDate.substr(5,2);
                        dcTheYear = dcInpDate.substr(1,4);
                // 5,6,7桁の場合
                } else {
                        alert(dcMsg + "には正しい値を入力してください。");
                        alertBorder(dcObj);
                        return false;
                }
                // 求めた年、月、日を書き出し処理に送る
                if(!writeDate(dcObj,dcMsg,dcTheYear,dcTheMonth,dcTheDate)) return false;
                return true;
        }

        // スラッシュがある場合 *******************************
        dcToday = new Date();
        dcDivDate = dcInpDate.split("/");
        // スラッシュが１本の場合
        if(dcSlash == 1) {
                if(dcDivDate[0].length == 4){
                        dcTheYear = dcDivDate[0];
                        dcLength = dcDivDate[1].length;
                        dcDivDate[1] = "0" + dcDivDate[1];
                        if(dcLength < 4){
                                dcTheMonth = dcDivDate[1].substr(0,2);
                                dcTheDate = dcDivDate[1].substr(2,2);
                        }else{
                                dcTheMonth = dcDivDate[1].substr(1,2);
                                dcTheDate = dcDivDate[1].substr(3,2);
                        }
                }else{
                        dcTheMonth = dcDivDate[0];
                        dcTheDate = dcDivDate[1];
                        // システム月の取得
                        idMonth = dcToday.getMonth()+1;
                        // システム月が７月より前の場合
                        if(idMonth < 7) {
                                // 入力月が１０月より前の場合は現在の年を取得する
                                if(dcTheMonth < 10) {
                                        dcTheYear = dcToday.getYear();
                                // 入力月が１０月以降の場合は昨年の年を取得する
                                } else if(dcTheMonth >= 10) {
                                        dcTheYear = dcToday.getYear()-1;
                                }
                        // システム月が７月以降の場合
                        } else {
                                // 入力月が４月より前の場合は翌年を取得する
                                if(dcTheMonth < 4) {
                                        dcTheYear = dcToday.getYear()+1;
                                // 入力月が４月以降の場合は現在の年を取得する
                                } else if(dcTheMonth >= 4) {
                                        dcTheYear = dcToday.getYear();
                                }
                        }
                }

        // スラッシュが２本の場合
        } else {
                dcTheYear = dcDivDate[0];
                dcTheMonth = dcDivDate[1];
                dcTheDate = dcDivDate[2];
        }

        // 求めた年、月、日を書き出し処理に送る
        if(!writeDate(dcObj,dcMsg,dcTheYear,dcTheMonth,dcTheDate)) return false;
        return true;
}

function writeDate(dcObj, dcMsg, dcTheYear, dcTheMonth, dcTheDate){
        // 年範囲チェック
		if(dcTheYear.length > 2){
	        if((dcTheYear < 1800) || (dcTheYear >9999)) {
	                alert(dcMsg + "には正しい値を入力してください。");
	                alertBorder(dcObj);
	                return false;
	        }
		}
        // 月範囲チェック
        if((dcTheMonth < 1) || (dcTheMonth > 12)) {
                alert(dcMsg + "には正しい値を入力してください。");
                alertBorder(dcObj);
                return false;
        }

        // 月の終わり
        end = new Array(31,28,31,30,31,30,31,31,30,31,30,31);
        // うるう年判定
        if(((dcTheYear % 4 == 0) && (dcTheYear % 100 != 0)) || (dcTheYear % 400 == 0)) {
                end[1] = 29;
        }

        // 日にち範囲チェック
        if((dcTheDate < 1) || (dcTheDate > end [dcTheMonth-1])) {
                alert(dcMsg + "には正しい値を入力してください。");
                alertBorder(dcObj);
                return false;
        }
        // 桁合わせ処理して書き出し
        if(dcTheMonth < 10) {
                dcTheMonth = ("0" + dcTheMonth).substr(dcTheMonth.length-1,2);
        }
        dcTheDate = ("0" + dcTheDate).substr(dcTheDate.length-1,2);
        dcObj.value = dcTheYear + "/" + dcTheMonth + "/" + dcTheDate;

        return true;
}

function compareDate(FromDate, FromFName, ToDate, ToFName) {
		strSDate = FromDate.value.substr(0, 2) + FromDate.value.substr(3, 2) + FromDate.value.substr(6, 2);
		strEDate = ToDate.value.substr(0, 2) + ToDate.value.substr(3, 2) + ToDate.value.substr(6, 2);

		if(strSDate != "" && strEDate != "") {
				if( strSDate.valueOf() > strEDate.valueOf()) {
						alert(ToFName + "は" + FromFName+ "以降にしてください。");
						alertBorder(ToDate);
						return false;
				}
		}
		return true;
}



//本例の場合は、1に連動する値（値も列数も任意）
var strsel21 = new Array(""); 

//本例の場合は、1に連動する値（値も列数も任意）
var strsel22 = new Array("中区","西区","南区","東区","その他"); 

//本例の場合は、7に連動する値（値も列数も任意）
var strsel23 = new Array("呉市","竹原市","三原市","尾道市","因島市","福山市","府中市","三次市","庄原市","大竹市","東広島市","廿日市市","安芸高田市","江田島市","安芸郡","山県郡","豊田郡","世羅郡","深安郡","神石郡");

//本例の場合は、8に連動する値（値も列数も任意）
var strsel24 = new Array("山口県","岡山県","島根県","鳥取県"); 

function CreateList2(myFORM)//strsel1の配列数が増えた分、下３行を対応（カスタマイズ）させる
{ 
	if(myFORM.ad1.options.selectedIndex == 0){ //1が選択されたか
		Create(document.getElementById('ad2'), strsel21);
	}
	else if(myFORM.ad1.options.selectedIndex == 1){//7が選択されたか 
		Create(document.getElementById('ad2'), strsel22);     
	}	// 以下の3行をstrsel1の配列の数分用意する。
	else if(myFORM.ad1.options.selectedIndex == 2){//8が選択されたか
		Create(document.getElementById('ad2'), strsel23);     
	} 
	else if(myFORM.ad1.options.selectedIndex == 3){//8が選択されたか
		Create(document.getElementById('ad2'), strsel24);     
	} 
} 

function Create(objList, objArray) 
	//objListは、select要素のオブジェクト
	//objArrayは、select要素へ代入する値の配列
{ 
	var nMax = objArray.length;//select要素へ代入する値の配列数 
	var nLoop = 0; 
	for (nLoop = 0; nLoop < nMax; nLoop++){ 
		//option要素を作成
		oAdd = document.createElement('option');

		//option要素を親要素に追加する前にすでに子要素があるときはそれを削除
		if(objList.childNodes[nLoop]  != undefined)
			objList.removeChild(objList.childNodes[nLoop]);

		//option要素を親要素（select）へ追加
		objList.appendChild(oAdd);

		//option要素のvalue属性にインデックスの値を設定
		objList.childNodes[nLoop].setAttribute('value',objArray[nLoop]);

		//option要素の子要素にobjArray配列の値をテキストとして作成
		oAddx= document.createTextNode(objArray[nLoop]);

		//すでに子要素があるときはそれを削除
		if(objList.childNodes[nLoop].firstChild  != undefined)
			objList.childNodes[nLoop].removeChild(objList.childNodes[nLoop].firstChild);

		//作成したテキストを親要素（option）へ追加
		objList.childNodes[nLoop].appendChild(oAddx);
	}
	//連動する方のselect要素の個数を設定する
	objList.length=nLoop;
}



