/* Copyright Mihai Bazon, 2002, 2003 | http://students.infoiasi.ro/~mishoo
* ---------------------------------------------------------------------------
*
* The DHTML Calendar, version 0.9.3 "It's still alive & keeps rocking"
*
* Details and latest version at:
* http://students.infoiasi.ro/~mishoo/site/calendar.epl
*
* Feel free to use this script under the terms of the GNU Lesser General
* Public License, as long as you do not remove or alter this notice.
*/
// $Id: calendar.js,v 1.6 2006/12/28 14:21:53 zhangkai Exp $
/** The Calendar object constructor. */
Calendar = function (mondayFirst, dateStr, onSelected, onClose) {
// member variables
this.activeDiv = null;
this.currentDateEl = null;
this.checkDisabled = null;
this.timeout = null;
this.onSelected = onSelected || null;
this.onClose = onClose || null;
this.dragging = false;
this.hidden = false;
this.minYear = 1970;
this.maxYear = 2050;
this.dateFormat = Calendar._TT["DEF_DATE_FORMAT"];
this.ttDateFormat = Calendar._TT["TT_DATE_FORMAT"];
this.isPopup = true;
this.weekNumbers = false;//true;//不要当前周日期
this.mondayFirst = mondayFirst;
this.dateStr = dateStr;
this.ar_days = null;
// HTML elements
this.table = null;
this.element = null;
this.tbody = null;
this.firstdayname = null;
// Combo boxes
this.monthsCombo = null;
this.yearsCombo = null;
this.hilitedMonth = null;
this.activeMonth = null;
this.hilitedYear = null;
this.activeYear = null;
// Information
this.dateClicked = false;
// one-time initializations
if (!Calendar._DN3) {
// table of short day names
var ar = new Array();
for (var i = 8; i > 0;) {
ar[--i] = Calendar._DN[i].substr(0, 3);
}
Calendar._DN3 = ar;
// table of short month names
ar = new Array();
for (var i = 12; i > 0;) {
ar[--i] = Calendar._MN[i].substr(0, 3);
}
Calendar._MN3 = ar;
}
};
// ** constants
/// "static", needed for event handlers.
Calendar._C = null;
/// detect a special case of "web browser"
Calendar.is_ie = ( /msie/i.test(navigator.userAgent) &&
!/opera/i.test(navigator.userAgent) );
// short day names array (initialized at first constructor call)
Calendar._DN3 = null;
// short month names array (initialized at first constructor call)
Calendar._MN3 = null;
// BEGIN: UTILITY FUNCTIONS; beware that these might be moved into a separate
// library, at some point.
Calendar.getAbsolutePos = function(el) {
var r = { x: el.offsetLeft, y: el.offsetTop };
if (el.offsetParent) {
var tmp = Calendar.getAbsolutePos(el.offsetParent);
r.x += tmp.x;
r.y += tmp.y;
}
return r;
};
Calendar.isRelated = function (el, evt) {
var related = evt.relatedTarget;
if (!related) {
var type = evt.type;
if (type == "mouseover") {
related = evt.fromElement;
} else if (type == "mouseout") {
related = evt.toElement;
}
}
while (related) {
if (related == el) {
return true;
}
related = related.parentNode;
}
return false;
};
Calendar.removeClass = function(el, className) {
if (!(el && el.className)) {
return;
}
var cls = el.className.split(" ");
var ar = new Array();
for (var i = cls.length; i > 0;) {
if (cls[--i] != className) {
ar[ar.length] = cls[i];
}
}
el.className = ar.join(" ");
};
Calendar.addClass = function(el, className) {
Calendar.removeClass(el, className);
el.className += " " + className;
};
Calendar.getElement = function(ev) {
if (Calendar.is_ie) {
return window.event.srcElement;
} else {
return ev.currentTarget;
}
};
Calendar.getTargetElement = function(ev) {
if (Calendar.is_ie) {
return window.event.srcElement;
} else {
return ev.target;
}
};
Calendar.stopEvent = function(ev) {
if (Calendar.is_ie) {
window.event.cancelBubble = true;
window.event.returnValue = false;
} else {
ev.preventDefault();
ev.stopPropagation();
}
return false;
};
Calendar.addEvent = function(el, evname, func) {
if (el.attachEvent) { // IE
el.attachEvent("on" + evname, func);
} else if (el.addEventListener) { // Gecko / W3C
el.addEventListener(evname, func, true);
} else { // Opera (or old browsers)
el["on" + evname] = func;
}
};
Calendar.removeEvent = function(el, evname, func) {
if (el.detachEvent) { // IE
el.detachEvent("on" + evname, func);
} else if (el.removeEventListener) { // Gecko / W3C
el.removeEventListener(evname, func, true);
} else { // Opera (or old browsers)
el["on" + evname] = null;
}
};
Calendar.createElement = function(type, parent) {
var el = null;
if (document.createElementNS) {
// use the XHTML namespace; IE won't normally get here unless
// _they_ "fix" the DOM2 implementation.
el = document.createElementNS("http://www.w3.org/1999/xhtml", type);
} else {
el = document.createElement(type);
}
if (typeof parent != "undefined") {
parent.appendChild(el);
}
return el;
};
// END: UTILITY FUNCTIONS
// BEGIN: CALENDAR STATIC FUNCTIONS
/** Internal -- adds a set of events to make some element behave like a button. */
Calendar._add_evs = function(el) {
with (Calendar) {
addEvent(el, "mouseover", dayMouseOver);
addEvent(el, "mousedown", dayMouseDown);
addEvent(el, "mouseout", dayMouseOut);
if (is_ie) {
addEvent(el, "dblclick", dayMouseDblClick);
el.setAttribute("unselectable", true);
}
}
};
Calendar.findMonth = function(el) {
if (typeof el.month != "undefined") {
return el;
} else if (typeof el.parentNode.month != "undefined") {
return el.parentNode;
}
return null;
};
Calendar.findYear = function(el) {
if (typeof el.year != "undefined") {
return el;
} else if (typeof el.parentNode.year != "undefined") {
return el.parentNode;
}
return null;
};
Calendar.showMonthsCombo = function () {
var cal = Calendar._C;
if (!cal) {
return false;
}
var cal = cal;
var cd = cal.activeDiv;
var mc = cal.monthsCombo;
if (cal.hilitedMonth) {
Calendar.removeClass(cal.hilitedMonth, "hilite");
}
if (cal.activeMonth) {
Calendar.removeClass(cal.activeMonth, "active");
}
var mon = cal.monthsCombo.getElementsByTagName("div")[cal.date.getMonth()];
Calendar.addClass(mon, "active");
cal.activeMonth = mon;
mc.style.left = cd.offsetLeft + "px";
mc.style.top = (cd.offsetTop + cd.offsetHeight) + "px";
mc.style.display = "block";
};
Calendar.showYearsCombo = function (fwd) {
var cal = Calendar._C;
if (!cal) {
return false;
}
var cal = cal;
var cd = cal.activeDiv;
var yc = cal.yearsCombo;
if (cal.hilitedYear) {
Calendar.removeClass(cal.hilitedYear, "hilite");
}
if (cal.activeYear) {
Calendar.removeClass(cal.activeYear, "active");
}
cal.activeYear = null;
var Y = cal.date.getFullYear() + (fwd ? 1 : -1);
var yr = yc.firstChild;
var show = false;
for (var i = 12; i > 0; --i) {
if (Y >= cal.minYear && Y <= cal.maxYear) {
yr.firstChild.data = Y;
yr.year = Y;
yr.style.display = "block";
show = true;
} else {
yr.style.display = "none";
}
yr = yr.nextSibling;
// Y += fwd ? 2 : -2;
Y += fwd ? 1 : -1;
}
if (show) {
yc.style.left = cd.offsetLeft + "px";
yc.style.top = (cd.offsetTop + cd.offsetHeight) + "px";
yc.style.display = "block";
}
};
// event handlers
Calendar.tableMouseUp = function(ev) {
var cal = Calendar._C;
if (!cal) {
return false;
}
if (cal.timeout) {
clearTimeout(cal.timeout);
}
var el = cal.activeDiv;
if (!el) {
return false;
}
var target = Calendar.getTargetElement(ev);
Calendar.removeClass(el, "active");
if (target == el || target.parentNode == el) {
Calendar.cellClick(el);
}
var mon = Calendar.findMonth(target);
var date = null;
if (mon) {
date = new Date(cal.date);
if (mon.month != date.getMonth()) {
date.setMonth(mon.month);
cal.setDate(date);
cal.dateClicked = false;
// cal.callHandler();
}
} else {
var year = Calendar.findYear(target);
if (year) {
date = new Date(cal.date);
if (year.year != date.getFullYear()) {
date.setFullYear(year.year);
cal.setDate(date);
cal.dateClicked = false;
// cal.callHandler();
}
}
}
with (Calendar) {
removeEvent(document, "mouseup", tableMouseUp);
removeEvent(document, "mouseover", tableMouseOver);
removeEvent(document, "mousemove", tableMouseOver);
cal._hideCombos();
_C = null;
return stopEvent(ev);
}
};
Calendar.tableMouseOver = function (ev) {
var cal = Calendar._C;
if (!cal) {
return;
}
var el = cal.activeDiv;
var target = Calendar.getTargetElement(ev);
if (target == el || target.parentNode == el) {
Calendar.addClass(el, "hilite active");
Calendar.addClass(el.parentNode, "rowhilite");
} else {
Calendar.removeClass(el, "active");
Calendar.removeClass(el, "hilite");
Calendar.removeClass(el.parentNode, "rowhilite");
}
var mon = Calendar.findMonth(target);
if (mon) {
if (mon.month != cal.date.getMonth()) {
if (cal.hilitedMonth) {
Calendar.removeClass(cal.hilitedMonth, "hilite");
}
Calendar.addClass(mon, "hilite");
cal.hilitedMonth = mon;
} else if (cal.hilitedMonth) {
Calendar.removeClass(cal.hilitedMonth, "hilite");
}
} else {
var year = Calendar.findYear(target);
if (year) {
if (year.year != cal.date.getFullYear()) {
if (cal.hilitedYear) {
Calendar.removeClass(cal.hilitedYear, "hilite");
}
Calendar.addClass(year, "hilite");
cal.hilitedYear = year;
} else if (cal.hilitedYear) {
Calendar.removeClass(cal.hilitedYear, "hilite");
}
}
}
return Calendar.stopEvent(ev);
};
Calendar.tableMouseDown = function (ev) {
if (Calendar.getTargetElement(ev) == Calendar.getElement(ev)) {
return Calendar.stopEvent(ev);
}
};
Calendar.calDragIt = function (ev) {
var cal = Calendar._C;
if (!(cal && cal.dragging)) {
return false;
}
var posX;
var posY;
if (Calendar.is_ie) {
posY = window.event.clientY + document.body.scrollTop;
posX = window.event.clientX + document.body.scrollLeft;
} else {
posX = ev.pageX;
posY = ev.pageY;
}
cal.hideShowCovered();
var st = cal.element.style;
st.left = (posX - cal.xOffs) + "px";
st.top = (posY - cal.yOffs) + "px";
return Calendar.stopEvent(ev);
};
Calendar.calDragEnd = function (ev) {
var cal = Calendar._C;
if (!cal) {
return false;
}
cal.dragging = false;
with (Calendar) {
removeEvent(document, "mousemove", calDragIt);
removeEvent(document, "mouseover", stopEvent);
removeEvent(document, "mouseup", calDragEnd);
tableMouseUp(ev);
}
cal.hideShowCovered();
};
Calendar.dayMouseDown = function(ev) {
//增加点击鼠标即可关闭功能
/* Calendar.cellClick(Calendar.getElement(ev));
if (Calendar.is_ie) {
document.selection.empty();
}
*/
var el = Calendar.getElement(ev);
if (el.disabled) {
return false;
}
if (el.id == "objclose" || el.id == "objmprev" || el.id == "objmnext" || el.id == "objyprev" || el.id == "objynext") el = el.parentNode;
var cal = el.calendar;
cal.activeDiv = el;
Calendar._C = cal;
if (el.navtype != 300) with (Calendar) {
addClass(el, "hilite active");
addEvent(document, "mouseover", tableMouseOver);
addEvent(document, "mousemove", tableMouseOver);
addEvent(document, "mouseup", tableMouseUp);
} else if (cal.isPopup) {
cal._dragStart(ev);
}
if (el.navtype == -1 || el.navtype == 1) {
cal.timeout = setTimeout("Calendar.showMonthsCombo()", 250);
} else if (el.navtype == -2 || el.navtype == 2) {
cal.timeout = setTimeout((el.navtype > 0) ? "Calendar.showYearsCombo(true)" : "Calendar.showYearsCombo(false)", 250);
} else {
cal.timeout = null;
}
return Calendar.stopEvent(ev);
};
Calendar.dayMouseDblClick = function(ev) {
return;//注释双击效果;
Calendar.cellClick(Calendar.getElement(ev));
if (Calendar.is_ie) {
document.selection.empty();
}
};
function f(ev,flag)
{
var flag=true;
if(flag){
}else
{
return false;
}
}
Calendar.dayMouseOver = function(ev) {
var el = Calendar.getElement(ev);
el.style.cursor="pointer";
if (Calendar.isRelated(el, ev) || Calendar._C || el.disabled) {
return false;
}
if (el.id == "objclose" || el.id == "objmprev" || el.id == "objmnext" || el.id == "objyprev" || el.id == "objynext") {el = el.parentNode;}
if (el.ttip) {
if (el.ttip.substr(0, 1) == "_") {
var date = null;
with (el.calendar.date) {
date = new Date(getFullYear(), getMonth(), el.caldate);
now=new Date();
if(date>now){
el.style.cursor="";
return false;
}//大于当天,去掉鼠标移上选择样式
}
el.ttip = "星期"+date.print("D")+" " +date.print("y")+ "年 "+date.print("M")+date.print("d") +"日";
}
el.calendar.tooltips.firstChild.data = el.ttip;
}
if (el.navtype != 300) {
Calendar.addClass(el, "hilite");
if (el.caldate) {
Calendar.addClass(el.parentNode, "rowhilite");
}
}
return Calendar.stopEvent(ev);
};
Calendar.dayMouseOut = function(ev) {
with (Calendar) {
var el = getElement(ev);
if (isRelated(el, ev) || _C || el.disabled) {
return false;
}
removeClass(el, "hilite");
if (el.caldate) {
removeClass(el.parentNode, "rowhilite");
}
//el.calendar.tooltips.firstChild.data = _TT["SEL_DATE"];
//注释移开鼠标时的提示;因为右上角要改为图片;
return stopEvent(ev);
}
};
/**
* A generic "click" handler :) handles all types of buttons defined in this
* calendar.
*/
Calendar.cellClick = function(el) {
var cal = el.calendar;
var closing = false;
var newdate = false;
var date = null;
if (typeof el.navtype == "undefined") {
Calendar.removeClass(cal.currentDateEl, "selected");
Calendar.addClass(el, "selected");
closing = (cal.currentDateEl == el);
if (!closing) {
cal.currentDateEl = el;
}
cal.date.setDate(el.caldate);
date = cal.date;
var now = new Date();
if ( cal.date > now ) {Calendar.removeClass(el, "selected");Calendar.removeClass(el, "hilite");return false;} //日期大于当天点击无效
newdate = true;
// a date was clicked
cal.dateClicked = true;
cal.callCloseHandler();//单击也引用关闭;added by jarry
} else {
if (el.navtype == 200) {
Calendar.removeClass(el, "hilite");
cal.callCloseHandler();
return;
}
date = (el.navtype == 0) ? new Date() : new Date(cal.date);
// unless "today" was clicked, we assume no date was clicked so
// the selected handler will know not to close the calenar when
// in single-click mode.
cal.dateClicked = (el.navtype == 0);
var year = date.getFullYear();
var mon = date.getMonth();
function setMonth(m) {
var day = date.getDate();
var max = date.getMonthDays(m);
if (day > max) {
date.setDate(max);
}
date.setMonth(m);
};
switch (el.navtype) {
case -2:
if (year > cal.minYear) {
date.setFullYear(year - 1);
}
break;
case -1:
if (mon > 0) {
setMonth(mon - 1);
} else if (year-- > cal.minYear) {
date.setFullYear(year);
setMonth(11);
}
break;
case 1:
if (mon < 11) {
setMonth(mon + 1);
} else if (year < cal.maxYear) {
date.setFullYear(year + 1);
setMonth(0);
}
break;
case 2:
if (year < cal.maxYear) {
date.setFullYear(year + 1);
}
break;
case 100:
cal.setMondayFirst(!cal.mondayFirst);
return;
case 0:
// TODAY will bring us here
if ((typeof cal.checkDisabled == "function") && cal.checkDisabled(date)) {
// remember, "date" was previously set to new
// Date() if TODAY was clicked; thus, it
// contains today date.
return false;
}
break;
}
if (!date.equalsTo(cal.date)) {
cal.setDate(date);
//alert("不是当前日");
newdate = true;
}
}
var _date = cal.date.getFullYear()+"-"+(cal.date.getMonth()+1)+"-"+cal.date.getDate();
var strTime = _date+"+00%3A00";
var endTime = _date+"+23%3A59";
var str1 = document.getElementById("t1").value;
var search1 = "";
if (str1==1){
search1 = "http://search.home.news.cn/forumbookSearch.do?";
}
if (str1==2){
search1 = "http://search.home.news.cn/articleSearch.do?";
}
if (str1==3){
search1 = "http://search.home.news.cn/videoSearch.do?";
}
if (str1==4){
search1 = "http://search.home.news.cn/imageSearch.do?";
}
if (str1==5){
search1 = "http://search.home.news.cn/bookmarkSearch.do?";
}
var url = search1+"title=&adv=1&content=&tagWords=&nickName=&start="+strTime+"&end="+endTime+"&pageSize=";
window.open(url,'newwindow','');
if(el.navtype==2 ||el.navtype==-2||el.navtype==1||el.navtype==-1)newdate = false;
if (newdate) {
cal.callHandler();
}
if (closing) {
Calendar.removeClass(el, "hilite");
cal.callCloseHandler();
}
};
// END: CALENDAR STATIC FUNCTIONS
// BEGIN: CALENDAR OBJECT FUNCTIONS
/**
* This function creates the calendar inside the given parent. If _par is
* null than it creates a popup calendar inside the BODY element. If _par is
* an element, be it BODY, then it creates a non-popup calendar (still
* hidden). Some properties need to be set before calling this function.
*/
Calendar.prototype.create = function (_par) {
var parent = null;
if (! _par) {
// default parent is the document body, in which case we create
// a popup calendar.
parent = document.getElementsByTagName("body")[0];
this.isPopup = true;
} else {
parent = _par;
this.isPopup = false;
}
this.date = this.dateStr ? new Date(this.dateStr) : new Date();
var table = Calendar.createElement("table");
this.table = table;
table.cellSpacing = 0;
table.cellPadding = 0;
table.calendar = this;
Calendar.addEvent(table, "mousedown", Calendar.tableMouseDown);
var div = Calendar.createElement("div");
this.element = div;
div.className = "calendar";
if (this.isPopup) {
div.style.position = "absolute";
div.style.display = "none";
}
div.appendChild(table);
var thead = Calendar.createElement("thead", table);
var cell = null;
var row = null;
var cal = this;
var hh = function (text, cs, navtype) {
cell = Calendar.createElement("td", row);
cell.colSpan = cs;
cell.className = "button";
Calendar._add_evs(cell);
cell.calendar = cal;
cell.navtype = navtype;
if (text.substr(0, 1) != "&") {
if(text.substr(0,5)=="", 1, -2);
this._nav_py.width = 25;
// this._nav_py = hh("«", 1, -2);
this._nav_py.ttip = Calendar._TT["PREV_YEAR"];
this.title = hh("", 1, 300);
this.title.className = "title";
this.title.width = 40;
// this._nav_ny = hh("»", 1, 2);
this._nav_ny = hh("
", 1, 2);
this._nav_ny.width = 25;
this._nav_ny.ttip = Calendar._TT["NEXT_YEAR"];
// this._nav_pm = hh("‹", 1, -1);
this._nav_pm = hh("
", 1, -1);
this._nav_pm.width = 25;
this._nav_pm.ttip = Calendar._TT["PREV_MONTH"];
this.title2 = hh("", 1, 300);
this.title2.className = "title";
this.title2.width = 28;
// this._nav_nm = hh("›", 1, 1);
this._nav_nm = hh("
", 1, 1);
this._nav_nm.width = 25;
this._nav_nm.ttip = Calendar._TT["NEXT_MONTH"];
// this._nav_now = hh(Calendar._TT["TODAY"], this.weekNumbers ? 4 : 3, 0);
// this._nav_now = hh(Calendar._TT["TODAY"], 1, 0);
// this._nav_now.ttip = Calendar._TT["GO_TODAY"];
if (this.isPopup) {
this.title.ttip = Calendar._TT["DRAG_TO_MOVE"];
//this.title.style.cursor = "move";//注释移动状态
//hh("×", 1, 200).ttip = Calendar._TT["CLOSE"];//去掉关闭符,以图片替代;
var td_close = hh("
", 1, 200);
td_close.ttip = Calendar._TT["CLOSE"];
td_close.align = "right";
//hh("#