﻿// jToday a simple jQuery date display plugin by Donavon West
// Copyright 2009 Donavon West. All rights reserved

(function($, document) {
    //--------------------
    $.fn.jToday = function(p_date) {
        var jTodayData = "jTodayData", div = "div", match, data, months = "Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec".split(" ");

        // ------------------------
        // set the class and inner HTML
        function setStuff(p_el, p_class, p_str) {
            p_el.innerHTML = p_str;
            p_el.className = p_class + " " + p_class + p_str;
        }

        // ------------------------
        //constructor code

        return this.each(function() {
            data = $.data(this, jTodayData);
            if (!data) { //only done once per element
                data = {};

                //does innerHTML contain a date string? (i.e. YYYY-MM-DD)
                match = this.innerHTML.match(/^(\d\d\d\d)-(\d\d)-(\d\d)( |$|T)/);
                if (match) {
                    //alert("Match");
                    data.date = new Date(match[1], parseInt(match[2], 10) - 1, match[3]); //yes, use it
                } else {
                    //alert("No match");
                    data.date = p_date ? p_date : new Date(); //use the date passed in (or default to today)
                    //data.date = this.innerHTML ? Date.parse(this.innerHTML) : new Date;
                    //alert(data.date);
                }

                //create the sub elements
                this.innerHTML = "";
                data.yearEl = document.createElement(div);
                this.appendChild(data.yearEl);
                data.monthEl = document.createElement(div);
                this.appendChild(data.monthEl);
                data.dayEl = document.createElement(div);
                this.appendChild(data.dayEl);
                $.data(this, jTodayData, data); //save it for next time
            } else {
                data.date = p_date ? p_date : data.date; //use the date passed in (or the old value if undefined)
            }

            setStuff(data.yearEl, "year", data.date.getFullYear().toString());
            setStuff(data.monthEl, "month", months[data.date.getMonth()]);
            setStuff(data.dayEl, "day", (data.date.getDate()).toString());
        });

    };

    //--------------------
})(jQuery, document);                                       //minify trick, plus don't EVER assume that $ is the jQuery object. it's just bad
