1 /*********************************************************************************
2 * SugarCRM Community Edition is a customer relationship management program developed by
3 * SugarCRM, Inc. Copyright (C) 2004-2013 SugarCRM Inc.
5 * This program is free software; you can redistribute it and/or modify it under
6 * the terms of the GNU Affero General Public License version 3 as published by the
7 * Free Software Foundation with the addition of the following permission added
8 * to Section 15 as permitted in Section 7(a): FOR ANY PART OF THE COVERED WORK
9 * IN WHICH THE COPYRIGHT IS OWNED BY SUGARCRM, SUGARCRM DISCLAIMS THE WARRANTY
10 * OF NON INFRINGEMENT OF THIRD PARTY RIGHTS.
12 * This program is distributed in the hope that it will be useful, but WITHOUT
13 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
14 * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
17 * You should have received a copy of the GNU Affero General Public License along with
18 * this program; if not, see http://www.gnu.org/licenses or write to the Free
19 * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
22 * You can contact SugarCRM, Inc. headquarters at 10050 North Wolfe Road,
23 * SW2-130, Cupertino, CA 95014, USA. or at email address contact@sugarcrm.com.
25 * The interactive user interfaces in modified source and object code versions
26 * of this program must display Appropriate Legal Notices, as required under
27 * Section 5 of the GNU Affero General Public License version 3.
29 * In accordance with Section 7(b) of the GNU Affero General Public License version 3,
30 * these Appropriate Legal Notices must retain the display of the "Powered by
31 * SugarCRM" logo. If the display of the logo is not reasonably feasible for
32 * technical reasons, the Appropriate Legal Notices must display the words
33 * "Powered by SugarCRM".
34 ********************************************************************************/
47 function Time (timeval, field, timeformat, tabindex) {
48 this.timeval = timeval;
49 if(typeof this.timeval == "undefined") {
53 this.fieldname = field;
54 //Get hours and minutes and adjust as necessary
55 this.hrs = parseInt(timeval.substring(0,2), 10);
56 this.mins = parseInt(timeval.substring(3,5), 10);
58 //A safety scan to make sure hrs and minutes are formatted correctly
59 if (this.mins > 0 && this.mins < 15) {
61 } else if (this.mins > 15 && this.mins < 30) {
63 } else if (this.mins > 30 && this.mins < 45) {
65 } else if (this.mins > 45) {
71 this.timeformat = timeformat; //23:00 || 11:00
72 this.tabindex = tabindex == null || isNaN(tabindex) ? 1 : tabindex;
74 // Calculate other derived values
75 this.timeseparator = this.timeformat.substring(2,3);
76 this.has12Hours = /^11/.test(this.timeformat);
77 this.hasMeridiem = /am|pm/i.test(this.timeformat);
78 if(this.hasMeridiem) {
79 this.pm = /pm/.test(this.timeformat);
81 this.meridiem = this.hasMeridiem ? trim(this.timeval.substring(5)) : '';
86 * This function renders the HTML form elements for this widget
88 Time.prototype.html = function(callback) {
89 //Now render the items
90 var text = '<select class="datetimecombo_time" size="1" id="' + this.fieldname + '_hours" tabindex="' + this.tabindex + '" onchange="combo_' + this.fieldname + '.update(); ' + callback + '">';
91 var h1 = this.has12Hours ? 1 : 0;
92 var h2 = this.has12Hours ? 12 : 23;
93 text += '<option></option>';
94 for(i=h1; i <= h2; i++) {
95 val = i < 10 ? "0" + i : i;
96 text += '<option value="' + val + '" ' + (i == this.hrs ? "SELECTED" : "") + '>' + val + '</option>';
99 text += '\n</select> ';
100 text += this.timeseparator;
101 text += '\n <select class="datetimecombo_time" size="1" id="' + this.fieldname + '_minutes" tabindex="' + this.tabindex + '" onchange="combo_' + this.fieldname + '.update(); ' + callback + '">';
102 text += '\n<option></option>';
103 text += '\n<option value="00" ' + (this.mins == 0 ? "SELECTED" : "") + '>00</option>';
104 text += '\n<option value="15" ' + (this.mins == 15 ? "SELECTED" : "") + '>15</option>';
105 text += '\n<option value="30" ' + (this.mins == 30 ? "SELECTED" : "") + '>30</option>';
106 text += '\n<option value="45" ' + (this.mins == 45 ? "SELECTED" : "") + '>45</option>';
107 text += '\n</select>';
109 if(this.hasMeridiem) {
111 text += '\n<select class="datetimecombo_time" size="1" id="' + this.fieldname + '_meridiem" tabindex="' + this.tabindex + '" onchange="combo_' + this.fieldname + '.update(); ' + callback + '">';
112 if(this.allowEmptyHM){
113 text += '\n<option></option>';
115 text += '\n<option value="' + (this.pm ? "am" : "AM") + '" ' + (/am/i.test(this.meridiem) ? "SELECTED" : "") + '>' + (this.pm ? "am" : "AM") + '</option>';
116 text += '\n<option value="' + (this.pm ? "pm" : "PM") + '" ' + (/pm/i.test(this.meridiem) ? "SELECTED" : "") + '>' + (this.pm ? "pm" : "PM") + '</option>';
117 text += '\n</select>';
126 * This method handles events on the hour, minute and meridiem elements for the widget
129 Time.prototype.update = function() {
130 id = this.fieldname + '_hours';
131 h = window.document.getElementById(id).value;
132 id = this.fieldname + '_minutes';
133 m = window.document.getElementById(id).value;
135 if(h == "" && m == "") {
136 document.getElementById(this.fieldname).value = "";
139 newdate = h + this.timeseparator + m;
141 if(this.hasMeridiem) {
142 ampm = document.getElementById(this.fieldname + "_meridiem").value;
145 document.getElementById(this.fieldname).value = newdate;