﻿function nonTextSelect(e){
		if (e.srcElement.tagName!='INPUT')
		{
		    return false;
		}
		else
		{
		    return true;
		}

}

function createDate(y,m,d){

    //■Null又は空白チェック
    if (y == null || y == "") {
        return null;
    }
    if (m == null || m == "") {
        return null;
    }
    if (d == null || d == "") {
        return null;
    }
    
    //■数値チェック
    var numY = Number(y);
    var numM = Number(m);
    var numD = Number(d);
    if (isNaN(y) || isNaN(m) || isNaN(d)) {
        return null;
    }
    
    //■日付チェック
    ///Dateクラスのインスタンスを作成し、引数と結果が同じなればTrue、違えばFalse
    var dte = new Date(numY, numM - 1, numD);
    if (dte.getFullYear() == numY && dte.getMonth() == numM - 1 && dte.getDate() == numD) {
        return dte;
    }
    else {
        return null;
    }
    
}

//日付チェック処理
function isDate(y, m, d) {
    var res = createDate(y, m, d);
    return res != null;
}

//CalendarExtenderコントロールOnClientShowingイベント
//   Javascriptでテキストを変更した場合に更新されない為、処理を追加。
function CalendarExtender_OnClientShowing(sender, args) {
    var textBox;
    var txt; //テキストボックスのテキスト
    var selectedDate;//選択日付
    var strs;
    try {

        //ターゲットのテキストボックスを取得
        textBox = sender._textbox.get_element();
        
        //テキストを日付クラスに変換
        strs = textBox.value.split("/");
        selectedDate = createDate(strs[0], strs[1], strs[2]);

        //選択日付を設定
        if (selectedDate != null) {
            sender._selectedDate = selectedDate;
        }
        
    }catch(e){

    }
}

function setTextBoxDate(cbo, txtStartDate, txtEndDate, cboYear, isCboChange) {
    var INDEX_THIS_YEAR = 0; //コンボボックスインデックス[今年]
    var INDEX_ONE_YEAR = 1; //コンボボックスインデックス[1年間]
    var INDEX_ALL = 2;//コンボボックスインデックス[全て]
    var MIN_YEAR = 1999; //最低年
    var STYLE_DISPLAY = "";
    var STYLE_DISPLAY_NONE = "none";
    if (cbo == null) return false;
    if (txtStartDate == null) return false;
    if (txtEndDate == null) return false;
    if (cboYear == null) return false;

    var dateNow = new Date();
    var nowY = dateNow.getFullYear();
    var nowM = dateNow.getMonth() + 1;
    var nowD = dateNow.getDate();
    var strNowM = (nowM < 10) ? "0" + nowM : nowM.toString();
    var strNowD = (nowD < 10) ? "0" + nowD : nowD.toString();

    switch (cbo.selectedIndex) {
        case INDEX_THIS_YEAR: //今年
            cboYear.style.display = STYLE_DISPLAY_NONE;
            txtStartDate.value = nowY + "/01/01";
            txtEndDate.value = nowY + "/" + strNowM + "/" + strNowD;
            return true;
            break;
        case INDEX_ONE_YEAR: //1年間
            cboYear.style.display = STYLE_DISPLAY;
            var maxYear = nowY - 1; //現在年-1
            if (isCboChange) {
                cboYear.selectedIndex = 0;
            }

            var numYear = Number(cboYear.options[cboYear.selectedIndex].text);
            if (isNaN(numYear)) {
                //数値変換エラー
                return false;
            }
            else {

                if (numYear < MIN_YEAR) {
                    numYear = MIN_YEAR;
                }
                else if (numYear > maxYear) {
                    numYear = maxYear;
                }

                txtStartDate.value = numYear + "/01/01";
                txtEndDate.value = numYear + "/12/31";
                return true;
            }
            break;
        case INDEX_ALL: //全て
            cboYear.style.display = STYLE_DISPLAY_NONE;
            txtStartDate.value = MIN_YEAR + "/01/01";
            txtEndDate.value = nowY + "/" + strNowM + "/" + strNowD;
            return true;
            break;
    }
}


//緯度経度[DD]のチェックを行います。 エラー時はアラートを出します。
//  [引数]
//     txtLatDD:テキストボックス緯度[DD]
//     txtLonDD:テキストボックス経度[DD]
//  [戻り値]
//     [true]正常終了  [false]エラー
function checkDDPoint(txtLatDD, txtLonDD) {
    if (!checkDD(txtLatDD, true)) {
        if (txtLatDD.value == "") {
            alert("緯度が未入力です。");
            return false;
        }
        else {
            alert("緯度の入力値に誤りがあります。");
        }
        return false;
    }
    if (!checkDD(txtLonDD, false)) {
        if (txtLonDD.value == "") {
            alert("経度が未入力です。");
            return false;
        }
        else {
            alert("経度の入力値に誤りがあります。");
        }
        return false;
    }
    //正常
    return true;
}


//DMSからDDに変換し、コントロールにセットします。エラー時はアラートを出します。
//  [引数]
//     txtLatDD:テキストボックス緯度[DD]
//     txtLatD:テキストボックス緯度[度]
//     txtLatM:テキストボックス緯度[分]
//     txtLatS:テキストボックス緯度[秒]
//     txtLonDD:テキストボックス経度[DD]
//     txtLonD:テキストボックス経度[度]
//     txtLonM:テキストボックス経度[分]
//     txtLonS:テキストボックス経度[秒]
//  [戻り値]
//     [true]正常終了  [false]エラー
function convertDmsToDdPoint(txtLatDD, txtLatD, txtLatM, txtLatS, txtLonDD, txtLonD, txtLonM, txtLonS) {
    //緯度経度　DMS⇒DD変換
    //エラー判定
    var errTextLat;
    var errTextLon;

    //checkDMSメソッド　DMSテキストボックス整形及びチェック処理
    //  引数1:Dテキストボックス
    //  引数2:Mテキストボックス
    //  引数3:Sテキストボックス
    //  引数4:[true]緯度 [false]経度
    //  戻り値:エラーしたテキストボックス
    errTextLat = checkDMS(txtLatD, txtLatM, txtLatS, true);
    errTextLon = checkDMS(txtLonD, txtLonM, txtLonS, false);

    if (errTextLon != null) {
        errTextLon.focus();
        if (errTextLon.value == "") {
            alert("経度が未入力です。");
        }
        else {
            alert("経度の入力値に誤りがあります。");
        }
        return false;
    }

    if (errTextLat != null) {
        errTextLat.focus();
        if (errTextLat.value == "") {
            alert("緯度が未入力です。");
        }
        else {
            alert("緯度の入力値に誤りがあります。");
        }
        return false;
    }

    //変換処理
    //setDDメソッド　DMS⇒DD変換処理
    //  引数1:DDテキストボックス
    //  引数2:Dテキストボックス
    //  引数3:Mテキストボックス
    //  引数4:Sテキストボックス
    //  引数5:[true]緯度 [false]経度
    if (!setDD(txtLatDD, txtLatD, txtLatM, txtLatS, true)) {
        alert("緯度の変換に失敗しました。");
        return false;
    }
    if (!setDD(txtLonDD, txtLonD, txtLonM, txtLonS, false)) {
        alert("経度の変換に失敗しました。");
        return false;
    }

    //正常
    return true;
}




//緯度経度[秒]の小数点以下を丸める
//  [引数]
//     num:数値
function roundPointSec(num) {
    var DIGIT = 2; //緯度経度[秒] 小数点以下有効桁数
    var ret = num;
    return ret.toFixed(DIGIT)
}

//緯度経度の小数点以下を丸める
function roundPoint(num) {
    var DIGIT = 6; //緯度経度 小数点以下有効桁数
    var ret = num;
    return ret.toFixed(DIGIT)
}


//DDテキストボックスの整形を行い。入力値の正常性をチェックします。
//  [引数]
//     txtDD:テキストボックス緯度or経度
//     isLatitude:[true]緯度 [false]経度
//  [戻り値]
//     [true]正常  [false]エラー
function checkDD(txtDD, isLatitude) {
    //■宣言
    var num; //数値

    //■テキストボックスの空白を取り除く。
    txtDD.value = txtDD.value.replace("　", "").replace(" ", "");

    //■未入力チェック。
    if (txtDD.value == '') {
        return false;
    }

    //■数値変換及び小数点以下有効桁数丸め
    num = roundPoint(Number(txtDD.value));

    //■数値に正しく変換されたかチェック。
    if (isNaN(num)) {
        return false;
    }
    else {
        txtDD.value = num;
    }

    //■最大値、最小値判定
    if (isLatitude) {
        ///緯度判定
        return (-90 < num && num <= 90);
    }
    else {
        ///経度判定
        return (-180 < num && num <= 180);
    }
}

//DMSテキストボックスの整形を行い。入力値の正常性をチェックします。
//  [引数]
//     txtD:テキストボックス緯度or経度[度]
//     txtM:テキストボックス緯度or経度[分]
//     txtS:テキストボックス緯度or経度[秒]
//     isLatitude:[true]緯度 [false]経度
//  [戻り値]
//     正常時：null　エラー時：エラーしたテキストボックス
function checkDMS(txtD, txtM, txtS, isLatitude) {
    //■宣言
    var numD;
    var numM;
    var numS;

    //■テキストボックスの空白を取り除く。
    txtD.value = txtD.value.replace("　", "").replace(" ", "");
    txtM.value = txtM.value.replace("　", "").replace(" ", "");
    txtS.value = txtS.value.replace("　", "").replace(" ", "");

    //■未入力チェック。
    if (txtD.value == '') {
        return txtD;
    }

    //■[分][秒]のテキストが空白の場合0を入れる。
    if (txtM.value == '') {
        txtM.value = 0;
    }
    if (txtS.value == '') {
        txtS.value = 0;
    }

    //■数値変換及び小数点以下有効桁数丸め
    numD = Math.floor(Number(txtD.value)); //小数点以下切捨て
    numM = Math.floor(Number(txtM.value)); //小数点以下切捨て
    numS = roundPointSec(Number(txtS.value)); //小数点以下丸め

    if (isNaN(numD)) {
        return txtD;
    }
    else {
        txtD.value = numD;
    }

    if (isNaN(numM)) {
        return txtM;
    }
    else {
        txtM.value = numM;
    }

    if (isNaN(numS)) {
        return txtS;
    }
    else {
        txtS.value = numS;
    }

    //■最大値、最小値判定
    //[度]判定
    if (isLatitude) {
        //緯度[度]判定
        if (!(-90 < numD && numD <= 90)) {
            return txtD;
        }
    }
    else {
        //経度[度]判定
        if (!(-180 < numD && numD <= 180)) {
            return txtD;
        }
    }

    //[分]判定
    if (!(0 <= numM && numM < 60)) {
        return txtM;
    }

    //[秒]判定
    if (!(0 <= numS && numS < 60)) {
        return txtS;
    }

    return null;
}

//DMSからDDに変換し、コントロールにセットします。
//  [引数]
//     txtDD:テキストボックス緯度or経度
//     txtD:テキストボックス緯度or経度[度]
//     txtM:テキストボックス緯度or経度[分]
//     txtS:テキストボックス緯度or経度[秒]
//     isLatitude:[true]緯度 [false]経度
//  [戻り値]
//     [true]正常終了  [false]エラー
function setDD(txtDD, txtD, txtM, txtS, isLatitude) {
    //■宣言
    var d; //数値:度
    var m; //数値:分
    var s; //数値:秒
    var val; //数値:結果

    //■テキスト整形及び入力チェック。
    if (checkDMS(txtD, txtM, txtS, isLatitude) != null) {
        return false;
    }

    //■テキストボックスのテキストを数値に変換。
    d = Number(txtD.value);
    m = Number(txtM.value);
    s = Number(txtS.value);

    //■変換処理
    val = (0 <= d) ? (d + (m / 60.0) + (s / 3600.0))
                             : (((d * -1) + (m / 60.0) + (s / 3600.0)) * -1);
    val = roundPoint(val);

    //■結果チェック
    if (isNaN(val)) {
        return false;
    }

    //■結果セット
    txtDD.value = val;
    return true;
}

//DDからDMSに変換し、コントロールにセットします。
//  [引数]
//     txtDD:テキストボックス緯度or経度
//     txtD:テキストボックス緯度or経度[度]
//     txtM:テキストボックス緯度or経度[分]
//     txtS:テキストボックス緯度or経度[秒]
//     isLatitude:[true]緯度 [false]経度
//  [戻り値]
//     true:正常終了  false:エラー
function setDMS(txtDD, txtD, txtM, txtS, isLatitude) {
    //宣言

    var dd; //数値：DD(変換処理用)
    var valD; //数値：結果[度]
    var valM; //数値：結果[分]
    var valS; //数値：結果[秒]

    //■テキスト整形及び入力チェック。
    if (!checkDD(txtDD, isLatitude)) {
        return false;
    }

    //■テキストボックスのテキストを数値に変換。
    dd = Number(txtDD.value);

    //■変換処理。
    if (0 <= dd) {
        //引数がプラス。
        valD = Math.floor(dd);
    }
    else {
        //引数がマイナス。
        dd *= -1;
        valD = Math.floor(dd);
        valD *= -1;
    }

    ///秒に変換
    dd = roundPointSec((dd % 1.0) * 3600);
    //[分]秒を60で除算（小数点以下切捨て）
    valM = Math.floor(dd / 60);
    //[秒]秒を60で割った余り
    valS = roundPointSec(dd % 60);

    //■[分]繰り上げ処理
    if (60 <= valM) {
        valD += (0 <= valD) ? 1 : -1;
        valM -= 60;
    }

    //■結果チェック。
    if (isNaN(valD)) {
        return false;
    }
    if (isNaN(valM)) {
        return false;
    }
    if (isNaN(valS)) {
        return false;
    }

    //■結果セット。
    txtD.value = valD;
    txtM.value = valM;
    txtS.value = valS;
    return true;
}





function SetAoiAreaInfo(lblMessage, lblWarningAreaSize, area, height, width, minArea2, minArea, warningAreaSize) {

    try {
        _polygonArea = area;
        lblMessage.innerHTML = "面積:" + addCommas(area.toString()) + " km<sup>2 </sup> 　縦:" + addCommas(height.toString())
                                 + "km　横:" + addCommas(width.toString()) + "km";

        try {
            if (minArea2 > area) {
                if (minArea > area) {
                    lblMessage.style.color = "Red";
                } else {
                    lblMessage.style.color = "Orange";
                }
            } else {
                lblMessage.style.color = "Black";
            }
            if (area >= warningAreaSize) {
                lblWarningAreaSize.style.display = "";
            } else {
                lblWarningAreaSize.style.display = "none";
            }
        } catch (e) {
            alert("デザインの編集に失敗しました。" + e);
            lblWarningAreaSize.style.display = "";
            return false;
        }

    } catch (e) {
        alert("面積の表示に失敗しました。" + e);
        HeaderMessage.innerHTML = "";
        _polygonArea = 0;
        return false;
    }
    return true;
}
