| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363 |
- function c$(sId) {
- if (sId == "") return null;
- return document.getElementById(sId);
- }
- function cnCalendar() {
- var _calendar_obj = null;
- var outfunc = null;
- var reciever;
- var curDate = null;
- var startDate = null;
- var endDate = null;
-
-
- var today = new Date();
- var y = today.getFullYear();
- var m = today.getMonth() + 1;
- this.daysInMonth = function(y, m)
- {
- switch (m)
- {
- case 1:
- case 3:
- case 5:
- case 7:
- case 8:
- case 10:
- case 12:
- return 31;
- case 4:
- case 6:
- case 9:
- case 11:
- return 30;
- case 2:
- if (y % 4 != 0)
- {
- return 28;
- }
- if (y % 100 == 0)
- {
- return y % 400 == 0 ? 29 : 28;
- }
- return 29;
- }
- }
- //Generate Codes
- this.generateCalendarTable = function() {
- var gy, gm, gd;
- if (reciever.value) {
- var sDate = new Date(Date.parse(reciever.value.replace(/-/g, "/")));
- gy = sDate.getFullYear();
- gm = sDate.getMonth() + 1;
- gd = sDate.getDate();
- }
- var i;
- var j = new Date(y, m - 1, 1).getDay();
- var k = this.daysInMonth(y, m);
- var body = '';
- //Frame Table Header
- body += "<table class='calendar_table' cellpadding='0' cellspacing='1' author=\"outclick\">";
- body += " <tr>";
- body += " <td colspan='7' style='padding-bottom:0px' author=\"outclick\">";
- body += " <table class='calendar_caption' author=\"outclick\">";
- body += " <tr>";
- body += " <td author=\"outclick\"><a href='javascript:calendar.loadPreviousYear()' class=\"calendar_nav navleft2\" author=\"outclick\"></a><a href='javascript:calendar.loadPreviousMonth()' class=\"calendar_nav navleft\" author=\"outclick\"></a></td>";
- body += " <td author=\"outclick\" align='center' nowrap='nowrap' ><span id=\"spanCYear\" onclick=\"calendar.changeYearMonth(this,'year')\" author=\"outclick\" date=\"year\">" + y + "年</span><span date=\"year\" author=\"outclick\" id=\"changeCYear\" style=\"display:none;\"></span><span id=\"changeCMonth\" date=\"year\" author=\"outclick\" style=\"display:none;\"></span><span id=\"spanCMonth\" onclick=\"calendar.changeYearMonth(this,'month')\" date=\"year\" author=\"outclick\">" + m + "月</span></td>";
- body += " <td author=\"outclick\"><a author=\"outclick\" class=\"calendar_nav navright\" href='javascript:calendar.loadNextMonth()'></a><a author=\"outclick\" class=\"calendar_nav navright2\" href='javascript:calendar.loadNextYear()'></a></td>";
- body += " </tr>";
- body += " </table>";
- body += " </td>";
- body += " </tr>";
- //Calendar Table Header
- body += " <tr class='calendar_header' >";
- body += " <td author=\"outclick\">日</td>";
- body += " <td author=\"outclick\">一</td>";
- body += " <td author=\"outclick\">二</td>";
- body += " <td author=\"outclick\">三</td>";
- body += " <td author=\"outclick\">四</td>";
- body += " <td author=\"outclick\">五</td>";
- body += " <td author=\"outclick\">六</td>";
- body += " </tr>";
- if (j != 0) {
- body += "<tr align='center'>";
- body += ("<td author=\"outclick\" colspan='" + j + "'></td>");
- }
- for (i = 1; i <= k; i++) {
- if ((i + j) % 7 == 1) {
- body += "<tr align='center'>";
- }
- body += "<td author=\"outclick\"";
- if (this.disabledDate(y, m, i)) {
- body += " class=\"calendar_day disabled_css\" ";
- } else {
- if (y == today.getFullYear() && m == today.getMonth() + 1 && i == today.getDate()) {//等于当天
- body += " class=\"calendar_day today_css\" ";
- }
- else if ((y + "-" + m + "-" + i) == (gy + "-" + gm + "-" + gd)) {//选中的时间
- body += " class=\"calendar_day currentday_css\" ";
- }
- else {
- body += " class=\"calendar_day out_css\" ";
- }
- body += " onmouseover=\"if(this.className=='calendar_day out_css' )this.className='calendar_day over_css';\"";
- body += " onmouseout=\"if(this.className=='calendar_day over_css'){this.className='calendar_day out_css'}\"";
- body += " onclick=\"calendar.setValue('" + y + "-" + this.getZeroNum(m) + "-" + this.getZeroNum(i) + "')\"";
- }
- body += ">" + i + "</td>";
- if ((i + j) % 7 == 0) {
- body += ("</tr>");
- }
- }
- if ((i + j) % 7 != 0) {
- body += ("<td author=\"outclick\" colspan='" + (8 - (i + j) % 7) + "'></td>");
- body += ("</tr>");
- }
- if (j < (36 - k)) {
- body += ("<tr><td author=\"outclick\" colspan='7' > </td></tr>");
- }
- if (j == 0 && k == 28) {
- body += ("<tr><td author=\"outclick\" colspan='7' > </td></tr>");
- }
- body += "<tr><td colspan='7' author=\"outclick\" style='text-align:center;height:20px;padding:2 0 2 0'><a class=\"calendar_button\" href=\"javascript:calendar.toDay()\">今天</a> <a class=\"calendar_button\" href=\"javascript:calendar.setValue('')\">清空</a></td></tr>"
- body += "</table>";
- return body;
- }
- this.loadPreviousYear = function()
- {
- y--;
- _calendar_obj.innerHTML = this.generateCalendarTable();
- }
- this.loadNextYear = function()
- {
- y++;
- _calendar_obj.innerHTML = this.generateCalendarTable();
- }
- this.loadPreviousMonth = function()
- {
- m--;
- if (m < 1){m = 12;y--;}
- _calendar_obj.innerHTML = this.generateCalendarTable();
- }
- this.loadNextMonth = function()
- {
- m++;
- if (m > 12)
- {
- m = 1;
- y++;
- }
- _calendar_obj.innerHTML = this.generateCalendarTable();
- }
- this.changeYear = function(year) {
- y = parseInt(year.replace("年", ""));
- _calendar_obj.innerHTML = this.generateCalendarTable();
- }
- this.changeMonth = function(month) {
- m = parseInt(month.replace("月", ""));
- _calendar_obj.innerHTML = this.generateCalendarTable();
- }
- this.getAbsolutePosition = function(element)
- {
- var point = { x: element.offsetLeft, y: element.offsetTop };
- if (element.offsetParent)
- {
- var parentPoint = this.getAbsolutePosition(element.offsetParent);
- point.x += parentPoint.x;
- point.y += parentPoint.y;
- }
- return point;
- };
- this.initValue = function(isCur, start, end) {
- curDate = null;
- startDate = null;
- endDate = null;
- if (isCur) curDate = new Date();
- if (start != "" && $(start) && c$(start).value != "") startDate = new Date(Date.parse(c$(start).value.replace(/-/g, "/")));
- if (end != "" && $(end) && c$(end).value != "") endDate = new Date(Date.parse(c$(end).value.replace(/-/g, "/")));
- }
- this.disabledDate = function(my, mm, md) {
- var sTime = new Date(my, mm - 1, md);
- var bl = false;
- if (curDate != null && sTime < curDate) return true;
- if (startDate != null && sTime < startDate) return true;
- if (endDate != null && sTime > endDate) return true;
- return bl;
- }
- this.setHook = function (obj, isCur, start, end, func) {
- var dateField = obj.previousSibling;
- if (dateField.disabled) return;
- reciever = dateField;
- if (func) outfunc = func;
- this.initValue(isCur, start, end);
- _calendar_obj = c$("calendar_div")
- if (!_calendar_obj) {
- var divObj = document.createElement("div");
- divObj.id = "calendar_div";
- divObj.style.position = "absolute";
- divObj.style.styleFloat = "left";
- divObj.style.display = "none";
- divObj.style.zIndex = "999999";
- document.body.appendChild(divObj);
- _calendar_obj = divObj;
- }
- //没有隐藏则隐藏
- if (_calendar_obj.style.display != 'none' && reciever == dateField) {
- _calendar_obj.style.display = 'none';
- return;
- }
- //定位
- var point = this.getAbsolutePosition(dateField);
- var cw = 192;
- var allw = document.body.offsetWidth;
- var lx = point.x + dateField.offsetWidth;
- if (lx + cw > allw) {
- lx = lx - cw;
- }
- _calendar_obj.style.left = lx + 'px';
- _calendar_obj.style.top = point.y + 10 + 'px';
- //有值
- if (reciever.value) {
- var tmpDate = new Date(Date.parse(reciever.value.replace(/-/g, "/")));
- y = tmpDate.getFullYear();
- m = tmpDate.getMonth() + 1;
- }
- _calendar_obj.innerHTML = this.generateCalendarTable();
- _calendar_obj.style.display = "";
- }
- this.fadeOut = function () {
- if (_calendar_obj) {
- _calendar_obj.style.display = 'none';
- }
- }
- this.toDay = function() {
- var date = GetCurDate();
- reciever.value = date.getFullYear() + "-" + this.getZeroNum(date.getMonth() + 1) + "-" + this.getZeroNum(date.getDate());
- if (outfunc)eval(outfunc);
- this.fadeOut();
- }
- this.setValue = function(date) {
- reciever.value = date;
- if (outfunc) eval(outfunc);
- this.fadeOut();
- }
- this.getZeroNum = function(mon) {
- if (mon < 10) return "0"+mon;
- else return mon;
- }
- this.changeYearMonth = function(obj, sType) {
- obj.style.display = "none";
- var str = obj.innerHTML;
- if (sType == "year") {
- c$("changeCMonth").style.display = "none";
- c$("changeCYear").style.display = "";
- c$("spanCMonth").style.display = "";
- if (c$("changeCYear").innerHTML == "") {
- var yearObj = document.createElement("select");
- yearObj.setAttribute("author", "outclick");
- yearObj.setAttribute("date", "year");
- if (yearObj.addEventListener) {
- yearObj.addEventListener("change", function(e) { changeValueCalendar(this, "year") }, false);
- } else {
- yearObj.attachEvent("onchange", function(e) { changeValueCalendar(yearObj, "year") }, false);
- }
- var i = 0;
- for (yNum = 1949; yNum <= 2050; yNum++) {
- var opt = new Option(yNum + "年", yNum + "年");
- opt.setAttribute("author", "outclick");
- opt.setAttribute("date", "month");
- yearObj.options.add(opt);
- if (str.indexOf(yNum) != -1)
- yearObj.selectedIndex = i;
- i++;
- }
- c$("changeCYear").appendChild(yearObj);
- }
- else {
- var ci = 0;
- for (var yNum = 1949; yNum <= 2050; yNum++) {
- if (str.indexOf(yNum) != -1) {
- c$("changeCYear").childNodes[0].selectedIndex = ci;
- break;
- }
- ci++;
- }
- }
- } else {
- c$("changeCYear").style.display = "none";
- c$("changeCMonth").style.display = "";
- c$("spanCYear").style.display = "";
- if (c$("changeCMonth").innerHTML == "") {
- var monthObj = document.createElement("select");
- monthObj.setAttribute("author", "outclick");
- monthObj.setAttribute("date", "month");
- if (monthObj.addEventListener) {
- monthObj.addEventListener("change", function() { changeValueCalendar(this, "month") }, false);
- } else {
- monthObj.attachEvent("onchange", function() { changeValueCalendar(monthObj, "month") }, false);
- }
- for (var mNum = 1; mNum <= 12; mNum++) {
- var mopt = new Option(mNum + "月", mNum + "月");
- mopt.setAttribute("author", "outclick");
- mopt.setAttribute("date", "month");
- monthObj.options.add(mopt);
- if (str.indexOf(mNum + "月") != -1) {
- monthObj.selectedIndex = mNum - 1;
- }
- }
- c$("changeCMonth").appendChild(monthObj);
- }
- else {
- for (var cmNum = 1; cmNum <= 12; cmNum++) {
- if (str.indexOf(cmNum + '月') != -1)
- monthObj.selectedIndex = cmNum;
- }
- }
- }
- }
- }
- function changeValueCalendar(obj, sType) {
- if(sType=="year"){
- c$("spanCYear").innerHTML=obj.value;
- c$("spanCYear").style.display = "";
- c$("changeCYear").style.display = "none";
- calendar.changeYear(obj.value);
- } else {
- c$("spanCMonth").innerHTML=obj.value;
- c$("spanCMonth").style.display = "";
- c$("changeCMonth").style.display = "none";
- calendar.changeMonth(obj.value);
- }
- }
- function hideCalendar(event) {
- event = (event == null) ? window.event : event;
- var srcelement = event.target ? event.target : event.srcElement;
- if (srcelement.getAttribute("author") != null && srcelement.getAttribute("date")==null) {
- if (c$("changeCYear").style.display == "") {
- c$("spanCYear").style.display = "";
- c$("changeCYear").style.display = "none";
- }
-
- if (c$("changeCMonth").style.display == "") {
- c$("spanCMonth").style.display = "";
- c$("changeCMonth").style.display = "none";
- }
- }else {
- if (srcelement.getAttribute("author") == null && srcelement.className.indexOf("shortbtn") == -1) {
- calendar.fadeOut();
- }
- }
- }
- var calendar = new cnCalendar();
- window.onload = function() {
- if (document.addEventListener) {
- document.addEventListener("click", function(e) { hideCalendar(e) }, false);
- } else {
- document.attachEvent("onclick", function(e) { hideCalendar(e) }, false);
- }
- }
|