(function() {

    /**
     * DatePicker
     *
     * Uses Google
     * @namespace YAHOO.COGEN.widgets
     */

    /**
     *
     * @namespace YAHOO.COGEN.widgets
     * @class SalesTable
     */
    function DatePicker(calendarContainerId, calendarButtonId, dateTextBoxId) {
        var Event = YAHOO.util.Event,
        Dom = YAHOO.util.Dom;
        var dialog, calendar;


        function pad(n, len) { //Pad month and day from calendar so they are always two digits (ie. 8 becomes 08)
            s = n.toString();
            if (s.length < len) {
                s = ('00' + s).slice(-len);
            }
            return s;
        }

        var showBtn = Dom.get(calendarButtonId);

        Event.on(showBtn, "click", function() {
            var object = YAHOO.COGEN.widgets.calendars[calendarContainerId];

            if (!object) {
                // Hide Calendar if we click anywhere in the document other than the calendar
                Event.on(document, "click", function(e) {
                    var el = Event.getTarget(e);
                    var dialogEl = dialog.element;
                    if (el != dialogEl && !Dom.isAncestor(dialogEl, el) && el != showBtn && !Dom.isAncestor(showBtn, el)) {
                        dialog.hide();
                    }
                });


                function closeHandler() {
                    dialog.hide();
                }

                dialog = new YAHOO.widget.Dialog(calendarContainerId, {
                    visible:false,
                    context:["show", "tl", "bl"],
                    buttons:[ {
                        text:"Close",
                        handler: closeHandler
                    }],
                    draggable:false,
                    fixedcenter: true,
                    modal: true,
                    close:true
                });
                dialog.setHeader('Pick A Date');
                dialog.setBody('<div class="calendar" id="'+calendarContainerId+'-calendar"></div>');
                dialog.render(document.body);

                dialog.showEvent.subscribe(function() {
                    if (YAHOO.env.ua.ie) {
                        // Since we're hiding the table using yui-overlay-hidden, we
                        // want to let the dialog know that the content size has changed, when
                        // shown
                        dialog.fireEvent("changeContent");
                    }
                });

                calendar = new YAHOO.widget.Calendar(calendarContainerId+"-calendar", {
                    iframe:false,          // Turn iframe off, since container has iframe support.
                    hide_blank_weeks:true  // Enable, to demonstrate how we handle changing height, using changeContent
                });
                calendar.render();

                calendar.selectEvent.subscribe(function(type,args,obj) {
                    var dates = args[0];
                    var date = dates[0];
                    var year = date[0], month = date[1], day = date[2];                    
                    Dom.get(dateTextBoxId).value = year + "-" + pad(month, 2) + "-" + pad(day, 2);
                    dialog.hide();
                });

                calendar.renderEvent.subscribe(function() {
                    // Tell Dialog it's contents have changed, which allows
                    // container to redraw the underlay (for IE6/Safari2)
                    dialog.fireEvent("changeContent");
                });
                object = {
                    'calendar':calendar,
                    'dialog': dialog
                };
                YAHOO.COGEN.widgets.calendars[calendarContainerId] = object;
            }

            dialog = object.dialog;
            calendar = object.calendar;

            var seldate = calendar.getSelectedDates();

            if (seldate.length > 0) {
                // Set the pagedate to show the selected date if it exists
                calendar.cfg.setProperty("pagedate", seldate[0]);
                calendar.render();
            }

            dialog.show();

        
        /*
            //Initialize calendar in cal1Container
            YAHOO.COGEN.widgets.calendars = {};
            YAHOO.COGEN.widgets.calendars[calendarContainerId] = new YAHOO.widget.Calendar(calendarContainerId + "-calendar", calendarContainerId, {
                title:"Choose a date:",
                visible: false,
                close:true,
                pages:2
            });

            function handleSelect(type,args,obj) { //Formats the date selected and sends it to the invoice_id text feild.
                var dates = args[0];
                var date = dates[0];
                var year = date[0], month = date[1], day = date[2];
                var txtDate1 = document.getElementById(dateTextBoxId);
                txtDate1.value = year + "-" + pad(month, 2) + "-" + pad(day, 2);
                obj.hide();
            }
        
            //On show1up button click, calendar will appear "above" other page items.
            YAHOO.util.Event.addListener(calendarButtonId, "click", YAHOO.COGEN.widgets.calendars[calendarContainerId].show, YAHOO.COGEN.widgets.calendars[calendarContainerId], true);
            //On date selection in the calendar, call handleSelect.
            YAHOO.COGEN.widgets.calendars[calendarContainerId].selectEvent.subscribe(handleSelect, YAHOO.COGEN.widgets.calendars[calendarContainerId], true);
            YAHOO.COGEN.widgets.calendars[calendarContainerId].render();
            var xy = YAHOO.util.Dom.getXY(calendarButtonId);
            xy.x=xy.x+100;
            YAHOO.util.Dom.setXY(calendarContainerId, xy);
             */
        });

    }

    YAHOO.namespace("COGEN.widgets");
    YAHOO.COGEN.widgets.calendars = {};
    YAHOO.COGEN.widgets.DatePicker = DatePicker;

})();


