00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 Zapatec.Setup = function () {};
00027 Zapatec.Setup.test = true;
00028
00081 Zapatec.Calendar.setup = function (params) {
00082 function param_default(pname, def) { if (typeof params[pname] == "undefined") { params[pname] = def; } };
00083 param_default("inputField", null);
00084 param_default("displayArea", null);
00085 param_default("button", null);
00086 param_default("eventName", "click");
00087 param_default("ifFormat", "%Y/%m/%d");
00088 param_default("daFormat", "%Y/%m/%d");
00089 param_default("singleClick", true);
00090 param_default("disableFunc", null);
00091 param_default("dateStatusFunc", params["disableFunc"]);
00092 param_default("dateText", null);
00093 param_default("firstDay", null);
00094 param_default("align", "Br");
00095 param_default("range", [1900, 2999]);
00096 param_default("weekNumbers", true);
00097 param_default("flat", null);
00098 param_default("flatCallback", null);
00099 param_default("onSelect", null);
00100 param_default("onClose", null);
00101 param_default("onUpdate", null);
00102 param_default("date", null);
00103 param_default("showsTime", false);
00104 param_default("sortOrder", "asc");
00105 param_default("timeFormat", "24");
00106 param_default("timeInterval", null);
00107 param_default("electric", true);
00108 param_default("step", 2);
00109 param_default("position", null);
00110 param_default("cache", false);
00111 param_default("showOthers", false);
00112 param_default("multiple", null);
00113 param_default("saveDate", null);
00114 param_default("fdowClick", false);
00115 param_default("titleHtml", null);
00116 param_default("disableFdowChange", false);
00117 if ((params.numberMonths > 12) || (params.numberMonths < 1)) {
00118 params.numberMonths = 1;
00119 } else {
00120 param_default("numberMonths", 1);
00121 }
00122 if (params.numberMonths > 1) {
00123 params.showOthers = false;
00124 }
00125 params.numberMonths = parseInt(params.numberMonths, 10);
00126 if ((params.controlMonth > params.numberMonths) || (params.controlMonth < 1)) {
00127 params.controlMonth = 1;
00128 } else {
00129 param_default("controlMonth", 1);
00130 }
00131 params.controlMonth = parseInt(params.controlMonth, 10);
00132 param_default("vertical", false);
00133 if (params.monthsInRow > params.numberMonths) {
00134 params.monthsInRow = params.numberMonths;
00135 }
00136 param_default("monthsInRow", params.numberMonths);
00137 params.monthsInRow = parseInt(params.monthsInRow, 10);
00138 if (params.multiple) {
00139 params.singleClick = false;
00140 }
00141
00142 var tmp = ["inputField", "displayArea", "button"];
00143 for (var i in tmp) {
00144 if (typeof params[tmp[i]] == "string") {
00145 params[tmp[i]] = document.getElementById(params[tmp[i]]);
00146 }
00147 }
00148 if (!(params.flat || params.multiple || params.inputField || params.displayArea || params.button)) {
00149 alert("Calendar.setup:\n Nothing to setup (no fields found). Please check your code");
00150 return false;
00151 }
00152 if (((params.timeInterval) && ((params.timeInterval !== Math.floor(params.timeInterval)) || ((60 % params.timeInterval !== 0) && (params.timeInterval % 60 !== 0)))) || (params.timeInterval > 360)) {
00153 alert("timeInterval option can only have the following number of minutes:\n1, 2, 3, 4, 5, 6, 10, 15, 30, 60, 120, 180, 240, 300, 360 ");
00154 params.timeInterval = null;
00155 }
00156 if (params.date && !Date.parse(params.date)) {
00157 alert("Start Date Invalid: " + params.date + ".\nSee date option.\nDefaulting to today.");
00158 params.date = null;
00159 }
00160 if (params.saveDate) {
00161 param_default("cookiePrefix", window.location.href + "--" + params.button.id);
00162
00163 var cookieName = params.cookiePrefix;
00164 var newdate = Zapatec.Utils.getCookie(cookieName);
00165 if (newdate != null) {
00166
00167 document.getElementById(params.inputField.id).value = newdate;
00168 }
00169 }
00170
00171 function onSelect(cal) {
00172 var p = cal.params;
00173 var update = (cal.dateClicked || p.electric);
00174 if (update && p.flat) {
00175 if (typeof p.flatCallback == "function")
00176 {
00177 if (!p.multiple)
00178 p.flatCallback(cal);
00179 } else
00180 alert("No flatCallback given -- doing nothing.");
00181 return false;
00182 }
00183 if (update && p.inputField) {
00184 p.inputField.value = cal.currentDate.print(p.ifFormat);
00185 if (typeof p.inputField.onchange == "function")
00186 p.inputField.onchange();
00187 }
00188 if (update && p.displayArea)
00189 p.displayArea.innerHTML = cal.currentDate.print(p.daFormat);
00190 if (update && p.singleClick && cal.dateClicked)
00191 cal.callCloseHandler();
00192 if (update && typeof p.onUpdate == "function")
00193 p.onUpdate(cal);
00194 if (p.saveDate) {
00195
00196 var cookieName = p.cookiePrefix;
00197 Zapatec.Utils.writeCookie(cookieName, p.inputField.value, null, '/', p.saveDate);
00198 }
00199 };
00200
00201 if (params.flat != null) {
00202 if (typeof params.flat == "string")
00203 params.flat = document.getElementById(params.flat);
00204 if (!params.flat) {
00205 alert("Calendar.setup:\n Flat specified but can't find parent.");
00206 return false;
00207 }
00208 var cal = new Zapatec.Calendar(params.firstDay, params.date, params.onSelect || onSelect);
00209 cal.disableFdowClick = params.disableFdowChange;
00210 cal.showsOtherMonths = params.showOthers;
00211 cal.showsTime = params.showsTime;
00212 cal.time24 = (params.timeFormat == "24");
00213 cal.timeInterval = params.timeInterval;
00214 cal.params = params;
00215 cal.weekNumbers = params.weekNumbers;
00216 cal.sortOrder = params.sortOrder.toLowerCase();
00217 cal.setRange(params.range[0], params.range[1]);
00218 cal.setDateStatusHandler(params.dateStatusFunc);
00219 cal.getDateText = params.dateText;
00220 cal.numberMonths = params.numberMonths;
00221 cal.controlMonth = params.controlMonth;
00222 cal.vertical = params.vertical;
00223 cal.yearStep = params.step;
00224 cal.monthsInRow = params.monthsInRow;
00225 cal.helpButton = !params.noHelp;
00226 if (params.ifFormat) {
00227 cal.setDateFormat(params.ifFormat);
00228 }
00229
00230 if (params.inputField && params.inputField.type == "text" && typeof params.inputField.value == "string") {
00231 cal.parseDate(params.inputField.value);
00232 }
00233
00234 if (params.multiple) {
00235 cal.setMultipleDates(params.multiple);
00236 }
00237 cal.create(params.flat);
00238 cal.show();
00239 return cal;
00240 }
00241
00242 var triggerEl = params.button || params.displayArea || params.inputField;
00243 triggerEl["on" + params.eventName] = function() {
00244 var dateEl = params.inputField || params.displayArea;
00245
00246 if (triggerEl.blur) {triggerEl.blur();}
00247 var dateFmt = params.inputField ? params.ifFormat : params.daFormat;
00248 var mustCreate = false;
00249 var cal = window.calendar;
00250
00251
00252
00253
00254
00255 if (!(cal && params.cache)) {
00256 window.calendar = cal = new Zapatec.Calendar(params.firstDay,
00257 params.date,
00258 params.onSelect || onSelect,
00259 params.onClose || function(cal) {
00260 if (params.cache)
00261 cal.hide();
00262 else
00263 cal.destroy();
00264 });
00265 cal.disableFdowClick = params.disableFdowChange;
00266 cal.showsTime = params.showsTime;
00267 cal.time24 = (params.timeFormat == "24");
00268 cal.timeInterval = params.timeInterval;
00269 cal.weekNumbers = params.weekNumbers;
00270 cal.numberMonths = params.numberMonths;
00271 cal.controlMonth = params.controlMonth;
00272 cal.vertical = params.vertical;
00273 cal.monthsInRow = params.monthsInRow;
00274 cal.historyDateFormat = params.ifFormat || params.daFormat;
00275 cal.helpButton = !params.noHelp;
00276 mustCreate = true;
00277 } else {
00278 if (params.date)
00279 cal.setDate(params.date);
00280 cal.hide();
00281 }
00282
00283 if (params.multiple) {
00284 cal.setMultipleDates(params.multiple);
00285 }
00286
00287 cal.showsOtherMonths = params.showOthers;
00288 cal.yearStep = params.step;
00289 cal.setRange(params.range[0], params.range[1]);
00290 cal.params = params;
00291 cal.setDateStatusHandler(params.dateStatusFunc);
00292 cal.getDateText = params.dateText;
00293 cal.setDateFormat(dateFmt);
00294 if (mustCreate)
00295 cal.create();
00296 if (dateEl) {
00297 var dateValue;
00298
00299 if (dateEl.value) {
00300 dateValue = dateEl.value;
00301 } else {
00302 dateValue = dateEl.innerHTML;
00303 }
00304 if (dateValue != "") {
00305 var parsedDate = Date.parseDate(dateEl.value || dateEl.innerHTML, dateFmt);
00306
00307
00308 if (parsedDate != null) {
00309 cal.setDate(parsedDate);
00310 }
00311 }
00312 }
00313 if (!params.position)
00314 cal.showAtElement(params.button || params.displayArea || params.inputField, params.align);
00315 else
00316 cal.showAt(params.position[0], params.position[1]);
00317 return false;
00318 };
00319
00320 if (params.closeEventName) {
00321 triggerEl["on" + params.closeEventName] = function() {
00322 if (window.calendar)
00323 window.calendar.callCloseHandler();
00324 };
00325 }
00326
00327 return cal;
00328 };
00329
00330