//-------------------------------------------- // 開窗挑選日期 //-------------------------------------------- function PickDate(objid, aCY11, OLD_VALUE) { var aValue = ""; var CY11 = 1911; var SEPARATOR = ""; //alert(UserLangId.toUpperCase()); //if (UserLangId.toUpperCase() == "ZH-TW") // CY11 = 1911; if (window.showModalDialog) { var datePicker = document.getElementById("DatePicker"); var objValue = document.getElementById(objid); datePicker.setAttribute("src", "utility/DatePicker.aspx?SENDER=" + objid + "&CY11=" + CY11 + "&SEPARATOR=" + SEPARATOR); //datePicker.style.display = "block"; datePicker.style.width = 260; datePicker.style.height = 260; datePicker.style.left = offsetLeft(objValue) + "px"; datePicker.style.top = offsetTop(objValue) + objValue.offsetHeight + "px"; //alert(datePicker.offsetTop); //alert(datePicker.offsetHeight); //alert(document.body.clientHeight); if (datePicker.offsetTop + datePicker.offsetHeight > document.body.clientHeight) datePicker.style.top = document.body.clientHeight - datePicker.offsetHeight + "px"; if (datePicker.offsetLeft + datePicker.offsetWidth > document.body.clientWidth) datePicker.style.left = document.body.clientWidth - datePicker.offsetWidth + "px"; //datePicker.sender = document.getElementById(objid); //var blocker = document.getElementById("Blocker"); //blocker.src = "utility/blocker.htm"; //blocker.src = "about:blank"; //blocker.style.display = "block"; //blocker.style.width = "100%"; //blocker.style.height = "100%"; } else { window.open(`utility/DatePicker.aspx?SENDER=${objid}&CY11=${CY11}&SEPARATOR=${SEPARATOR}&VALUE=${OLD_VALUE}` , "_new" , `height=${240 * window.devicePixelRatio}px,width=${280 * window.devicePixelRatio}px,help=no,status=no,resizable=no,toolbar=no` ); } } //-------------------------------------------- // 存檔前檢查 //-------------------------------------------- function CheckInput() { var i = 0; // 檢查不可空白欄位 for (i in arNotEmpty) { obj = document.getElementById(arNotEmpty[i]); if (!CheckEmpty(obj, arObjName[arNotEmpty[i]])) return false; } // 檢查數值欄位 i = 0; for (i in arIsNumber) { obj = document.getElementById(arIsNumber[i]); if (!CheckNumber(obj, arObjName[arIsNumber[i]])) return false; } // 檢查日期欄位 i = 0; for (i in arIsDate) { obj = document.getElementById(arIsDate[i]); if (!CheckDate(obj, arObjName[arIsDate[i]])) return false; } return confirm(msgConfirmSave); } //-------------------------------------------- // 檢查是否空白 //-------------------------------------------- function CheckEmpty(obj, objCaption) { if (obj.value === "") { s = msgNotEmpty + " \"" + objCaption + "\"."; alert(s); obj.focus(); return false; } return true; } //-------------------------------------------- // 檢查是否輸入為數值 //-------------------------------------------- function CheckNumber(obj, objCaption) { if (isNaN(parseFloat(obj.value))) { s = " \"" + objCaption + "\" " + msgMustNumber; alert(s); obj.focus(); return false; } return true; } //-------------------------------------------- // 檢查日期是否合理 //-------------------------------------------- function CheckDate(obj, objCaption) { if (parseDate(obj) !== null) { s = " \"" + objCaption + "\" " + msgMustDate; alert(s); obj.focus(); return false; } return true; } //------------------------------------------------------------ // 取得按下按鍵相關資料 //------------------------------------------------------------ function GetKeyData(evt) { if (!evt) { // grab IE event object evt = window.event } else if (!evt.keyCode) { // grab NN4 event info evt.keyCode = evt.which; evt.altKey = evt.modifiers & Event.ALT_MASK; evt.ctrlKey = evt.modifiers & Event.CONTROL_MASK; evt.shiftKey = evt.modifiers & Event.SHIFT_MASK; } return evt; } //------------------------------------------------------------ // 取得按下的按鍵,可在 onKeyDown, onKeyUp, onKeyPress 中使用 //------------------------------------------------------------ function GetKeyCode(evt) { return GetKeyData(evt).keyCode; } //------------------------------------------------------------ // 判斷按下的是否為某鍵 //------------------------------------------------------------ function IsKeyCode(evt, keyCode, altKey, ctrlKey, shiftKey) { var keyEvt = GetKeyData(evt); return (keyEvt.keyCode === keyCode && ((!altKey && !keyEvt.altKey) || (altKey && keyEvt.altKey)) && ((!ctrlKey && !keyEvt.ctrlKey) || (ctrlKey && keyEvt.ctrlKey)) && ((!shiftKey && !keyEvt.shiftKey) || (shiftKey && keyEvt.shiftKey))); } //------------------------------------------------------------ // 延遲若干毫秒後顯示 "處理中" //------------------------------------------------------------ function ShowProcessing(delay) { if (typeof delay !== "undefined") window.setTimeout(ShowProcessing1, delay); else ShowProcessing1(); } //------------------------------------------------------------ // 顯示 "處理中" //------------------------------------------------------------ function ShowProcessing1() { var datePicker = document.getElementById("DatePicker"); datePicker.src = "utility/Processing.htm"; datePicker.style.width = 340; datePicker.style.height = 180; datePicker.style.left = Math.round((document.body.clientWidth - datePicker.offsetWidth) / 2) + "px"; datePicker.style.top = Math.round((document.body.clientHeight - datePicker.offsetHeight) / 2) + "px"; datePicker.style.border = "none"; } //------------------------------------------------------------ // 隱藏 "處理中" //------------------------------------------------------------ function HideProcessing() { var datePicker = document.getElementById("DatePicker"); datePicker.style.width = 0; datePicker.style.height = 0; datePicker.style.left = 0; datePicker.style.top = 0; } /** * 顯示 CR 報表 * @param {string} ra 服務器 URL * @param {string} rr 報表檔名稱 * @param {string} rd 資料檔名稱 * @param {string} rp 參數檔名稱 * @param {string} ldir 本地暫存目錄,可空白 * @param {string} lr 本地暫存報表檔名稱,可空白 * @param {string} ld 本地暫存資料檔名稱,可空白 * @param {string} lp 本地暫存參數檔名稱,可空白 * @param {string} un 登入的帳號,若服務器要求 Windows 登入則需要 * @param {string} up 登入的密碼,若服務器要求 Windows 登入則需要 * @param {string} ud 登入的域名,若服務器要求 Windows 登入則需要 */ function ShowReportJSONP(ra, rr, rd, rp, ldir, lr, ld, lp, un, up, ud) { var url = "http://localhost:8688/CRV"; url += ra ? "?ra=" + ra : ""; url += rr ? "&rr=" + rr : ""; url += rd ? "&rd=" + rd : ""; url += rp ? "&rp=" + rp : ""; url += ldir ? "&ldir=" + ldir : ""; url += lr ? "&lr=" + lr : ""; url += ld ? "&ld=" + ld : ""; url += lp ? "&lp=" + lp : ""; url += un ? "&un=" + un : ""; url += up ? "&up=" + up : ""; url += ud ? "&ud=" + ud : ""; url += "&now=" + Date.now(); // navigator.sendBeacon(url); var script = document.createElement('script'); script.setAttribute('src', url); document.getElementsByTagName('head')[0].appendChild(script); } // =================================================================== // Author: Matt Kruse // WWW: http://www.mattkruse.com/ // // NOTICE: You may use this code for any purpose, commercial or // private, without any further permission from the author. You may // remove this notice from your final code if you wish, however it is // appreciated by the author if at least my web site address is kept. // // You may *NOT* re-distribute this code in any way except through its // use. That means, you can include it in your product, or your web // site, or any other form where the code is actually being used. You // may not put the plain javascript up on your site for download or // include it in your javascript libraries for download. // If you wish to share this code with others, please just point them // to the URL instead. // Please DO NOT link directly to my .js files from your site. Copy // the files to your server and use them there. Thank you. // =================================================================== // HISTORY // ------------------------------------------------------------------ // May 17, 2003: Fixed bug in parseDate() for dates <1970 // March 11, 2003: Added parseDate() function // March 11, 2003: Added "NNN" formatting option. Doesn't match up // perfectly with SimpleDateFormat formats, but // backwards-compatability was required. // ------------------------------------------------------------------ // These functions use the same 'format' strings as the // java.text.SimpleDateFormat class, with minor exceptions. // The format string consists of the following abbreviations: // // Field | Full Form | Short Form // -------------+--------------------+----------------------- // Year | yyyy (4 digits) | yy (2 digits), y (2 or 4 digits) // Month | MMM (name or abbr.)| MM (2 digits), M (1 or 2 digits) // | NNN (abbr.) | // Day of Month | dd (2 digits) | d (1 or 2 digits) // Day of Week | EE (name) | E (abbr) // Hour (1-12) | hh (2 digits) | h (1 or 2 digits) // Hour (0-23) | HH (2 digits) | H (1 or 2 digits) // Hour (0-11) | KK (2 digits) | K (1 or 2 digits) // Hour (1-24) | kk (2 digits) | k (1 or 2 digits) // Minute | mm (2 digits) | m (1 or 2 digits) // Second | ss (2 digits) | s (1 or 2 digits) // AM/PM | a | // // NOTE THE DIFFERENCE BETWEEN MM and mm! Month=MM, not mm! // Examples: // "MMM d, y" matches: January 01, 2000 // Dec 1, 1900 // Nov 20, 00 // "M/d/yy" matches: 01/20/00 // 9/2/00 // "MMM dd, yyyy hh:mm:ssa" matches: "January 01, 2000 12:30:45AM" // ------------------------------------------------------------------ var MONTH_NAMES = new Array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December', 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'); var DAY_NAMES = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'); function LZ(x) { return (x < 0 || x > 9 ? "" : "0") + x } // ------------------------------------------------------------------ // isDate ( date_string, format_string ) // Returns true if date string matches format of format string and // is a valid date. Else returns false. // It is recommended that you trim whitespace around the value before // passing it to this function, as whitespace is NOT ignored! // ------------------------------------------------------------------ function isDate(val, format) { var date = getDateFromFormat(val, format); if (date === 0) { return false; } return true; } // ------------------------------------------------------------------- // compareDates(date1,date1format,date2,date2format) // Compare two date strings to see which is greater. // Returns: // 1 if date1 is greater than date2 // 0 if date2 is greater than date1 of if they are the same // -1 if either of the dates is in an invalid format // ------------------------------------------------------------------- function compareDates(date1, dateformat1, date2, dateformat2) { var d1 = getDateFromFormat(date1, dateformat1); var d2 = getDateFromFormat(date2, dateformat2); if (d1 === 0 || d2 === 0) { return -1; } else if (d1 > d2) { return 1; } return 0; } // ------------------------------------------------------------------ // formatDate (date_object, format) // Returns a date in the output format specified. // The format string uses the same abbreviations as in getDateFromFormat() // ------------------------------------------------------------------ function formatDate(date, format) { format = format + ""; var result = ""; var i_format = 0; var c = ""; var token = ""; var y = date.getYear() + ""; var M = date.getMonth() + 1; var d = date.getDate(); var E = date.getDay(); var H = date.getHours(); var m = date.getMinutes(); var s = date.getSeconds(); var yyyy, yy, MMM, MM, dd, hh, h, mm, ss, ampm, HH, KK, K, kk, k; // Convert real date parts into formatted versions var value = new Object(); if (y.length < 4) { y = "" + (y - 0 + 1900); } value["y"] = "" + y; value["yyyy"] = y; value["yy"] = y.substring(2, 4); value["M"] = M; value["MM"] = LZ(M); value["MMM"] = MONTH_NAMES[M - 1]; value["NNN"] = MONTH_NAMES[M + 11]; value["d"] = d; value["dd"] = LZ(d); value["E"] = DAY_NAMES[E + 7]; value["EE"] = DAY_NAMES[E]; value["H"] = H; value["HH"] = LZ(H); if (H === 0) { value["h"] = 12; } else if (H > 12) { value["h"] = H - 12; } else { value["h"] = H; } value["hh"] = LZ(value["h"]); if (H > 11) { value["K"] = H - 12; } else { value["K"] = H; } value["k"] = H + 1; value["KK"] = LZ(value["K"]); value["kk"] = LZ(value["k"]); if (H > 11) { value["a"] = "PM"; } else { value["a"] = "AM"; } value["m"] = m; value["mm"] = LZ(m); value["s"] = s; value["ss"] = LZ(s); while (i_format < format.length) { c = format.charAt(i_format); token = ""; while ((format.charAt(i_format) === c) && (i_format < format.length)) { token += format.charAt(i_format++); } if (value[token] !== null) { result = result + value[token]; } else { result = result + token; } } return result; } // ------------------------------------------------------------------ // Utility functions for parsing in getDateFromFormat() // ------------------------------------------------------------------ function _isInteger(val) { var digits = "1234567890"; for (var i = 0; i < val.length; i++) { if (digits.indexOf(val.charAt(i)) === -1) { return false; } } return true; } function _getInt(str, i, minlength, maxlength) { for (var x = maxlength; x >= minlength; x--) { var token = str.substring(i, i + x); if (token.length < minlength) { return null; } if (_isInteger(token)) { return token; } } return null; } // ------------------------------------------------------------------ // getDateFromFormat( date_string , format_string ) // // This function takes a date string and a format string. It matches // If the date string matches the format string, it returns the // getTime() of the date. If it does not match, it returns 0. // ------------------------------------------------------------------ function getDateFromFormat(val, format) { val = val + ""; format = format + ""; var i_val = 0; var i_format = 0; var c = ""; var token = ""; var token2 = ""; var x, y; var now = new Date(); var year = now.getYear(); var month = now.getMonth() + 1; var date = 1; var hh = now.getHours(); var mm = now.getMinutes(); var ss = now.getSeconds(); var ampm = ""; while (i_format < format.length) { // Get next token from format string c = format.charAt(i_format); token = ""; while ((format.charAt(i_format) === c) && (i_format < format.length)) { token += format.charAt(i_format++); } // Extract contents of value based on format token if (token === "yyyy" || token === "yy" || token === "y") { if (token === "yyyy") { x = 4; y = 4; } if (token === "yy") { x = 2; y = 2; } if (token === "y") { x = 2; y = 4; } year = _getInt(val, i_val, x, y); if (year === null) { return 0; } i_val += year.length; if (year.length === 2) { if (year > 70) { year = 1900 + (year - 0); } else { year = 2000 + (year - 0); } } } else if (token === "MMM" || token === "NNN") { month = 0; for (var i = 0; i < MONTH_NAMES.length; i++) { var month_name = MONTH_NAMES[i]; if (val.substring(i_val, i_val + month_name.length).toLowerCase() === month_name.toLowerCase()) { if (token === "MMM" || (token === "NNN" && i > 11)) { month = i + 1; if (month > 12) { month -= 12; } i_val += month_name.length; break; } } } if ((month < 1) || (month > 12)) { return 0; } } else if (token === "EE" || token === "E") { for (i = 0; i < DAY_NAMES.length; i++) { var day_name = DAY_NAMES[i]; if (val.substring(i_val, i_val + day_name.length).toLowerCase() === day_name.toLowerCase()) { i_val += day_name.length; break; } } } else if (token === "MM" || token === "M") { month = _getInt(val, i_val, token.length, 2); if (month === null || (month < 1) || (month > 12)) { return 0; } i_val += month.length; } else if (token === "dd" || token === "d") { date = _getInt(val, i_val, token.length, 2); if (date === null || (date < 1) || (date > 31)) { return 0; } i_val += date.length; } else if (token === "hh" || token === "h") { hh = _getInt(val, i_val, token.length, 2); if (hh === null || (hh < 1) || (hh > 12)) { return 0; } i_val += hh.length; } else if (token === "HH" || token === "H") { hh = _getInt(val, i_val, token.length, 2); if (hh === null || (hh < 0) || (hh > 23)) { return 0; } i_val += hh.length; } else if (token === "KK" || token === "K") { hh = _getInt(val, i_val, token.length, 2); if (hh === null || (hh < 0) || (hh > 11)) { return 0; } i_val += hh.length; } else if (token === "kk" || token === "k") { hh = _getInt(val, i_val, token.length, 2); if (hh === null || (hh < 1) || (hh > 24)) { return 0; } i_val += hh.length; hh--; } else if (token === "mm" || token === "m") { mm = _getInt(val, i_val, token.length, 2); if (mm === null || (mm < 0) || (mm > 59)) { return 0; } i_val += mm.length; } else if (token === "ss" || token === "s") { ss = _getInt(val, i_val, token.length, 2); if (ss === null || (ss < 0) || (ss > 59)) { return 0; } i_val += ss.length; } else if (token === "a") { if (val.substring(i_val, i_val + 2).toLowerCase() === "am") { ampm = "AM"; } else if (val.substring(i_val, i_val + 2).toLowerCase() === "pm") { ampm = "PM"; } else { return 0; } i_val += 2; } else { if (val.substring(i_val, i_val + token.length) !== token) { return 0; } else { i_val += token.length; } } } // If there are any trailing characters left in the value, it doesn't match if (i_val !== val.length) { return 0; } // Is date valid for month? if (month === 2) { // Check for leap year if (((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0)) { // leap year if (date > 29) { return 0; } } else { if (date > 28) { return 0; } } } if ((month === 4) || (month === 6) || (month === 9) || (month === 11)) { if (date > 30) { return 0; } } // Correct hours value if (hh < 12 && ampm === "PM") { hh = hh - 0 + 12; } else if (hh > 11 && ampm === "AM") { hh -= 12; } var newdate = new Date(year, month - 1, date, hh, mm, ss); return newdate.getTime(); } // ------------------------------------------------------------------ // parseDate( date_string [, prefer_euro_format] ) // // This function takes a date string and tries to match it to a // number of possible date formats to get the value. It will try to // match against the following international formats, in this order: // y-M-d MMM d, y MMM d,y y-MMM-d d-MMM-y MMM d // M/d/y M-d-y M.d.y MMM-d M/d M-d // d/M/y d-M-y d.M.y d-MMM d/M d-M // A second argument may be passed to instruct the method to search // for formats like d/M/y (european format) before M/d/y (American). // Returns a Date object or null if no patterns match. // ------------------------------------------------------------------ function parseDate(val) { var preferEuro = (arguments.length === 2) ? arguments[1] : false; generalFormats = new Array('y/M/d', 'yyyy/MM/dd', 'y-M-d', 'MMM d, y', 'MMM d,y', 'y-MMM-d', 'd-MMM-y', 'MMM d'); monthFirst = new Array('M/d/y', 'M-d-y', 'M.d.y', 'MMM-d', 'M/d', 'M-d'); dateFirst = new Array('d/M/y', 'd-M-y', 'd.M.y', 'd-MMM', 'd/M', 'd-M'); var checkList = new Array('generalFormats', preferEuro ? 'dateFirst' : 'monthFirst', preferEuro ? 'monthFirst' : 'dateFirst'); var d = null; for (var i = 0; i < checkList.length; i++) { var l = window[checkList[i]]; for (var j = 0; j < l.length; j++) { d = getDateFromFormat(val, l[j]); if (d !== 0) { return new Date(d); } } } return null; }