var jSelectDate = {


    /**
    * 選項設置
    */
    settings: {
        css: "date",
        borderCss: "date",
        disabled: false,
        yearBegin: 1910,
        isShowLabel: true,
        allowNull: true
    },



    /**
    * 初始化對向
    * @param {Object} el 用於存放日期結果的文本框 jQuery DOM
    */
    init: function(els) {

        els.each(function() {
            var el = $(this);

            /* 取得舊的日期 */
            var elValue = el.val();
            //            if (elValue.indexOf(" ") > -1)
            //                elValue = elValue.substring(0, elValue.indexOf(" "));
            //            elDate = new Date(elValue.split("-").join("/"));
            elDate = parseDate(elValue);
            //elDate = new Date(Date.parse(elValue));
            try{
            var nYear = elDate.getFullYear();
            var nMonth = jSelectDate.returnMonth(elDate.getMonth());
            var nDay = elDate.getDate();
            }
            catch(e)
            {}

            /* 隱藏給出的對向 */
            el.hide();

            /* 先算出當前共有多少個jSelectDate */
            var currentIdx = $("jSelectDateBorder").length + 1;

            /* 加入控制項到文本框的位置 */
            var spanDate = document.createElement("span");
            spanDate.id = "spanDate" + currentIdx;
            spanDate.className = "jSelectDateBorder " + jSelectDate.settings.borderCss;
            spanDate.disabled = jSelectDate.settings.disabled;

            el.after(spanDate);

            /* 創建年 */
            var selYear = document.createElement("select");
            selYear.id = "selYear" + currentIdx
            selYear.className = jSelectDate.settings.css;
            selYear.disabled = jSelectDate.settings.disabled;
            if (jSelectDate.settings.allowNull) {
                var optionnull = document.createElement("option");
                optionnull.value = '';
                optionnull.innerHTML = '';
                selYear.appendChild(optionnull);
            }
            /* 加入選項 */
            for (var i = jSelectDate.settings.yearEnd; i >= jSelectDate.settings.yearBegin; i--) {

                var option = document.createElement("option");
                option.value = i;
                option.innerHTML = i;

                /* 判斷是否有舊的值，如果有就選中 */
                if (!isNaN(nYear)) {
                    if (i == nYear) {
                        option.selected = true;
                    }
                }

                selYear.appendChild(option);
                option = null;

            }

            $(spanDate).append(selYear);

            /* 創建月 */
            var selMonth = document.createElement("select");
            selMonth.id = "selMonth" + currentIdx
            selMonth.className = jSelectDate.settings.css;
            selMonth.disabled = jSelectDate.settings.disabled;
            if (jSelectDate.settings.allowNull) {
                var optionnull = document.createElement("option");
                optionnull.value = '';
                optionnull.innerHTML = '';
                selMonth.appendChild(optionnull);
            }
            /* 加入選項 */
            for (var i = 1; i <= 12; i++) {
                var option = document.createElement("option");
                option.value = i;
                option.innerHTML = i;

                /* 判斷是否有舊的值，如果有就選中 */
                if (!isNaN(nMonth)) {
                    if (i == nMonth) {
                        option.selected = true;
                    }
                }

                selMonth.appendChild(option);
                option = null;
            }
            /* 加入控制項到文本框的位置 */
            $(selYear).after(selMonth);


            /* 創建日 */
            var selDay = document.createElement("select");
            selDay.id = "selDay" + currentIdx
            selDay.className = jSelectDate.settings.css;
            selDay.disabled = jSelectDate.settings.disabled;

            /* 算出最大的天數 */
            var maxDayNum = 31;
            if (jSelectDate.settings.allowNull) {
                var optionnull = document.createElement("option");
                optionnull.value = '';
                optionnull.innerHTML = '';
                selDay.appendChild(optionnull);
            }

            /* 加入選項 */
            for (var i = 1; i <= maxDayNum; i++) {

                var option = document.createElement("option");
                option.value = i;
                option.innerHTML = i;

                /* 判斷是否有舊的值，如果有就選中 */
                if (!isNaN(nDay)) {
                    if (i == nDay) {
                        option.selected = true;
                    }
                }

                selDay.appendChild(option);
                option = null;
            }
            /* 加入控制項到文本框的位置 */
            $(selMonth).after(selDay);

            if (jSelectDate.settings.isShowLabel) {
                $(selMonth).before("年 ");
                $(selDay).before("月 ");
                $(selDay).after("日");
            } else {
                $(selMonth).before(" ");
                $(selDay).before(" ");
            }

            /* 返回當前選擇的日期 */
            var getDate = function() {
                var year = $(selYear).val();
                var month = $(selMonth).val();
                var day = $(selDay).val();
                //el.val(year + "-" + month + "-" + day);
                if (year.length > 0 && month.length > 0 && day.length > 0)
                    el.val(year + "-" + month + "-" + day);
                else
                    el.val('');
            }
            var Dune5DateOnChange = function(d, m, y, el) {

                dyel = d;
                mnel = m;
                yrel = y;
                n = 0;
                maximum = monthDays(dyel.val(), mnel.val(), yrel.val());
                //alert(maximum);
                if (maximum < dyel.val()) {
                    dyel.attr("value", maximum);
                }
                getDate();
            }
            var monthDays = function(d, m, y) {
                if (m == 2)
                    return (((y % 4 == 0) && (y % 100 != 0)) || (y % 400 == 0)) ? 29 : 28;
                else
                    return (m == 4 || m == 6 || m == 9 || m == 11) ? 30 : 31;
            }


            /**
            * 給幾個下拉清單加入更改後的事件
            */
            $(selDay).change(function() {
                Dune5DateOnChange($(selDay), $(selMonth), $(selYear), el);
            });
            $(selMonth).change(function() {

                Dune5DateOnChange($(selDay), $(selMonth), $(selYear), el);
            });
            $(selYear).change(function() {

                Dune5DateOnChange($(selDay), $(selMonth), $(selYear), el);
            });
            $(selYear).width(54);
            $(selMonth).width(40);
            $(selDay).width(40);
        })


    },


    returnMonth: function(num) {
        var arr = new Array("1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12");
        return arr[num];
    },

    /**
    * 創建一個Option物件
    * @param {Object} value 值
    * @param {Object} text 文本
    */
    createOption: function(value, text) {
        var option = document.createElement("option");
        option.value = value;
        option.innerHTML = text;
        return option;
    }
}
jQuery.fn.jSelectDate = function(settings){    

	var getNowYear = function(){
        /* 得到現在的年 */
        var date = new Date();
        return date.getFullYear();
    }
	
	jSelectDate.settings.yearEnd = getNowYear();
	
    $.extend(jSelectDate.settings, settings);


    jSelectDate.init($(this));
    
    return $(this);
    
}

//將字符串轉換為時間對象
function parseDate(str) {
    if (typeof str == 'string') {
        var results = str.match(/^ *(\d{4})\W(\d{1,2})\W(\d{1,2}) *$/);
        if (results && results.length > 3)
            return new Date(parseInt(results[1]), parseInt(results[2]) - 1, parseInt(results[3]));
        results = str.match(/^ *(\d{4})\W(\d{1,2})\W(\d{1,2})\W+(\d{1,2})\W(\d{1,2})\W(\d{1,2}) *$/);
        if (results && results.length > 6)
            return new Date(parseInt(results[1]), parseInt(results[2]) - 1, parseInt(results[3]), parseInt(results[4]), parseInt(results[5]), parseInt(results[6]));
        results = str.match(/^ *(\d{4})\W(\d{1,2})\W(\d{1,2})\W+(\d{1,2})\W(\d{1,2})\W(\d{1,2})\W(\d{1,9}) *$/);
        if (results && results.length > 7)
            return new Date(parseInt(results[1]), parseInt(results[2]) - 1, parseInt(results[3]), parseInt(results[4]), parseInt(results[5]), parseInt(results[6]), parseInt(results[7]));
    }
    return null;
}
