/***************************************************************
 *　BEGIN：日付選択カレンダー
 **************************************************************/
//====================================================
// 機能： 親クラス。
// 引数： なし
// 戻り： なし
//====================================================
if ( typeof(JKL) == 'undefined' ) JKL = function() {};

//====================================================
// 機能： JKL.Calendar コンストラクタの定義。
// 引数： eid…カレンダー表示用の div 要素のid
//      fid…日付格納用テキスト欄の form 要素のid
//      valname…日付格納用テキスト欄の変数名
// 戻り： なし
//====================================================
JKL.Calendar = function ( eid, valname, calendarid ) {
    this.eid = eid;                // カレンダー表示用の div 要素のid
    this.valname = valname;        // 日付格納用テキスト欄の変数名
    this.calendarid = calendarid;  // 日付格納用テキスト欄のcalendar 要素のid
    this.__dispelem = null;        // カレンダー表示欄エレメント
    this.__textelem = null;        // テキスト入力欄エレメント
    this.__opaciobj = null;        // JKL.Opacity オブジェクト
    this.style = new JKL.Calendar.Style();
    return this;
};

//====================================================
// 機能： デフォルトのプロパティ。
// 引数： なし
// 戻り： なし
//====================================================
JKL.Calendar.prototype.spliter = "/";
JKL.Calendar.prototype.date = null;
JKL.Calendar.prototype.min_date = null;
JKL.Calendar.prototype.max_date = null;

//====================================================
// 機能： JKL.Calendar.Style。
// 引数： なし
// 戻り： なし
//====================================================
JKL.Calendar.Style = function() {
    return this;
};

//====================================================
// 機能： デフォルトのスタイル。
// 引数： なし
// 戻り： なし
//====================================================
JKL.Calendar.Style.prototype.frame_width        = "150px";      // フレーム横幅
JKL.Calendar.Style.prototype.frame_color        = "#009900";    // フレーム枠の色
JKL.Calendar.Style.prototype.font_size          = "12px";       // 文字サイズ
JKL.Calendar.Style.prototype.day_bgcolor        = "#F0F0F0";    // カレンダーの背景色
JKL.Calendar.Style.prototype.month_color        = "#FFFFFF";    // ○年○月部分の背景色
JKL.Calendar.Style.prototype.month_hover_color  = "#009900";    // マウスオーバー時の≪≫文字色
JKL.Calendar.Style.prototype.month_hover_bgcolor = "#FFFFCC";   // マウスオーバー時の≪≫背景色
JKL.Calendar.Style.prototype.weekday_color      = "#009900";    // 月曜～金曜日セルの文字色
JKL.Calendar.Style.prototype.saturday_color     = "#0040D0";    // 土曜日セルの文字色
JKL.Calendar.Style.prototype.sunday_color       = "#D00000";    // 日曜日セルの文字色
JKL.Calendar.Style.prototype.others_color       = "#999999";    // 他の月の日セルの文字色
JKL.Calendar.Style.prototype.day_hover_bgcolor  = "#FF9933";    // マウスオーバー時の日セルの背景
JKL.Calendar.Style.prototype.cursor             = "pointer";    // マウスオーバー時のカーソル形状

//====================================================
// 機能： メソッド。
// 引数： なし
// 戻り： なし
//====================================================
JKL.Calendar.Style.prototype.set = function(key,val) { this[key] = val; }
JKL.Calendar.Style.prototype.get = function(key) { return this[key]; }
JKL.Calendar.prototype.setStyle = function(key,val) { this.style.set(key,val); };
JKL.Calendar.prototype.getStyle = function(key) { return this.style.get(key); };

//====================================================
// 機能： 日付を初期化する。
// 引数： フォーム上の値
// 戻り： 日付
//====================================================
JKL.Calendar.prototype.initDate = function ( dd ) {
    if ( ! dd ) dd = new Date();
    var year = dd.getFullYear();
    var mon  = dd.getMonth();
    var date = dd.getDate();
    this.date = new Date( year, mon, date );
    //this.getFormValue();
    return this.date;
}

//====================================================
// 機能： 透明度設定のオブジェクトを返す。
// 引数： なし
// 戻り： 透明度
//====================================================
JKL.Calendar.prototype.getOpacityObject = function () {
    if ( this.__opaciobj ) return this.__opaciobj;
    var cal = this.getCalendarElement();
    if ( ! JKL.Opacity ) return;
    this.__opaciobj = new JKL.Opacity( cal );
    return this.__opaciobj;
};

//====================================================
// 機能： カレンダー表示欄のエレメントを返す。
// 引数： なし
// 戻り： エレメント
//====================================================
JKL.Calendar.prototype.getCalendarElement = function () {
    if ( this.__dispelem ) return this.__dispelem;
    this.__dispelem = document.getElementById( this.eid )
    return this.__dispelem;
};

//====================================================
// 機能： オブジェクトに日付を記憶する（YYYY/MM/DD形式で指定する）。
// 引数： オブジェクトの日付
// 戻り： 日付
//====================================================
JKL.Calendar.prototype.setDateYMD = function (ymd) {
    var splt = ymd.split( this.spliter );
    if ( splt[0]-0 > 0 &&
         splt[1]-0 >= 1 && splt[1]-0 <= 12 &&
         splt[2]-0 >= 1 && splt[2]-0 <= 31 ) {
        if ( ! this.date ) this.initDate();
        this.date.setFullYear( splt[0] );
        this.date.setMonth( splt[1]-1 );
        this.date.setDate( splt[2] );
    } else {
        ymd = "";
    }
    return ymd;
};

//====================================================
// 機能： オブジェクトから日付を取り出す（YYYY/MM/DD形式で返る）。
//      引数に Date オブジェクトの指定があれば、
//      オブジェクトは無視して、引数の日付を使用する（単なるfprint機能）
// 引数： オブジェクトの日付
// 戻り： オブジェクトから日付
//====================================================
JKL.Calendar.prototype.getDateYMD = function ( dd ) {
    if ( ! dd ) {
        if ( ! this.date ) this.initDate();
        dd = this.date;
    }
    var mm = "" + (dd.getMonth()+1);
    var aa = "" + dd.getDate();
    if ( mm.length == 1 ) mm = "" + "0" + mm;
    if ( aa.length == 1 ) aa = "" + "0" + aa;
    return dd.getFullYear() + this.spliter + mm + this.spliter + aa;
};

//====================================================
// 機能： テキスト入力欄の値を返す（ついでにオブジェクトも更新する）。
// 引数： なし
// 戻り： テキスト入力欄の値
//====================================================
JKL.Calendar.prototype.getFormValue = function () {
    var form1 = document.getElementById(this.calendarid);
    if ( ! form1 ) return "";
    var date1 = this.setDateYMD( form1.value );
    return date1;
};

//====================================================
// 機能： フォーム入力欄に指定した値を書き込む。
// 引数： なし
// 戻り： なし
//====================================================
JKL.Calendar.prototype.setFormValue = function (ymd) {
    if ( ! ymd ) ymd = this.getDateYMD();
    var form1 = document.getElementById(this.calendarid);
    if ( form1 ) form1.value = ymd;
    form1.style.backgroundColor = "";
    // エラーメセッジ
    if (form1.attributes["msgArea"]) {
    	var value = form1.attributes["msgArea"].nodeValue.toString();
    	if (value != "") {
	    	var msgId = document.getElementById(value);
	    	msgId.innerHTML = "";
	    	msgId.style.display = "none";
    	}
    }
};

//====================================================
// 機能： カレンダー表示欄を表示する。
// 引数： なし
// 戻り： なし
//====================================================
JKL.Calendar.prototype.show = function () {
    this.getCalendarElement().style.display = "";
};

//====================================================
// 機能： カレンダー表示欄を即座に隠す。
// 引数： なし
// 戻り： なし
//====================================================
JKL.Calendar.prototype.hide = function () {
    this.getCalendarElement().style.display = "none";
};

//====================================================
// 機能： カレンダー表示欄をフェードアウトする。
// 引数： なし
// 戻り： なし
//====================================================
JKL.Calendar.prototype.fadeOut = function (s) {
    if ( JKL.Opacity ) {
        this.getOpacityObject().fadeOut(s);
    } else {
        this.hide();
    }
};

//====================================================
// 機能： イベントを登録する。
// 引数： なし
// 戻り： なし
//====================================================
JKL.Calendar.prototype.addEvent = function ( elem, ev, func ) {
//  prototype.js があれば利用する(IEメモリリーク回避)
    //if ( window.Event && Event.observe ) {
    //    Event.observe( elem, ev, func, false );
    //} else {
    //    elem["on"+ev] = func;
    //}
    jQuery(elem).bind(ev, func);
};

//====================================================
// 機能： 月単位で移動する。
// 引数： 月
// 戻り： なし
//====================================================
JKL.Calendar.prototype.moveMonth = function ( mon ) {

    // 前へ移動
    if ( ! this.date ) this.initDate();
    for( ; mon<0; mon++ ) {
        this.date.setDate(1);   // 毎月1日の1日前は必ず前の月
        this.date.setTime( this.date.getTime() - (24*3600*1000) );
    }
    // 後へ移動
    for( ; mon>0; mon-- ) {
        this.date.setDate(1);   // 毎月1日の32日後は必ず次の月
        this.date.setTime( this.date.getTime() + (24*3600*1000)*32 );
    }
    this.date.setDate(1);       // 当月の1日に戻す

    var yearMonth = getYearMonth(this.date);
    var pattern = myHashtable.items(yearMonth);
    if (pattern == null || pattern == "" || pattern == "undefined") {
    	this.dojo(yearMonth);
    } else {
    	this.write(pattern);
    }

};

//====================================================
// 機能： 休日取得。
// 引数： 年
// 戻り： なし
//====================================================
JKL.Calendar.prototype.dojo = function (yearMonth) {
	thisYearMonth = yearMonth;
	dojo.xhrGet({
		        url: "getHoliday.do",
		        content:{
					cal_date : yearMonth
				},
		        handleAs: "text",
		        load: this.dojoback,
		        error: function(response){}
		    });
};

//====================================================
// 機能： DOJOの戻る関数。
// 引数： response
// 戻り： なし
//====================================================
JKL.Calendar.prototype.dojoback = function(responseText) {
	var ret = responseText.split("&");
	var month = ret[0].split(",");
	var pattern = ret[1].split(",");
	myHashtable = new HashTable();
	myHashtable.clear();
	for (i=0; i<12; i++) {
		myHashtable.add(month[i], pattern[i]);
	}
	eval(document.getElementById("openCalenderId").value).write(myHashtable.items(thisYearMonth));
}

//====================================================
// 機能： カレンダー聞く
// 引数： なし
// 戻り： なし
//====================================================
JKL.Calendar.prototype.open = function () {
	openFlag = true;
	var date = new Date();
	var form1 = document.getElementById(this.calendarid);
	if ( form1 && form1.value ) {
		if (!isValidDate(form1.value)) {
			this.initDate();
		} else {
			var splt = form1.value.split(this.spliter);
	        if ( splt[0] > 0 && splt[2] > 0 ) {
	            date = new Date( splt[0]-0, splt[1]-1, splt[2]-0 );
	        }
		}

    } else {
    	this.initDate();
    }

    var yearMonth = getYearMonth(date);
    document.getElementById("openCalenderId").value = this.calendarid + this.valname;
	this.dojo(yearMonth);
}

function isValidDate(str) {

	var RegDateLine = /\d{4}\/{1}\d{1,2}\/{1}\d{1,2}/;
    var pattern = /^[/0-9]+$/;
    if ((!pattern.test(str)) || (!RegDateLine.test(str)) || (str.length > 10)) {
		return false;
    }
    var sDate = str.toString();
    var MonthDays=new Array(31,28,31,30,31,30,31,31,30,31,30,31);
    mYear = sDate.substr(0,4) ;
    mMonth = sDate.substr(5,2) ;
    mDay = sDate.substr(8,2);

    if (mYear <= 0 || mYear > 9999 || mMonth <= 0 || mMonth > 12) {
        return false;
    }

    var RightDay = 0 ;
    if (mMonth == 2) {
        RightDay = ((((mYear%4 == 0) && (mYear%100 != 0)) || (mYear%400 == 0))? 29: 28);
    } else {
        mMonth = mMonth - 1;
        RightDay = MonthDays[mMonth] ;
    }

    if (mDay <= 0 || mDay > RightDay) {
        return false;
    }
    return true;
}

//====================================================
// 機能： カレンダーを描画する。
// 引数： なし
// 戻り： なし
//====================================================
JKL.Calendar.prototype.write = function (pattern) {
    var date = new Date();
	var form1 = document.getElementById(this.calendarid);

	if (openFlag) {
		if ( form1 && form1.value ) {
			if (form1.style.backgroundColor == ERR_RED_COLOR) {
				this.initDate();
			} else {
				var splt = form1.value.split(this.spliter);
		        if ( splt[0] > 0 && splt[2] > 0 ) {
		            this.date = new Date( splt[0]-0, splt[1]-1, splt[2]-0 );
		        }
			}
	    } else {
	    	this.initDate();
	    }
	}

    date.setTime( this.date.getTime() );
    var year = date.getFullYear();          // 指定年
    var mon  = date.getMonth();             // 指定月
    var today = date.getDate();             // 指定日
    var inputTagsName = "";                 // マスタは情報名を設定
    if (parseInt(mon) < 10) {
    	inputTagsName = String(year) + '0' + String(mon + 1);
    } else if (String(mon).length == 1) {
    	inputTagsName = String(year)+String(mon+1);
    }

    // 選択可能な日付範囲
    var min = null;
    if ( this.min_date ) {
        var tmp = new Date( this.min_date.getFullYear(),
            this.min_date.getMonth(), this.min_date.getDate() );
        min = tmp.getTime();
    }
    var max = null;
    if ( this.max_date ) {
        var tmp = new Date( this.max_date.getFullYear(),
            this.max_date.getMonth(), this.max_date.getDate() );
        max = tmp.getTime();
    }


    // 直前の月曜日まで戻す
    date.setDate(1);                        // 1日に戻す
    var wday = date.getDay();               // 曜日 日曜(0)～土曜(6)
    //if ( wday != 1 ) {
        //if ( wday == 0 ) wday = 7;
        date.setTime( date.getTime() - (24*3600*1000)*(wday-0) );
    //}
    // 最大で7日×6週間＝42日分のループ
    var list = new Array();
    for( var i=0; i<42; i++ ) {
        var tmp = new Date();
        tmp.setTime( date.getTime() + (24*3600*1000)*i );
        if ( i && i%7==0 && tmp.getMonth() != mon ) break;
        list[list.length] = tmp;
    }

    // スタイルシートを生成する
//    var month_table_style = 'width: 100%; ';
//    month_table_style += 'background: '+this.style.frame_color+'; ';
//    month_table_style += 'border: 1px solid '+this.style.frame_color+';';
//
//    var week_table_style = 'width: 100%; ';
//    week_table_style += 'background: '+this.style.day_bgcolor+'; ';
//    week_table_style += 'border-left: 1px solid '+this.style.frame_color+'; ';
//    week_table_style += 'border-right: 1px solid '+this.style.frame_color+'; ';
//
//    var days_table_style = 'width: 100%; ';
//    days_table_style += 'background: '+this.style.day_bgcolor+'; ';
//    days_table_style += 'border: 1px solid '+this.style.frame_color+'; ';
//
//    var month_td_style = "";
//    month_td_style += 'font-size: '+this.style.font_size+'; ';
//    month_td_style += 'color: '+this.style.month_color+'; ';
//    month_td_style += 'padding: 4px 0px 2px 0px; ';
//    month_td_style += 'text-align: center; ';
//    month_td_style += 'font-weight: bold;';
//
//    var week_td_style = "";
//    week_td_style += 'font-size: '+this.style.font_size+'; ';
//    week_td_style += 'padding: 2px 0px 2px 0px; ';
//    week_td_style += 'font-weight: bold;';
//    week_td_style += 'text-align: center;';
//
//    var days_td_style = "";
//    days_td_style += 'font-size: '+this.style.font_size+'; ';
//    days_td_style += 'padding: 1px; ';
//    days_td_style += 'text-align: center; ';
//    days_td_style += 'font-weight: bold;';
//
//    var days_unselectable = "font-weight: normal;";

    // 多言語対応
    var dateLanguageObj = document.getElementById(this.calendarid);
    var language = dateLanguageObj.attributes["datelanguage"].nodeValue.toString();
    var languageArray = language.split(",");
    if (languageArray.length != 12) {
        languageArray = "Last month,YEAR,MONTH,close,Next month,MON,TUR,WED,THU,FRI,STA,SUN".split(",");
    }

    // HTMLソースを生成する
    var src1 = "";

    // 月
    var strMon = (mon+1) + languageArray[2];
    // 年
    var strYear = (year) + languageArray[1];

    var gamenLangcd = "ja";
    if (document.getElementById("gamenDispLangcd") != null) {
    	gamenLangcd = document.getElementById("gamenDispLangcd").value;
    }
    if (gamenLangcd == "en") {
    	strYear = year;
    	if (mon+1 == 1) {
    		strMon = "Jan.";
    	} else if (mon+1 == 2) {
    		strMon = "Feb.";
    	} else if (mon+1 == 3) {
    		strMon = "Mar.";
    	} else if (mon+1 == 4) {
    		strMon = "Apr.";
    	} else if (mon+1 == 5) {
    		strMon = "May.";
    	} else if (mon+1 == 6) {
    		strMon = "Jun.";
    	} else if (mon+1 == 7) {
    		strMon = "Jul.";
    	} else if (mon+1 == 8) {
    		strMon = "Aug.";
    	} else if (mon+1 == 9) {
    		strMon = "Sep.";
    	} else if (mon+1 == 10) {
    		strMon = "Oct.";
    	} else if (mon+1 == 11) {
    		strMon = "Nov.";
    	} else if (mon+1 == 12) {
    		strMon = "Dec.";
    	}
    }

    // --------------------------------------------------------------------------------------------------
    src1 += '<div class="inpCalendarArea clearfix">';
    src1 += '<div class="inpCalendarMain">';

    src1 += '<div class="inpCalhead ">';
    src1 += '<p class="clearfix l">';
    src1 += '<span class="inpBe" id="__'+this.eid+'_btn_prev">Before</span>';
    src1 += '<span class="cobalt bold text12 box_l10">' + strMon + '</span>';
    src1 += '<span class="cobalt bold text12 box_pt09">' + strYear + '</span>';
    src1 += '<span class="inpNe" id="__'+this.eid+'_btn_next">Next</span>';
    src1 += '</p>';
    src1 += '<p class="r data_inp_close" id="__'+this.eid+'_btn_close"><img src="images/pop_close.gif" width="13" height="13" /></p>';
    src1 += '</div>';

    src1 += '<ul class="inpCaldayB clearfix clear">';
    src1 += '<li>' + languageArray[11] + '</li>';
    src1 += '<li>' + languageArray[5] + '</li>';
    src1 += '<li>' + languageArray[6] + '</li>';
    src1 += '<li>' + languageArray[7] + '</li>';
    src1 += '<li>' + languageArray[8] + '</li>';
    src1 += '<li>' + languageArray[9] + '</li>';
    src1 += '<li>' + languageArray[10] + '</li>';
    src1 += '</ul>';

    src1 += '<ul class="inpCaldayA clearfix">';






    // --------------------------------------------------------------------------------------------------

//    src1 += '<table border="0" cellpadding="0" cellspacing="0" style="width: 100%;"><tr><th colspan=7>';
//    src1 += '<table border="0" cellpadding="0" cellspacing="0" style="'+month_table_style+'"><tr>';
//    src1 += '<th id="__'+this.eid+'_btn_prev" title="'+languageArray[0]+'" style="'+month_td_style+'">≪</th>';
//    src1 += '<th style="'+month_td_style+'">&nbsp;</th>';
//    src1 += '<th style="'+month_td_style+'">'+(year)+'&nbsp;'+languageArray[1]+'&nbsp;'+(mon+1)+'&nbsp;'+languageArray[2]+'</th>';
//    src1 += '<th id="__'+this.eid+'_btn_close" title="'+languageArray[3]+'" style="'+month_td_style+'">×</th>';
//    src1 += '<th id="__'+this.eid+'_btn_next" title="'+languageArray[4]+'" style="'+month_td_style+'">≫</th>';
//    src1 += "</tr></table></th>";
//    src1 += "</tr>";
//
//    src1 += '<tr><th>';
//    src1 += '<table border="0" cellpadding="0" cellspacing="0" style="'+week_table_style+'">';
//    src1 += '<tr style="'+week_table_style+'">';
//    src1 += '<th style="color: '+this.style.weekday_color+'; '+week_td_style+'">'+languageArray[5]+'&nbsp;</th>';
//    src1 += '<th style="color: '+this.style.weekday_color+'; '+week_td_style+'">'+languageArray[6]+'&nbsp;</th>';
//    src1 += '<th style="color: '+this.style.weekday_color+'; '+week_td_style+'">'+languageArray[7]+'&nbsp;</th>';
//    src1 += '<th style="color: '+this.style.weekday_color+'; '+week_td_style+'">'+languageArray[8]+'&nbsp;</th>';
//    src1 += '<th style="color: '+this.style.weekday_color+'; '+week_td_style+'">'+languageArray[9]+'&nbsp;</th>';
//    src1 += '<th style="color: '+this.style.saturday_color+'; '+week_td_style+'">'+languageArray[10]+'&nbsp;</th>';
//    src1 += '<th style="color: '+this.style.sunday_color+'; '+week_td_style+'">'+languageArray[11]+'&nbsp;</th>';
//    src1 += "</tr></table></th>";
//    src1 += "</tr>";
//    src1 += '<tr><th><table border="0" cellpadding="0" cellspacing="0" style="'+days_table_style+'">';
//    src1 += '<tr style="'+days_table_style+'">';

    var curutc = 0;
    if ( form1 && form1.value ) {
        var splt = form1.value.split(this.spliter);
        if ( splt[0] > 0 && splt[2] > 0 ) {
            var curdd = new Date( splt[0]-0, splt[1]-1, splt[2]-0 );
            curutc = curdd.getTime();                           // フォーム上の当日
        }
    }

    // カレンダーの休日の情報はマスタから設定する
    var hiddenValue ="";
    // Tagsが存在するかを判断する
    var tagsName = document.getElementById(inputTagsName);
    var inputTagsId = document.getElementById(inputTagsName);
    if (tagsName != null) {
        hiddenValue =inputTagsId.value;
    }
    var hiddenValueArray = hiddenValue.split(",");

	var tmpPattren="";
	var startPoint=0;

    for ( var i=0; i<list.length; i++ ) {
        var dd = list[i];
        var ww = dd.getDay();
        var mm = dd.getMonth();
        var flg = false;
//        if ( ww == 1 ) {
//            src1 += "<tr>";                                     // 月曜日の前に行頭
//        }
        //var cc = days_td_style;
        var cc = "";
        var stylecc = "";
        var holiday = dd.getDate();
        if ( mon == mm ) {

        	if (pattern == null) {
        		pattern = "";
        	}

        	//pattern = myHashtable.items(inputTagsName);
        	tmpPattren = pattern.substring(startPoint,startPoint+1);

        	startPoint = startPoint + 1;

//        	if (tmpPattren == "9") {
//        		cc += "color: "+this.style.sunday_color+";";
//        	} else {
//        		cc += "color: "+this.style.weekday_color+";";
//        	}

            //if ( ww == 0 ) {
            //    cc += "color: "+this.style.sunday_color+";";    // 当月の日曜日
            //} else if ( ww == 6 ) {
            //    cc += "color: "+this.style.saturday_color+";";  // 当月の土曜日
            //} else {
            //    for ( var temp=0; temp<hiddenValueArray.length; temp++ ) {
            //        if ( holiday == hiddenValueArray[temp] ) {
            //            flg = true;
            //        }
            //    }
            //    if ( flg ) {
            //        cc += "color: "+this.style.sunday_color+";";    // 当月の日曜日
            //    } else {
            //        cc += "color: "+this.style.weekday_color+";";   // 当月の平日
            //    }
           //}


        } else {
            //cc += "color: "+this.style.others_color+";";        // 前月末と翌月初の日付
        	cc = "nac";
        }

        if (tmpPattren == "9") {
    		// 日曜日
    		if ( ww == 0 ) {
    			stylecc += "background-color:#fff5f5;";
    		} else if ( ww == 6 ) {
    			// 土曜日
    			stylecc += "background-color:#eff8ff;";
    		}
    	}

        var utc = dd.getTime();
//        if (( min && min > utc ) || ( max && max < utc )) {
//            cc += days_unselectable;
//        }

        if ( utc == curutc ) {                                  // フォーム上の当日
            //cc += "background: "+this.style.day_hover_bgcolor+";";
        	cc = "inpToday";
        	stylecc = "";
        }

        var ss = this.getDateYMD(dd);
        var tt = dd.getDate();

        src1 += '<li style="' + stylecc + '" class="' + cc + '" id="__'+this.eid+'_td_'+ss+'">' + tt + '</li>';

//        src1 += '<th style="'+cc+'" title='+ss+' id="__'+this.eid+'_td_'+ss+'">'+tt+'</th>';
//        if ( ww == 7 ) {
//            src1 += "</tr>\n";                                  // 土曜日の後に行末
//        }
    }
//    src1 += "</tr></table></th>";
//    src1 += "</tr></table>\n";

    src1 += '</ui>';
    src1 += '</div>';

    src1 += '<p class="rightShadow"></p>';
    src1 += '<p class="bottomShadow clear"></p>';

    src1 += '</div>';

    // カレンダーを書き換える
    var cal1 = this.getCalendarElement();
    if ( ! cal1 ) return;
    cal1.style.width = this.style.frame_width;
    cal1.style.position = "absolute";
    cal1.innerHTML = src1;

    var test_over = function (ev) {
        isMouseOn = true;
    };
    var test_out = function (ev) {
        isMouseOn = false;
    };

    var doc = document.getElementById(this.eid);
    this.addEvent( doc, "mouseover", test_over );
    this.addEvent( doc, "mouseout", test_out );

    // イベントを登録する
    var __this = this;
    var get_src = function (ev) {
        ev  = ev || window.event;
        var src = ev.target || ev.srcElement;
        return src;
    };

    var calFocus = document.getElementById("openCalenderIdFocus");
    var month_onmouseover = function (ev) {
        var src = get_src(ev);
        //src.style.color = __this.style.month_hover_color;
        //src.style.background = __this.style.month_hover_bgcolor;
        src.style.opacity = "0.3";
        src.style.filter = "alpha(opacity=30)";
        if (calFocus != null) {
        	calFocus.value = "1";
        }
    };
    var month_onmouseout = function (ev) {
        var src = get_src(ev);
        //src.style.color = __this.style.month_color;
        //src.style.background = __this.style.frame_color;
        src.style.opacity = "";
        src.style.filter = "";
        if (calFocus != null) {
        	calFocus.value = "";
        }
    };

    //var strBgColor = "";
    var strCssName = "";
    var day_onmouseover = function (ev) {
        var src = get_src(ev);
        //strBgColor = src.style.background;
        //src.style.background = __this.style.day_hover_bgcolor;
        //src.style.background = "";
        //src.style.background = "none";
        strCssName = src.className;
        src.className = "inpCalhov";
        if (calFocus != null) {
        	calFocus.value = "1";
        }
    };
    var day_onmouseout = function (ev) {
        var src = get_src(ev);
        //src.style.background = __this.style.day_bgcolor;
        //src.style.background = strBgColor;
        src.className = strCssName;
        if (calFocus != null) {
        	calFocus.value = "";
        }
    };
    var day_onclick = function (ev) {
        var src = get_src(ev);
        var srcday = src.id.substr(src.id.length-10);
        __this.setFormValue( srcday );
        __this.fadeOut( 1.0 );
    };

    // 前の月へボタン
    var tdprev = document.getElementById( "__"+this.eid+"_btn_prev" );
    tdprev.style.cursor = this.style.cursor;
    // イベントを登録する
    this.addEvent( tdprev, "mouseover", month_onmouseover );
    this.addEvent( tdprev, "mouseout", month_onmouseout );
    this.addEvent( tdprev, "click", function(){ __this.moveMonth( -1 ); });

    // 閉じるボタン
    var tdclose = document.getElementById( "__"+this.eid+"_btn_close" );
    tdclose.style.cursor = this.style.cursor;
    // イベントを登録する
    this.addEvent( tdclose, "mouseover", month_onmouseover );
    this.addEvent( tdclose, "mouseout", month_onmouseout );
    this.addEvent( tdclose, "click", function(){ __this.hide(); });

    // 次の月へボタン
    var tdnext = document.getElementById( "__"+this.eid+"_btn_next" );
    tdnext.style.cursor = this.style.cursor;
    // イベントを登録する
    this.addEvent( tdnext, "mouseover", month_onmouseover );
    this.addEvent( tdnext, "mouseout", month_onmouseout );
    this.addEvent( tdnext, "click", function(){ __this.moveMonth( +1 ); });

    // セルごとのイベントを登録する
    for ( var i=0; i<list.length; i++ ) {
        var dd = list[i];
        if ( mon != dd.getMonth() ) continue;       // 今月のセルにのみ設定する

        var utc = dd.getTime();
        if ( min && min > utc ) continue;           // 昔過ぎる
        if ( max && max < utc ) continue;           // 未来過ぎる
        //if ( utc == curutc ) continue;              // フォーム上の当日

        var ss = this.getDateYMD(dd);
        var cc = document.getElementById( "__"+this.eid+"_td_"+ss );
        if ( ! cc ) continue;

        cc.style.cursor = this.style.cursor;
        // イベントを登録する
        this.addEvent( cc, "mouseover", day_onmouseover );
        this.addEvent( cc, "mouseout", day_onmouseout );
        this.addEvent( cc, "click", day_onclick );
    }
    // 表示する
    this.show();
    openFlag = false;
    form1.style.backgroundColor = "";
};

//====================================================
// 機能：旧バージョン互換（typo）。
// 引数： なし
// 戻り： なし
//====================================================
JKL.Calendar.prototype.getCalenderElement = JKL.Calendar.prototype.getCalendarElement;
JKL.Calender = JKL.Calendar;
/***************************************************************
 *　END：日付選択カレンダー
 **************************************************************/
/***************************************************************
 *　BEGIN：ドラッグで移動させたい
 **************************************************************/
//====================================================
// 機能： ドラッグで移動させたい。
// 引数： イベント
// 戻り： なし
//====================================================
// ブラウザを判断する
var nn6=document.getElementById&&!document.all;
// flg用
var isdrag=false;
// マウスの位置
var x = 0;
var y = 0;
var oDragObj = null;
function moveMouse(e) {
    if (isdrag) {
        // カレンダーで移動
        oDragObj.style.top  =  (nn6 ? nTY + e.clientY - y : nTY + event.clientY - y)+"px";
        oDragObj.style.left  =  (nn6 ? nTX + e.clientX - x : nTX + event.clientX - x)+"px";
        return false;
    }
}
function initDrag(e) {
    var oDragHandle = nn6 ? e.target : event.srcElement;
    var topElement = "HTML";

    // divのクラス名はdragAbleを判断する
    while (oDragHandle.tagName != topElement && oDragHandle.className != "dragAble") {
    	oDragHandle = nn6 ? oDragHandle.parentNode : oDragHandle.parentElement;
    }

	// divのクラス名はdragAbleを判断する
	if (oDragHandle.className=="dragAble") {
	    var dragName = document.getElementById(oDragHandle.id);
	    isdrag = true;
	    oDragObj = oDragHandle;

	    // div の位置
	    nTY = parseInt(oDragObj.style.top + 0);
	    if(nTY == 0){
	        nTY = parseInt(dragName.offsetTop);
	    }
	    nTX = parseInt(oDragObj.style.left + 0);
	    if(nTX == 0){
	        nTX = parseInt(dragName.offsetLeft);
	    }

	    // マウスの位置
	    y = nn6 ? e.clientY : event.clientY;
	    x = nn6 ? e.clientX : event.clientX;

	    document.onmousemove=moveMouse;
	    return false;
    }
}
// flgの値を設定する
document.onmouseup=new Function("isdrag=false");

//====================================================
// 機能： 日付より年月を取得
// 引数： 日付
// 戻り： 年月
//====================================================
function getYearMonth(date) {
	var yearMonth = "";
	var year = date.getFullYear();          // 指定年
    var mon  = date.getMonth();             // 指定月
    var today = date.getDate();             // 指定日
    if (parseInt(mon) < 9) {
    	yearMonth = String(year) + '0' + String(mon + 1);
    } else {
    	yearMonth = String(year)+String(mon+1);
    }
    return yearMonth;
}
/***************************************************************
 *　END：ドラッグで移動させたい
 **************************************************************/

