/* jQuery - jcDate v1.0 */
;(function($){
$.fn.jcDate = function(options) {
var defaults = {
IcoClass : "jcDateIco",
Event : "click",
Speed : 100,
Left : 0,
Top : 38,
format : "/",
Timeout : 100
};
var options = $.extend(defaults,options);
return this.each(function() {
if($("#jcDate").length == 0){
$("body").prepend("
");
};
var $dateInput = $(this),
$window = $(window),
dateObj = new Date(),
$jcDate = $("#jcDate"),
inputOffLeft = $(this).offset().left,
inputOfftop = $(this).offset().top,
$year = $("#jcDateTt").find("span"),
$month = $("#jcDateTt").find("samp"),
$b = $("#jcDateTt").find("b"),
$jcDateMax = $("#jcDateMax"),
$weekFrame = $("#jcDayCon"),
$DateBtn = $("#jcDateBtn"),
$jcYeas = $("#jcYeas"),
$jcMonth = $("#jcMonth"),
$Now = $DateBtn.find("samp"),
$clear = $DateBtn.find("span"),
$jcDayWrap = $("#jcDayWrap"),
$dayFrame = $jcDayWrap.find("ul"),
$submit = $DateBtn.find("a#d_sub"),
$HiddenText = $("input#dateHideText"),
$jcTimeWrap = $("#jcTimeWrap"),
$hh = $jcTimeWrap.find("input:eq(0)"),
$mm = $jcTimeWrap.find("input:eq(1)"),
$d_prev = $("#d_prev"),
$d_next = $("#d_next"),
// 获取当前时间
_year = parseInt(dateObj.getFullYear()),
_month = dateObj.getMonth() + 1,
_date = dateObj.getDate(),
week = dateObj.getDay(),
days = [ "日","一 ","二 ","三 ","四 ","五 ","六 "],
_day = days[week],
_hours = dateObj.getHours(),
_minutes = dateObj.getMinutes(),
weekDl = "",
yearDl = ""+_year+"年"+"",
monthDl = "",
$ul = "",
_idx = 0,
defInfo = "",
getDateCount = function(y, m){
return [31, y % 4 == 0 && y % 100 != 0 || y % 400 == 0 ? 29 : 28 ,31,30,31,30,31,31,30,31,30,31][ m+1 ];
};
// 赋值数据
$hh.val("00");
$mm.val("00");
for(var w = 0 in days) {
weekDl = weekDl + "" + days[w] + "";
};
$weekFrame.html(weekDl);
var NowY = _year,
yArr = new Array(),
mArr = new Array();
for(var lys = 0; lys < 9 ; lys++ ){
lastyear = NowY - (lys+1);
yArr.push(""+lastyear+"年"+"")
};
yArr.reverse();
var dtf = ysArr(yArr);
yArr.length = 0;
for(var fys = 0; fys < 8 ; fys++ ){
firstyear = NowY + (fys+1);
yArr.push(""+firstyear+"年"+"")
};
var dtl = ysArr(yArr);
$jcYeas.html(dtf+yearDl+dtl);
function ysArr(arr){
var $Dts = "";
for(var index = 0 in arr){
$Dts = $Dts + arr[index];
};
return $Dts
};
for(var ms = 1; ms <= 12; ms++ ){
if(ms == _month){
mArr.push("" + ms + "月" +"");
} else {
mArr.push("" + ms + "月" +"");
};
};
for(var mA = 0 in mArr){
monthDl += mArr[mA];
};
$jcMonth.html(monthDl)
function shFade(show,hide,hide2,bool,index){
var fadeSpeed = options.speed;
hide.fadeOut(fadeSpeed);
hide2.fadeOut(fadeSpeed);
show.delay(fadeSpeed*2).fadeIn(fadeSpeed);
if(bool){
$("#d_prev,#d_next").fadeOut(fadeSpeed);
$b.eq(index).hide();
} else {
$("#d_prev,#d_next").fadeIn(fadeSpeed);
$b.show();
$year.show();
$month.show();
};
};
$year.die().live("click",function(){
$(this).addClass("visited").next("samp").removeClass("visited");
shFade($jcYeas,$jcDayWrap,$jcMonth,true,1);
$year.show();
$month.hide();
});
$("#jcYeas dd,#jcYeas dt").die().live("click",function(){
var y = parseInt($(this).text());
Traversal(y);
$year.text(y);
shFade($jcDayWrap,$jcYeas,$jcMonth,false);
});
$month.die().live("click",function(){
$(this).addClass("visited").prev().removeClass("visited");
shFade($jcMonth,$jcDayWrap,$jcYeas,true,0);
$month.show();
$year.hide();
});
$jcMonth.find("dt").die().live("click",function(){
var m = parseInt($(this).text());
mAnimate(m-1);
$month.text(m);
shFade($jcDayWrap,$jcYeas,$jcMonth,false);
});
function Traversal(Ty){
$year.text(Ty);
for(var m = 0; m < $dayFrame.length; m++){
var dayLi = "",
$fLi = "",
$lLi = "",
firstLi = "",
lastDay = 0,
yearWeek = new Date(Ty,m,1).getDay();
getDateCount(Ty,m-2) == undefined ? fristDay = 31 : fristDay = getDateCount(Ty,m-2);
for(var d = 1; d <= getDateCount(Ty,m-1); d++){
dayLi = dayLi + ""+ d +"";
};
for(var f = 0 ; f < yearWeek; f++){
firstLi += ""+ fristDay +",";
fristDay--;
};
for(var l = 0 ; l <= 42-(d+yearWeek); l++ ){
lastDay = l + 1;
$lLi += ""+lastDay+"";
};
fLiArr = firstLi.split(",").reverse();
for(var arr = 0 in fLiArr){
$fLi += fLiArr[arr];
};
$addLi = $fLi + dayLi + $lLi;
$dayFrame.eq(m).html($addLi);
};
};
mAnimate(_month-1);
//功能方法
$d_prev.die().live("click",function(){
_idx = $dayFrame.filter(".dateV").index();
if( _idx > 0){
_idx --;
} else {
var _Tyear = parseInt($year.text());
_Tyear--;
Traversal(_Tyear);
_idx = $dayFrame.length-1;
};
mAnimate(_idx);
});
$d_next.die().live("click",function(){
_idx = $dayFrame.filter(".dateV").index();
if( _idx < $dayFrame.length-1){
_idx ++;
} else {
var _Tyear = parseInt($year.text());
_Tyear++;
Traversal(_Tyear);
_idx = 0;
};
mAnimate(_idx);
});
function mAnimate(index){
$dayFrame.eq(index).addClass("dateV").siblings().removeClass("dateV");
$month.text(index+1);
$jcDateMax.animate({ "left":-index*144},options.Speed);
};
function today(y,m,d){
$year.text(y);
$month.text(m);
Traversal(y);
$.each($dayFrame.eq(m-1).find("li"),function(){
if($(this).hasClass("jcDateColor")){
$dayFrame.eq(m-1).find("li.jcDateColor").eq(d-1).addClass("visited");
};
});
$HiddenText.val(_date);
$dayFrame.eq(m-1).find("li").text();
mAnimate(m-1);
};
function clearVisited(){
$.each($("li.jcDateColor",$dayFrame),function(){
if($(this).hasClass("visited")){
$(this).removeClass("visited");
};
});
};
today(_year,_month,_date);
$dayFrame.undelegate("li.jcDateColor","click").delegate("li.jcDateColor","click",function(){
clearVisited();
$(this).addClass("visited");
$HiddenText.val(parseInt($(this).text()))
});
$dayFrame.undelegate("li.jcDateColor","dblclick").delegate("li.jcDateColor","click",function(){
submitDate();
});
$Now.die().live("click",function(){
today(_year,_month,_date);
});
$clear.die().live("click",function(){
$("input.dateVisited").val("");
});
$submit.die().live("click",function(){
submitDate();
});
function submitDate(){
var Sy = $year.text(),
Sm = $month.text(),
Sd = $HiddenText.val();
NowDateArr = new Array(Sy,Sm,Sd);
dateInfo =NowDateArr.join(options.format);
if($hh.val() != "00" || $mm.val() != "00" ){
var Sh = $hh.val(),
Sm = $mm.val();
NowDateArr.push(Sh+":"+Sm);
printDate = NowDateArr.join(options.format).substring(),
format = printDate.split("/");
dateInfo = format[0]+options.format+format[1]+options.format+format[2]+" "+format[3]
};
$("input.dateVisited").val(dateInfo);
closeDate();
};
$dateInput.addClass(options.IcoClass)
//.val(defInfo)
.die()
.live(options.Event,function(e){
$(this).addClass("dateVisited");
//$jcDate.css({ "left" : e.pageX+(options.Left),"top" : e.pageY+(options.Top) });
var iof = $(this).offset();
$jcDate.css({ "left" : iof.left+options.Left,"top" : iof.top+options.Top });
$jcDate.show(options.Speed);
$jcDayWrap.show();
$jcYeas.hide();
$jcMonth.hide();
$("#d_prev,#d_next").show();
$year.show();
$month.show();
$b.show();
});
$jcDate.die().live("mouseleave",function(){
setTimeout(closeDate,options.Timeout);
});
function closeDate(){
$("input.dateVisited").removeClass("dateVisited");
$jcDate.hide(options.Speed);
};
});
};
})(jQuery)