WdatePicker.js 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393
  1. /*
  2. * My97 DatePicker 4.8 Beta2
  3. * License: http://www.my97.net/dp/license.asp
  4. */
  5. var $dp, WdatePicker;
  6. (function () {
  7. var $ = {
  8. $langList: [{name: "zh-cn", charset: "UTF-8"},
  9. {name: "en", charset: "UTF-8"},
  10. {name: "zh-tw", charset: "UTF-8"}
  11. ],
  12. $skinList: [
  13. {name: "default", charset: "gb2312"},
  14. {name: "whyGreen", charset: "gb2312"},
  15. {name: "blue", charset: "gb2312"},
  16. {name: "green", charset: "gb2312"},
  17. {name: "ext", charset: "gb2312"},
  18. {name: "blueFresh", charset: "gb2312"}
  19. ],
  20. $wdate: true,
  21. $crossFrame: true,
  22. $preLoad: false,
  23. doubleCalendar: false,
  24. enableKeyboard: true,
  25. enableInputMask: true,
  26. autoUpdateOnChanged: null,
  27. weekMethod: "ISO8601",
  28. position: {},
  29. lang: "default",
  30. skin: "default",
  31. dateFmt: "yyyy-MM-dd",
  32. realDateFmt: "yyyy-MM-dd",
  33. realTimeFmt: "HH:mm:ss",
  34. realFullFmt: "%Date %Time",
  35. minDate: "1900-01-01 00:00:00",
  36. maxDate: "2099-12-31 23:59:59",
  37. startDate: "",
  38. alwaysUseStartDate: false,
  39. yearOffset: 1911,
  40. firstDayOfWeek: 0,
  41. isShowWeek: false,
  42. highLineWeekDay: true,
  43. isShowClear: true,
  44. isShowToday: true,
  45. isShowOK: true,
  46. isShowOthers: true,
  47. readOnly: false,
  48. errDealMode: 0,
  49. autoPickDate: null,
  50. qsEnabled: true,
  51. autoShowQS: false,
  52. specialDates: null,
  53. specialDays: null,
  54. disabledDates: null,
  55. disabledDays: null,
  56. opposite: false,
  57. onpicking: null,
  58. onpicked: null,
  59. onclearing: null,
  60. oncleared: null,
  61. ychanging: null,
  62. ychanged: null,
  63. Mchanging: null,
  64. Mchanged: null,
  65. dchanging: null,
  66. dchanged: null,
  67. Hchanging: null,
  68. Hchanged: null,
  69. mchanging: null,
  70. mchanged: null,
  71. schanging: null,
  72. schanged: null,
  73. eCont: null,
  74. vel: null,
  75. elProp: "",
  76. errMsg: "",
  77. quickSel: [],
  78. has: {},
  79. getRealLang: function () {
  80. var _ = $.$langList;
  81. for (var A = 0; A < _.length; A++)if (_[A].name == this.lang)return _[A];
  82. return _[0]
  83. }
  84. };
  85. WdatePicker = T;
  86. var X = window, S = {innerHTML: ""}, M = "document", H = "documentElement", C = "getElementsByTagName", U, A, R, G, a, W = navigator.appName;
  87. if (W == "Microsoft Internet Explorer")R = true; else if (W == "Opera")a = true; else G = true;
  88. A = J();
  89. if ($.$wdate)K(A + "skin/WdatePicker.css");
  90. U = X;
  91. if ($.$crossFrame) {
  92. try {
  93. while (U.parent && U.parent[M] != U[M] && U.parent[M][C]("frameset").length == 0)U = U.parent
  94. } catch (N) {
  95. }
  96. }
  97. if (!U.$dp)U.$dp = {ff: G, ie: R, opera: a, status: 0, defMinDate: $.minDate, defMaxDate: $.maxDate};
  98. B();
  99. if ($.$preLoad && $dp.status == 0)E(X, "onload", function () {
  100. T(null, true)
  101. });
  102. if (!X[M].docMD) {
  103. E(X[M], "onmousedown", D);
  104. X[M].docMD = true
  105. }
  106. if (!U[M].docMD) {
  107. E(U[M], "onmousedown", D);
  108. U[M].docMD = true
  109. }
  110. E(X, "onunload", function () {
  111. if ($dp.dd)O($dp.dd, "none")
  112. });
  113. function B() {
  114. U.$dp = U.$dp || {};
  115. obj = {
  116. $: function ($) {
  117. return (typeof $ == "string") ? X[M].getElementById($) : $
  118. }, $D: function ($, _) {
  119. return this.$DV(this.$($).value, _)
  120. }, $DV: function (_, $) {
  121. if (_ != "") {
  122. this.dt = $dp.cal.splitDate(_, $dp.cal.dateFmt);
  123. if ($)for (var B in $)if (this.dt[B] === undefined)this.errMsg = "invalid property:" + B; else {
  124. this.dt[B] += $[B];
  125. if (B == "M") {
  126. var C = $["M"] > 0 ? 1 : 0, A = new Date(this.dt["y"], this.dt["M"], 0).getDate();
  127. this.dt["d"] = Math.min(A + C, this.dt["d"])
  128. }
  129. }
  130. if (this.dt.refresh())return this.dt
  131. }
  132. return ""
  133. }, show: function () {
  134. var A = U[M].getElementsByTagName("div"), $ = 100000;
  135. for (var B = 0; B < A.length; B++) {
  136. var _ = parseInt(A[B].style.zIndex);
  137. if (_ > $)$ = _
  138. }
  139. this.dd.style.zIndex = $ + 2;
  140. O(this.dd, "block")
  141. }, hide: function () {
  142. O(this.dd, "none")
  143. }, attachEvent: E
  144. };
  145. for (var $ in obj)U.$dp[$] = obj[$];
  146. $dp = U.$dp
  147. }
  148. function E(A, $, _) {
  149. if (R)A.attachEvent($, _); else if (_) {
  150. var B = $.replace(/on/, "");
  151. _._ieEmuEventHandler = function ($) {
  152. return _($)
  153. };
  154. A.addEventListener(B, _._ieEmuEventHandler, false)
  155. }
  156. }
  157. function J() {
  158. var _, A, $ = X[M][C]("script");
  159. for (var B = 0; B < $.length; B++) {
  160. _ = $[B].getAttribute("src") || "";
  161. _ = _.substr(0, _.toLowerCase().indexOf("wdatepicker.js"));
  162. A = _.lastIndexOf("/");
  163. if (A > 0)_ = _.substring(0, A + 1);
  164. if (_)break
  165. }
  166. return _
  167. }
  168. function K(A, $, B) {
  169. var D = X[M][C]("HEAD").item(0), _ = X[M].createElement("link");
  170. if (D) {
  171. _.href = A;
  172. _.rel = "stylesheet";
  173. _.type = "text/css";
  174. if ($)_.title = $;
  175. if (B)_.charset = B;
  176. D.appendChild(_)
  177. }
  178. }
  179. function F($) {
  180. $ = $ || U;
  181. var A = 0, _ = 0;
  182. while ($ != U) {
  183. var D = $.parent[M][C]("iframe");
  184. for (var F = 0; F < D.length; F++) {
  185. try {
  186. if (D[F].contentWindow == $) {
  187. var E = V(D[F]);
  188. A += E.left;
  189. _ += E.top;
  190. break
  191. }
  192. } catch (B) {
  193. }
  194. }
  195. $ = $.parent
  196. }
  197. return {"leftM": A, "topM": _}
  198. }
  199. function V(G, F) {
  200. if (G.getBoundingClientRect)return G.getBoundingClientRect(); else {
  201. var A = {
  202. ROOT_TAG: /^body|html$/i,
  203. OP_SCROLL: /^(?:inline|table-row)$/i
  204. }, E = false, I = null, _ = G.offsetTop, H = G.offsetLeft, D = G.offsetWidth, B = G.offsetHeight, C = G.offsetParent;
  205. if (C != G)while (C) {
  206. H += C.offsetLeft;
  207. _ += C.offsetTop;
  208. if (Q(C, "position").toLowerCase() == "fixed")E = true; else if (C.tagName.toLowerCase() == "body")I = C.ownerDocument.defaultView;
  209. C = C.offsetParent
  210. }
  211. C = G.parentNode;
  212. while (C.tagName && !A.ROOT_TAG.test(C.tagName)) {
  213. if (C.scrollTop || C.scrollLeft)if (!A.OP_SCROLL.test(O(C)))if (!a || C.style.overflow !== "visible") {
  214. H -= C.scrollLeft;
  215. _ -= C.scrollTop
  216. }
  217. C = C.parentNode
  218. }
  219. if (!E) {
  220. var $ = Z(I);
  221. H -= $.left;
  222. _ -= $.top
  223. }
  224. D += H;
  225. B += _;
  226. return {"left": H, "top": _, "right": D, "bottom": B}
  227. }
  228. }
  229. function L($) {
  230. $ = $ || U;
  231. var B = $[M], A = ($.innerWidth) ? $.innerWidth : (B[H] && B[H].clientWidth) ? B[H].clientWidth : B.body.offsetWidth, _ = ($.innerHeight) ? $.innerHeight : (B[H] && B[H].clientHeight) ? B[H].clientHeight : B.body.offsetHeight;
  232. return {"width": A, "height": _}
  233. }
  234. function Z($) {
  235. $ = $ || U;
  236. var B = $[M], A = B[H], _ = B.body;
  237. B = (A && A.scrollTop != null && (A.scrollTop > _.scrollTop || A.scrollLeft > _.scrollLeft)) ? A : _;
  238. return {"top": B.scrollTop, "left": B.scrollLeft}
  239. }
  240. function D($) {
  241. var _ = $ ? ($.srcElement || $.target) : null;
  242. try {
  243. if ($dp.cal && !$dp.eCont && $dp.dd && _ != $dp.el && $dp.dd.style.display == "block")$dp.cal.close()
  244. } catch ($) {
  245. }
  246. }
  247. function Y() {
  248. $dp.status = 2
  249. }
  250. var P, _;
  251. function T(N, F) {
  252. $dp.win = X;
  253. B();
  254. N = N || {};
  255. for (var K in $)if (K.substring(0, 1) != "$" && N[K] === undefined)N[K] = $[K];
  256. if (F) {
  257. if (!L()) {
  258. _ = _ || setInterval(function () {
  259. if (U[M].readyState == "complete")clearInterval(_);
  260. T(null, true)
  261. }, 50);
  262. return
  263. }
  264. if ($dp.status == 0) {
  265. $dp.status = 1;
  266. N.el = S;
  267. I(N, true)
  268. } else return
  269. } else if (N.eCont) {
  270. N.eCont = $dp.$(N.eCont);
  271. N.el = S;
  272. N.autoPickDate = true;
  273. N.qsEnabled = false;
  274. I(N)
  275. } else {
  276. if ($.$preLoad && $dp.status != 2)return;
  277. var J = H();
  278. if (J) {
  279. N.srcEl = J.srcElement || J.target;
  280. J.cancelBubble = true
  281. }
  282. N.el = N.el = $dp.$(N.el || N.srcEl);
  283. if (!N.el || N.el["My97Mark"] === true || N.el.disabled || ($dp.dd && O($dp.dd) != "none" && $dp.dd.style.left != "-970px")) {
  284. try {
  285. N.el["My97Mark"] = false
  286. } catch (C) {
  287. }
  288. return
  289. }
  290. I(N);
  291. if (J && N.el.nodeType == 1 && N.el["My97Mark"] === undefined) {
  292. var A, D;
  293. if (J.type == "focus") {
  294. A = "onclick";
  295. D = "onfocus"
  296. } else {
  297. A = "onfocus";
  298. D = "onclick"
  299. }
  300. E(N.el, A, N.el[D])
  301. }
  302. }
  303. function L() {
  304. if (R && U != X && U[M].readyState != "complete")return false;
  305. return true
  306. }
  307. function H() {
  308. if (G) {
  309. func = H.caller;
  310. while (func != null) {
  311. var $ = func.arguments[0];
  312. if ($ && ($ + "").indexOf("Event") >= 0)return $;
  313. func = func.caller
  314. }
  315. return null
  316. }
  317. return event
  318. }
  319. }
  320. function Q(_, $) {
  321. return _.currentStyle ? _.currentStyle[$] : document.defaultView.getComputedStyle(_, false)[$]
  322. }
  323. function O(_, $) {
  324. if (_)if ($ != null)_.style.display = $; else return Q(_, "display")
  325. }
  326. function I(G, _) {
  327. var D = G.el ? G.el.nodeName : "INPUT";
  328. if (_ || G.eCont || new RegExp(/input|textarea|div|span|p|a/ig).test(D))G.elProp = D == "INPUT" ? "value" : "innerHTML"; else return;
  329. if (G.lang == "auto")G.lang = R ? navigator.browserLanguage.toLowerCase() : navigator.language.toLowerCase();
  330. if (!G.eCont)for (var C in G)$dp[C] = G[C];
  331. if (!$dp.dd || G.eCont || ($dp.dd && (G.getRealLang().name != $dp.dd.lang || G.skin != $dp.dd.skin))) {
  332. if (G.eCont)E(G.eCont, G); else {
  333. $dp.dd = U[M].createElement("DIV");
  334. $dp.dd.style.cssText = "position:absolute";
  335. U[M].body.appendChild($dp.dd);
  336. E($dp.dd, G);
  337. if (_)$dp.dd.style.left = $dp.dd.style.top = "-970px"; else {
  338. $dp.show();
  339. B($dp)
  340. }
  341. }
  342. } else if ($dp.cal) {
  343. $dp.show();
  344. $dp.cal.init();
  345. if (!$dp.eCont)B($dp)
  346. }
  347. function E(F, E) {
  348. F.innerHTML = "<iframe hideFocus=true width=97 height=9 frameborder=0 border=0 scrolling=no></iframe>";
  349. var D = F.lastChild.contentWindow[M], _ = $.$langList, C = $.$skinList, H = E.getRealLang();
  350. F.lang = H.name;
  351. F.skin = E.skin;
  352. var G = ["<head><script>", "var $d, $dp, $cfg=document.cfg, $pdp = parent.$dp, $dt, $tdt, $sdt, $lastInput, $IE=$pdp.ie, $FF = $pdp.ff,$OPERA=$pdp.opera, $ny, $cMark = false;", "if($cfg.eCont){$dp = {};for(var p in $pdp)$dp[p]=$pdp[p];}else{$dp=$pdp;};for(var p in $cfg){$dp[p]=$cfg[p];}", "document.oncontextmenu=function(){try{$c._fillQS(!$dp.has.d,1);showB($d.qsDivSel);}catch(e){};return false;};", "</script><script src=", A, "lang/", H.name, ".js charset=", H.charset, "></script>"];
  353. for (var I = 0; I < C.length; I++)if (C[I].name == E.skin)G.push("<link rel=\"stylesheet\" type=\"text/css\" href=\"" + A + "skin/" + C[I].name + "/datepicker.css\" charset=\"" + C[I].charset + "\"/>");
  354. G.push("<script type=\"text/javascript\" src=\"" + A + "calendar.js?\"+Math.random()+\" charset=\"gb2312\"></script>");
  355. G.push("</head><body leftmargin=\"0\" topmargin=\"0\" tabindex=0></body></html>");
  356. G.push("<script>var t;t=t||setInterval(function(){if(document.ready){new My97DP();$cfg.onload();$c.autoSize();$cfg.setPos($dp);clearInterval(t);}},20);if($FF||$OPERA)document.close();</script>");
  357. E.setPos = B;
  358. E.onload = Y;
  359. D.write("<html>");
  360. D.cfg = E;
  361. D.write(G.join(""))
  362. }
  363. function B(I) {
  364. var G = I.position.left, B = I.position.top, C = I.el;
  365. if (C == S)return;
  366. if (C != I.srcEl && (O(C) == "none" || C.type == "hidden"))C = I.srcEl;
  367. var H = V(C), $ = F(X), D = L(U), A = Z(U), E = $dp.dd.offsetHeight, _ = $dp.dd.offsetWidth;
  368. if (isNaN(B))B = 0;
  369. if (($.topM + H.bottom + E > D.height) && ($.topM + H.top - E > 0))B += A.top + $.topM + H.top - E - 2; else B += A.top + $.topM + Math.min(H.bottom, D.height - E) + 2;
  370. if (isNaN(G))G = 0;
  371. G += A.left + Math.min($.leftM + H.left, D.width - _ - 5) - (R ? 2 : 0);
  372. I.dd.style.top = B + "px";
  373. I.dd.style.left = G + "px"
  374. }
  375. }
  376. })()