src/cm/media/js/lib/flexible-js-formatting/dates/datechooser.js
author Yves-Marie Haussonne <ymh.work+github@gmail.com>
Fri, 09 May 2014 18:35:26 +0200
changeset 656 a84519031134
parent 0 40c8f766c9b8
permissions -rw-r--r--
add link to "privacy policy" in the header test
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     1
/*
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     2
 * Copyright (C) 2004 Baron Schwartz <baron at sequent dot org>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     3
 *
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     4
 * This program is free software; you can redistribute it and/or modify it
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     5
 * under the terms of the GNU Lesser General Public License as published by the
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     6
 * Free Software Foundation, version 2.1.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     7
 *
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     8
 * This program is distributed in the hope that it will be useful, but WITHOUT
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     9
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    10
 * FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    11
 * details.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    12
 *
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    13
 * $Revision: 1.1 $
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    14
 */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    15
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    16
// Shows or hides the date chooser on the page
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    17
function showChooser(obj, inputId, divId, start, end, format, isTimeChooser) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    18
    if (document.getElementById) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    19
        var input = document.getElementById(inputId);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    20
        var div = document.getElementById(divId);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    21
        if (input !== undefined && div !== undefined) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    22
            if (input.DateChooser === undefined) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    23
                input.DateChooser = new DateChooser(input, div, start, end, format, isTimeChooser);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    24
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    25
            input.DateChooser.setDate(Date.parseDate(input.value, format));
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    26
            if (input.DateChooser.isVisible()) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    27
                input.DateChooser.hide();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    28
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    29
            else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    30
                input.DateChooser.show();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    31
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    32
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    33
    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    34
}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    35
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    36
// Sets a date on the object attached to 'inputId'
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    37
function dateChooserSetDate(inputId, value) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    38
    var input = document.getElementById(inputId);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    39
    if (input !== undefined && input.DateChooser !== undefined) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    40
        input.DateChooser.setDate(Date.parseDate(value, input.DateChooser._format));
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    41
        if (input.DateChooser.isTimeChooser()) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    42
            var theForm = input.form;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    43
            var prefix = input.DateChooser._prefix;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    44
            input.DateChooser.setTime(
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    45
                parseInt(theForm.elements[prefix + 'hour'].options[
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    46
                    theForm.elements[prefix + 'hour'].selectedIndex].value)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    47
                    + parseInt(theForm.elements[prefix + 'ampm'].options[
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    48
                    theForm.elements[prefix + 'ampm'].selectedIndex].value),
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    49
                parseInt(theForm.elements[prefix + 'min'].options[
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    50
                    theForm.elements[prefix + 'min'].selectedIndex].value));
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    51
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    52
        input.value = input.DateChooser.getValue();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    53
        input.DateChooser.hide();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    54
    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    55
}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    56
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    57
// The callback function for when someone changes the pulldown menus on the date
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    58
// chooser
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    59
function dateChooserDateChange(theForm, prefix) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    60
    var input = document.getElementById(
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    61
        theForm.elements[prefix + 'inputId'].value);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    62
    var newDate = new Date(
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    63
        theForm.elements[prefix + 'year'].options[
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    64
            theForm.elements[prefix + 'year'].selectedIndex].value,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    65
        theForm.elements[prefix + 'month'].options[
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    66
            theForm.elements[prefix + 'month'].selectedIndex].value,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    67
        1);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    68
    // Try to preserve the day of month (watch out for months with 31 days)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    69
    newDate.setDate(Math.max(1, Math.min(newDate.getDaysInMonth(),
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    70
                    input.DateChooser._date.getDate())));
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    71
    input.DateChooser.setDate(newDate);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    72
    if (input.DateChooser.isTimeChooser()) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    73
        input.DateChooser.setTime(
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    74
            parseInt(theForm.elements[prefix + 'hour'].options[
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    75
                theForm.elements[prefix + 'hour'].selectedIndex].value)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    76
                + parseInt(theForm.elements[prefix + 'ampm'].options[
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    77
                theForm.elements[prefix + 'ampm'].selectedIndex].value),
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    78
            parseInt(theForm.elements[prefix + 'min'].options[
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    79
                theForm.elements[prefix + 'min'].selectedIndex].value));
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    80
    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    81
    input.DateChooser.show();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    82
}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    83
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    84
// Gets the absolute position on the page of the element passed in
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    85
function getAbsolutePosition(obj) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    86
    var result = [0, 0];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    87
    while (obj != null) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    88
        result[0] += obj.offsetTop;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    89
        result[1] += obj.offsetLeft;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    90
        obj = obj.offsetParent;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    91
    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    92
    return result;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    93
}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    94
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    95
// DateChooser constructor
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    96
function DateChooser(input, div, start, end, format, isTimeChooser) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    97
    this._input = input;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    98
    this._div = div;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    99
    this._start = start;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   100
    this._end = end;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   101
    this._format = format;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   102
    this._date = new Date();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   103
    this._isTimeChooser = isTimeChooser;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   104
    // Choose a random prefix for all pulldown menus
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   105
    this._prefix = "";
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   106
    var letters = ["a", "b", "c", "d", "e", "f", "h", "i", "j", "k", "l",
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   107
        "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   108
    for (var i = 0; i < 10; ++i) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   109
        this._prefix += letters[Math.floor(Math.random() * letters.length)];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   110
    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   111
}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   112
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   113
// DateChooser prototype variables
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   114
DateChooser.prototype._isVisible = false;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   115
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   116
// Returns true if the chooser is currently visible
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   117
DateChooser.prototype.isVisible = function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   118
    return this._isVisible;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   119
}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   120
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   121
// Returns true if the chooser is to allow choosing the time as well as the date
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   122
DateChooser.prototype.isTimeChooser = function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   123
    return this._isTimeChooser;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   124
}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   125
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   126
// Gets the value, as a formatted string, of the date attached to the chooser
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   127
DateChooser.prototype.getValue = function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   128
    return this._date.dateFormat(this._format);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   129
}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   130
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   131
// Hides the chooser
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   132
DateChooser.prototype.hide = function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   133
    this._div.style.visibility = "hidden";
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   134
    this._div.style.display = "none";
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   135
    this._div.innerHTML = "";
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   136
    this._isVisible = false;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   137
}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   138
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   139
// Shows the chooser on the page
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   140
DateChooser.prototype.show = function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   141
    // calculate the position before making it visible
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   142
    var inputPos = getAbsolutePosition(this._input);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   143
    this._div.style.top = (inputPos[0] + this._input.offsetHeight) + "px";
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   144
    this._div.style.left = (inputPos[1] + this._input.offsetWidth) + "px";
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   145
    this._div.innerHTML = this.createChooserHtml();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   146
    this._div.style.display = "block";
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   147
    this._div.style.visibility = "visible";
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   148
    this._div.style.position = "absolute";
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   149
    this._isVisible = true;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   150
}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   151
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   152
// Sets the date to what is in the input box
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   153
DateChooser.prototype.initializeDate = function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   154
    if (this._input.value != null && this._input.value != "") {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   155
        this._date = Date.parseDate(this._input.value, this._format);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   156
    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   157
    else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   158
        this._date = new Date();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   159
    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   160
}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   161
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   162
// Sets the date attached to the chooser
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   163
DateChooser.prototype.setDate = function(date) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   164
    this._date = date ? date : new Date();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   165
}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   166
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   167
// Sets the time portion of the date attached to the chooser
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   168
DateChooser.prototype.setTime = function(hour, minute) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   169
    this._date.setHours(hour);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   170
    this._date.setMinutes(minute);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   171
}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   172
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   173
// Creates the HTML for the whole chooser
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   174
DateChooser.prototype.createChooserHtml = function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   175
    var formHtml = "<input type=\"hidden\" name=\""
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   176
        + this._prefix + "inputId\" value=\""
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   177
        + this._input.getAttribute('id') + "\">"
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   178
        + "\r\n  <select name=\"" + this._prefix 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   179
        + "month\" onChange=\"dateChooserDateChange(this.form, '"
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   180
        + this._prefix + "');\">";
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   181
    for (var monIndex = 0; monIndex <= 11; monIndex++) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   182
        formHtml += "\r\n    <option value=\"" + monIndex + "\""
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   183
            + (monIndex == this._date.getMonth() ? " selected=\"1\"" : "")
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   184
            + ">" + Date.monthNames[monIndex] + "</option>";
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   185
    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   186
    formHtml += "\r\n  </select>\r\n  <select name=\""
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   187
        + this._prefix + "year\" onChange=\"dateChooserDateChange(this.form, '"
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   188
        + this._prefix + "');\">";
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   189
    for (var i = this._start; i <= this._end; ++i) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   190
        formHtml += "\r\n    <option value=\"" + i + "\""
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   191
            + (i == this._date.getFullYear() ? " selected=\"1\"" : "")
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   192
            + ">" + i + "</option>";
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   193
    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   194
    formHtml += "\r\n  </select>";
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   195
    formHtml += this.createCalendarHtml();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   196
    if (this._isTimeChooser) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   197
        formHtml += this.createTimeChooserHtml();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   198
    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   199
    return formHtml;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   200
}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   201
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   202
// Creates the extra HTML needed for choosing the time
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   203
DateChooser.prototype.createTimeChooserHtml = function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   204
    // Add hours
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   205
    var result = "\r\n  <select name=\"" + this._prefix + "hour\">";
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   206
    for (var i = 0; i < 12; ++i) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   207
        result += "\r\n    <option value=\"" + i + "\""
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   208
            + (((this._date.getHours() % 12) == i) ? " selected=\"1\">" : ">")
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   209
            + i + "</option>";
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   210
    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   211
    // Add extra entry for 12:00
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   212
    result += "\r\n    <option value=\"0\">12</option>";
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   213
    result += "\r\n  </select>";
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   214
    // Add minutes
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   215
    result += "\r\n  <select name=\"" + this._prefix + "min\">";
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   216
    for (var i = 0; i < 60; i += 15) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   217
        result += "\r\n    <option value=\"" + i + "\""
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   218
            + ((this._date.getMinutes() == i) ? " selected=\"1\">" : ">")
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   219
            + String.leftPad(i, 2, '0') + "</option>";
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   220
    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   221
    result += "\r\n  </select>";
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   222
    // Add AM/PM
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   223
    result += "\r\n  <select name=\"" + this._prefix + "ampm\">";
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   224
    result += "\r\n    <option value=\"0\""
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   225
        + (this._date.getHours() < 12 ? " selected=\"1\">" : ">")
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   226
        + "AM</option>";
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   227
    result += "\r\n    <option value=\"12\""
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   228
        + (this._date.getHours() >= 12 ? " selected=\"1\">" : ">")
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   229
        + "PM</option>";
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   230
    result += "\r\n  </select>";
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   231
    return result;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   232
}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   233
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   234
// Creates the HTML for the actual calendar part of the chooser
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   235
DateChooser.prototype.createCalendarHtml = function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   236
    var result = "\r\n<table cellspacing=\"0\" class=\"dateChooser\">"
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   237
        + "\r\n  <tr><th>S</th><th>M</th><th>T</th>"
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   238
        + "<th>W</th><th>T</th><th>F</th><th>S</th></tr>\r\n  <tr>";
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   239
    // Fill up the days of the week until we get to the first day of the month
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   240
    var firstDay = this._date.getFirstDayOfMonth();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   241
    var lastDay = this._date.getLastDayOfMonth();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   242
    if (firstDay != 0) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   243
        result += "<td colspan=\"" + firstDay + "\">&nbsp;</td>";
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   244
    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   245
    // Fill in the days of the month
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   246
    var i = 0;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   247
    while (i < this._date.getDaysInMonth()) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   248
        if (((i++ + firstDay) % 7) == 0) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   249
            result += "</tr>\r\n  <tr>";
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   250
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   251
        var thisDay = new Date(
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   252
            this._date.getFullYear(),
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   253
            this._date.getMonth(), i);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   254
        var js = '"dateChooserSetDate(\''
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   255
            + this._input.getAttribute('id') + "', '"
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   256
            + thisDay.dateFormat(this._format) + '\');"'
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   257
        result += "\r\n    <td class=\"dateChooserActive"
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   258
            // If the date is the currently chosen date, highlight it
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   259
            + (i == this._date.getDate() ? " dateChooserActiveToday" : "")
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   260
            + "\" onClick=" + js + ">" + i + "</td>";
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   261
    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   262
    // Fill in any days after the end of the month
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   263
    if (lastDay != 6) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   264
        result += "<td colspan=\"" + (6 - lastDay) + "\">&nbsp;</td>";
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   265
    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   266
    return result + "\r\n  </tr>\r\n</table><!--[if lte IE 6.5]><iframe></iframe><![endif]-->";
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   267
}