; (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("
");
//caption bar goes here
cpha.push("");
cpha.push(" |
");
cpha.push("");
//week
cpha.push("");
//calculat for week
for (var i = def.weekstart, j = 0; j < 7; j++) {
cpha.push("", def.weekname[i], " | ");
if (i == 6) { i = 0; } else { i++; }
}
cpha.push(" ");
//to generat tbody, everything need to rebuilt
cpha.push(" ");
//end tbody
cpha.push(" |
");
cpha.push(" |
");
cpha.push("
");
//for drop down to select year & month
cpha.push("
");
cpha.push("");
//tow buttons for jan & jul
cpha.push("", def.monthname[0], " | ", def.monthname[6], " | | | ");
cpha.push("
");
cpha.push("");
cpha.push("", def.monthname[1], " | ", def.monthname[7], " | | | ");
cpha.push("
");
cpha.push("");
cpha.push("", def.monthname[2], " | ", def.monthname[8], " | | | ");
cpha.push("
");
cpha.push("");
cpha.push("", def.monthname[3], " | ", def.monthname[9], " | | | ");
cpha.push("
");
cpha.push("");
cpha.push("", def.monthname[4], " | ", def.monthname[10], " | | | ");
cpha.push("
");
cpha.push("");
cpha.push("", def.monthname[5], " | ", def.monthname[11], " | | | ");
cpha.push("
");
cpha.push("");
cpha.push(" | ");
cpha.push("
");
cpha.push("
");
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);