; (function($) { if (!dateformat || typeof (dateformat) != "function") { var dateformat = function(format) { var o = { "m+": this.getmonth() + 1, "d+": this.getdate(), "h+": this.gethours(), "h+": this.gethours(), "m+": this.getminutes(), "s+": this.getseconds(), "q+": math.floor((this.getmonth() + 3) / 3), "w": "0123456".indexof(this.getday()), "s": this.getmilliseconds() }; if (/(y+)/.test(format)) { format = format.replace(regexp.$1, (this.getfullyear() + "").substr(4 - regexp.$1.length)); } for (var k in o) { if (new regexp("(" + k + ")").test(format)) format = format.replace(regexp.$1, regexp.$1.length == 1 ? o[k] : ("00" + o[k]).substr(("" + o[k]).length)); } return format; }; } if (!dateadd || typeof (datediff) != "function") { var dateadd = function(interval, number, idate) { number = parseint(number); var date; if (typeof (idate) == "string") { date = idate.split(/\d/); eval("var date = new date(" + date.join(",") + ")"); } if (typeof (idate) == "object") { date = new date(idate.tostring()); } switch (interval) { case "y": date.setfullyear(date.getfullyear() + number); break; case "m": date.setmonth(date.getmonth() + number); break; case "d": date.setdate(date.getdate() + number); break; case "w": date.setdate(date.getdate() + 7 * number); break; case "h": date.sethours(date.gethours() + number); break; case "n": date.setminutes(date.getminutes() + number); break; case "s": date.setseconds(date.getseconds() + number); break; case "l": date.setmilliseconds(date.getmilliseconds() + number); break; } return date; } } if (!datediff || typeof (datediff) != "function") { var datediff = function(interval, d1, d2) { switch (interval) { case "d": //date case "w": d1 = new date(d1.getfullyear(), d1.getmonth(), d1.getdate()); d2 = new date(d2.getfullyear(), d2.getmonth(), d2.getdate()); break; //w case "h": d1 = new date(d1.getfullyear(), d1.getmonth(), d1.getdate(), d1.gethours()); d2 = new date(d2.getfullyear(), d2.getmonth(), d2.getdate(), d2.gethours()); break; //h case "n": d1 = new date(d1.getfullyear(), d1.getmonth(), d1.getdate(), d1.gethours(), d1.getminutes()); d2 = new date(d2.getfullyear(), d2.getmonth(), d2.getdate(), d2.gethours(), d2.getminutes()); break; case "s": d1 = new date(d1.getfullyear(), d1.getmonth(), d1.getdate(), d1.gethours(), d1.getminutes(), d1.getseconds()); d2 = new date(d2.getfullyear(), d2.getmonth(), d2.getdate(), d2.gethours(), d2.getminutes(), d2.getseconds()); break; } var t1 = d1.gettime(), t2 = d2.gettime(); var diff = nan; switch (interval) { case "y": diff = d2.getfullyear() - d1.getfullyear(); break; //y case "m": diff = (d2.getfullyear() - d1.getfullyear()) * 12 + d2.getmonth() - d1.getmonth(); break; //m case "d": diff = math.floor(t2 / 86400000) - math.floor(t1 / 86400000); break; case "w": diff = math.floor((t2 + 345600000) / (604800000)) - math.floor((t1 + 345600000) / (604800000)); break; //w case "h": diff = math.floor(t2 / 3600000) - math.floor(t1 / 3600000); break; //h case "n": diff = math.floor(t2 / 60000) - math.floor(t1 / 60000); break; // case "s": diff = math.floor(t2 / 1000) - math.floor(t1 / 1000); break; //s case "l": diff = t2 - t1; break; } return diff; } } var useragent = window.navigator.useragent.tolowercase(); //不再支持ie6\7\8 // $.browser.msie8 = false; // $.browser.msie7 = false; // $.browser.msie6 = false; if ($.fn.noselect == undefined) { $.fn.noselect = function(p) { //no select plugin by me :-) if (p == null) prevent = true; else prevent = p; if (prevent) { return this.each(function() { if ($.browser.msie || $.browser.safari) $(this).bind('selectstart', function() { return false; }); else if ($.browser.mozilla) { $(this).css('mozuserselect', 'none'); $('body').trigger('focus'); } else if ($.browser.opera) $(this).bind('mousedown', function() { return false; }); else $(this).attr('unselectable', 'on'); }); } else { return this.each(function() { if ($.browser.msie || $.browser.safari) $(this).unbind('selectstart'); else if ($.browser.mozilla) $(this).css('mozuserselect', 'inherit'); else if ($.browser.opera) $(this).unbind('mousedown'); else $(this).removeattr('unselectable', 'on'); }); } }; //end noselect }; $.fn.datepicker = function(o) { var def = { weekstart: 0, weekname: [i18n.datepicker.dateformat.sun, i18n.datepicker.dateformat.mon, i18n.datepicker.dateformat.tue, i18n.datepicker.dateformat.wed, i18n.datepicker.dateformat.thu, i18n.datepicker.dateformat.fri, i18n.datepicker.dateformat.sat], //week language support monthname: [i18n.datepicker.dateformat.jan, i18n.datepicker.dateformat.feb, i18n.datepicker.dateformat.mar, i18n.datepicker.dateformat.apr, i18n.datepicker.dateformat.may, i18n.datepicker.dateformat.jun, i18n.datepicker.dateformat.jul, i18n.datepicker.dateformat.aug, i18n.datepicker.dateformat.sep, i18n.datepicker.dateformat.oct, i18n.datepicker.dateformat.nov, i18n.datepicker.dateformat.dec], monthp: i18n.datepicker.dateformat.postfix, year: new date().getfullyear(), //default year month: new date().getmonth() + 1, //default month day: new date().getdate(), //default date today: new date(), btnok: i18n.datepicker.ok, btncancel: i18n.datepicker.cancel, btntoday: i18n.datepicker.today, inputdate: null, onreturn: false, version: "1.1", applyrule: false, //function(){};return rule={startdate,endate}; showtarget: null, picker: "" }; $.extend(def, o); var cp = $("#bbit_dp_container"); if (cp.length == 0) { var cpha = []; cpha.push("
"); if ($.browser.msie6) { cpha.push(''); } cpha.push(""); cpha.push(""); cpha.push(""); cpha.push("
"); //caption bar goes here cpha.push("
  
"); cpha.push("
"); //week cpha.push(""); //calculat for week for (var i = def.weekstart, j = 0; j < 7; j++) { cpha.push(""); if (i == 6) { i = 0; } else { i++; } } cpha.push(""); //to generat tbody, everything need to rebuilt cpha.push("
", def.weekname[i], "
"); //end tbody cpha.push("
"); //for drop down to select year & month cpha.push("
"); cpha.push(""); //tow buttons for jan & jul cpha.push(""); cpha.push(""); cpha.push(""); cpha.push(""); cpha.push(""); cpha.push(""); cpha.push(""); cpha.push(""); cpha.push(""); cpha.push(""); cpha.push(""); cpha.push(""); cpha.push(""); cpha.push(""); cpha.push(""); cpha.push(""); cpha.push(""); cpha.push(""); cpha.push(""); cpha.push(""); cpha.push("
", def.monthname[0], "", def.monthname[6], "
", def.monthname[1], "", def.monthname[7], "
", def.monthname[2], "", def.monthname[8], "
", def.monthname[3], "", def.monthname[9], "
", def.monthname[4], "", def.monthname[10], "
", def.monthname[5], "", def.monthname[11], "
"); cpha.push("
"); cpha.push("
"); var s = cpha.join(""); $(document.body).append(s); cp = $("#bbit_dp_container"); initevents(); } function initevents() { //1 today btn; $("#bbit-dp-today").click(returntoday); cp.click(returnfalse); $("#bbit_dp_inner tbody").click(tbhandler); $("#bbit_dp_leftbtn").click(prevm); $("#bbit_dp_rightbtn").click(nextm); $("#bbit_dp_ymbtn").click(showym); $("#bbit-dp-mp").click(mpclick).dblclick(mpdblclick); $("#bbit-dp-mp-prev").click(mpprevy); $("#bbit-dp-mp-next").click(mpnexty); $("#bbit-dp-mp-okbtn").click(mpok); $("#bbit-dp-mp-cancelbtn").click(mpcancel); } function mpcancel() { $("#bbit-dp-mp").animate({ top: -193 }, { duration: 200, complete: function() { $("#bbit-dp-mp").hide(); } }); return false; } function mpok() { def.year = def.cy; def.month = def.cm + 1; def.day = 1; $("#bbit-dp-mp").animate({ top: -193 }, { duration: 200, complete: function() { $("#bbit-dp-mp").hide(); } }); writecb(); return false; } function mpprevy() { var y = def.ty - 10 def.ty = y; rryear(y); return false; } function mpnexty() { var y = def.ty + 10 def.ty = y; rryear(y); return false; } function rryear(y) { var s = y - 4; var ar = []; for (var i = 0; i < 5; i++) { ar.push(s + i); ar.push(s + i + 5); } $("#bbit-dp-mp td.bbit-dp-mp-year").each(function(i) { if (def.year == ar[i]) { $(this).addclass("bbit-dp-mp-sel"); } else { $(this).removeclass("bbit-dp-mp-sel"); } $(this).html("" + ar[i] + "").attr("xyear", ar[i]); }); } function mpdblclick(e) { var et = e.target || e.srcelement; var td = gettd(et); if (td == null) { return false; } if ($(td).hasclass("bbit-dp-mp-month") || $(td).hasclass("bbit-dp-mp-year")) { mpok(e); } return false; } function mpclick(e) { var panel = $(this); var et = e.target || e.srcelement; var td = gettd(et); if (td == null) { return false; } if ($(td).hasclass("bbit-dp-mp-month")) { if (!$(td).hasclass("bbit-dp-mp-sel")) { var ctd = panel.find("td.bbit-dp-mp-month.bbit-dp-mp-sel"); if (ctd.length > 0) { ctd.removeclass("bbit-dp-mp-sel"); } $(td).addclass("bbit-dp-mp-sel") def.cm = parseint($(td).attr("xmonth")); } } if ($(td).hasclass("bbit-dp-mp-year")) { if (!$(td).hasclass("bbit-dp-mp-sel")) { var ctd = panel.find("td.bbit-dp-mp-year.bbit-dp-mp-sel"); if (ctd.length > 0) { ctd.removeclass("bbit-dp-mp-sel"); } $(td).addclass("bbit-dp-mp-sel") def.cy = parseint($(td).attr("xyear")); } } return false; } function showym() { var mp = $("#bbit-dp-mp"); var y = def.year; def.cy = def.ty = y; var m = def.month - 1; def.cm = m; var ms = $("#bbit-dp-mp td.bbit-dp-mp-month"); for (var i = ms.length - 1; i >= 0; i--) { var ch = $(ms[i]).attr("xmonth"); if (ch == m) { $(ms[i]).addclass("bbit-dp-mp-sel"); } else { $(ms[i]).removeclass("bbit-dp-mp-sel"); } } rryear(y); mp.css("top", -193).show().animate({ top: 0 }, { duration: 200 }); } function gettd(elm) { if (elm.tagname.touppercase() == "td") { return elm; } else if (elm.tagname.touppercase() == "body") { return null; } else { var p = $(elm).parent(); if (p.length > 0) { if (p[0].tagname.touppercase() != "td") { return gettd(p[0]); } else { return p[0]; } } } return null; } function tbhandler(e) { var et = e.target || e.srcelement; var td = gettd(et); if (td == null) { return false; } var $td = $(td); if (!$(td).hasclass("bbit-dp-disabled")) { var s = $td.attr("xdate"); cp.data("indata",stringtodate(s)); returndate(); } return false; } function returnfalse() { return false; } function stringtodate(datestr) { try { var arrs = datestr.split(i18n.datepicker.dateformat.separator); var year = parseint(arrs[i18n.datepicker.dateformat.year_index]); var month = parseint(arrs[i18n.datepicker.dateformat.month_index]) - 1; var day = parseint(arrs[i18n.datepicker.dateformat.day_index]); return new date(year, month, day); } catch(e) { return null; } } function prevm() { if (def.month == 1) { def.year--; def.month = 12; } else { def.month-- } writecb(); return false; } function nextm() { if (def.month == 12) { def.year++; def.month = 1; } else { def.month++ } writecb(); return false; } function returntoday() { cp.data("indata", new date()); returndate(); } function returndate() { var ct = cp.data("ctarget"); var ck = cp.data("cpk"); var re = cp.data("onreturn"); var ndate = cp.data("indata") var ads = cp.data("ads"); var ade = cp.data("ade"); var dis = false; if (ads && ndate < ads) { dis = true; } if (ade && ndate > ade) { dis = true; } if (dis) { return; } if (re && jquery.isfunction(re)) { re.call(ct[0], cp.data("indata")); } else { ct.val(dateformat.call(cp.data("indata"), i18n.datepicker.dateformat.fulldayvalue)); } ck.attr("isshow", "0"); cp.removedata("ctarget").removedata("cpk").removedata("indata").removedata("onreturn") .removedata("ads").removedata("ade"); cp.css("visibility", "hidden"); ct = ck = null; } function writecb() { var tb = $("#bbit_dp_inner tbody"); $("#bbit_dp_ymbtn").html(def.monthname[def.month - 1] + def.monthp + " " + def.year); var firstdate = new date(def.year, def.month - 1, 1); var diffday = def.weekstart - firstdate.getday(); var showmonth = def.month - 1; if (diffday > 0) { diffday -= 7; } var startdate = dateadd("d", diffday, firstdate); var enddate = dateadd("d", 42, startdate); var ads = cp.data("ads"); var ade = cp.data("ade"); var bhm = []; var tds = dateformat.call(def.today, i18n.datepicker.dateformat.fulldayvalue); var indata = cp.data("indata"); var ins = indata != null ? dateformat.call(indata, i18n.datepicker.dateformat.fulldayvalue) : ""; for (var i = 1; i <= 42; i++) { if (i % 7 == 1) { bhm.push(""); } var ndate = dateadd("d", i - 1, startdate); var tdc = []; var dis = false; if (ads && ndate < ads) { dis = true; } if (ade && ndate > ade) { dis = true; } if (ndate.getmonth() < showmonth) { tdc.push("bbit-dp-prevday"); } else if (ndate.getmonth() > showmonth) { tdc.push("bbit-dp-nextday"); } if (dis) { tdc.push("bbit-dp-disabled"); } else { tdc.push("bbit-dp-active"); } var s = dateformat.call(ndate, i18n.datepicker.dateformat.fulldayvalue); if (s == tds) { tdc.push("bbit-dp-today"); } if (s == ins) { tdc.push("bbit-dp-selected"); } bhm.push("", ndate.getdate(), ""); if (i % 7 == 0) { bhm.push(""); } } tb.html(bhm.join("")); } return $(this).each(function() { var obj = $(this).addclass("bbit-dp-input"); var picker = $(def.picker); def.showtarget == null && obj.after(picker); picker.click(function(e) { var isshow = $(this).attr("isshow"); //hide it initially var me = $(this); if (cp.css("visibility") == "visible") { cp.css(" visibility", "hidden"); } if (isshow == "1") { me.attr("isshow", "0"); cp.removedata("ctarget").removedata("cpk").removedata("indata").removedata("onreturn"); return false; } var v = obj.val(); if (v != "") { v = stringtodate(v); } if (v == null || v == "") { def.year = new date().getfullyear(); def.month = new date().getmonth() + 1; def.day = new date().getdate(); def.inputdate = null } else { def.year = v.getfullyear(); def.month =v.getmonth() + 1; def.day = v.getdate(); def.inputdate = v; } cp.data("ctarget", obj).data("cpk", me).data("indata", def.inputdate).data("onreturn", def.onreturn); if (def.applyrule && $.isfunction(def.applyrule)) { var rule = def.applyrule.call(obj, obj[0].id); if (rule) { if (rule.startdate) { cp.data("ads", rule.startdate); } else { cp.removedata("ads"); } if (rule.enddate) { cp.data("ade", rule.enddate); } else { cp.removedata("ade"); } } } else { cp.removedata("ads").removedata("ade") } writecb(); $("#bbit-dp-t").height(cp.height()); var t = def.showtarget || obj; var pos = t.offset(); var height = t.outerheight(); var newpos = { left: pos.left, top: pos.top + height }; var w = cp.width(); var h = cp.height(); var bw = document.documentelement.clientwidth; var bh = document.documentelement.clientheight; if ((newpos.left + w) >= bw) { newpos.left = bw - w - 2; } if ((newpos.top + h) >= bh) { newpos.top = pos.top - h - 2; } if (newpos.left < 0) { newpos.left = 10; } if (newpos.top < 0) { newpos.top = 10; } $("#bbit-dp-mp").hide(); newpos.visibility = "visible"; cp.css(newpos); //cp.show(); $(this).attr("isshow", "1"); $(document).one("click", function(e) { me.attr("isshow", "0"); cp.removedata("ctarget").removedata("cpk").removedata("indata"); cp.css("visibility", "hidden"); }); return false; }); }); }; })(jquery);