// 半透明 解除
$().ajaxStop($.unblockUI);

$(document).ready(function(){

    // 日付 選択
    $("#txtLastmodOptionalDate").datepicker(
     {
         showOn              : 'button'
        ,buttonText          : '...'
        ,speed               : '1000'
        ,onSelect            : function() {
            // 「この日時を入れる」を選択状態にする
            $("input:radio[name='rdoLastmod']").val(['2']);
        }
     }
    );

    // 時刻 選択
    $("#txtLastmodOptionalTime").clockpick(
     {
         starthour          : 0
        ,endhour            : 23
        ,showminutes        : true
        ,minutedivisions    : 12
        ,military           : true
        ,layout             : 'vertical'
        ,event              : 'click'
     }
    ,function(val){
        if( val != "") {
            var t = val.split(":");
            var hh = ("0"+t[0]).slice(-2);
            var mm = ("0"+t[1]).slice(-2);
            $("#txtLastmodOptionalTime").val(hh+":"+mm+":00");
        }
        this.focus();
        // 「この日時を入れる」を選択状態にする
        $("input:radio[name='rdoLastmod']").val(['2']);
    }
    );

    // 現在時刻 設定
    SetNow();
});

// 現在時刻 設定
function SetNow() {
    var yyyy,mm,dd,hh,mi,ss;
    var now = new Date();

    var yyyy = now.getYear();
    if(yyyy < 1900) { yyyy += 1900; }

    mm = ((mm = now.getMonth() +1) > 9) ? mm + "" : "0" + mm;
    dd = ((dd = now.getDate())     > 9) ? dd + "" : "0" + dd;
    hh = ((hh = now.getHours())    > 9) ? hh + "" : "0" + hh;
    mi = ((mi = now.getMinutes())  > 9) ? mi + "" : "0" + mi;
    ss = ((ss = now.getSeconds())  > 9) ? ss + "" : "0" + ss;

    $("#txtLastmodOptionalDate").val(yyyy+"/"+mm+"/"+dd);
    $("#txtLastmodOptionalTime").val(  hh+":"+mi+":"+ss);
}

// サイトマップ生成
function GenerateSitemap() {

    // 検証結果エリア初期化
    $("#ResultData").remove();
    $("#Result").append($("<div>").attr("id", "ResultData"));

    // 入力値チェック
    if (!CheckInputValue()){
        return false;
    }

    // 半透明 設定
    $.extend($.blockUI.defaults.overlayCSS, {backgroundColor: "#ffffff"});
    $.blockUI({ message: '<div class="NowChecking">サイトマップ作成中です...<img src="image/NowLoading.gif" /><br />（各ページのリンクの仕方によっては、<br />作成に数分かかる場合があります。）</div>' });

    // サイトマップ 取得
    GetSitemap("ResultData");

    // 半透明 解除
    $().ajaxStop($.unblockUI);

    return true;
}

// 入力値チェック
function CheckInputValue() {
    var ret = true;
    // 自サイトURL
    var u = jQuery.trim($("#txtYourSiteUrl").val());
    if (u == "") {
        // 自サイトURLが未入力の場合、エラーメッセージ 表示
        $("#ResultData").append("あなたのサイトのURLを入力してください。<br>");
        ret = false;
    }
    // ファイルの最終更新日
    var lmod = $("input:radio[name='rdoLastmod']:checked").val()
    if (lmod == "2") {
        // 任意入力で日時が未入力の場合、エラーメッセージ 表示
        var lmodDate = jQuery.trim($("#txtLastmodOptionalDate").val());
        var lmodTime = jQuery.trim($("#txtLastmodOptionalTime").val());
        if ((lmodDate == "") || (lmodTime == "")) {
            $("#ResultData").append("ファイルの最終更新日を入力してください。<br>");
            ret = false;
        } else if( !CheckDate(lmodDate, lmodTime) ) {
            // 不正な日時の場合、エラーメッセージ 表示
            $("#ResultData").append("ファイルの最終更新日は YYYY/MM/DD HH:MM:SS形式で入力してください。<br>");
            ret = false;
        }
    }
    return ret;
}

// 日付チェック
function CheckDate(d, t) {

    // 正規表現による書式チェック
    if(!d.match(/^\d{4}\/\d{2}\/\d{2}$/)){
        return false;
    }
    if(!t.match(/^\d{2}:\d{2}:\d{2}$/)){
        return false;
    }
    // 日付存在チェック
    var arrDate = d.split("/");
    var date = new Date(arrDate[0] , arrDate[1] - 1 ,arrDate[2]);
    if( date.getFullYear() != arrDate[0] ) {
        return false;
    }
    if( date.getMonth() != arrDate[1]-1 ) {
        return false;
    }
    if( date.getDate() != arrDate[2] ) {
        return false;
    }
    // 時刻存在チェック
    var arrTime = t.split(":");
    var hh = parseInt(arrTime[0]);
    var mm = parseInt(arrTime[1]);
    var ss = parseInt(arrTime[2]);
    if (( hh < 0 ) || ( hh > 23)) {
        return false;
    }
    if (( mm < 0 ) || ( mm > 59)) {
        return false;
    }
    if (( ss < 0 ) || ( ss > 59)) {
        return false;
    }
    return true;
}

// サイトマップ 取得
function GetSitemap(idResult) {

    // 現在読込中 表示
    NowLoadingStart(idResult);

    // 自サイトURL
    var url = jQuery.trim($("#txtYourSiteUrl").val());
    // 文字コード
    var cset = $("input:radio[name='rdoCharset']:checked").val()
    // ファイルの最終更新日
    var lmod = $("input:radio[name='rdoLastmod']:checked").val()
    // ファイルの最終更新日（任意入力）
    var lmodDate = jQuery.trim($("#txtLastmodOptionalDate").val());
    var lmodTime = jQuery.trim($("#txtLastmodOptionalTime").val());
    // ページの更新頻度
    var cfreq = $("select#cmdChangeFreq").val()
    // URLの優先度
    var prio = $("input:radio[name='rdoPriority']:checked").val()
    // 除外する拡張子
    var ext = jQuery.trim($("#txtExceptExtention").val());

    // ログ書込（サイトマップ作成ツール）
    OutputSitemapGeneratorLog(URLencode(url), cset, lmod, URLencode(lmodDate+" "+lmodTime), cfreq, prio, ext)

    // クエリ
    var q = "";
    q += "?url="+URLencode(url);
    q += "&cs="+cset;
    q += "&lm="+lmod;
    if( lmod == "2" ) {
        q += "&lmt="+URLencode(lmodDate+" "+lmodTime);
    }
    q += "&cf="+cfreq;
    q += "&pr="+prio;
    q += "&ext="+ext;
   
    //window.open("./GetSitemap.aspx"+q, "sitemapWin");

    // 現在読込中 表示
    NowLoadingStart(idResult);

    // ページ情報 取得
    $.get("./GetSitemap.aspx"+q, function(data) {

        // 現在読込中 削除
        NowLoadingEnd(idResult);

        // サイトマップファイルへのリンク表示
        $("#"+idResult).append(
            $("<a></a>").attr("href", "data/"+data).append(data)
        );
    });
}

// ログ書込（サイトマップ作成ツール）
function OutputSitemapGeneratorLog(url, cset, lmod, lmodDate, cfreq, prio, ext) {
    $.ajax({
         url        : "./Log.aspx?m=2&u="+url+"&cs="+cset+"&lm="+lmod+"&lmd="+lmodDate+"&cf="+cfreq+"&pr="+prio+"&ext="+ext
        ,dataType   : "text"
    });
}
