All Downloads are FREE. Search and download functionalities are using the official Maven repository.

jwic.compatibility.calendar.calendar.js Maven / Gradle / Ivy

There is a newer version: 5.3.43
Show newest version
// Calendar constructor
function jWicCalendar() {

//	written	by Tan Ling	Wee	on 2 Dec 2001
//	last updated 23 June 2002
//	email :	[email protected]
//
//	modyfied by Jens Bornemann on 3 Jul 2002: changed imgDir to images, added fixedX, fixedY = -2, and these two parameters are now optional for popUpCalendar
// 	modified by Florian Lippisch on 25 Sep 2002: changed so it runs on foreign frames

	var	fixedX = -1			// x position (-1 if to appear right control, -2 to appear left control)
	var	fixedY = -1			// y position (-1 if to appear below control, -2 to appear above control)
	var	fixedWidth = 256
	var	fixedHeight = 188
	var startAt = 1			// 0 - sunday ; 1 - monday
	var showWeekNumber = 1	// 0 - don't show; 1 - show
	var showToday = 1		// 0 - don't show; 1 - show
	var imgDir = "/gfx/datepicker/"		// directory for images ... e.g. var imgDir="/img/"

	var	crossobj, crossMonthObj, crossYearObj, monthSelected, yearSelected, dateSelected, omonthSelected, oyearSelected, odateSelected, monthConstructed, yearConstructed, intervalID1, intervalID2, timeoutID1, timeoutID2, ctlToPlaceValue, ctlNow, dateFormat, nStartingYear

	var	bPageLoaded=false
	var	ie=document.all
	var	dom=document.getElementById

	var	ns4=document.layers
	var	today =	new	Date()
	var	dateNow	 = today.getDate()
	var	monthNow = today.getMonth()
	var	yearNow	 = today.getYear()
	var	imgsrc = new Array("drop1.gif","drop2.gif","left1.gif","left2.gif","right1.gif","right2.gif")
	var	img	= new Array()
	
	var frmDocument = document;

	var styleAnchor = "text-decoration:none;color:black;"
	var styleLightBorder = "border-style:solid;border-width:1px;border-color:#a0a0a0;"
//	var	monthName =	new	Array("January","February","March","April","May","June","July","August","September","October","November","December")

	var bShow = false;

    /* hides  and  objects (for IE only)
    */
    function showElement( elmID )
    {
      if( ie )
      {
        for( i = 0; i < frmDocument.all.tags( elmID ).length; i++ )
        {
          obj = frmDocument.all.tags( elmID )[i];
          
          if( !obj || !obj.offsetParent )
          {
            continue;
          }
        
          obj.style.visibility = "";
        }
      }
    }

	function HolidayRec (d, m, y, desc)
	{
		this.d = d
		this.m = m
		this.y = y
		this.desc = desc
	}

	var HolidaysCounter = 0
	var Holidays = new Array()

	function addHoliday (d, m, y, desc)
	{
		Holidays[HolidaysCounter++] = new HolidayRec ( d, m, y, desc )
	}
	function calSwapImage(srcImg, destImg){
		if (ie)	{ frmDocument.getElementById(srcImg).setAttribute("src",imgDir + destImg) }
	}

	function initCal()	{
		if (!ns4)
		{
			if (!ie) { yearNow += 1900	}

			crossobj=(dom)?frmDocument.getElementById("calendar").style : ie? frmDocument.all.calendar : frmDocument.calendar

			crossMonthObj=(dom)?frmDocument.getElementById("selectMonth").style : ie? frmDocument.all.selectMonth	: frmDocument.selectMonth

			crossYearObj=(dom)?frmDocument.getElementById("selectYear").style : ie? frmDocument.all.selectYear : frmDocument.selectYear
			
			hideCalendar()
			monthConstructed=false;
			yearConstructed=false;

			if (showToday==1)
			{
				frmDocument.getElementById("lblToday").innerHTML =	jWic().calendar.todayString + " "+jWic().calendar.dayName[(today.getDay()-startAt==-1)?6:(today.getDay()-startAt)]+", " + dateNow + " " + jWic().calendar.monthName[monthNow].substring(0,3)	+ "	" +	yearNow	+ ""
			}

			sHTML1="   "
			sHTML1+="   "
			sHTML1+=" "
			sHTML1+=" "
			
			frmDocument.getElementById("caption").innerHTML  =	sHTML1

			bPageLoaded=true
		}
	}

	function hideCalendar()	{
		crossobj.visibility="hidden"
		if (crossMonthObj != null){crossMonthObj.visibility="hidden"}
		if (crossYearObj !=	null){crossYearObj.visibility="hidden"}

		showElement( 'SELECT' );
		showElement( 'APPLET' );
	}

	function padZero(num) {
		return (num	< 10)? '0' + num : num ;
	}

	function constructDate(d,m,y)
	{
		sTmp = dateFormat
		sTmp = sTmp.replace	("dd","")
		sTmp = sTmp.replace	("d","")
		sTmp = sTmp.replace	("",padZero(d))
		sTmp = sTmp.replace	("",d)
		sTmp = sTmp.replace	("mmm","")
		sTmp = sTmp.replace	("mm","")
		sTmp = sTmp.replace	("m","")
		sTmp = sTmp.replace	("",m+1)
		sTmp = sTmp.replace	("",padZero(m+1))
		sTmp = sTmp.replace	("",jWic().calendar.monthName[m])
		return sTmp.replace ("yyyy",y)
	}

	function closeCalendar() {
		var	sTmp;
		hideCalendar();
		ctlToPlaceValue.value =	constructDate(dateSelected,monthSelected,yearSelected);
		if (ctlToPlaceValue.fireEvent) {
			ctlToPlaceValue.fireEvent("onChange");
		}
	}

	/*** Month Pulldown	***/

	function StartDecMonth()
	{
		intervalID1=setInterval("decMonth()",80)
	}

	function StartIncMonth()
	{
		intervalID1=setInterval("incMonth()",80)
	}

	function incMonth () {
		monthSelected++
		if (monthSelected>11) {
			monthSelected=0
			yearSelected++
		}
		constructCalendar()
	}

	function decMonth () {
		monthSelected--
		if (monthSelected<0) {
			monthSelected=11
			yearSelected--
		}
		constructCalendar()
	}

	function constructMonth() {
		popDownYear()
		if (!monthConstructed) {
			sHTML =	""
			for	(i=0; i<12;	i++) {
				sName =	jWic().calendar.monthName[i];
				if (i==monthSelected){
					sName =	"" +	sName +	""
				}
				sHTML += " " + sName + " "
			}

			frmDocument.getElementById("selectMonth").innerHTML = "" +	sHTML +	"
" monthConstructed=true } } function popUpMonth() { constructMonth() crossMonthObj.visibility = (dom||ie)? "visible" : "show" crossMonthObj.left = (parseInt(crossobj.left) + 50) + "px"; crossMonthObj.top = (parseInt(crossobj.top) + 26) + "px"; hideElement( 'SELECT', frmDocument.getElementById("selectMonth") ); hideElement( 'APPLET', frmDocument.getElementById("selectMonth") ); } function popDownMonth() { crossMonthObj.visibility= "hidden" } /*** Year Pulldown ***/ function incYear() { for (i=0; i<7; i++){ newYear = (i+nStartingYear)+1 if (newYear==yearSelected) { txtYear = " " + newYear + " " } else { txtYear = " " + newYear + " " } frmDocument.getElementById("y"+i).innerHTML = txtYear } nStartingYear ++; bShow=true } function decYear() { for (i=0; i<7; i++){ newYear = (i+nStartingYear)-1 if (newYear==yearSelected) { txtYear = " " + newYear + " " } else { txtYear = " " + newYear + " " } frmDocument.getElementById("y"+i).innerHTML = txtYear } nStartingYear --; bShow=true } function selectYear(nYear) { yearSelected=parseInt(nYear+nStartingYear); yearConstructed=false; constructCalendar(); popDownYear(); } function constructYear() { popDownMonth() sHTML = "" if (!yearConstructed) { sHTML = "-" j = 0 nStartingYear = yearSelected-3 for (i=(yearSelected-3); i<=(yearSelected+3); i++) { sName = i; if (i==yearSelected){ sName = "" + sName + "" } sHTML += " " + sName + " " j ++; } sHTML += "+" frmDocument.getElementById("selectYear").innerHTML = "" + sHTML + "
" yearConstructed = true } } function popDownYear() { clearInterval(intervalID1) clearTimeout(timeoutID1) clearInterval(intervalID2) clearTimeout(timeoutID2) crossYearObj.visibility= "hidden" } function popUpYear() { var leftOffset constructYear() crossYearObj.visibility = (dom||ie)? "visible" : "show" leftOffset = parseInt(crossobj.left) + frmDocument.getElementById("spanYear").offsetLeft if (ie) { leftOffset += 6 } crossYearObj.left = leftOffset + "px"; crossYearObj.top = (parseInt(crossobj.top) + 26) + "px"; } /*** calendar ***/ function WeekNbr(n) { // Algorithm used: // From Klaus Tondering's Calendar frmDocument (The Authority/Guru) // hhtp://www.tondering.dk/claus/calendar.html // a = (14-month) / 12 // y = year + 4800 - a // m = month + 12a - 3 // J = day + (153m + 2) / 5 + 365y + y / 4 - y / 100 + y / 400 - 32045 // d4 = (J + 31741 - (J mod 7)) mod 146097 mod 36524 mod 1461 // L = d4 / 1460 // d1 = ((d4 - L) mod 365) + L // WeekNumber = d1 / 7 + 1 year = n.getFullYear(); month = n.getMonth() + 1; if (startAt == 0) { day = n.getDate() + 1; } else { day = n.getDate(); } a = Math.floor((14-month) / 12); y = year + 4800 - a; m = month + 12 * a - 3; b = Math.floor(y/4) - Math.floor(y/100) + Math.floor(y/400); J = day + Math.floor((153 * m + 2) / 5) + 365 * y + b - 32045; d4 = (((J + 31741 - (J % 7)) % 146097) % 36524) % 1461; L = Math.floor(d4 / 1460); d1 = ((d4 - L) % 365) + L; week = Math.floor(d1/7) + 1; return week; } function constructCalendar () { var aNumDays = Array (31,0,31,30,31,30,31,31,30,31,30,31) var dateMessage var startDate = new Date (yearSelected,monthSelected,1) var endDate if (monthSelected==1) { endDate = new Date (yearSelected,monthSelected+1,1); endDate = new Date (endDate - (24*60*60*1000)); numDaysInMonth = endDate.getDate() } else { numDaysInMonth = aNumDays[monthSelected]; } datePointer = 0 dayPointer = startDate.getDay() - startAt if (dayPointer<0) { dayPointer = 6 } sHTML = "" if (showWeekNumber==1) { sHTML += "" } for (i=0; i<7; i++) { sHTML += "" } sHTML +="" if (showWeekNumber==1) { sHTML += "" } for ( var i=1; i<=dayPointer;i++ ) { sHTML += "" } for ( datePointer=1; datePointer<=numDaysInMonth; datePointer++ ) { dayPointer++; sHTML += "" if ((showWeekNumber==1)&&(datePointer" } } } //ctlToPlaceValue.value = sHTML; frmDocument.getElementById("content").innerHTML = sHTML frmDocument.getElementById("spanMonth").innerHTML = " " + jWic().calendar.monthName[monthSelected] + " " frmDocument.getElementById("spanYear").innerHTML = " " + yearSelected + " " } function popUpCalendar(ctl, ctl2, format) { if (popUpCalendar.arguments.length > 3) fixedX = popUpCalendar.arguments[3] if (popUpCalendar.arguments.length > 4) fixedY = popUpCalendar.arguments[4] var leftpos=0 var toppos=0 if (bPageLoaded) { if ( crossobj.visibility == "hidden" ) { ctlToPlaceValue = ctl2 dateFormat=format; formatChar = " " aFormat = dateFormat.split(formatChar) if (aFormat.length<3) { formatChar = "/" aFormat = dateFormat.split(formatChar) if (aFormat.length<3) { formatChar = "." aFormat = dateFormat.split(formatChar) if (aFormat.length<3) { formatChar = "-" aFormat = dateFormat.split(formatChar) if (aFormat.length<3) { // invalid date format formatChar="" } } } } tokensChanged = 0 if ( formatChar != "" ) { // use user's date aData = ctl2.value.split(formatChar) for (i=0;i<3;i++) { if ((aFormat[i]=="d") || (aFormat[i]=="dd")) { dateSelected = parseInt(aData[i], 10) tokensChanged ++ } else if ((aFormat[i]=="m") || (aFormat[i]=="mm")) { monthSelected = parseInt(aData[i], 10) - 1 tokensChanged ++ } else if (aFormat[i]=="yyyy") { yearSelected = parseInt(aData[i], 10) tokensChanged ++ } else if (aFormat[i]=="mmm") { for (j=0; j<12; j++) { if (aData[i]==jWic().calendar.monthName[j]) { monthSelected=j tokensChanged ++ } } } } } if ((tokensChanged!=3)||isNaN(dateSelected)||isNaN(monthSelected)||isNaN(yearSelected)) { dateSelected = dateNow monthSelected = monthNow yearSelected = yearNow } odateSelected=dateSelected omonthSelected=monthSelected oyearSelected=yearSelected aTag = ctl do { aTag = aTag.offsetParent; leftpos += aTag.offsetLeft; toppos += aTag.offsetTop; } while(aTag.tagName!="BODY"); var wnSize = JWic.getWindowSize(); // jWic.js function. var x = fixedX==-1 ? ctl.offsetLeft + leftpos : fixedX==-2 ? ctl.offsetLeft + leftpos - fixedWidth : fixedX var maxX = wnSize[0] + wnSize[2] - 300; if (x > maxX) x = maxX; if (x < 1) { x = 1 } crossobj.left = x + "px"; var y = fixedY==-1 ? ctl.offsetTop + toppos + ctl.offsetHeight + 2 : fixedY==-2 ? ctl.offsetTop + toppos + 2 - fixedHeight : fixedY var maxY = wnSize[1] + wnSize[3] - 150; if (y > maxY) y = maxY; if (y < 1) { y = 1 } crossobj.top = y + "px"; constructCalendar (1, monthSelected, yearSelected); /*if (Effect) { Effect.Appear('calendar', { from: 0.0, to: 1.0}); } else {*/ crossobj.visibility=(dom||ie)? "visible" : "show" //} hideElement( 'SELECT', frmDocument.getElementById("calendar") ); hideElement( 'APPLET', frmDocument.getElementById("calendar") ); bShow = true; } else { hideCalendar() if (ctlNow!=ctl) {popUpCalendar(ctl, ctl2, format)} } ctlNow = ctl } } function initLib(newDocument) { frmDocument = newDocument; if (dom) { for (i=0;i
" + jWic().calendar.weekString + ""+ jWic().calendar.dayName[i]+"
" + WeekNbr(startDate) + "  " sStyle=styleAnchor if ((datePointer==odateSelected) && (monthSelected==omonthSelected) && (yearSelected==oyearSelected)) { sStyle+=styleLightBorder } sHint = "" for (k=0;k " + datePointer + " "} else if (dayPointer % 7 == (startAt * -1)+1) { sHTML += " " + datePointer + " " } else { sHTML += " " + datePointer + " " } sHTML += "" if ((dayPointer+startAt) % 7 == startAt) { sHTML += "
") if (showToday==1) { frmDocument.write ("") } frmDocument.write ("
Close the Calendar
"); } if (startAt!=0) { var dayName = jWic().calendar.dayName; dayName = new Array (dayName[1], dayName[2], dayName[3], dayName[4], dayName[5], dayName[6], dayName[0]) } styleAnchor="text-decoration:none;color:black;" styleLightBorder="border-style:solid;border-width:1px;border-color:#a0a0a0;" /*frmDocument.onkeypress = function hidecal1 () { if (event.keyCode==27) { hideCalendar() } } frmDocument.onclick = function hidecal2 () { if (!bShow) { hideCalendar() } bShow = false }*/ initCal(); HolidaysCounter = 0 Holidays = new Array() addHoliday(25,12,0, "Christmas Day") addHoliday(1,1,0, "New Year's Day"); } function jWicCalSetSelection(sDateSelection) { dateSelected=sDateSelection; } function jWicCalSetImageDir(newDir) { imgDir = newDir; } function getIntervalID1() { return intervalID1; } function setIntervalID1(newInterval) { intervalID1 = newInterval; } function getIntervalID2() { return intervalID2; } function setIntervalID2(newInterval) { intervalID2 = newInterval; } function getTimeoutID1() { return timeoutID1; } function setTimeoutID1(newTimeoutID1) { timeoutID1 = newTimeoutID1; } function getTimeoutID2() { return timeoutID2; } function setTimeoutID2(newTimeoutID2) { timeoutID2 = newTimeoutID2; } function setMonthSelected(newMonth) { monthSelected = newMonth; } this.init = initLib; this.show = popUpCalendar; this.hide = hideCalendar; this.close = closeCalendar; this.select = jWicCalSetSelection; this.setImageDir = jWicCalSetImageDir; this.swapImage = calSwapImage; this.getIntervalID1 = getIntervalID1; this.setIntervalID1 = setIntervalID1; this.getIntervalID2 = getIntervalID2; this.setIntervalID2 = setIntervalID2; this.getTimeoutID1 = getTimeoutID1; this.setTimeoutID1 = setTimeoutID1; this.getTimeoutID2 = getTimeoutID2; this.setTimeoutID2 = setTimeoutID2; this.decMonth = decMonth; this.incMonth = incMonth; this.decYear = decYear; this.incYear = incYear; this.popUpMonth = popUpMonth; this.popDownMonth = popDownMonth; this.popUpYear = popUpYear; this.popDownYear = popDownYear; this.constructCalendar = constructCalendar; this.setMonthSelected = setMonthSelected; this.selectYear = selectYear; this.StartDecMonth = StartDecMonth; this.StartIncMonth = StartIncMonth; this.addHoliday = addHoliday; // default localized settings this.gotoString = "Go To Current Month" this.todayString = "Today is" this.weekString = "Wk" this.scrollLeftMessage = "Click to scroll to previous month. Hold mouse button to scroll automatically." this.scrollRightMessage = "Click to scroll to next month. Hold mouse button to scroll automatically." this.selectMonthMessage = "Click to select a month." this.selectYearMessage = "Click to select a year." this.selectDateMessage = "Select [date] as date." // do not replace [date], it will be replaced by date. this.monthName = new Array("January","February","March","April","May","June","July","August","September","October","November","December") this.dayName = new Array("Sun","Mon","Tue","Wed","Thu","Fri","Sat"); }